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

news2024/10/21 10:38:09

一、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.coloradmin.cn/o/2219970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis高阶篇之Redis单线程与多线程

文章目录 0 前言1. 为什么Redis是单线程?1.1 Redis单线程1.2 为什么Redis3时代单线程快的原因1.3 使用单线程原因 2.为什么逐渐加入多线程呢?2.1 如何解决 3.redis6/7的多线程特性和IO多路复用入门3.1主线程和IO线程怎么协作完成请求处理的3.2 Unix网络编…

政府采购合同公告明细数据(1996-2024年)

透明度成为了公众对政府活动的基本要求之一。特别是在政府采购领域,透明度不仅关系到公共资源的合理分配,更是维护市场公平竞争的重要保障。政府采购合同公告制度正是为了满足这一需求而设立的。 1996-2024年政府采购合同公告明细数据(dta文…

Perl打印9x9乘法口诀

本章教程主要介绍如何用Perl打印9x9乘法口诀。 一、程序代码 1、写法① use strict; # 启用严格模式,帮助捕捉变量声明等错误 use warnings; # 启用警告,帮助发现潜在问题# 遍历 1 到 9 的数字 for my $i (1..9) {# 对于每个 $i,遍历 1…

Javascript 脚本查找B站限时免费番剧

目录 前言 脚本编写 脚本 前言 B站的一些番剧时不时会“限时免费”,白嫖党最爱,主打一个又占到便宜的快乐。但是在番剧索引里却没有搜索选项可以直接检索“限时免费”的番剧,只能自己一页一页的翻去查看,非常麻烦。 自己找限…

Git极速入门

git初始化 git -v git config --global user.name "" git config --global user.email "" git config --global credential.helper store git config --global --list省略(Local) 本地配置,只对本地仓库有效–global 全局配置,所有…

spring boot yml文件中引用*.properties文件中的属性

1、首先在*.properties文件中加入一个属性,如: 2、然后再application.yml文件中通过${jdbc.driver}来引用,如: 3、然后再创建一个资源配置类,通过PropertySource来引入这个*.properties文件,如&#xff1…

JDK中socket源码解析

目录 1、Java.net包 1. Socket通信相关类 2. URL和URI处理类 3. 网络地址和主机名解析类 4. 代理和认证相关类 5. 网络缓存和Cookie管理类 6. 其他网络相关工具类 2、什么是socket? 3、JDK中socket核心Api 4、核心源码 1、核心方法 2、本地方法 3、lin…

基于stm32的esp8266的WIFI控制风扇实验

实验案例WIFI控制风扇 项目需求 电脑通过esp8266模块远程遥控风扇。 项目框图 ​ 风扇模块封装 #include "sys.h" #include "fan.h"void fan_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟…

4K Mini-LED显示器平民价,一千多的联合创新27M3U到底有多香

哈喽小伙伴们好,我是Stark-C~ 要说前几年买显示器还是普通IPS的天下,那个时候虽说也有MiniLED或者OLED显示器,但是价格那也是真贵啊,毕竟那个时候MiniLED和OLED还没普及,只有一些高档电视或者显示器才会用到此技术。不…

OpenCV高级图形用户界面(18)手动设置轨迹条(Trackbar)的位置函数setTrackbarPos()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数设置指定窗口中指定轨迹条的位置。 注意 [仅 Qt 后端] 如果轨迹条附加到控制面板,则 winname 可以为空。 函数原型 void cv…

三周精通FastAPI:4 使用请求从客户端(例如浏览器)向 API 发送数据

FastAPI官网手册:https://fastapi.tiangolo.com/zh/tutorial/query-params/ 上节内容:三周精通FastAPI:3 查询参数 请求 FastAPI 使用请求从客户端(例如浏览器)向 API 发送数据。 请求是客户端发送给 API 的数据。响…

国家信息安全水平考试(NISP一级)最新题库-第十六章

目录 另外免费为大家准备了刷题小程序和docx文档,有需要的可以私信获取 1 防火墙是一种较早使用、实用性很强的网络安全防御技术,以下关于防火墙说法错误的是() A.防火墙阻挡对网络的非法访问和不安全数据的传递;B.防…

Leecode刷题之路第27天之移除元素

题目出处 27-移除元素-题目描述 题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。假设 nums 中不等于 val 的元素数量为 k,要通过此题&#x…

C++ | Leetcode C++题解之第491题非递减子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> temp; vector<vector<int>> ans;void dfs(int cur, int last, vector<int>& nums) {if (cur nums.size()) {if (temp.size() > 2) {ans.push_back(temp);}return;}if…

【题解】—— LeetCode一周小结42

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结41 14.鸡蛋掉落 题目链接&#xff1a;887. 鸡蛋掉落 给你 k 枚…

c++迷宫游戏

1、问题描述 程序开始运行时显示一个迷宫地图&#xff0c;迷宫中央有一只老鼠&#xff0c;迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向健操纵老鼠在规定的时间内走到粮仓处。 基本要求: 老鼠形象可以辨认,可用键盘操纵老鼠上下左右移动&#xff1b;迷宫的墙足够结…

博弈论学习笔记【施工中】

SG函数 首先定义就不用我讲了吧&#xff0c;还不会的自己看看 传送门 再进一步理解一下吧&#xff1a; 黑色数字是节点编号&#xff0c;红色是 S G SG SG 函数值 看下它的过程&#xff1a; 首先 5 5 5 和 6 6 6 没有后继节点&#xff0c;为必败态&#xff0c;先赋值为 …

OpenCV和HALCON

OpenCV和HALCON是两种广泛用于图像处理和计算机视觉的开发库&#xff0c;它们各有优缺点&#xff0c;适合不同的应用场景。以下是两者的比较&#xff1a; 1. 开发背景与定位 OpenCV (Open Source Computer Vision Library)&#xff1a; 开源库&#xff0c;最初由Intel开发&…

【图解版】力扣第146题:LRU缓存

力扣第146题&#xff1a;LRU缓存 一、LRU算法1. 基本概念2. LRU 和 LFU 的区别&#xff1a;3. 为什么 LRU 不需要记录使用频率&#xff1f; 二、Golang代码实现三、代码图解1. LRUCache、DLinkedNode两个结构体2. 初始化结构体对象3. addToHead函数4. removeNode函数5. moveToH…

基于单片机的多功能鱼缸控制系统设计

本设计以STC12C5A60S2单片机为核心的多功能鱼缸控制系统&#xff0c;该系统可分别利用温度传感器、水位传感器和浑浊度传感器来检测鱼缸内部的水温、液体高度和浑浊程度&#xff0c;并在显示屏上进行显示。若检测结果超出阈值范围&#xff0c;则继电器工作从而控制内部环境。通…