Материал: ModbusProtocol-VKT7_ТЕД3

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

ВКТ-7

Реализация протокола МОДБАС

с. 21

 

 

 

Приложение А – Расчет контрольной суммы кадра 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;

ВКТ-7

Реализация протокола МОДБАС

с. 22

 

 

 

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

При реализации протокола обмена возможно использование типа данных 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