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.rhkb.cn/news/453856.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FineReport 模板参数查询示例

通过模板参数实现,参数为空查询全部 参数无值时查询全部,则在查询前,需要先判断参数是否有值,有值则执行过滤;无值则不过滤。 1、新建数据集 ds1 SELECT * FROM S订单2、添加模板参数 3、单元格配置 $货主地区 &qu…

【Triton教程】向量相加

Triton 是一种用于并行编程的语言和编译器。它旨在提供一个基于 Python 的编程环境,以高效编写自定义 DNN 计算内核,并能够在现代 GPU 硬件上以最大吞吐量运行。 更多 Triton 中文文档可访问 →https://triton.hyper.ai/ 在本教程中,你将使…

Golang | Leetcode Golang题解之第485题最大连续1的个数

题目: 题解: func findMaxConsecutiveOnes(nums []int) (maxCnt int) {cnt : 0for _, v : range nums {if v 1 {cnt} else {maxCnt max(maxCnt, cnt)cnt 0}}maxCnt max(maxCnt, cnt)return }func max(a, b int) int {if a > b {return a}return …

Android TextView实现一串文字特定几个字改变颜色

遇到一个需求,让Android端实现给定一个字符串指定下标的几个字颜色与其他字颜色不一致。 主要是用ForegroundColorSpan这个API来传入颜色值,用SpannableString来设置指定索引下标的字的颜色值。 这里通过给定一个输入文字描述框,要求输入指定…

线上问题排查-常见的线上问题

一、线上问题排查思路 明确问题:首先,需要明确线上出现了什么问题。这包括了解问题的具体表现、发生的时间、影响的范围等。通过收集用户反馈、查看监控系统告警等方式,收集问题相关信息。收集信息:收集与问题相关的各种信息&…

BIO CHINA2025生物发酵展高歌猛进,规模再升级, 亮点及活动发布,精彩就在此刻!

BIO CHINA2025生物发酵展高歌猛进,规模再升级, 亮点及活动发布,精彩就在此刻! 目前国家高度重视生物经济与生物技术产业的发展,出台了一系列政策措施支持行业发展。生物发酵行业作为现代生物经济的重要支柱&#xff0…

【原创】java+ssm+mysql校园在线答疑管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

Scrapy | 爬取笑话网来认识继承自Spider的crawlspider爬虫类

crawlspider 1. 创建crawlspider爬虫2. 实战-爬取笑话网笑话 本篇内容旨在拓展视野和知识,了解crawlspider的使用即可,主要熟悉掌握spider类的使用 CrawlSpider 提供了一种更高级的方法来定义爬取规则,而无需编写大量的重复代码。它基于规则…

Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。

2024-10-19,由伊利诺伊大学厄巴纳-香槟分校和香港城市大学的研究团队提出了一种创新方法,通过将常规视频转换成伪标记的多摄像机视角推荐数据集,有效解决了在未知领域中模型泛化能力差的问题。数据集的创建,为电影、电视和其他媒体…

【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的

目录 1、问题 2、解决方法 1、问题 写论文的时候,有时会出现乱码的情况, 如下图,这种情况, 可是 在打印预览的时候,就显示的正常 如下图, 2、解决方法 既然是文档正文显示错误,显示乱码&…

typeAliases以及mappers

typeAliases 我们来观察一下CarMapper.xml中的配置信息&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd&qu…

Spark数据源的读取与写入、自定义函数

1. 数据源的读取与写入 1.1 数据读取 读文件 read.jsonread.csv csv文件由两个部分组成&#xff1a;头部数据&#xff08;也就是字段数据&#xff09;、行数据。 read.orc 读数据库 read.jdbc(jdbc连接地址,table‘表名’,properties{‘user’用户名,‘password’密码,‘driv…

万能工具箱小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 万能工具箱小程序源码系统是一款集多种实用工具于一体的综合性平台。它为用户提供了便捷的操作界面和丰富的功能选项&#xff0c;满足了人们在日常生活和工作中的各种需求。 该系统采用先进的技术架构&#xff0c;具备高度的稳定性和可靠性。无论是在处理大量数据还…

python excel如何转成json,并且如何解决excel转成json时中文汉字乱码的问题

1.解决excel转成json时中文汉字乱码的问题 真的好久没有打开这个博客也好久没有想起来记录一下问题了&#xff0c;今天将表格测试集转成json格式的时候遇到了汉字都变成了乱码的问题&#xff0c;虽然这不是个大问题&#xff0c;但是编码问题挺烦人的&#xff0c;乱码之后像下图…

Flink窗口分配器WindowAssigner

前言 Flink 数据流经过 keyBy 分组后&#xff0c;下一步就是 WindowAssigner。 WindowAssigner 定义了 stream 中的元素如何被分发到各个窗口&#xff0c;元素可以被分发到一个或多个窗口中&#xff0c;Flink 内置了常用的窗口分配器&#xff0c;包括&#xff1a;tumbling wi…

【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律

文章目录 C 栈与队列详解&#xff1a;基础与进阶应用前言第一章&#xff1a;栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章&#xff1a;队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

【linux】线程(二)

10. pthread_t 类型 注意&#xff1a; 每一个线程的库级别的tcb的起始地址&#xff0c;就是线程的 tid每一个线程都有自己独立的栈结构线程和线程之间&#xff0c;也是可以被其他线程看到并访问的&#xff08;比如全局函数&#xff09; 代码 如果想要进程拥有私人的全局变量(即…

拥抱“新市民” ,数字银行的“谋与变”

【潮汐商业评论/原创】 数字银行&#xff0c;既是金融行业的创新物种&#xff0c;其在发展的过程中也彰显着普惠金融的基因。 “我劝你买点银行理财吧&#xff0c;选一家靠谱的银行就是最靠谱的理财方式了&#xff0c;踏踏实实地把钱存银行里面不会有问题的”&#xff0c;周日…

SpringBoot篇(二、制作SpringBoot程序)

目录 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 3. 阿里云 4. 手动 五、在IDEA中隐藏指定文件/文件夹 六、复制工程-快速操作 七、更改引导类别名 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 官网制作&#xff1a;Spring Boot 3. 阿里云 阿里云版制…

react18中的计算属性及useMemo的性能优化技巧

react18里面的计算属性和使用useMemo来提升组件性能的方法 计算属性 实现效果 代码实现 函数式组件极简洁的实现&#xff0c;就这样 import { useState } from "react"; function FullName() {const [firstName, setFirstName] useState("");const [la…