1. 修改地址和波特率
参数设置
①、选择正确的COM口(“我的电脑—属性—设备管理器—端口”里面查看COM端口),列举出几种不同的485转换器的驱动名称。
②、单独只接一台设备并上电,点击软件的测试波特率,软件会测试出当前设备的波特率以及地址,默认波特率为9600bit/s,默认地址为0x01。
③、根据使用需要修改地址以及波特率,同时可查询设备的当前功能状态。
④、如果测试不成功,请重新检查设备接线及485驱动安装情况。
2. 通信协议
2.1 通讯基本参数
编 码 |
8位二进制 |
数据位 |
8位 |
奇偶校验位 |
无 |
停止位 |
1位 |
错误校验 |
CRC(冗余循环码) |
波特率 |
2400bit/s、4800bit/s、9600 bit/s可设,出厂默认为9600bit/s |
2.2 数据帧格式定义
采用Modbus-RTU 通讯规约,格式如下:
初始结构 ≥4 字节的时间
地址码 = 1 字节
功能码 = 1 字节
数据区 = N 字节
错误校验 = 16 位CRC 码
结束结构 ≥4 字节的时间
地址码:为变送器的起始地址,在通讯网络中是唯一的(出厂默认0x01)。
功能码:主机所发指令功能指示。
数据区:数据区是具体通讯数据,注意16bits数据高字节在前!
CRC码:二字节的校验码。
主机问询帧结构:
地址码 |
功能码 |
寄存器起始地址 |
寄存器长度 |
校验码低位 |
校验码高位 |
1字节 |
1字节 |
2字节 |
2字节 |
1字节 |
1字节 |
从机应答帧结构:
地址码 |
功能码 |
有效字节数 |
数据一区 |
第二数据区 |
第N数据区 |
校验码 |
1字节 |
1字节 |
1字节 |
2字节 |
2字节 |
2字节 |
2字节 |
2.3 通讯寄存器地址说明
设备的地址为起始地址,当702寄存器数值为1时设备可虚拟多地址,若起始地址为1,则问询1-8地址都应答,连续8个地址分别代表8种不同的设备。当702寄存器数值为0时,虚拟多地址功能则无效,若起始地址为1,既询问2-8号设备不会再有应答,此时只可使用1号地址询问500-512号寄存器;
虚拟多地址说明:
例如起始地址为1,则不同的地址代表的设备及0号和1号寄存器存放的内容如下表所示:
地址 |
代表设备 |
0号寄存器 |
1号寄存器 |
1 |
风速设置 |
风速值(实际值10倍) |
风力值(实际值) |
2 |
风向设备 |
风向值0-7档(实际值) |
风向值0-360(实际值) |
3 |
温湿度设备 |
湿度值(实际值10倍) |
温度值(实际值10倍) |
4 |
噪声设备 |
噪声值(实际值10倍) |
|
5 |
PM2.5和PM10设备 |
PM10值(实际值) |
PM2.5值(实际值) |
6 |
大气压力设备 |
大气压值(实际值10倍) |
|
7 |
光照设备 |
20万光照值高位(实际值) |
20万光照值(实际值) |
8 |
TSP设备 |
TSP设备(实际值) |
|
另外500到512号寄存器中的内容如下表所示(支持03/04功能码):
寄存器地址 |
PLC或组态地址 |
内容 |
操作 |
500 |
40501 |
风速值(实际值10倍) |
只读 |
501 |
40502 |
风力值(实际值) |
只读 |
502 |
40503 |
风向值0-7 |
只读 |
503 |
40504 |
风向值0-360 |
只读 |
504 |
40505 |
湿度值(实际值10倍) |
只读 |
505 |
40506 |
温度值(实际值10倍) |
只读 |
506 |
40507 |
噪声值(实际值10倍) |
只读 |
507 |
40508 |
PM2.5值(实际值) |
只读 |
508 |
40509 |
PM10值(实际值) |
只读 |
509 |
40510 |
TSP值(实际值) |
只读 |
510 |
40511 |
气压值(实际值10倍) |
只读 |
511 |
40512 |
20W的Lux值高16位值(实际值) |
只读 |
512 |
40513 |
20W的Lux值低16位值(实际值) |
只读 |
此外700-702寄存器为控制寄存器,(支持03/04/06/16功能码)
寄存器地址 |
PLC或组态地址 |
内容 |
操作 |
700 |
40701 |
控制继电器1
写1闭合 写0断开 |
读写 |
701 |
40702 |
控制继电器2
写1闭合 写0断开 |
读写 |
702 |
40703 |
设备虚拟多地址使能
写1:设备可虚拟成多地址
写0:多地址功能禁用 |
读写 |
2.4 通讯协议示例以及解释
假设起始地址为1,通过0x00 00号和0x00 01号寄存器读取数据
2.4.1通过不同地址问询0号和1号寄存器
-
问询风速值
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x01 |
0x03 |
0x00 0x00 |
0x00 0x02 |
0xC4 |
0x0B |
应答帧(例如读到风速为1.2m/s,风力为1级风)
地址码 |
功能码 |
有效字节数 |
风速值 |
风力值 |
校验码低位 |
校验码高位 |
0x01 |
0x03 |
0x04 |
0x00 0x0C |
0x00 0x01 |
0xFB |
0xF0 |
风速:
0x000C (十六进制)= 12 =>风速= 1.2m/s
风力:
0x0001(十六进制)=1=> 风力 = 1级风
-
问询风向
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x02 |
0x03 |
0x00 0x00 |
0x00 0x02 |
0xC4 |
0x38 |
应答帧(例如读到风向为西南风)
地址码 |
功能码 |
有效字节数 |
风向(0-7) |
风向(0-360) |
校验码低位 |
校验码高位 |
0x02 |
0x03 |
0x04 |
0x00 0x05 |
0x00 0xE1 |
0x19 |
0x7A |
风向计算:
风向值:0x0105(十六进制)= 5=> 风向值 = 5(西南风)
风向值:0x00E1(十六进制)=225=>风向值225度(西南风)
采集值对应换算关系:
采集值(0-7档) |
采集值(0-360°) |
对应方向 |
0 |
0° |
北风 |
1 |
45° |
东北风 |
2 |
90° |
东风 |
3 |
135° |
东南风 |
4 |
180° |
南风 |
5 |
225° |
西南风 |
6 |
270° |
西风 |
7 |
315° |
西北风 |
-
问询温湿度值
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x03 |
0x03 |
0x00 0x00 |
0x00 0x02 |
0xC5 |
0xE9 |
应答帧(例如读到温度为-10.1℃,湿度为65.8%RH)
地址码 |
功能码 |
有效字节数 |
湿度值 |
温度值 |
校验码低位 |
校验码高位 |
0x03 |
0x03 |
0x04 |
0x02 0x92 |
0xFF 0x9B |
0x79 |
0xFD |
温度:当温度低于0℃时以补码形式上传
0xFF9B(十六进制)= -101 => 温度 = -10.1℃
湿度:
0x0292(十六进制)=658=> 湿度 = 65.8%RH
-
问询噪声
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x04 |
0x03 |
0x00 0x00 |
0x00 0x01 |
0x84 |
0x5F |
应答帧(例如读到噪声值为50.8dB)
地址码 |
功能码 |
有效字节数 |
噪声值 |
校验码低位 |
校验码高位 |
0x04 |
0x03 |
0x02 |
0x01 0xFC |
0x75 |
0x95 |
噪声计算:
噪声值:0x01FC(十六进制)= 508=> 噪声值 = 50.8dB
5. 问询PM10和PM2.5
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x05 |
0x03 |
0x00 0x00 |
0x00 0x02 |
0xC5 |
0x8F |
应答帧(例如读到PM2.5为85ug/m3,PM10为156ug/m3)
地址码 |
功能码 |
有效字节数 |
PM10值 |
PM2.5值 |
校验码低位 |
校验码高位 |
0x05 |
0x03 |
0x04 |
0x00 0x9C |
0x00 0x55 |
0xAF |
0x8A |
PM10计算:
PM10:0x009C (十六进制)= 156 => PM10 = 156ug/m3
PM2.5计算:
PM2.5:0x0055(十六进制)= 85=> PM2.5 = 85ug/m3
6. 问询大气压力值
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x06 |
0x03 |
0x00 0x00 |
0x00 0x01 |
0x85 |
0xBD |
应答帧(例如读到大气压力值为15.1Kpa)
地址码 |
功能码 |
有效字节数 |
大气压力值 |
校验码低位 |
校验码高位 |
0x06 |
0x03 |
0x02 |
0x00 0x97 |
0x4C |
0x2A |
气压计算:
气压值值:0x0097(十六进制)= 151=> 大气压力值 = 15.1Kpa
7. 问询光照
问询帧
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x07 |
0x03 |
0x00 0x00 |
0x00 0x02 |
0xC4 |
0x6D |
应答帧(例如读到光照度为132808Lux)
地址码 |
功能码 |
有效字节数 |
20万光照高 |
20万光照低 |
校验码低位 |
校验码高位 |
0x07 |
0x03 |
0x04 |
0x00 0x02 |
0x06 0xC8 |
0x3F |
0xC5 |
产品为0~20万量程变送器,单位为1Lux
0x00 02 06 C8(十六进制) = 132808=> 光照度=132808Lux
8. 问询TSP
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x08 |
0x03 |
0x00 0x00 |
0x00 0x01 |
0x84 |
0x93 |
应答帧(例如读到TSP值为50.8ug/m3)
地址码 |
功能码 |
有效字节数 |
TSP值 |
校验码低位 |
校验码高位 |
0x08 |
0x03 |
0x02 |
0x01 0xFC |
0x65 |
0x94 |
TSP计算:
TSP值:0x01FC(十六进制)= 508=> TSP值 = 50.8ug/m3
2.4.2问询500号以上寄存器
例如问询温湿度值:设备地址为01
地址码 |
功能码 |
起始地址 |
数据长度 |
校验码低位 |
校验码高位 |
0x01 |
0x03 |
0x01 0xF8 |
0x00 0x02 |
0x44 |
0x06 |
应答帧(例如读到温度为-10.1℃,湿度为65.8%RH)
地址码 |
功能码 |
有效字节数 |
湿度值 |
温度值 |
校验码低位 |
校验码高位 |
0x01 |
0x03 |
0x04 |
0x02 0x92 |
0xFF 0x9B |
0x5A |
0x3D |
温度:当温度低于0℃时以补码形式上传
0xFF9B(十六进制)= -101 => 温度 = -10.1℃
湿度:
0x0292(十六进制)=658=> 湿度 = 65.8%RH
2.4.3控制继电器及设置虚拟多设备使能
1. 关闭虚拟多设备
写入数据帧
地址码 |
功能码 |
寄存器地址 |
写入内容 |
校验码低位 |
校验码高位 |
0x01 |
0x06 |
0x02 0xBE |
0x00 0x00 |
0xE8 |
0x56 |
应答帧
地址码 |
功能码 |
寄存器地址 |
写入内容 |
校验码低位 |
校验码高位 |
0x01 |
0x06 |
0x02 0xBE |
0x00 0x00 |
0xE8 |
0x56 |
2. 控制继电器1闭合
写入数据帧
地址码 |
功能码 |
寄存器地址 |
写入内容 |
校验码低位 |
校验码高位 |
0x01 |
0x06 |
0x02 0xBC |
0x00 0x01 |
0x88 |
0x56 |
应答帧
地址码 |
功能码 |
寄存器地址 |
写入内容 |
校验码低位 |
校验码高位 |
0x01 |
0x06 |
0x02 0xBC |
0x00 0x01 |
0x88 |
0x56 |
使用03功能码,可查询当前的设置值