Мониторы семейства 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); // резидентной программы } |