Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с КАМАК, передача данных от компьютера КАМАКу 
:(
    Опции темы
Катя
  Дата 28.10.2002, 22:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите, поалуйста, как передать данные с компьтера КАМАКу. Может, кто знает, где можно найти соответствующий коммуникационный модуль?
  Вверх
AntonSaburov
Дата 30.10.2002, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Насколько я помню, с КАМАКом связываются по COM-порту. Если так оно и есть, то надо использовать стандартные Виндовые средства для работы с портами - открывать файл.
Посмотреть в MSDN "Configuring a Communications Resource" - там пример работы с портом.
PM MAIL WWW ICQ   Вверх
Medved
Дата 30.10.2002, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Лучше и спользовать вставки на Assembler, но это уже в другой форум....


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Dapo
Дата 30.10.2002, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: нет
Всего: 1



Не знаю что такое КАМАК но если соединение по RS-232 тогда вам в FAQ. Есть еще компоненты по работе с портами и не надо забивать голову ассемблером. Единственное что нужно будет знать - протокол обмена данными.
PM MAIL   Вверх
Dapo
Дата 30.10.2002, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: нет
Всего: 1



Вот вспомнил: есть нормальная АктивИкс-а для работы с ком-портом MSCOMM32.ocx в нете легко найти.
PM MAIL   Вверх
reonid
Дата 30.10.2002, 20:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
Дата 30.10.2002, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

reonid Дата сообщения: 30.10.2002,12:34
Это зависит от типа контроллера КАМАКа.


Совершенно с Вами согласен. Все зависит от того, как крейт подключен к PC. Это может быть реализовано как через шину портов(ISA,PCI...), так и напрямую вставлен в память.

Лично работал как с памятью (тогда область адресов отображается на регион памяти 0D0000 или C8000), так и с портами (кажется, 220h - как звуковуха).

В любом случае следует изучить команды NAF.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.