准备工作:
NetAssist.exe网络调试助手。创建TCP_modbus-rtu类型的产品和设备。
Modbus通信知识引导
TCP连续性地址数据实现
连续性地址物模型json:温度int类型(寄存地址1),湿度int类型(寄存地址2),氨气int类型(寄存地址3)。
TCP温湿度氨气json数据,可下载后直接在产品中导入该物模型json。
问询帧
地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
0x01 | 0x03 | 0x00 0x00 | 0x00 0x03 | 0x05 | 0xCB |
💡 提示
地址码:请求设备的地址码。功能码:表示查询保持寄存器。起始地址:代表查询寄存器起始地址为0000H。
数据长度:意思就是查询从0开始有几个个寄存器。校验位:校验固定公式生成。
应答帧
地址码 | 功能码 | 字节数 | 温度值 | 湿度值 | 氨气 | 校验码低位 | 校验码高位 |
0x01 | 0x03 | 0x06 | 0x00 0x1F | 0x00 0x2D | 0x00 0x64 | 0x25 | 0x55 |
💡 提示
地址码:请求设备的地址码。功能码:表示查询保存寄存器。字节数:代表后面数据的字节数(数据长度),由于一个寄存器两个字节,查询一个寄存器的数据,返回的数据长度就是两个字节,返回数据长度(单位字节)=查询寄存器格式*2。温度值湿度值等:寄存器数据值。校验位:校验固定公式生成。
温度:00 1F H(十六进制) = 31 =>如果缩放因子为10,则 温度= 3.1℃ (单位)。
湿度: 00 2D H(十六进制)= 45 => 如果缩放因子为10,则 湿度= 4.5%RH(单位)。
准备hex16进制数据:01 03 06 00 1F 00 2D 00 64 25 55
操作流程:添加TCP产品–>添加该产品设备–>通过NetAssist.exe网络调试助手连接设备(连接时需要设备访问令牌发送进行验证)–>推送hex16进制数据–>设备物模型数据显示推送值。
TCP不连续地址数据实现
不连续性地址物模型json导入:温度int类型(1个寄存器,寄存地址1),湿度int类型(1个寄存器,寄存地址2),一氧化碳单精度(2个寄存器,寄存器地址6),二氧化碳单精度(2个寄存器,寄存器地址8)。温湿度为连续地址,一氧化碳和二氧化碳为连续地址。
准备16进制数据:
温湿度为连续性地址:01 03 04 00 1F 00 2D 0B E8
一氧化碳和二氧化碳为连续地址:01 03 08 42 0E 7A E1 42 83 33 33 F9 07
操作流程:添加TCP产品–>添加该产品设备–>通过NetAssist.exe网络调试助手连接设备–>先推送符合温湿度寄存器数的16进制数据–>再推送符合一氧化碳和二氧化碳寄存器数的16进制数据。
💡 提示
因为modbus默认以连续性地址进制数据为准,如果寄存器地址不为连续,则需要推送不同的hex数据实现。
TCP位开关解析数据实现
比特位实现开关:
开关物模型json:开关解析从0位开始,0-7为一个寄存器两个字节16位。测试的开关位分别为0,2,5,7,8。
16进制开关位数据:01 03 02 03 FF F8 F4。
💡 提示
开关位一般是一个寄存器->两个字节-十六位。下图为16进制转2进制数据,16位前面需补位0000,开关位效果为从右往左。
正常线圈开关状态实现:
开关物模型json:开关从0位开始解析,线圈为读取01,写入05,测试开关为5个,寄存器地址0-4连续,示例开关16进制数据为:01 01 01 15 90 47,开关状态为0001 0101,从右往左进行控制则为开,关,开,关,开。
设备物模型数据展示:
看板开关控制组件展示: