TCOM5. Функции модуля описания протокола

  TCOM5 Open_yyy. Функция инициализации

  TCOM5 zCompare_yyy. Функция сравнения

  TCOM5 Set_yyy. Функция формирования посылаемого сообщения

  TCOM5 Check_yyy. Функция проверки

  TCOM5 Get_yyy. Функция расшифровки принятого сообщения

  TCOM5 Close_yyy. Функция завершения обмена

МРВ вызывает из модуля t12s<N>.dll шесть функций.

TCOM5 Open_yyy. Функция инициализации

Эта функция вызывается при инициализации работы МРВ с драйвером. В ней можно прописать операции для установки начальных условий для обмена данными. В отличие от функции Prepare_xxx драйвера t11, функция Open_yyy всегда формирует блоковые запросы.

 

int Open_yyy(int &media, char *str, int &q_in, int &q_out, int &q_data);

 

где

media – номер драйвера;

str – строка, содержащая название протокола (не более 31 байта). Передается из драйвера МРВ. Профайлер пишет эту строку в свой протокол;

q_in – размер буфера rbuf для приема данных;

q_out – размер буфера sbuf для передачи данных;

q_data – максимальное количество структур RSDATA (т.е., максимальное количество каналов в групповом запросе; указатель p на массив структур RSDATA, передаваемый в функции Set_yyy и Get_yyy, будет указывать на массив из q_data элементов.).

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

TCOM5 zCompare_yyy. Функция сравнения

Эта функция используется при формировании и расшифровке блоковых запросов.

 

int zCompare_yyy(IA &ia0, IA &ia1, int &count);

 

где

ia0 – удаленный адрес первого канала;

ia1 – удаленный адрес сравниваемого канала;

count – число каналов, уже находящихся в блоке,  минус один при формировании блоковых запросов или смещение канала относительно начала блока при расшифровке запроса. Этот параметр формируется МРВ и передается в драйвер. По нему можно вносить ограничение на добавление новых элементов в блоковый запрос. Для алгоритма DATA12 этот параметр равен индексу элемента в структуре RSDATA, содержащего значение для записи в канал.

Если возвращаемое данной функцией значение больше 0, то канал принадлежит к данному запросу; если при этом осуществляется обработка группового запроса по алгоритму BLOCKDATA12, возвращаемое значение  на 1 больше индекса размещения данных в структуре RSDATA,

Если возвращаемое данной функцией значение равно 0, то анализируемый канал не попадает в данный запрос.

TCOM5 Set_yyy. Функция формирования посылаемого сообщения

Эта функция вызывается МРВ при пересчете значений канала, связанного с драйвером.

 

int Set_yyy(IA &ia, int &max_send, int &max_rec, RSDATA *p, char *sbuf);

 

где

ia – удаленный адрес канала (передается в драйвер);

max_send – количество байтов для посылки (формируется в драйвере);

max_rec – количество байтов в ответе (формируется в драйвере);

p – указатель на массив структур RSDATA, содержащий данные и их форматы. Этот параметр требуется, если канал имеет тип OUTPUT, – в этом случае элемент 0 массива содержит значение для записи в контроллер.

Если канал типа OUTPUT, то

p[0].F.fmt[3]=1;

для данных в формате FLOAT:

p[0].V.v – посылаемое значение,

p[0].F.fmt[0]=0;

для данных в формате HEX:

p[0].V.i[0] – посылаемое значение,

p[0].F.fmt[0]=0x40.

Тип значения (HEX или FLOAT), посылаемого из канала в устройство, не связан с типом канала, который пользователь указал а редакторе базы каналов. p[0].F.fmt[0] нужен только для корректной интерпретации p[0].V внутри драйвера.

Если канал типа INPUT, то

p[0].F.fmt[3]=0.

sbuf – буфер для посылки (формируется в драйвере).

Данная функция вызывается для формирования сообщений, посылаемых с использованием соответствующего носителя в устройство. Сформированное сообщение должно быть размещено в буфере sbuf.

Отличное от 0 значение, возвращаемое функцией, свидетельствует об ошибке ее выполнения.

С помощью функции Set_yyy можно установить значение каналу, обратившемуся к драйверу. Если эта функция возвращает max_send=max_rec=[младший байт буфера sbuf]=0, то МРВ присваивает каналу значение, взятое из первого элемента массива структур RSDATA.

  

TCOM5 Check_yyy. Функция проверки

Эта функция вызывается после приема ответа от контроллера перед функцией расшифровки полученных данных. Ее назначение - проверить корректность полученного ответа. Она имеет следующий формат:

 

int Check_yyy(IA &ia, int &count_rec, int &max_rec, char *rbuf);

 

где

ia – удаленный адрес канала (передается в драйвер);

count_rec – число принятых байтов (передается в драйвер);

max_rec – количество байтов в ответе (передается драйверу и формируется в нем);

rbuf – буфер, содержащий принятое сообщение (передается драйверу и формируется в нем).

Если возвращаемое функцией значение равно 0, то принятые данные считаются корректными и осуществляется вызов функции расшифровки принятого сообщения (Get_yyy).

TCOM5 Get_yyy. Функция расшифровки принятого сообщения

Эта функция вызывается для расшифровки полученного ответа от устройства. Она имеет следующий формат:

 

int Get_yyy(IA &ia, int &count_rec, int &q_rec, RSDATA *p, char *rbuf, int &type_cnv);

 

где

ia – удаленный адрес канала (передается в драйвер);

count_rec – число принятых символов (передается в драйвер);

q_rec – число посылаемых или запрашиваемых значений (передается в драйвер, может быть изменено);

p – указатель на массив структур RSDATA, содержащий данные и их форматы;

rbuf – буфер, содержащий принятое сообщение  (передается в драйвер);

type_cnv – тип разборки принятых данных, формируется в драйвере (см. ниже):

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

TCOM5 Close_yyy. Функция завершения обмена

Эта функция не имеет параметров. Она вызывается при завершении работы МРВ и имеет следующий формат:

 

int Close_yyy();