当前位置: 首页 > article >正文

Node-RED开源项目的modbus通信(TCP)

一、Modbus 通信协议
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
通俗的讲,Modbus的本质就是通过寄存器、线圈与其它设备交换数据。

1.Modbus分类

Modbus TCP
Modbus RTU
Modbus ASCII
Modbus是一簇协议,包含RTU、TCP、ASCII,Modbus并没有规定物理层。标准的Modicon控制器使用RS232C实现串行的Modbus协议。ASCII与RTU协议规定了信息、数据的结构、命令和应答的方式,采用Master/Slave方式,即Master端发出数据请求信息,Slave端接收到正确信息后就可以发送数据到Master端以响应请求;Master端也可以直接发送信息修改Slave端的数据,实现双向读写。
Modbus协议会对数据数据进行校验,ASCII采用LRC校验,RTU采用16位CRC校验,TCP由于可靠传输无需校验。
这三者的具体实现也有会所不同,TCP与RTU方式差别较小,具体参照详细。
总的来说Modbus TCP/RTU/ASCII这三者是Modbus协议的具体实现。最显而易见的就是,TCP通过以太网传输,RTU通过RS232C或RS422/RS485传输。

2.Modbus 功能码

功能码    名词    作用
01    读线圈状态    取得一组逻辑线圈的当前状态(ON/OFF)
02    读取输入状态    取得一组开关输入的当前状态(ON/OFF)
03    读取保持寄存器    在一个或多个保持寄存器中取得当前的二进制值
04    读取输入寄存器    在一个或多个输入寄存器中取得当前的二进制值
05    强置单线圈    强制一个逻辑线圈的通断状态
06    预置单寄存器    把具体二进制值装入一个保持寄存器
07    读取异常状态    取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定
08    回送诊断检验    把诊断检验报文送从机,以对通信处理进行评估
09    编程 (只用于484)    使主机模拟编程器作用,修改PC从机逻辑
10    控询(只用于484)    可使主机与一台正在执行长程序任务从机通信,探询该从机是够已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
11    读取事件计数    可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12    读取通信事件记录    可使主机检索每台从机的Modbus事务处理通信事件记录。如果某项事务处理完成,记录会给出相关错误。
13    编程(184/384/484/584)    可使主机模拟编程器功能修改PC从机逻辑
14    探询(184/384/484/584)    可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能码13的报文发送后,本功能才得发送
15    强置多线圈    强置一串连续逻辑线圈的通断
16    预置多寄存器    把具体的二进制值装入一串连续的保持寄存器
17    报告从机标识    可使主机判断编址从机的类型及该从机运行指示灯的状态
18    (884和Micro84)    可使主机模拟编程功能,修改PC的状态逻辑
19    重置通信链路    发生非可修改错误后,使从机复位于已知状态,可重置顺序字节
20    读取通用参数(584L)    显示拓展存储器文件中的数据信息
21    写入通用参数(584L)    把通用参数写入拓展存储文件,或修改之
22 ~ 64    保留以备用户功能所用    留作用户功能的拓展编码
73 ~ 191    非法功能    
120 ~ 121    保留    留作内部使用
128 ~ 255    保留    用于异常应答
备注:
常用的为1、2、3、4、15、16. 这6个功能即可实现对下位机数字量、模拟量的读写操作。

二、node-red与Modbus的TCP通信

1、首先node-red安装modbus插件

如下,这个是安装好了node-red-contrib-modbus的情况,没有安装的可以进行install

2、下载安装modbus slave

modbus slave调试工具是一款功能强大的modbus子设备模拟工具,可以帮助modbus通讯设备开发人员进行modbus通讯协议的模拟和测试,用于模拟、测试、调试modbus通讯设备。软件可以仿真32个从设备/地址域,每个接口都提供了对EXCEL报表的OLE自动化支持。同时软件还可以支持的MODBUS功能码:01: 读取线圈状态 02: 读取输入状态 03: 读取保持寄存器 04: 读取输入寄存器 05: 强置单线圈 06: 预置单寄存器 15: 强置多线圈 16: 预置多寄存器 22: 位操作寄存器 23: 读/写寄存器。

下面是使用tcp进行连接,前面4个寄存器人工写了值

下面是连接后的情况

3、在node-red里拖入modbus read与debug,通过这种方式读取数据,如下图:

双击 modbus read 设置如下:

从0地址开始读取4个寄存器,1s一次

下面是客户端连接服务端的配置如下:

下面是读取右边的debug控制台的效果图

2024/10/17 15:11:52节点: debug 1
polling : msg.payload : array[4]
[ 50, 100, 200, 345 ]
2024/10/17 15:11:53节点: debug 1
polling : msg.payload : array[4]
[ 50, 100, 200, 345 ]
2024/10/17 15:11:54节点: debug 1
polling : msg.payload : array[4]
[ 50, 100, 200, 345 ]
2024/10/17 15:11:55节点: debug 1
polling : msg.payload : array[4]
[ 50, 100, 200, 345 ]
2024/10/17 15:11:56节点: debug 1
polling : msg.payload : array[4]
[ 50, 100, 200, 345 ]
2024/10/17 15:11:57节点: debug 1
polling : msg.payload : array[4]
[ 50, 100, 200, 345 ]

4、在node-red里拖入inject和modbus write,通过这种方式写数据,如下图:

modbus write设置如下,写入到第5个地址:

modbus slave里的地址5的值原来是0变成12345了


http://www.kler.cn/news/359097.html

相关文章:

  • scrapy 爬虫学习之【中医方剂】爬虫
  • 本地装了个pytorch cuda
  • YOLO元年!目标检测最强模型YOLOV11发布,全网首发yolov11原理+实战+论文解读教程!通俗易懂,科研人连夜水一篇SCI论文!计算机视觉|CV
  • 完整发布/上传uniapp Ios应用到App Store流程
  • CAN上位机软件VBDSP的控件如何实现按钮一次发送多条报文(自动化测试)
  • uniapp-uniapp + vue3 + pinia 搭建uniapp模板
  • 【前端】Matter:过滤与高级碰撞检测
  • 解决IntelliJ IDEA启动失败的完整指南
  • 世界数字农业盛宴与技术探索,25年3月聚焦世界灌溉科技大会
  • rootless模式下测试istio Ambient功能
  • Windows下的快速精准的抠图算法(Python实现,内含代码下载链接)
  • git restore恢复删除文件
  • 协议 MQTT
  • Scala中抽象类重写
  • 使用JMeter录制元件来录制HTTPS下的脚本
  • 第三方软件检测机构有哪些服务?重庆软件检测机构分享
  • C# WinForm实现画笔签名及解决MemoryBmp格式问题
  • YOLOv11改进策略【Conv和Transformer】| ACmix 卷积和自注意力的结合,充分发挥两者优势
  • 【MATLAB源码-第278期】基于matlab的ACO-OFDM系统仿真,输出误码率曲线图、时域频域图和子载波分离时域图。
  • Python内置函数classmethod()详解