返回顶部
首页 > 资讯 > 后端开发 > Python >带你轻松了解Modbus协议
  • 309
分享到

带你轻松了解Modbus协议

2024-04-02 19:04:59 309人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1、Modbus是什么2、Modbus协议解析2.1、Modbus功能2.2、Modbus数据模型3、Modbus实现3.1、串行Modbus实现3.2、基于 IP 的 Modb

1、Modbus是什么

基本上,Modbus 是一种用于设备之间通信的应用层协议主要用于交换自动化领域的典型数据。

在这个级别上,Modbus 是一种无状态的客户端-服务器协议(例如,很像 Http),基于事务,它由请求(由客户端发出)和响应(由服务器发出)组成。在通常应用该协议的领域中,存在一个概念,即使用共享信号电缆的网络上控制较低级别通信行为的可能模式之一:主从。为了防止混淆,以下有向关系根据客户端-服务器范式描述了主从:

Master

主站 对应 ----> 客户端

Slave

从站 对应----->服务端

2、Modbus协议解析

无状态通信基于一个简单的包,称为协议数据单元 (PDU)。协议规范定义了三种类型的 PDU:

请求 PDU,包括:

  1. 指定功能的代码(功能代码,1 字节)
  2. 和功能特定数据(功能数据,可变字节数)

响应 PDU,包括:

  1. 请求对应的功能码(Function Code,1字节)
  2. 和响应特定数据(响应数据,可变字节数)

异常响应 PDU,包括:

  1. 请求对应的功能码+0x80(128),(错误码,1字节)
  2. 以及指定异常的代码(异常代码,1 字节)

2.1、Modbus功能

每个功能都分配了一个特定的功能代码。它们的范围是 1-127(十进制),因为129(即 1+128)- 255(即 127+128)代表错误代码的范围。

功能码是协议的一部分,功能码就分为以下三类,一个是协议里规定好的功能,用户也可以自定义功能

Public

保证是唯一的,并指定公开记录的明确定义的功能。这些由社区验证并且存在一致性测试

  • 读离散输入
  • 读写线圈
  • 读输入寄存器
  • 读写保持寄存器

User-Defined

可用于用户定义的函数,因此它们的代码可能不是唯一的。该规范为用户定义的函数定义了代码范围 65-72 和 100-110。

保留

这些目前被一些公司用于遗留产品,不能公开使用

函数的文档包括:

  1. 函数的描述(即它的用途)、它的参数和返回值(包括可能的异常)。
  2. 分配的功能代码
  3. 请求 PDU
  4. 响应 PDU
  5. 异常响应PDU

2.2、Modbus数据模型

Modbus的功能就是基于这些数据模型实现的

离散输入

·类型

一位

·使用权

只读

·视觉的

离散输出(线圈)

·类型

一位

·使用权

读写

·视觉的

输入寄存器

·类型

16 位字

·使用权

只读

·视觉的

 

保持寄存器(Register)

·类型

16 位字

·使用权

读写

·视觉的

3、Modbus实现

3.1、串行Modbus实现

Modbus 以异步串行网络通信的实现形式开始了它的生命。应用层协议直接在串行接口和串行通信标准之上运行。最常见的(通过电线)是:

RS232 (EIA232) :

参见RS232 @ 维基百科

RS422:

请参阅EIA422 @ 维基百科

RS485:

参见EIA 485 @ 维基百科**

RS232用于短距离点对点通信,EIA422同样适用,它是RS232在工业环境下的双向扩展,也支持更远的距离。

EIA485 可用于多点通信(即多个设备连接到同一条信号电缆),采用主从模式(一个主站和 n 个固定地址从站)。

图 4 显示了可能的网络设置。

为了启用此设置的实际通信,该实现使用附加字段扩展了 PDU,更好的说法是,它将 PDU 包装到一个带有标头和错误校验和的包中(参见图 5)。结果包由协议规范定义为应用程序数据单元 (ADU),其最大包大小为 256 字节。 

笔记

256 字节的最大包大小限制适用于所有现有的 Modbus 协议实现(传统)!

头部由地址字段(1 个字节)组成,尾部是整个包的错误校验和,包括地址字段(即头部)。为了传输,Modbus 消息(即 ADU)被放入一个具有已知开始和结束点的帧中,从而允许检测消息的开始和结束,从而检测部分消息。存在两种传输模式,它们的编码、成帧和校验和有所不同:

1、ASCII码

帧被编码为每个字节两个 ASCII 字符,代表字节的十六进制表示法(即字符 0-9、A-F)。错误校验和由纵向冗余校验(LRC;1 字节)表示,消息以冒号(':',0x3A)开头,以回车符-换行符(“CRLF”,0x0D0A)结束。字符之间可能会出现 1 秒的停顿。

2、RTU

帧以二进制传输以实现更高的密度。错误校验和由循环冗余校验(16 位 CRC;2 字节)表示,消息以至少 3.5 个字符时间的静默间隔开始和结束。这最容易实现为网络上正在使用的波特率的字符时间的倍数。两个字节之间可能发生的最大暂停为 1.5 个字符时间。

jamod 旨在支持两种传输模式,使用基于 javax.comm api 的实现。

警告

RTU 实现仅支持 Master 端。它按照最大努力原则工作,这意味着它可能无法在低延迟实时环境中以可靠的方式工作。

确实可以实现基于其他串行堆栈实现(即 Java Comm API 实现的替代品)的串行传输,例如SerialPort ( www.sc-systems.com/products/se… ) . 根据产品信息,它支持大约20个平台,并已成功用于在Java中实现两种串行传输模式(仅限Master,参见Field Talk/Java,Focus Engineering的商业Master协议包)。

3.2、基于 IP 的 Modbus 实现

基于 tcp/IP 的 Modbus 协议实现 (Modbus/TCP) 最近已作为 RFC 草案提交给 IETF。它使用 TCP/IP 堆栈进行通信(注册端口为 502)并使用 IP 特定报头扩展 PDU(参见图 6)。

可能的网络设置不受规范的约束;可以建立多主系统或实现双向通信(即同时有主从节点)。但是,用户应该清楚地意识到主/从模式的偏差会产生影响。

IP 特定报头(在规范中称为 MBAP)长 7 个字节,由以下字段组成:

  1. 用于交易配对的调用标识(2 个字节);以前称为交易标识符
  2. Modbus的协议标识符(2个字节),是0用于Modbus默认; 为将来的扩展保留
  3. 报文长度(2个字节),所有后面字节的字节计数
  4. 用于标识位于非 TCP/IP 网络上的远程单元的单元标识符(1 个字节)

4、总结

本文翻译自Modbus Java版官方文档

jamod官方文档http://jamod.sourceforge.net/kb/protocol.html

到此这篇关于带你轻松了解Modbus协议的文章就介绍到这了,更多相关了解Modbus协议内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 带你轻松了解Modbus协议

本文链接: https://lsjlt.com/news/156295.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 带你轻松了解Modbus协议
    目录1、Modbus是什么2、Modbus协议解析2.1、Modbus功能2.2、Modbus数据模型3、Modbus实现3.1、串行Modbus实现3.2、基于 IP 的 Modb...
    99+
    2024-04-02
  • Python IDE 和 http 协议有什么关系?一篇教程带你轻松搞定!
    Python IDE 和 HTTP 协议有什么关系?这是一个看似奇怪的问题,但实际上,这两者有着密不可分的联系。在本篇文章中,我们将会探讨这个问题,并提供一些有用的技巧和工具,帮助你轻松地使用 Python IDE 来处理 HTTP 请求和...
    99+
    2023-08-15
    ide http 教程
  • 一文带你轻松掌握Promise
    回调函数回调函数的定义非常简单:一个函数被当做一个实参传入到另一个函数(外部函数),并且这个函数在外部函数内被调用,用来完成某些任务的函数。就称为回调函数回调函数的两种写法(实现效果相同):const text = () => { ...
    99+
    2023-05-14
    javascript promise
  • 你了解Java教程中的HTTP协议吗?
    Java作为一种高级编程语言,广泛应用于各种应用程序的开发。而HTTP协议则是Java教程中必不可少的一部分。本文将介绍HTTP协议在Java教程中的应用,并为读者演示HTTP协议相关的代码。 HTTP协议是一种网络协议,它负责在Web服务...
    99+
    2023-06-17
    教程 http 自然语言处理
  • 手把手带你用Node手写WebSocket协议
    我们知道,http 是一问一答的模式,客户端向服务器发送 http 请求,服务器返回 http 响应。这种模式对资源、数据的加载足够用,但是需要数据推送的场景就不合适了。有同学说,http2 不是有 server push 么?那只是推资源...
    99+
    2023-05-14
    前端 JavaScript Node.js
  • 阿里云服务器销售合作协议是什么?带你深入了解
    本文将详细解读阿里云服务器销售合作协议,帮助您了解如何在阿里云上销售服务器,并获得相应的收益。 阿里云服务器销售合作协议是什么?它是指阿里云与合作伙伴签署的协议,明确双方在销售服务器方面的权利和义务。根据协议,合作伙伴可以获得阿里云的服务器...
    99+
    2023-11-08
    阿里 带你 合作协议
  • 带你轻松掌握Redis分布式锁
    目录1. 什么是分布式锁2. 分布式锁该具备的特性3. 基于数据库做分布式锁4. 基于Redis做分布式锁4.1 超时问题4.2 可重入锁4.3 集群环境的缺陷4.4 Redlock...
    99+
    2024-04-02
  • 零基础学Python--带你轻松走入Py
    亲爱的学员们:您好!51CTO学院为梦想增值,诚邀您的关注!51CTO学院致力于让专家分享技术并让技术变现,让广大技术爱好者便捷、实惠的获取优质学习资源。为了方便大家的学习,我们特别整理了Python相关精品课程>>>&g...
    99+
    2023-01-31
    带你 轻松 基础
  • 一文带你了解C#中的协变与逆变
    目录协变协变接口的实现逆变里氏替换原则协变 协变概念令人费解,多半是取名或者翻译的锅,其实是很容易理解的。 比如大街上有一只狗,我说大家快看,这有一只动物!这个非常自然,虽然动物并不...
    99+
    2023-02-26
    C# 协变 逆变 C# 协变 C# 逆变
  • Linux 上的 PHP 开发技术,HTTP 协议你了解多少?
    PHP 是一种广泛使用的服务器端脚本语言,常用于 Web 开发。在 Linux 上,PHP 是最流行的 Web 开发语言之一。本文将介绍 Linux 上的 PHP 开发技术以及 HTTP 协议的基本知识。 一、安装 PHP 在 Linux...
    99+
    2023-09-18
    linux http 开发技术
  • 阿里云轻量服务器删除不了?教你轻松解决!
    阿里云轻量服务器是一种云服务器产品,它具有极低的门槛、高性能的计算能力以及快速的部署能力,因此深受中小企业和个人用户喜爱。然而,一些用户在使用过程中可能会遇到轻量服务器删除不了的问题,这可能会影响到他们的使用体验。本篇文章将详细介绍如何解决...
    99+
    2023-11-04
    阿里 教你 轻松
  • 带你用Java方法轻松实现树的同构
    目录树的同构总结树的同构 举例 树的构造 树可以由数组或链表来构造: 举例:上图左上角的树通过数组可表示为 0 ...
    99+
    2024-04-02
  • 5招带你轻松优化MySQL count(*)查询性能
    目录前言1 count(*)为什么性能差2 如何优化count(*)性能2.1 增加Redis缓存2.2 加二级缓存2.3 多线程执行2.4 减少join的表2.5 改成ClickHouse3 count的各种用法性能对...
    99+
    2022-11-19
    MySQLcount(*)查询性能 MySQLcount(*)查询 MySQLcount(*)
  • 了解PHP编程算法,让你轻松优化HTTP请求。
    PHP是一种常用的服务器端脚本语言,在Web开发领域广受欢迎。在Web应用程序中,HTTP请求是非常重要的一个环节,因为它是与客户端进行数据交换的主要方式。然而,当HTTP请求过多时,会给服务器带来巨大的负担,导致服务器处理速度变慢,甚至崩...
    99+
    2023-06-16
    http 编程算法 编程算法
  • LeetCode算法难倒你了吗?这些技巧让你轻松解决难题!
    作为一个程序员,我们都知道 LeetCode 是一款非常好的算法练习平台。但是,有时候面对一些难题,我们会感到非常困惑。在这篇文章里,我将会分享一些我在 LeetCode 上练习算法的经验和技巧,希望能够帮助到你们。 了解数据结构 在...
    99+
    2023-09-23
    leetcode shell 二维码
  • 带上Windows 8去旅行 让你的旅途更轻松
      作为一个数码狂人,旅行怎能没有数码设备陪伴。Windows 8发布后,笔者兴致勃勃的将PC升级到了最新的操作系统,并在朋友的推荐下入手了一台Surface平板电脑。通用的USB接口,方便我导出相机里的照...
    99+
    2022-06-04
    去旅行 旅途 轻松
  • 一篇文章带你轻松搞懂Golang的error处理
    目录Golang中的errorerror的几种玩法哨兵错误自定义错误类型Wrap errorGolang1.13版本error的新特性errors.UnWrap()errors.Is...
    99+
    2024-04-02
  • Golang安装教程:一步步带你轻松安装golang!
    Golang安装教程:一步步带你轻松安装golang! Golang(又称Go)是由Google开发的一种开源编程语言,具有高效、安全、简单易用等特点。Golang的出现大大提高了程序开发的效率和安全性,因此...
    99+
    2024-01-19
    Golang 安装教程 轻松安装
  • 九妹带你了解oracle
     一.oracle 体系架构  Oracle的体系结构是数据库的组成,工作过程,以及数据库中数据的组织与管理机制,要了解oracle数据库的体系结构,就必须要理解oracle的...
    99+
    2024-04-02
  • OldWang带你了解MySQL(二)
    文章目录 🔥创建与删除数据库🔥MySQL数据类型🔥创建表与删除表🔥修改表 🔥创建与删除数据库 创建数据库...
    99+
    2023-09-26
    mysql 数据库 java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作