文档介绍:MODBUS串口通讯协议1、 协议概述•数据格式:1位起始位8位数据位,最小的有效位先发送1位停止位偶校验一一》温湿度、直流屏只能是无校验,波特率: 4800BPS、9600BPS、19200BPS、38400BPS可供选择通讯地址:01〜247,默认地址为01 》地址可设Modbus协议支持RS232、RS485传输方式,默认为RS232传输形式,若用RS485传输方式,需要加232<->485转换器。•数据包组织说明:.木协议中涉及到的CRC校验皆是对木帧中所有数据的校验,且校验位在传输时低位在前,高位在后。.木协议屮的模拟量均采用%M表示,数值用补码表示,所以必皿的取值范围:一32768〜+32767,模拟量在传输时高位在前,低位在后。.电压电流的放大系数为10。即将实际的电压电流量乘以10取整就是数据帧中的数据。2、 CRC校验CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息屮连续的8位字节各当前寄存器屮的值进行处理。仅每个字符屮的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。CRC产生过程中,每个8位字符都单独和寄存器内容相或(0R),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出來检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节乂单独和寄存器的当前值相或。最终寄存器屮的值,是消息屮所有的字节都执行Z后的CRC值。CRC添加到消息中吋,低字节先加入,然后高字节。CRC简单函数如下:unsignodshortCRC16(puchMsg,)unsignedchar*puchMsg;/*要进行CRC校验的消息*/unsignedshortusDataLen;/*消息中字节数*/unsignedcharuchCRCHi=OxFF;/*高CRC字节初始化*/unsignedcharuchCRCLo=OxFF;/*低CRC字节初始化*/unsigneduIndex;/*CRC循环中的索弓I*/whi1e(usDataken—)/*传输消息缓冲区*/{ulndcx=uchCRCHi'*puchMsgg++;/*计算CRC*/uchCRCHi=uchCRCLo"auchCRCHi[uIndex};uchCRCLo=auchCRCLotulndex];}return(uchCRCHi<<8|uchCRCLo);)/*CRC高位字节值表*/staticunsignedcharauchCRCHi[]={0x00,OxCl,0x81,0x40,0x01,OxCO,0x80,0x41,0x01,OxCO,0x80,0x41,0x00,OxCl,0x81,0x40,0x01,OxCO,0x80,0x41,0x00,OxCl,0x81,0x40,0x00,OxCl,0x81,0x40,0x01,OxCO,0x80,0x41,0x01,OxCO,0x80,0x41,0x00,OxCl,0x81,0x40,0x00,OxCl,0x81,0x40,0x01,OxCO,0x80,0x