独家Modbus解析流程--功能亮点与应用

 01 前言

本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。

02 概述

前面详细讲解过对私有485设备的解析方法与流程,按照解析方法来说,私有485设备的解析比Modbus协议设备的解析更为简单,虽然协议不是标准的,但是它定义更为简单,只需找到规律即可;Modbus协议经过多年的发展以及很成熟,功能强大且复杂,正因如此同时加大了解析的难度。

485和Modbus的概念和关系我在这里不多说,大家可以网上搜索,讲的也很透彻。在NodeRed和HomeAssistant中都可以对Modbus设备进行解析控制,HomeAssistant中需要配置configuration.yaml的方式来添加设备,如果设备较多可能会抓狂,在NodeRed中也可以采用三方节点进行解析,这些节点一直在正常维护中,功能也在不断强大,但是我没有使用过。

自从接触NodeRed就对它的强大功能吸引,于是就思考能不能自己编写流程来解析Modbus,抱着试一试的心态从构思到实施终于完成了流程。该流程和HomeAssistant能完美契合,配置简单并实现HomeAssistant自动发现,也能通过其他设备自由控制。案例中以如下12路照明控制模块为例演示接入。

图片

流程功能:

1.同时支持485和串口服务器接入;

2.校验码自动计算;

3.简单配置即可在HA中自动发现;

4.与HomeAssistant无缝对接;

5.设备数据定义方便快捷;

6.Modbus继电器开关设备支持;

7.支持16位无符号数解析;

8.全功能码支持;

9.便捷的Modbus转MQTT。

03 流程运行原理

Modbus解析流程图如下:

图片

细心的朋友会发现,上面的流程和私有协议的流程基本上是一样的。没错,在流程图上看就是一样的,区别在于报文解析的逻辑上有很大差异,难点在于对不同数据类型的解析上。

解析流程:根据定义构建Modbus指令➝串口接收并反馈消息➝解析串口数据➝MQTT发布状态信息;

控制流程:动态接收HA指令➝解析HA指令➝构建控制指令➝串口接收并执行指令。

以上流程中为使用任何Modbus三方节点,只使用了serial request,当然同时也是支持使用TCP连接的。

04 流程使用方法

配置“轮询查询”节点:

图片

Device配置(从站配置)

  • Add:从站地址;

  • FC:读功能码;

  • RegStAdd:开始寄存器;

  • QTY:需要读取的寄存器数量;

    analysis配置(寄存器配置)

  • RegAdd:寄存器地址;

  • FC:写功能;

  • RegQty:寄存器数量;

  • DataType:数据类型(暂不修改):

  • DrvClass:HA中的设备类别;

  • entities:HA中的实体名称定义;

  • Path:MQTT路径,需以“/”结尾;

  • Notes:HA中显示的中文名称;

  • icon:自定义HA图标。

以上各值定义可参考流程中的案例定义根据实际情况改写,但是只能修改其值,不要对定义键进行修改。

完成以上设置后就可以手动触发一次“轮询查询”前的注入节点,然后触发“输出modbusParams内容”函数节点输出设置的值,如果正确后就可以进行运行测试。

运行时需使“查询变量”前的注入节点设置成立即执行,“轮询查询”前的注入节点设置成周期性执行,默认为1S。

流程中使用的是serial reques节点通讯,如果你使用的是串口服务器方式把流程中的节点替换成“TCP request”节点即可。

然后把MQTT节点设置成HA的MQTT服务器地址,可以参照前面文章,这里不再赘述。

以上流程是基于12路继电器开关协议,数据类型为16位符号数,暂支持单个从站的多路设备接入,后期会支持更多的设备和数据类型解析,下面是HomeAssistant中通过自动发现后的全部实体。

图片

以上案例中流程代码位于公众号底部,需要的朋友请自取。

//单片机Modbus RTU Slave程序 //==================================================================================================== //波 特 率:9600bps //起 始 位:1位 //数 据 位:8位 //校 验 位:偶校验 //停 止 位:1位 //系统时钟:11.0592MHz //物 理 层:RS485 //从站地址:0x01 //使用串口:STC12C5A60S2单片机串口1 //功 能 码:支持01、02、03、04、05、06、15、16等功能码 //01功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)数字量输出多路进行读操作 //02功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)数字量输入多路进行读操作 //03功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)模拟量输出多路进行读操作 //04功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)模拟量输入多路进行读操作 //05功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)数字量输出一路进行写操作 //06功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)模拟量输出一路进行写操作 //15功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)数字量输出多路进行写操作 //16功能码:此功能可对单片机16路(甚至更多,根据自己实际需要扩展)模拟量输出多路进行写操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值