Драйвер t13

Поддержка обмена с устройствами через драйвер 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 показан на рисунке: