巡检仪RS485通讯协议一、波特率9600二、数据格式1个开始位、8.doc
文本预览下载声明
巡检仪RS485通讯协议
波特率: 9600
数据格式:1个开始位、8个数据位、2个停止位、无奇偶校验位
通讯协议:
Modbus-RTU协议
消息帧
地址域功能域数据域CRC校验1个字节1个字节n个字节2个字节
消息响应时间
消息发送至少要以3.5个字符时间的停顿间隔开始,在最后一个字符结束后,至少3.5个字符时间的停顿才表示消息结束;
Modbus-RTU协议详解
设备地址
单个地址范围1~247;
地址0是广播地址,广播地址只写不读;
功能代码
03H:连续读取寄存器;
设备地址功能代码寄存器地址读取数据长度CRC校验1个字节1个字节2个字节2个字节2个字节读取指令
串
读取回复字符串
设备地址功能代码回复数据字节数回复数据内容CRC校验1个字节1个字节1个字节n个字节2???字节
06H:连续写入寄存器;
写入指令
设备地址功能代码寄存器地址写入数据内容CRC校验1个字节1个字节2个字节n个字节2个字节
写入回复字符串
设备地址功能代码寄存器地址写入数据内容CRC校验1个字节1个字节2个字节n个字节2个字节
寄存器地址
读取、写入寄存器的开始地址;
读取数据长度
连续读取寄存器的个数(每个寄存器包含2个字节数据);
数据内容
读取、写入的数据(字节)
CRC校验(CRCH CRCL)
加载一个16位寄存器,所有位都为1(即FFFFH),称为CRC寄存器;
数据的一个字节(从第一个字节开始,依序处理)与CRC寄存器的低位进行异或运算,并将运算结果放回CRC寄存器中;
将CRC寄存器位右移,并将最高位填0,检查移出的最低位;
如果移出的最低位为0则重复步骤3),否则将CRC寄存器与A001H进行异或运算,并将运算结果放回CRC寄存器;
重复步骤3)、4),直到8位移完;
重复步骤2)、3)、4)、5),直到数据的所有字节都计算完毕,即可得出CRC校验码。
数据寄存器地址与内容
地址0000H0001H0002H0003H内容版本号测量值小数位数报警状态说明2字节2字节 / 通道1字节 / 通道1字节 / 8报警值属性只读只读只读只读
CRC校验参考程序
uint crcjy_(uchar *str_,uchar crc_cd)
{
uchar idata crc_gs;
uchar idata crc_w;
uint idata crc_sj;
crc_sj=0xffff;
for(crc_gs=0;crc_gscrc_cd;crc_gs++)
{
crc_sj=((crc_sj^str_[crc_gs])0x00ff)+(crc_sj0xff00);
for(crc_w=0;crc_w8;crc_w++)
{
if((crc_sj0x0001)==0x0000)
{
crc_sj=1;
}
else
{
crc_sj=1;
crc_sj^=0xa001;
}
}
}
crc_sj=((crc_sj0x00ff)8)+((crc_sj0xff00)8);
return(crc_sj);
}
举例
读取地址为01的仪表的版本号
读取指令:01 03 00 00 00 01 CRCH(84) CRCL(0A)
回复字符串:01 03 02 版本号H 版本号L CRCH CRCL
读取地址为01的仪表的1-2通道测量值
读取指令:01 03 00 01 00 02 CRCH(95) CRCL(CB)
回复字符串:01 03 04 第一通道测量值H 第一通道测量值L 第二通道测量值H
第二通道测量值L CRCH CRCL
读取地址为01的仪表的1-2通道测量值对应的小数位数
读取指令:01 03 00 02 00 01 CRCH(25) CRCL(CA)
回复字符串:01 03 02 第一通道测量值小数位数 第二通道测量值小数位数 CRCH
CRCL
读地址为01的仪表的报警状态
读取指令:01 03 00 03 00 02 CRCH(34) CRCL(0B)
回复字符串:01 03 04 1~8报警值对应的报警状态 9~16报警值对应的报警状态 17~24报警值对应的报警状态 25~32报警值对应的报警状态CRCH
CRCL
显示全部