标准modbus协议
一、ModBus协义规则
串口格式:1个起始位,8个数据位,1个校验位偶校验(EVEN),1个停止位.
二、ModBus指令
读取命令行(command): line ,0x03,0x00,0x00,0x00,0x02,CRC0,CRC1
返回数据(Retrun): line ,0x03,0x00,0x04,T_hi,T_Lo, RH_hi,RH_Lo,CRC0,CRC1
CRC计算函数如下:
unsigned int crc_cal16 (unsigned char *snd, unsigned char num)
{
unsigned char i, j;
unsigned int c,crc=0xFFFF;
for(i = 0; i < num; i ++)
{
c = snd[i] & 0x00FF;
crc ^= c;
for(j = 0;j < 8; j ++)
{
if (crc & 0x0001)
{
crc>>=1;
crc^=0xA001;
}
else crc>>=1;
}
}
return(crc);
}
例如:
传感器的地址设为0,即line=0,此时CRC0=0xC5,CRC1=0xDA
些时读取的命令为: 0x00 ,0x03,0x00,0x00,0x00,0x02, 0xC5, 0xDA
返回数据如: 0x00,0x03,0x00,0x04,0x00,0xB8, 0x01,0xF7,0x2A,0xC0
此时我们计算温度T= (T_hi*256+T_Lo)/10=(00*256+0xB8)/10=184/10=18.4 (度)
此时我们计算湿度RH=( RH_hi *256+ RH_Lo)/10=(0x01*256+0xF7)/10=50.3RH%