modbus学习笔记

ModBus协议的两大变体:ModBus RTU 与 ModBus TCP
Modbus=报文头(MBAP)+帧结构(PDU)7个字节  功能码:1个字节 注意:据说RTU和TCP的差距就是效验码
Modbus协议最基本的通信单位是帧,整个Modbus帧又被称之为应用数据单元(ADU),ADU中又包含了协议数据单元(PDU)用于传真正需要传输的数据
modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。
        线圈:相当于开关,在MODBUS中可读可写,数据只有00和01。
        离散量:输入位,开关量,在MODBUS中只读。
        输入寄存器:只能从模拟量输入端改变的寄存器,在MODBUS中只读。
        保持寄存器:用于输出模拟量信号的寄存器,在MODBUS中可读可写。

根据对象的不同,modbus的功能码有:  
        0x01:读线圈
        0x05:写单个线圈
        0x0F:写多个线圈
        0x02:读离散量输入
             0x04:读输入寄存器
             0x03:读保持寄存器
            0x06:写单个保持寄存器
            0x10:写多个保持寄存器

    
        

传感器使用MODBUSRTU协议和RS485主机通信

1.功能码0x03–读保持寄存器
2.功能码0x04–读输入寄存器
3.功能码0x06–设置单个保持寄存器
4.功能码0x10–设置单个或多个保持寄存器
5.功能码0x80|x–出错提示,X为0x3,0x4,0x6,0x10分别代表返回
功能码0x03,0x04,0x06,0x10的错误信息        

空气温湿度传感器 
 采集器 
传感器 
 
 RS485 硬件层面的协议 电气标准  是物理层串行接口 定义了电气/信号传输方式和连接方式  RS485是一种串口通信协议。
 modbus软件层面的协议  应用层同学协议 modbus协议包括RTU(最常用rtu), ascii都支持RS485总线通讯协议   
 RS485是物理层串行接口,硬件协议,它定义了电气特性、信号传输方式和连接方式。
Modbus是应用层通信协议,软件协议,它定义了一种常用的通信格式和规则,用于主设备和从设备之间进行数据交换。
Modbus支持多种通信模式,包括RTU(远程终端单元)、ASCII和TCP。其中,RTU和ASCII模式通常基于RS485物理接口,而TCP模式则允许使用以太网进行通信。 
Modbus分为广播与单播两种请求模式。      在广播模式下,所有从站必须执行主站命令,而无需应答返回  在单播模式中,一个Modbus事务处理包含两个报文:一个来自主节点(主站)的请求,一个来自子节点(从站)的应答。

Modbus RTU 一种串行通讯方式,适用于232,485,422接口,数据以紧促二进制格式传输
Modbus ASCII 模式,串行通讯模式,数据采用ASCII编码,每8位数据转换成2个ascii字符进行传输占用带宽大
Modbus TCP 是将Modbus消息封装在TCP报文中,通过以太网传输
Modbus报文帧结构  一个报文就是一帧数据,一个数据帧就一个报文:指的是一串完整的指令数据,本质就是一串数据。

串口一般来说就是UART,它实际只定义了数据链路层的规范,也就是起始位、数据位、停止位。但是在不同的物理层又分为:TTL串口、RS232串口、RS485串口等。

UART是一种双向、异步的串行通信协议,而RS485是一种全双工、同步的串行通信协议。
UART和RS485的数据传输速率也有所不同。UART通信协议支持多种波特率,但是最常用的是115200bps,也就是每秒传输115200个字节的数据。而RS485通信协议支持多种波特率,但是最常用的是9600bps,也就是每秒传输9600个字节的数据
 
 
 而modub tcp 则使用tcp以太网(rj45接口)
 RJ45接口是一种常用于局域网的物理层接口,它使用8芯连接器,支持最高千兆位速率的数据传输。RJ45接口广泛应用于家庭网络、企业网络等场合,是现代网络连接不可或缺的一部分。
 RJ45接口和普通网络接口最大的区别在于其传输速度和传输距离。RJ45接口支持更高速率的数据传输和更远的传输距离,而普通的网络接口则不能提供如此高的性能。
 
 
 RS232 打印机,鼠标,有9根线 RX 接收线,TX 发送线 GND 地线  最大距离不超过15米,抗干扰能力差 ,速率低只有20kb/秒,只支持点对点通讯,所以诞生了rs485
 RS485 点对多通讯  最多32个设备 232只能处理一个


MQTT
设备联网,老设备接入mqtt框架,上云进行远程监控,数据分析,为了适应现代化物联网体系架构,实现更广泛的设备互联,云端数据交互 满足设备管理,大数据分析等

Modbus Poll 是一个Modbus主机仿真器,它允许用户测试和调试Modbus从设备。这个软件支持多种协议,包括Modbus RTU、ASCII和TCP/IP。
它支持多设备监控,允许用户同时监视多个从设备或数据域。在Modbus RTU/ASCII模式下,Modbus Poll作为主站设备,发送命令给从站设备(如Modbus Slave),
并接收从站设备的数据响应。在Modbus TCP/IP模式下,Modbus Poll作为客户端,连接到服务器(如Modbus Slave),并发送命令和接收数据响应。

   Slave ID:可以配置从机地址
        Function:可以配置寄存器/线圈类型
        Address:可以配置读/写的寄存器/线圈起始地址
        Quantity:可以配置读/写的寄存器/线圈个数
RS485 MODBUS RTU串口通讯  

真实案例 请求:  01 03 00 00 00 04 44 09  
  01 代表我要问寻的地址码是01
  03功能码意思读取寄存器中的值
  00 00 从00 00H这个寄存器起始地址 开始读
  00 04 数据长度读取4个寄存器  一个寄存器(Register)通常是16位(2个字节)的数据单元。每个寄存器可以存储一个整数值,范围从0到65535。
  44 09 CRC校验码
应答:   01 03 08 A3 D7 41 B6 66 66 41 CC 70 EE 
    01 代表应答的设备的地址码是01
    03功能码意思读取寄存器中的值
    08 字节数,代表有8个字节的数据客户以读取
    A3 D7 41 B6:温度,float型 CD AB
    66 66 41 CC:湿度 ,float型 CD AB
    
     13 04 00 00 00 04 F2 BB
    回应
    13 04 08 43 72 E8 EC 41 99 46 AF 5D A7
    43 72 E8 EC:格式ABCD   电导率: 242.90uS/cm
    41 99 46 AF:格式ABCD  温度:19.1°C
    设置
    15 06 00 03 00 13 3B 13
    回应
    15 06 00 03 00 13 3B 13
    
    
TCP实例
假设我们有一个Modbus TCP设备,其IP地址为192.168.1.100,端口号为502。我们可以使用一个Modbus TCP客户端来与该设备进行通信。

例如,我们想要读取该设备上寄存器地址为0的16位整数值,我们可以发送以下Modbus TCP请求:

请求报文:
00 01 00 00 00 06 FF 03 00 00 00 04

解释:
00 01 -> 事务标识符,随意指定
00 00 -> 协议标识符,Modbus TCP协议标识符为0x0000
00 06 -> 报文长度,表示后面的报文长度为6个字节
FF -> 单元标识符,广播地址,也就是从站地址,根据服务器决定
03 -> 功能码,读取保持寄存器的功能码为0x03 类似post请求,可以存储修改,输入寄存器,0对应30001    0x04功能码为输入寄存器,类似get请求,只读为主  保持寄存器,0对应40001
00 00 -> 起始地址,要读取的寄存器地址为0     起始地址为0x13=19,对应地址为00020  (协议中的起始地址指的是索引,后面的地址指的是具体地址,对于任意一个存储区,索引都是从0开始的,但是对应的具体地址,
            与存储区是相关的,输入寄存器,0对应30001;保持寄存器,0对应40001。)
00 04 -> 寄存器数量,要读取的寄存器数量为4

设备收到请求后,将返回以下响应:

响应报文:
00 01 00 00 00 03 FF 03 02
1506000300133B13

解释:
00 01 -> 事务标识符,与请求报文相同
00 00 -> 协议标识符,与请求报文相同
00 03 -> 报文长度,表示后面的报文长度为3个字节
FF -> 单元标识符,广播地址
03 -> 功能码,读取保持寄存器的功能码为0x03
02 -> 寄存器值,读取到的16位整数值为2

这就是一个简单的Modbus TCP实例,它演示了如何使用Modbus TCP协议读取一个设备的寄存器值。

国内设备基本上是A B C D顺序,国外设备基本上是B A D C顺序。低位优先字节交换。使用两个寄存器。
使用IEEE 754规范,如显示不正常可进行 字节顺序 交换位置即可。如下:

Float Big-endian     字节顺序:A B C D
Float Little-endian   字节顺序:D C B A
Float Big-endian byte swap      字节顺序:B A D C
Float Little-endian byte swap    字节顺序:C D A B

  
主机通过Modbus协议与从设备进行双向通信,实现数据的读取和控制。但是只有主机可以进行发送请求,从设备智能通过接收主机发来的数据进行响应,如果主机没有发送数据,总线上就没有数据进行通信。
广播模式下,主设备还可以使用地址 0 访问所有从设备,在这种模式下,从设备不对广播消息作出应答。
网络通信:Modbus TCP是基于TCP/IP协议的Modbus变种,使用以太网作为物理层传输介质,通过网络进行通信。
编码格式:Modbus TCP使用二进制编码表示数据,以字节为单位进行传输,速率较快,占用较少的带宽。
帧结构:Modbus TCP使用标准的TCP/IP帧结构,数据被封装在TCP报文中,可以通过以太网路由器进行转发。可靠性:由于使用TCP/IP协议,Modbus TCP具有良好的可靠性和容错性。
它可以利用TCP的确认和重传机制来确保数据的可靠传输。应用场景:Modbus TCP通常用于工业自动化和远程监控系统,可以实现在局域网或广域网上的设备之间进行高速、可靠的通信。


signed:有符号
unsigned:无符号
hex:十六进制
binary:二进制

big-endian:大端,将高序字节存储在起始地址(高位编址)
little-endian:小端,将低序字节存储在起始地址(低位编址
小端Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。(低低高高,低地址低字节,高地址高字节)
大端Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。(低高高低,低地址高字节,高地址低字节)


(一个字节(Byte)为8个Bit(位),一个英文字母通常占用一个字节,一个汉字通常占用两个字节)  一个字节,两个16进制码
为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算。

1. 采集板就一个吗?那些传感器请求回来的数据都是一个IP吗?
2. 报文


    
07 03 00 00 00 04 44 6F

回应
07 03 08 2D 07 3F 3F 42 00 43 A5 CA 27

2D 07 3F 3F:风速 0.7    格式 CDAB
42 00 43 A5:风向330.51  格式CDAB

02 03 00 00 00 02 c4 38
02 03 00 00 00 01 8439

02 03 04 00 00 01 99 08 c9      


09 03 00 00 00 08 45 44      
回应
09 03 10 CC CD 3D CC CC CD 3E 4C 99 9A 3E 99 00 00 3F 00 59 02
CC CD 3D CC  格式 CDAB 分钟雨量(0.1mm) 
CC CD 3E 4C   格式 CDAB 小时雨量(0.2mm)
99 9A 3E 99    格式 CDAB 24小时雨量(0.3mm)
00 00 3F 00    格式 CDAB 累计雨量(0.5mm)

网站:http://114.117.199.127:8086/monitorCenter 
admin:admin123
114.117.199.127 : 18086
流程:1.发设备序列号注册如:LC20841034R00001  2. 发送指令 


12-冠层温度传感器-RS485 
0C 03 00 00 00 02 C5 16
回应:
0C 03 04 8F 5C 41 D4 FC 3A
 5C 41 D4 FC  格式 CDAB    26.56°c
 
 
 13-冠层高度传感器-RS485

 0D 03 00 00 00 02 C4 C7
回应:
0D 03 04 8F 5C 41 D4 EC FA
 5C 41 D4 FC  格式 CDAB    26.56cm
 
 
18-水位传感器-RS485                                       有问题           G20873434543264626266
 液位命令:12 03 00 04 00 02 B7 69
返回: 12 03 04 00 7B 10 49 65 55 
00 7B:整数位 123
10 49:小数位 4169/65535=0.0636
结果为:123.0636mm


19-水体电导率传感器-RS485         http://114.117.199.127                      没有问题                       G20873434543264626266
13 04 00 00 00 04 F2 BB
回应
13 04 08 43 72 E8 EC 41 99 46 AF 5D A7       LC20841034R000010101
43 72 E8 EC:格式ABCD   电导率: 242.90uS/cm
41 99 46 AF:格式ABCD  温度:19.1°C
设置
15 06 00 03 00 13 3B 13
回应
15 06 00 03 00 13 3B 13

20-水体PH传感器-RS485            G20873434543264626266

14 04 00 08 00 06 F3 0F
回应
14 04 0C 41 C1 40 34 40 C3 1E 3C 42 58 BB E8 63 3C
41 C1 40 34:格式 ABCD    温度  24.15度
40 C3 1E 3C:格式 ABCD    PH   6.09
42 58 BB E8:格式 ABCD   电极电压  54.18mV


21-水体氧化还原电位传感器-RS485

15 04 00 0A 00 02 52 DD
回应
15 04 04 43 78 5D 80 03 28
43 78 5D 80:格式ABCD  氧化还原电位 248.36mV


22-土壤PH传感器-RS485
16 04 00 08 00 06 F2 ED
回应
16 04 0C 41 C1 40 34 40 C3 1E 3C 42 58 BB E8 E1 3D
41 C1 40 34:格式 ABCD    温度  24.15度
40 C3 1E 3C:格式 ABCD    PH   6.09
42 58 BB E8:格式 ABCD   电极电压  54.18mV

23-土壤氧化还原电位传感器-RS485                 G20873434543264626266
17 04 00 0A 00 02 53 3F
回应
17 04 04 43 78 5D 80 20 E81.1.15.数据中心z
43 78 5D 80:格式ABCD  氧化还原电位 248.36mV


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63935.shtml

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

相关文章

Flutter 桌面端串口配置

前言 我使用flutter_libserialport包在macOS中实现串口通信的功能,可以实现数据收发,但是收到的内容是乱码。这种情况一般都是由于波特率和硬件设备不一致导致的。 配置串口配置 1.打开串口读写 import package:flutter_libserialport/flutter_libser…

JavaScript逆向时,常用的11个hook

提示:记录工作中遇到的需求及解决办法 文章目录 前言01、dom操作02、Cookie操作03、事件监听操作04、AJAX拦截操作05、函数替换操作06、Header操作07、URL操作08、JSON.stringify操作09、JSON.parse操作10、eval操作11、Function操作前言 在逆向分析JavaScript代码时,开发者…

什么是EDI 896?

EDI 896 报文即产品尺寸维护报告(Product Dimension Maintenance),是一种常用于零售和供应链管理领域的EDI(电子数据交换)事务集。它的主要功能是用来传递或更新有关产品尺寸、属性和分类等信息。此消息通常在以下场景…

PPO系列2 - GAE优势函数

策略梯度: 痛点: 1. t时刻的动作,其只会影响t时刻之后得到的Reward,和之前的无关。 2. t时刻的动作,对接下来邻近的几个Reward关系较大,跟远的关系小。 改进: 1. 只累加t时刻之后的Reward。 2. …

subList与原始List相互影响

在 Java 中,List#subList(int fromIndex, int toIndex) 方法返回的是原始列表的一个视图(view),而不是一个独立的副本。这意味着对 subList 的任何修改都会反映到原始列表中,反之亦然。这可能会导致意外的行为&#xf…

pytest入门三:setup、teardown

https://zhuanlan.zhihu.com/p/623447031 function对应类外的函数,每个函数调用一次 import pytest def setup_module():print(开始 module)def teardown_module():print(结束 module)def setup_function():print(开始 function)def teardown_function():print(结…

React+Antd修改Table组件滚动条样式

版本 Antd 5.x.x React 18.x.x Tsx <TabledataSource{SocrePaMing.length > 0 ? SocrePaMing : []}columns{tableScoreColumns}rowKey"attribute"pagination{false}className"custom-table"scroll{{ y: 400 }} /> Css .ant-table-body …

一、使用 mdadm 工具在 Ubuntu 上创建 RAID 1(镜像)

在 Ubuntu 上创建 RAID 1&#xff08;镜像&#xff09;可以使用 mdadm 工具。以下是详细的步骤&#xff0c;包括安装必要的工具、创建 RAID 阵列、格式化并挂载 RAID 设备。 步骤一&#xff1a;安装 mdadm 首先确保你已经安装了 mdadm 包&#xff0c;这是管理软件 RAID 所需的…

webstorm开发uniapp(从安装到项目运行)

1、下载uniapp插件 下载连接&#xff1a;Uniapp Tool - IntelliJ IDEs Plugin | Marketplace &#xff08;结合自己的webstorm版本下载&#xff0c;不然解析不了&#xff09; 将下载到的zip文件防在webstorm安装路径下&#xff0c;本文的地址为&#xff1a; 2、安装uniapp插…

Tomcat的下载和使用,配置控制台输出中文日志

目录 1. 简介2. 下载3. 使用3.1 文件夹展示3.1.1 控制台输出乱码 3.2 访问localhost:80803.3 访问静态资源 4. 总结 1. 简介 Tomcat&#xff0c;全称为Apache Tomcat&#xff0c;是一个开源的Web应用服务器和Servlet容器&#xff0c;由Apache软件基金会的Jakarta项目开发。它实…

低功耗视频监控丨4G无线太阳能监控系统在林业场景中如何发挥作用?

在林业领域&#xff0c;4G无线太阳能监控系统的引入标志着向绿色、智能管理迈出的重要一步。视频监控太阳能供电通过集成太阳能供电、4G无线通信、视频监控和物联网技术&#xff0c;为林业监控提供了一个绿色、智能、高效的解决方案。它不仅能够实现对森林资源的实时监控&#…

硬链接方式重建mysql大表

硬链接方式重建mysql大表 操作步骤 选择数据库 select datadir; 进入数据文件目录 cd /data/mysql/mydata/testdb 创建硬连接 ln test_trans_msg_xx.ibd test_service_trans_msg_xx.ibd.bak ll test_trans_msg_xx* 进库删除表 DROP TABLE test_trans_msg_xx; 重建表 CREATE T…

dolphinscheduler服务RPC框架源码解析(二)RPC核心注解@RpcService和@RpcMethod设计实现

1.工程目录 从3.2.1版本之后这个dolphinscheduler中的RPC框架工程就从原来的dolphinscheduler-remote工程重构到了dolphinscheduler-extract工程。 dolphinscheduler 父项目 dolphinscheduler-extract RPC服务项目 dolphinscheduler-extract-alert 监控告警服务RPC接口定义、…

解析 .proto 文件

我这里仅仅是介绍了proto这个库解析.proto文件后的参数 我也有个小demo对解析的数据进行使用&#xff0c;具体代码可以看这know-bay 下面解析不是很全面&#xff0c;但是对于现在我的来说是够用的&#xff0c;关于更加详细和全的&#xff0c;看以后是否有机会补充了 假设 .prot…

grpc的负载均衡

grpc的负载均衡分为client-side load balance和server-side load balance。 所谓的“客户端负载均衡”是指主调方调用被调方的时候&#xff0c;在grpc.DialContext里需要指定grpc.WithDefaultServiceConfig&#xff0c;这个DefaultServiceConfig默认是用pick-first策略。也支持…

太速科技-622-基于ADRV9002 +ZYNQ7020 的软件无线电 SDR(升级AD9361)

基于ADRV9002 ZYNQ7020 的软件无线电 SDR&#xff08;升级AD9361&#xff09; 一、板卡概述 板卡由ADI ADRV9002Xilinx XC7Z020-CLG484芯片设计的整板&#xff0c;包含双路射频输入输出通道&#xff0c;支持千兆网络&#xff0c;RS232&#xff0c;触摸屏等接口&#xff…

如何计算kv cache的缓存大小

符号定义 首先&#xff0c;定义一些符号&#xff1a; ( B )&#xff1a;批大小&#xff08;Batch Size&#xff09; ( L )&#xff1a;序列长度&#xff08;Sequence Length&#xff09; ( N )&#xff1a;Transformer 层数&#xff08;Number of Transformer Layers&#xf…

SpringBoot 手动实现动态切换数据源 DynamicSource (上)

大家好&#xff0c;我是此林。 在实际开发中&#xff0c;经常可能遇到在一个SpringBoot Web应用中需要访问多个数据源的情况。 下面来介绍一下多数据源的使用场景、底层原理和手动实现。 一、 多数据源经典使用场景 场景一&#xff1a;业务复杂&#xff0c;数据量过大 1. 业务…

SQLServer定时备份到其它服务器上

环境 Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) SQL Server Management Studio 15.0.18384.0 SQL Server 管理对象 (SMO) 16.100.46367.54 Microsoft .NET Framework 4.0.30319.42000 本地操作系统&#xff08;SQLServer环境&#xff09; Windows 11 远程操作系统…

PaddleOCR模型ch_PP-OCRv3文本检测模型研究(二)颈部网络

上节研究了PaddleOCR文本检测v3模型的骨干网&#xff0c;本文接着研究其颈部网络。 文章目录 研究起点残注层颈部网络代码实验小结 研究起点 摘取开源yml配置文件&#xff0c;摘取网络架构Architecture中颈部网络的配置如下 Neck:name: RSEFPNout_channels: 96shortcut: True可…