Каналы для вызова драйвера

  Параметры вызова драйвера

  Оформление драйвера

Мониторы семейства MicroRTM обращаются к драйверу обмена с УСО через точку входа – ее адрес в ОЗУ должен быть 0:4f0.

Драйверы для обмена в среде MS DOS должны быть скомпилированы в MS Visual C++ с опцией Large Memory Model.

Драйверы обмена с УСО вызываются каналами (см. Подтип 1 , Подтип 2 ) AI_RWH (чтение аналоговых данных), AO_RWH (запись аналоговых данных), DI_RWH (чтение дискретных данных) и DO_RWH (запись дискретных данных), а также RWH (OUTPUT – чтение данных, INPUT – запись данных).

Вызовы драйвера с помощью канала RWH будут работать только в том случае, если в базе имеется хотя бы один канал, инициализирующий драйвер (AI_RWH, AO_RWH, DI_RWH или DO_RWH).

Настройки переменных, с которыми связаны каналы, используются для формирования значения удаленного адреса, передаваемого драйверу при его вызове для запроса и передачи данных. При этом первая в списке настройка формирует значение двух младших байтов удаленного адреса. Остальные настройки формируют значения следующих по порядку байтов.

Удаленный адрес может быть сформирован в самом драйвере.

Данные переменные находятся в группе Платы ввода/вывода слоя Источники/Приемники.

Параметры вызова драйвера

Функция драйвера имеет следующий формат:

 

int RWH(unsigned short type, IA *ia, unsigned short *v);

 

где

ia – удаленный адрес канала;

v – выходное/входное значение канала или значение атрибута канала (в зависимости от кода вызова драйвера);

type – код вызова драйвера:

   0x8000 – первый вызов;

   0x1000 – последний вызов;

   0x2000 – инициализация аналоговых входов/выходов (вызывается при запуске Микро МРВ для всех каналов с дополнением AI_RWH и дополнением AO_RWH);

   0x3000 – инициализация дискретных входов/выходов, вызывается при запуске Микро МРВ для всех каналов DI_RWH, DO_RWH, у которых значение старшего байта удаленного адреса (атрибут СОСТОЯНИЕ) отлично от 0;

   0x4000 – формирование аналоговых выходов (каналы AO_RWH);

   0x5000 – опрос аналоговых входов (каналы AI_RWH). Если драйвер вызывается с таким кодом и возвращает 2, МРВ интерпретирует v как 16-разрядное число без знака; если 0 – как 16-разрядное число со знаком;

   0x6000 – формирование дискретных выходов (каналы DO_RWH);

   0x7000 – опрос дискретных входов (каналы DI_RWH).

Возврат драйвером значения 0 при вызовах 4000, 5000, 6000 и 7000 означает успешное завершение операции. При равенстве возвращаемого значения 1 для соответствующего канала устанавливается признак аппаратной недостоверности.

Оформление драйвера

Чтобы драйвер был резидентной программой и вызывался по адресу 0:4f0, он должен начинаться со следующего текста:

 

int RWH(unsigned short type, IA *ia, unsigned short *v); //прототип

//драйвера

long   *ad;

main()

{

union REGS inr;

ad=(long  *)MK_FP(0,0x04f0); // Установить адрес вызова

*ad=(long)RWH;               // процедуры драйвера

    

inr.x.ax=0x3100;             // выход в DOS

inr.x.dx=800;                // нормальное завершение

intdos(&inr,&inr);           // резидентной программы

}