Материал: ModbusProtocol-VKT7

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

ВКТ-7

Реализация протокола Модбас

с. 16

5.3Порядок получения необходимых данных

Завремясеансасвязисистемаверхнегоуровнядолжнанеменееодногоразазапросить«свойства» дляопределениянаименованийединицизмеренияиколичества знаковвдробнойчастидляэлементовданных. Далеенужнозапроситьпереченьактивныхэлементов, сформироватьпереченьэлементовдлячтения, изатемзаписатьего ввычислитель. Изответаназапрос«Чтениеперечняактивныхэлементов» длякаждогоэлементаданныхопределяетсяегоразмер, тоестьколичествобайт, котороенужно «взять» изполученногокадра, чтобыправильноинтерпретироватьзначение. Затем выполняютсязапросыназаписьтипазначенийизаписьдаты(причтенииархива), а затемисобственно«Чтениеданных…». Приобработкеответаназапрос«Чтениеданных…» используетсяследующаяинформация:

Размер элемента данных (получен при ответе на запрос «Чтение перечня активных элементов»);

Количество знаков в дробной части и наименование единиц измерения (получены при чтении «свойств»).

5.4Получение архивных данных

Для получения архивных данных за интересующую клиента дату необходимо выполнить приведенную ниже последовательность запросов:

запрос на запись типа значений с номером 0-3 в зависимости от желаемого типа данных;

запрос на чтение перечня активных элементов;

запрос на запись перечня элементов для чтения;

запрос на запись даты;

запрос на чтение данных в соответствии с записанным перечнем элементов

для чтения.

Если выполняется циклическое чтение архивных данных, то первые три операции нужно выполнить единожды.

Внимание! ПРИБОР ПРИСЫЛАЕТ ОТВЕТ С ДАННЫМИ, ОТНОСЯЩИМИСЯ К ТОЙ ДАТЕ, КОТОРАЯ БЫЛА ЗАПИСАНА В ПОСЛЕДНИЙ РАЗ.

Если при записи даты прибор прислал ответ с кодом 3 (отсутствуют данные за указанную дату), то отчет следует формировать из записей архива другого типа. Например, если при чтении суточного архива был получен код 3, то для получения суточной записи за эти сутки нужно использовать данные в часовом разрезе за эти же сутки. Если при получении данных в соответствии с записанным перечнем элементов для чтения получен код 5, это означает, что зафиксировано изменение схемы измерения. В этом случае нужно следовать рекомендациям, изложенным в разделе «Принципы организации данных, доступных через сеть, в тепловычислителе ВКТ-7».

5.5Получение текущих и итоговых текущих данных

Для получения текущих и итоговых текущих данных необходимо выполнить последовательность запросов:

запрос на запись типа значений с номером 4 или 5 соответственно;

ВКТ-7

Реализация протокола Модбас

с. 17

запрос на чтение перечня активных элементов;

запрос на запись перечня элементов для чтения;

запрос на чтение данных в соответствии с записанным перечнем элементов для чтения.

ВКТ-7

Реализация протокола Модбас

с. 18

Приложение А – Расчет контрольной суммы кадра Modbus

Расчет контрольной суммы кадра Modbus RTU может выполняться по следующему алгоритму (текст на языке программирования С):

WORD Crc16(BYTE *Data, ULONG size)

{

union

{BYTE b[2]; unsigned short w;} Sum; char shift_cnt;

BYTE *ptrByte;

ULONG byte_cnt = size;

ptrByte=Data;

Sum.w=0xffffU;

for(; byte_cnt>0; byte_cnt--)

{

Sum.w=(unsigned short) ((Sum.w/256U)*256U+((Sum.w%256U)^(*ptrByte++))); for(shift_cnt=0; shift_cnt<8; shift_cnt++)

{/*обработка байта*/ if((Sum.w&0x1)==1)

Sum.w=(unsigned short)((Sum.w>>1)^0xa001U);

else

Sum.w>>=1;

}

}

return Sum.w;

}

Пусть какое-либо сообщение, имеющего длину N, записано в массиве Data[N+2] типа unsigned char. Тогда для этого сообщения контрольную сумму следует формировать следующим образом:

WORD CheckSumm = Crc16(Data, N); Data[N] = CheckSumm;

Data[N+1] = CheckSumm>>8;

Приложение Б – Используемые типы данных и символьные константы

При реализации протокола обмена возможно использование типа данных VT_DATA_RAP — 4 байта (день, месяц, год, час).

При расшифровке кодов в байте качества элементов данных можно использовать следующие символьные константы:

#define OPC_QUALITY_GOOD 0xC0

#define OPC_QUALITY_BAD 0x00

#define OPC_QUALITY_CONFIG_ERROR 0x04

#define OPC_QUALITY_DEVICE_FAILURE 0x0C

#define OPC_QUALITY_UNCERTAIN 0x40

#define OPC_QUALITY_SENSOR_CAL 0x50

Источник: https://studfile.net/preview/16521248/