![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Катя |
|
|||
|
Unregistered |
Подскажите, поалуйста, как передать данные с компьтера КАМАКу. Может, кто знает, где можно найти соответствующий коммуникационный модуль?
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Насколько я помню, с КАМАКом связываются по COM-порту. Если так оно и есть, то надо использовать стандартные Виндовые средства для работы с портами - открывать файл.
Посмотреть в MSDN "Configuring a Communications Resource" - там пример работы с портом. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Лучше и спользовать вставки на Assembler, но это уже в другой форум....
-------------------- |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Не знаю что такое КАМАК но если соединение по RS-232 тогда вам в FAQ. Есть еще компоненты по работе с портами и не надо забивать голову ассемблером. Единственное что нужно будет знать - протокол обмена данными.
|
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Вот вспомнил: есть нормальная АктивИкс-а для работы с ком-портом MSCOMM32.ocx в нете легко найти.
|
|||
|
||||
| reonid |
|
|||
|
Unregistered |
Это зависит от типа контроллера КАМАКа.
Нашёл у себя старый паскалевский модуль для работы с КАМАКом через порт (под ДОС) - может, пригодиться. (Я сам имею опыт работы только через память). [QUOTE] unit camkkp1; {****************************************************************************/ /* */ /* Набор программ для работы с адаптером PC - CAMAC */ /* */ /* Крейт - контроллер K106 , K16 */ /* */ /* Адрес EC00 ( 16 ) - 166000 ( 8 ) */ /* E800 ( 16 ) - 164000 ( 8 ) */ /* E400 ( 16 ) - 162000 ( 8 ) */ /* E000 ( 16 ) - 160000 ( 8 ) */ /* */ /* Формат CSR */ /* ----------------------------------------------------------------- */ /* | 15 14 13 12 11 10 9 8 I 7 6 5 4 3 2 1 0 | */ /* --------------------------------I--------------------------------- */ /* | Q X - I S Xenb Z C I D Denb Iff F16 F8 F4 F2 F1 | */ /* --------------------------------I---------------------------------- */ /* 8 4 2 1 8 4 2 1 I 8 4 2 1 8 4 2 1 */ /****************************************************************************/ /* */ /* Адаптер PC - KAMAK с флагом */ /* --------- */ /* Адреса портов для работы с K106 : */ /* */ /* adr - 0x112 */ /* dat - 0x110 */ /* sta - 0x114 */ /* */ /* Адреса портов для работы с K16 : */ /* */ /* adr - 0x360 */ /* dat - 0x362 */ /* sta - 0x364 */ /* */ /****************************************************************************/ } interface uses Crt; {* Register Definitions *} const CMCNULL = $0 ; CMCCLEAR = $0300 ; CMCZERO = $0200 ; adrr = $112; datr = $110; stat = $114; csr =$d000; {var csr:word; { = $E800;} {* Send command 'cmd', return Q-status *} function CmcCmd( cmd : word ) : Byte ; {* Get full Status Byte *} function CmcStat : Byte ; function readX : Byte ; function readQ8(n,a: byte) : Byte ; function readQ27(n,a: byte) : Byte ; {* Input integer 'data' by 'NAF' address, return Q-status *} function CmcR16( n,a,f : Byte ; var d : word ) : Byte ; {* Output 'data' by 'NAF' address, return Q-status *} function CmcW16( n,a,f: Byte ; d:word) : Byte ; {* Input integer 'data' by 'NAF' address, return Q-status *} function CmcInL( n,a,f : Byte ; var dh,dm,dl : Byte ) : Byte ; {* Output 'data' by 'NAF' address, return Q-status *} function CmcOuL( n,a : Byte ; f:word; dh,dm,dl : Byte ) : Byte ; implementation {function {* Send command 'cmd', return Q-status *} function CmcCmd( cmd : word ) : Byte ; var i,j :byte; begin portw[adrr]:=csr; delay(1); portw[datr]:=cmd; delay(1); j :=port[stat+1]; delay(1); CmcCmd:= (j and $80) div $80; end ; {* Get full Status Byte *} function CmcStat : Byte ; var i,j :byte; begin i :=port[datr]; delay(1); j :=port[datr+1]; delay(1); CmcStat := (j and $fc)+i div $80; end ; function readX : Byte; var i,j :byte; begin portw[adrr]:=csr; delay(1); j :=portw[datr]; delay(1); readX := (j and $4000) div $4000; end ; function readQ8(n,a :byte) : Byte; var i,j :word; begin CmcOuL(n, a, 8, 0, 0, 0 ); portw[adrr]:=csr; delay(1); i :=portw[datr]; delay(1); j :=portw[adrr]; readQ8 := (j and $4000) div $4000; end ; function readQ27(n,a :byte) : Byte; var i,j :word; begin CmcOuL(n, a, 27, 0, 0, 0 ); portw[adrr]:=csr; delay(1); i :=portw[datr]; delay(1); j :=portw[adrr]; readQ27 := (j and $4000) div $4000; end ; { /*----------------------------------------------------------------------*/ /* Считывание информации 16 разрядов */ /* Входные данные: */ /* fun - номер функции, */ /* mesto - номер станции, */ /* sybadr - субадрес */ /* Выходные данные: */ /* прочитанное слово */ /*----------------------------------------------------------------------*/ int Rcam16( int fun , int mesto , int sybadr ) adrreg = csr + mesto*32 + sybadr*2 ; outpw ( adr , csr ); outpw ( dat , fun ); outpw ( adr , adrreg ); inpw ( dat ) ; /* Читаем данные из К-К в адаптор */ return(inpw ( adr )); /* Читаем данные из адаптора в PC */ } function CmcR16( n,a,f : Byte ; var d : word ) : Byte ; var adr: word; ii,jj: word; begin adr:=csr+2*(a+n*16); portw[adrr]:=csr; delay(0); portw[datr]:=f; delay(0); portw[adrr]:=adr; delay(0); d:=portw[datr]; delay(0); d:=portw[adrr]; delay(0); jj:=portw[stat]; delay(0); CmcR16:=(jj and $8000) div $8000; end; { /*----------------------------------------------------------------------------------------- ------------------*/ /* Считывание информации 24-х разрядов */ /*----------------------------------------------------------------------*/ long Rcam24( int fun, int mesto, int sybadr ) { int dhr; long word=0; long word1=0; adrreg = csr + mesto*32 + sybadr*2 ; dhr= csr + 4; outpw ( adr , csr ); /* Считывание младших 16 разрядов */ outpw ( dat , fun ); outpw ( adr , adrreg ); inpw (dat) ; /* Читаем данные из К-К в адаптор */ word = inpw (adr)&0xFFFF ; /* Читаем данные из адаптора в PC */ outpw ( adr , dhr ); /* Считывание старших 8 разрядов */ inpw (dat) ; /* Читаем данные из К-К в адаптор */ word1= inpw(adr)&0xFF; word+=word1<<16; return( word ); } {* Input integer 'data' by 'NAF' address, return Q-status *} function CmcInL( n,a,f : Byte ; var dh,dm,dl : Byte ) : Byte ; var adr: word; ii,jj: word; begin portw[adrr]:=csr; delay(0); portw[datr]:=f; delay(0); adr:=2*(a+n*16)+csr; portw[adrr]:=adr; ii:=portw[datr]; delay(0); { ii:=portw[adrr]; delay(0); } dl:=port[adrr]; delay(0); dm:=port[adrr+1]; delay(0); portw[adrr]:=csr+4; dh:=port[datr] ; delay(0); dh:=port[adrr] ; delay(0); jj:=portw[stat]; delay(0); CmcInL:= (jj and $8000) div $8000; end; { /*----------------------------------------------------------------------*/ /* Запись информации от 1 до 16 разрядов */ /*----------------------------------------------------------------------*/ void Wcam16( int fun, int mesto, int sybadr, unsigned word1) { adrreg = csr + mesto*32 + sybadr*2 ; outpw ( adr , csr ); outpw ( dat , fun ); outpw ( adr , adrreg ); outpw ( dat , word1 ); } {* Output 'data' by 'NAF' address, return Q-status *} function CmcW16( n,a,f : Byte ; d:word) : Byte ; var adr: word; ii,jj: word; begin portw[adrr]:=csr; delay(0); portw[datr]:=f; delay(0); adr:=2*(a+n*16)+csr; portw[adrr]:=adr; delay(0); portw[datr]:=d; delay(0); jj:=port[stat+1]; delay(0); CmcW16:= (jj and $80) div 128; end; { /*----------------------------------------------------------------------*/ /* Запись информации от 1 до 24 разрядов */ /*----------------------------------------------------------------------*/ void Wcam24( int fun, int mesto, int sybadr, unsigned word1, unsigned word2 ) { int dhr; dhr= csr + 4; adrreg = csr + mesto*32 + sybadr*2 ; outpw ( adr , csr ); outpw ( dat , fun ); outpw ( adr , dhr ); outpw ( dat , word2 ); outpw ( adr , adrreg ); outpw ( dat , word1 ); } {* Output 'data' by 'NAF' address, return Q-status *} function CmcOuL( n,a : Byte ; f:word; dh,dm,dl : Byte ) : Byte ; var adr: word; jj: byte; ii: word; begin portw[adrr]:=csr; delay(0); portw[datr]:=f; delay(0); adr:=2*(a+n*16)+csr; portw[adrr]:=csr+4; delay(0); port[datr]:=dh; delay(0); portw[adrr]:=adr; delay(0); portw[datr]:=dm*256+dl; delay(0); ii:=portw[datr]; jj:=port[adrr]; delay(0); CmcOuL:= jj {(jj and $80) div 128}; end; end. { unit Camac } [/CODE] |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Совершенно с Вами согласен. Все зависит от того, как крейт подключен к PC. Это может быть реализовано как через шину портов(ISA,PCI...), так и напрямую вставлен в память. Лично работал как с памятью (тогда область адресов отображается на регион памяти 0D0000 или C8000), так и с портами (кажется, 220h - как звуковуха). В любом случае следует изучить команды NAF. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |