【ModBus进阶日记】①ModBus协议栈解析

关注+星标公众号,不错过精彩内容
在这里插入图片描述


文章目录

  • 前言
  • 一、ModBus简介
  • 二、ModBus协议概述
    • 2.1 ModBus RTU主机框架
    • 2.2 ModBus RTU从机框架
  • 三、ModBus帧描述
  • 四、ModBus RTU模式的报文断帧
  • 五、ModBus字节序
  • 六、ModBus事务处理流程
  • 七、ModBus异常响应
  • 八、ModBus功能码定义
  • 九、ModBus使用注意项
  • 总结


前言

本专栏包括Modbus协议的基础、如何使用Modbus协议进行设备间通信、如何读写寄存器、如何处理异常情况等。包含一些实际应用、案例和一些Modbus开源项目和各种程序代码、工具箱、模拟器和调试工具。

本章详细介绍了ModBus RTU协议栈、协议栈处理流程、异常处理、使用注意事项等实际开发过程中可能遇到的实际问题。


一、ModBus简介

Modbus是由 Modicon (现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。

ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。

为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA (Interface for Distributed Automation,分布式自动化接口) 组织,并成立了Modbus-IDA 组织,为Modbus今后的发展奠定了基础。

《基于Modbus协议的工在中国,Modbus已经成为国家标准,标准编号: GB/T19582-2008,标准名称:业自动化网络规范》,分 3 个部分:

  1. 《GB/T 19582.1-2008 第 1 部分: Modbus 应用协议》
  2. 《GB/T 19582.2-2008 第 2 部分: Modbus 协议在串行链路上的实现指南》
  3. 《GB/T 19582.3-2008 第 3 部分: Mdbus 协议在 TCP/IP 上的实现指南》

二、ModBus协议概述

2.1 ModBus RTU主机框架

在这里插入图片描述

2.2 ModBus RTU从机框架

从机的核心就是等待主机消息并应答回复。
在这里插入图片描述

按照7层OSI通信模型,ModBus标准包括应用层、数据链路层和物理层:
在这里插入图片描述
Modbus串行链路协议是一个主/从协议。该协议位于 OSI 模型的第二层。

一个主从类型的系统有一个向某个“子”节点发出显式命令并处理响应的节点(主节点)。典型的子节点在没有收到主节点的请求时并不主动发送数据,也不与其它子节点通信。

在物理层,Modbus串行链路系统可以使用不同的物理接口(RS485、RS232)。最常用的是TIA/EIA-485(RS485) 两线制接口。

Modbus的主节点以两种模式对子节点发出Modbus请求: 单播模式(子节点地址1 ~ 247) 和广播模式(地址0)。虽然Modbus寻址空间有256个不同地址,但是248 ~ 255是保留地址,不能使用。

三、ModBus帧描述

《Modbus 应用协议》定义了简单的协议数据单元(PDU - Protocol Data Unit):
在这里插入图片描述
发起Modbus事务处理的客户端构造Modbus PDU,然后添加附加的域以构造应用数据单元,即 ADU在RS232和RS485链路中,ADU最大为256 bytes。
在这里插入图片描述
其中:

  1. 地址域只有子节点地址。
  2. 功能码指明服务器要执行的动作。功能码后面可跟有表示含有请求和响应参数的数据域。
  3. 数据是与功能码相关的具体数据。
  4. 错误检验域是对报文内容执行"几余校验”的计算结果,根据不同的传输模式(RTU or ASCII)使用两种不同的计算方法。

四、ModBus RTU模式的报文断帧

由发送设备将Modbus报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收新顿,并且知道何时报文结束,不完整的报文必须能够被检测到而错误标志必须作为结果被设置。

在 RTU 模式,报文由时长至少为 3.5 个字符时间的空闲间隔区分。在后续的部分,这个时间区间被称作 t3.5。
在这里插入图片描述
整个报文顿必须以连续的字符流发送。如果两个字符之间的空闲间隔大于 1.5 个字符时间,则报文被认为不完整应该被接收节点丢弃。
在这里插入图片描述
RTU 接收驱动程序的实现,由于t1.5 和 t3.5 的定时,隐含着大量的对中断的管理。在高通信速率下,这导致 CPU 负担加重。因此,在通信速率等于或低于 19200 bps 时,这两个定时必须严格遵守。

对于波特率大于 19200 bps 的情形,应该使用 2 个定时的固定值:

  1. 建议的字符间超时时间(t1.5)为 750us
  2. 顿间的超时时间(t1.5) 为 1750ms。

五、ModBus字节序

ModBus的地址和数据项均采用大端字节序,即先发高字节再发低字节。

ModBus以一系列具有不同特征表格上的数据模型为基础。四个基本表格为:
在这里插入图片描述

六、ModBus事务处理流程

下图描述了在服务器侧ModBus事务处理的一般处理过程
在这里插入图片描述
一旦服务器处理请求,使用合适的ModBus服务器事务建立ModBus响应。根据处理结果,可以建立两种类型响应:

  1. 一个正确的ModBus响应: 响应功码 = 请求功能能码。
  2. 一个ModBus异常响应:
    ①用来为客户机提供处理过程中与被发现的差错相关的信息。
    ②响应功能码 = 请求功能码 + 0x80。
    ③提供一个异常码来指示差错原因。

七、ModBus异常响应

当客户机设备向服务器设备发送请求时,客户机希望一个正常响应,从主站询问中出现下列四种可能事件之一:

  1. 如果服务器设备接收到无通信错误的请求,并且可以正常地处理询问,那么服务器设备将返回一个正常响应。
  2. 如果由于通信错误,服务器没有接收到请求,那么不能返回响应,客户机程序将最终处理请求的超时状态。
  3. 如果服务器接收到请求,但是检测到一个通信错误 (奇偶校验、LRC、CRC、…) ,那么不能返回响应客户机程序将最终处理请求的超时状态。
  4. 如果服务器接收到无通信错误的请求,但不能处理这个请求(例如,如果请求读一个不存在的输出或寄存器),服务器将返回一个异常响应,通知用户错误的本质特性。

异常响应报文有两个与正常响应不同的域:

  1. 功能码域:在正常响应中,服务器利用响应功能码域来应答最初请求的功能码。所有功能码的最高有效位(MSB)都为 0(它们的值都低于十六进制 80)。在异常响应中,服务器设置功能码的MSB 为 1。这使得异常响应中的功能码值比正常响应中的功能码值高十六进制 80。通过设置功能码的 MSB,客户机的应用程序能够识别异常响应,并且能够检测异常码的数据域。
  2. 数据域:在正常响应中,服务器可以返回数据域中数据或统计表(请求中要求的任何报文)。在异常响应服务器返回数据域中的异常码。这就定义了产生异常的服务器状态。

ModBus异常码定义如下:
在这里插入图片描述

八、ModBus功能码定义

功能码分类:
ModBus有三类功能码: 公共功能码、用户自定义功能码和保留功能码:
在这里插入图片描述

  1. 公共功能码:
    ①是较好地被定义的功能码。
    ②保证是唯一的。
    ③ModBus组织可改变的。
    ④公开证明的。
    ⑤具有可用的一致性测试。
    ⑥MB IETF RFC 中证明的。
    ⑦包含已被定义的公共指配功能码和未来使用的未指配保留供功能码。
  2. 用户定义功能码:
    ①有两个用户定义功能码的定义范围,即十进制 65 至72 和100 至110。
    ②用户没有ModBus组织的任何批准就可以选择和实现一个功能码。
    ③不能保证被选功能码的使用是唯一的。
    ④如果用户要重新设置功能作为一个公共功能码,那么用户必须启动 RFC(保留功能码),以便将改变引入公共分类中,并且指配一个新的公共功能码。
  3. 保留功能码:
    ①一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。
    ②如果我们需要实现自定义的一些功能码,必须在 65-72 或 100-110 中进行选择。

ModBus的公共功能码定义如下:

在这里插入图片描述

九、ModBus使用注意项

  1. 对于Modbus,不推荐使用串口空闲中断,因为空闲中断是单字符超时如果串口硬件自带超时时间配置功能,可以使用。
  2. 485总线的收发切换问题,一定要正确做485状态的接收切换,如果大家是自制的485硬件自动收发,尤其要注意。:当然如果硬件自带硬件流控制也是可以的。
  3. 485硬件问题:485是差分信号,硬件上485A接485A,485B接485B。
  4. 上拉下拉电阻,终端电阻:比如没有接上拉和下拉电阻,使能DE发送后,如果没有立即发送,会有短暂的不确定态,不过时间短,不影响使用大家项目中使用,推荐接上。
    在这里插入图片描述

总结

本章详细介绍了ModBus RTU协议栈、协议栈处理流程、异常处理、使用注意事项等实际开发过程中可能遇到的实际问题。


关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现nacos的配置的热更新

我们在使用nacos进行修改配置后,需要微服务无需重启即可让配置生效,也就是使配置进行热更新我们可以采用下面的两种方式进行配置的热更新操作 方式一:在Value所注入的变量的类上添加注解RefreshScope RestController RequestMapping("/o…

Local Color Distributions Prior for ImageEnhancement

图1:给定同时具有过曝光(背景窗口)和欠曝光(前景人物)的输入图像(a),现有方法不能很好地处理这两个问题。虽然(b)在背景上表现更好,但前景仅略微变…

anolisos8.8安装显卡+CUDA工具+容器运行时支持(containerd/docker)+k8s部署GPU插件

anolisos8.8安装显卡及cuda工具 一、目录 1、测试环境 2、安装显卡驱动 3、安装cuda工具 4、配置容器运行时 5、K8S集群安装nvidia插件 二、测试环境 操作系统:Anolis OS 8.8 内核版本:5.10.134-13.an8.x86_64 显卡安装版本:525.147.05 c…

学习笔记——GDB调试器

感谢B站up主 xiaobing1016 的学习视频:基于VSCode和CMake实现C/C开发 | Linux篇_哔哩哔哩_bilibili

电脑加密软件哪个最好用(电脑加密软件排行榜2023)

你公司的电脑数据在裸奔? 你公司的核心文件完全开放? 你公司的机密图纸谁都能获取? …… 作为老板的你,该不会还不知道电脑加密软件能够解决上述这些问题吧! 我看过一个案例,新闻报道的略显夸张&#x…

企业资产管理技巧,这一点厉害了!

​随着市场竞争的不断加剧和金融环境的日益复杂,有效地管理和优化资产已经成为保持竞争优势和实现财务目标的不可或缺的一环。资产不仅仅是组织或个人的财富,更是潜在的增长动力和风险源。 传统的资产管理方法已经不再适应现代快速变化的经济环境。为了适…

【C语言程序设计】选择结构程序设计

目录 前言 一、程序阅读 二、程序改错 三、程序设计 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如…

时间序列预测 — CNN-LSTM实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 1.3 缺失值分析 2 构造训练数据 ​3 模型训练 3.1 CNN-LSTM网络 3.2 模型训练 4 模型预测 专栏链接:https://blog.csdn.net/qq_41921826/category_12495091.html 1 数据处理 1.1 导入库文件 import scip…

一些paper工具帮你搞定日常科研工作

如果你是在校生,科研er 你的日常避免各种各样的pepers;找papers,读papers,写papers。这三部曲贯穿这你整个科研工作,如何在有限的时间里,能够高效的完成科研,且保质保量,我们需要一些…

C# WPF上位机开发(内嵌虚拟机的软件开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 学习过halcon的同学都知道,它不仅有很多的图像算子可以使用,而且调试很方便。每一步骤的调试结果,都可以看到对…

MES系统设备日常点检:提升设备管理效率与维护质量

一、MES系统设备日常点检概述 MES系统设备日常点检是指通过MES系统对设备进行定期的外观、功能、性能等方面的检查,以评估设备的运行状态和潜在问题。这种检查方式有助于及时发现设备故障和隐患,确保设备的正常运行,提高生产效率。 二、MES系…

公益众筹源码系统:水滴筹模式+完整的安装包+部署教程

今天小编i来非大家来介绍一款公益众筹源码系统,带有完整的搭建教程。 一、系统开发 1.需求分析:在开发公益众筹源码系统之前,我们首先进行了深入的需求分析,明确了系统的目标、功能、性能等方面的要求。 2.技术选型:根…

什么是泊松图像混合

泊松图像混合(Poisson Image Editing)的原理基于泊松方程。该方法旨在保持图像中的梯度一致性,从而在图像编辑中实现平滑和无缝的混合。以下是泊松图像混合的基本原理和公式: 泊松方程 泊松方程是一个偏微分方程,通常…

【头歌系统Python实验】经典函数实例

目录 第1关:递归函数 - 汉诺塔的魅力 第2关:lambda 函数 - 匿名函数的使用 第3关:Map-Reduce - 映射与归约的思想 如果对你有帮助的话,不妨点赞收藏评论一下吧,爱你么么哒😘❤️❤️❤️ 第1关&#xff…

Leetcode刷题笔记题解(C++):BM11 链表相加(二)

思路&#xff1a;先对两个链表进行反转&#xff0c;反转求和注意进位运算&#xff0c;求和完成之后再进行反转得到结果 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <cstddef> class Soluti…

使用ffmpeg命令进行视频格式转换

1 ffmpeg介绍 FFmpeg 是一个非常强大和灵活的开源工具集&#xff0c;用于处理音频和视频文件。它提供了一系列的工具和库&#xff0c;可以用于录制、转换、流式传输和播放音频和视频。 FFmpeg 主要特点如下&#xff1a; 格式支持广泛&#xff1a;FFmpeg 支持几乎所有的音频和视…

AQS的应用

文章目录 1. 概述2. ReentrantLock 原理 什么是AQS 口述&#xff1a;全称是 AbstractQueuedSynchronizer&#xff0c;是一个框架&#xff0c;提供了这种 通用的同步器机制&#xff0c;它里面也是定义了很多的方法&#xff0c;像获取锁啊释放锁啊&#xff0c;其实释放啊获取啊是…

输出网络结构图,mmdetection

控制台输入&#xff1a;python tools/train.py /home/yuan3080/桌面/detection_paper_6/mmdetection-master1/mmdetection-master_yanhuo/work_dirs/lad_r50_paa_r101_fpn_coco_1x/lad_r50_a_r101_fpn_coco_1x.py 这个是输出方法里面的&#xff0c;不是原始方法。 如下所示&a…

Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版

1.确定自己的硬件信息&#xff0c;确定电脑有英伟达 (NVIDIA)显卡 在任务栏上右键打开任务管理器 2.下载安装 Anaconda &#xff08;建议安装迅雷下载&#xff0c;同时浏览器添加扩展 “迅雷Chrome支持”&#xff09; https://www.anaconda.com/ https://repo.anaconda.com/arc…

无需重启,修改Linux服务器时区

Linux修改服务器时区&#xff08;无需重启&#xff09; 1、复制命令&#xff1a;2、使用tzselect命令&#xff1a;3、使用date查看是否修改正确 1、复制命令&#xff1a; cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime2、使用tzselect命令&#xff1a; tzselect按照要…