当前位置:
文档之家› PM2.5传感器Modbus rtu通讯协议
PM2.5传感器Modbus rtu通讯协议
{
unsigned char *buf;
unsigned short int * CRC;
unsigned short int crch,crcl;
uchar p;
uchar j;
char err;
buf= & data[len];
CRC=(unsigned short int *)buf;
buf[0]=0xff;//lsb
40017
内部参数请勿修改
40018
寄存器锁定位(修改其它参数前需先将此位改为十进制24)断电自动锁定
40019
设备型号(可根据需求定制,也可自行修改)
40020
串口通讯地址(默认为1)
4、CRC16校验计算函数(请确认单片机大端编程还是小端)
/******************函数CRC_16()*********大端
unsigned short int CRC_16(unsigned char *data,int len)
{
unsigned char *buf;
unsigned short int * CRC;
unsigned short int crch,crcl;
short int i;
short int j;
char err;
buf= & data[len];
CRC=(unsigned short int *)buf;
buf[0]=0xff;
buf[1]=0xff;
for(i=0;i<len;i++)
{
buf[0]=buf[0]^data[i];
for(j=0;j<8;j++)
{
err=buf[0]&1;
3、寄存器描述
寄存器
40001
存储PM2.5浓度值(mg/m3)
40002
40003
40004
….
40010
以上为保留寄存器
40011
内部参数请勿修改
40012
内部参数请勿修改
40013
PM2.5微调参数(值越小读数越小10~120取值范围)微调后请过3分钟再观察数据
40014
40015
40016
IIC设备地址(若与机内设备有冲突可自行修改,设备复位后生效)默认值0x50
例子:datax【8】={01, 03, 00, 00, 00, 01, 00, 00}16进制
unsigned short intx=CRC_16(datax,6);
得到x=0x840a;
***************************************************/
unsigned short int CRC_16(unsigned char *data,int len)
返回short int
参数data【】数组、len数组长度
例子:datax【8】={01, 03, 00, 00, 00, 01, 00, 00}16进制
unsigned short intx=CRC_16(datax,6);
得到x=0x840a;
***************************************************/
一、标准modbus协议说明
1、串口设置
波特率9600,无校验,数据位8,停止位1。
万能通讯命令16进制:00030000000185DB(不清楚设备地址可用此找回)
2、接口说明
请接入GND(地\电源负极),TX(模组串口发对应串口线收),RX(模组串口收对应串口线发)对应接口。调试不通请交换串口线再试。
*CRC=*CRC/2;
if(err) *CRC=*CRC^0xa001;
}
}
crch=*CRC>>8;
crcl=*CRC<<8;
*CRC=crch+crcl;
return(*CRC);
}
/******************函数CRC_16()*********小端
返回short int
参数data【】数组、len数组长度
buf[1]=0xff;//msb
for(p=0;p<len;p++)
{
buf[1]=buf[1]^data[p];
for(j=0;j<8;j++)
{
err=buf[1]&1;
*CRC=*CRC/2;
if(err) *CRC=*CRC^0xa001;
}
}
crch=*CRC>>8;
cபைடு நூலகம்cl=*CRC<<8;
*CRC=crch+crcl;
return(*CRC);
}