Поддержка обмена с устройствами через драйвер t13 сохранена в TRACE MODE 6 только для совместимости с версией 5, эту технологию не следует использовать для разработки новых драйверов.
Этот драйвер – драйвер с фиксированным подключением – может быть только один, он оформляется в виде библиотеки t13.dll. Библиотека должна быть расположена в директории, содержащей исполнительный файл МРВ.
Драйвер вызывается каналами Fast_R/W или R/W (здесь и далее под такими каналами понимаются числовые каналы, связанные с соответствующими источниками/приемниками – в данном случае с переменными Fast_R/W и R/W группы RWH_Driver – см. Группа ‘Платы ввода-вывода’ ).
Первые вызывают драйвер при каждом их пересчете. При этом в зависимости от типа переменной идет обращение к функциям драйвера t13_fread или t13_fwrite. Если возвращаемое функцией значение отлично от 0, каналу устанавливается признак аппаратной недостоверности.
Каналы R/W вызывают драйвер при условии наличия в базе канала R/W_Control и отличия от 0 результата логического умножения его значения и настройки I0 канала R/W. МРВ запускает в отдельном потоке обработку сразу всех каналов R/W, удовлетворяющих описанному условию, независимо от их периодов. Для каждого из них вызываются функции t13_read или t13_write (в зависимости от типа переменной). Каждая из них обрамляется вызовами t13_open и t13_close. Поток обработки каналов R/W работает параллельно с пересчетом базы каналов, но имеет более низкий приоритет.
Описание функций в драйвере выглядит следующим образом:
typedef union { unsigned char c[6]; unsigned short int i[3]; } IA; __declspec(dllexport) void t13_start(); __declspec(dllexport) void t13_stop(); __declspec(dllexport) void t13_open(); __declspec(dllexport) void t13_close(); __declspec(dllexport) int t13_write(char *name,IA &ia,float v); __declspec(dllexport) int t13_read(char *name,IA &ia,float &v); __declspec(dllexport) int t13_fwrite(char *name,IA &ia,float v); __declspec(dllexport) int t13_fread(char *name,IA &ia,float &v);
|
где
name – имя канала;
ia – удаленный адрес, шестибайтовое число, составленное из настроек переменной I0 (слово), I1(слово), C2 (байт) и C3 (байт);
v – значение канала. МРВ передает драйверу реальное значение канала.
Ниже приведен простейший драйвер. Он записывает все выходные параметры на диск E: в файл с именем aaa, а входным параметрам присваивает значение текущего системного времени в секундах.
FILE *fj; void t13_start() { } void t13_stop() { } void t13_open() { fj=fopen("e:\\aaa","a"); } void t13_close() { fclose(fj); } int t13_write(char *name,IA &ia,float v) { fprintf(fj,"%s %g\n",name,v); return(0); } int t13_read(char *name,IA &ia,float &v) { v=(time(NULL) & 0x00ff); return(0); } int t13_fwrite(char *name,IA &ia,float v) { return(0); } int t13_fread(char *name,IA &ia,float &v) { return(0); }
|
Редактор параметров переменных Fast_R/W, R/W, R/W_Control показан на рисунке: