QQ个性网:专注于分享免费的QQ个性内容

关于我们| 网站公告| 广告服务| 联系我们| 网站地图

搜索
编程 JavaScript Java C++ Python SQL C Io ML COBOL Racket APL OCaml ABC Sed Bash Visual Basic Modula-2 Logo Delphi IDL Groovy Julia REXX Chapel X10 Forth Eiffel C# Go Rust PHP Swift Kotlin R Dart Perl Ruby TypeScript MATLAB Shell Lua Scala Objective-C F# Haskell Elixir Lisp Prolog Ada Fortran Erlang Scheme Smalltalk ABAP D ActionScript Tcl AWK IDL J PostScript IDL PL/SQL PowerShell

Modbus协议

日期:2025/04/06 13:08来源:未知 人气:52

导读:1、Modbus是什么基本上,Modbus 是一种用于设备之间通信的应用层协议主要用于交换自动化领域的典型数据。在这个级别上,Modbus 是一种无状态的客户端-服务器协议(例如,很像 HTTP),基于事务,它由请求(由客户端发出)和响应(由服务器发出)组成。在通常应用该协议的领域中,存在一个概念,即使用共享信号电缆的网络上控制较低级别通信行为的可能模式之一:主从。为了防止混淆......

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 字节

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

  1. ASCII码

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

  1. RTU

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

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

确实可以实现基于其他串行堆栈实现(即 Java Comm API 实现的替代品)的串行传输,例如 SerialPort ( http://www.sc-systems.com/products/serialport/serialport.htm ) . 根据产品信息,它支持大约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

关于我们|网站公告|广告服务|联系我们| 网站地图

Copyright © 2002-2023 某某QQ个性网 版权所有 | 备案号:粤ICP备xxxxxxxx号

声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告