在上一个视频中,我们了解了什么是Modbus通信协议以及行业中使用的Modbus通信类型。
今天我们在在本视频中,将学习有关Modbus设备之间Modbus通信协议如何工作以及它们的工作原理是什么?
1.Modbus协议消息结构
-Modbus协议设备
-Modbus协议数据单元(PDU)
-Modbus消息“功能代码字段”
-Modbus消息“数据”字段
2. Modbus消息错误处理
3. Modbus RTU最常用的功能代码
4. Modbus协议模拟器软件
-Modbus协议设备
-Modbus协议数据单元(PDU)
-Modbus消息“功能代码字段”
-Modbus消息“数据”字段
Modbus是如何工作的呢?每个Modbus消息具有相同的结构。每个消息中包含四个基本元素。元素的顺序和顺序对于所有消息都是相同的。可以轻松解析Modbus消息的内容。
对话始终由Modbus网络中的主机启动。Modbus主站发送一条消息,然后根据消息的内容,从站读取该消息并做出响应。
消息头中的物理从设备寻址用于定义哪个从设备应响应消息。如果地址字段与它们自己的地址不匹配,则Modbus网络上的所有其他节点将忽略该消息。
Modbus功能对从站的内部存储器寄存器执行读写指令,以配置,监视和控制从站的输入和输出。
Modbus协议设备通常将包括一个寄存器映射,可以写入和读取配置,输入和输出数据。
Modbus数据模型具有简单的结构,描述了四种基本数据类型:
1.离散输入
2.线圈输出
3.输入寄存器(输入数据)
4.保持寄存器(输出数据)
消息或Modbus协议数据单元或PDU的服务请求区域包括
–功能代码。
–主机请求的多个“数据”字节。
设备的Modbus存储器寄存器围绕四种基本数据引用类型进行组织,并且该数据类型由设备存储器地址中使用的前导数字进一步标识,例如:
–基于零(0)的寄存器,引用一条消息来读取或写入“离散输出或线圈”。
–基于一(1)个寄存器,引用读取“离散输入”。
–基于三(3)个寄存器,引用读取“输入寄存器”。
–基于四(4)个寄存器,引用对“输出或保持寄存器”的读取或写入。
“功能代码字段”指定了它从属设备读取或写入的寄存器数据组。
例如,将功能代码03(读取的保持寄存器40001-40002)寻址为发送到从站的消息的数据地址字段中的数据寄存器0000。
功能代码03适用于从站数据映射中的保持寄存器类型(4xxxx),因为该请求使用保持寄存器数据类型操作进行指定,并且隐含了请求中的4xxxx寻址。
PDU中的字段分为多个字节,并按字段名称分组。
该请求消息包含:
– 01的“从站地址”。
– 03的“功能代码”(从保持寄存器4xxxx读取)。
–指定“起始寄存器”的“起始地址” HI和LO字节(0000)。
–从从站读取的“地址计数”,计数值(0002)的寄存器HI和LO字节,该计数值指定要从从站读取的“寄存器的数量”。
从属设备1请求“读取”“保持寄存器”区域0至1(寄存器40001至40002)中的“前两个寄存器”
从视频中可以看出,保持寄存器40108实际上是PDU消息数据区域中的寄存器107。
许多数据类型都是根据其用途来命名的。例如,单位物理输出称为线圈,单位物理输入称为离散输入或触点。
消息的功能代码字段将包含一个字节,该字节告诉从站采取何种操作。
有效的功能代码范围是1到255,但是并非所有代码都适用于特定的从站。
视频所示的表格突出显示了标准Modbus协议功能的子集。
此外,主站请求“数据”字段为从站提供了从站所需的任何其他信息,以完成主站请求中“功能代码”所指定的操作。
主人的请求通常包括:
–从机映射寄存器地址。
–请求中提供的寄存器数。
–来自主机的任何写入数据。
从站的正常响应只是回显请求的原始功能代码,但是从站的错误响应返回的代码与原始功能代码等效,且最高有效位设置为逻辑1。
例如,“读取保持寄存器”命令(功能代码03)具有1个字节(包含8位)的功能代码是二进制0000 0011(03十六进制)。如果从设备无误地接受了请求,它将在响应中返回相同的代码。
但是,如果发生错误,从站将在“功能代码”字段中返回包含8个二进制位1000 0011(设置为逻辑1的最高有效位)的1个字节,并在“数据”字段中附加一个唯一的代码(异常代码)。响应消息的字段,告诉主设备发生了哪种类型的错误或错误的原因。
此功能代码01“读取 线圈”代码,用于从1到2000个连续寄存器中读取从设备中线圈的状态。请求PDU指定从属存储寄存器的第一个线圈地址,以及从从属设备读取的线圈数。
功能码02,“读取离散输入”代码,用于读取远程从站中离散输出的1到2000个连续状态。请求PDU指定从属存储寄存器的第一个输入地址,以及要从从属设备读取的输入数量。
功能代码03,“读取保持寄存器”代码,用于读取远程从站中保持寄存器的连续块的内容。请求PDU指定起始寄存器地址和要从从设备读取的寄存器数。
功能代码04,“读取输入寄存器”代码,用于从远程设备中读取1到125个连续的输入寄存器。请求PDU指定了起始寄存器地址和寄存器数。
功能码05,“写入单个线圈”代码,用于将单个输出写入远程从设备中的ON或OFF。
功能代码06,“写入单个寄存器”代码,用于在远程从设备中写入单个保持寄存器。请求PDU指定要写入的从属存储器寄存器地址的地址。
功能代码15“写入多个线圈”代码用于在远程从设备中将一系列线圈中的每个线圈强制为ON或OFF。请求PDU指定要强制打开或关闭的线圈存储地址。
功能码16“写入多个寄存器”用于在远程从设备中写入从1到123个寄存器的连续寄存器块。
这些Modbus功能代码代表最常见的读取和写入功能,助于我们查看Modbus协议规范以便可以获取更多信息。
可以通过Modbus模拟器软件在您的个人计算机上运行来实现与从属设备或主PLC或计算机的通信。
该连接可以是串行连接,也可以是以太网连接,并且可以是主连接或从连接的形式。该软件将允许您执行所有Modbus协议通信功能代码,以简单地读取或写入现有从站。
我们可以设置一台计算机来运行从属仿真软件,而另一台计算机来运行主仿真软件。
首先,通过设置串行COM端口的通信参数来执行从站连接。
然后,在“设备ID”字段中输入从站的地址,选择功能代码01读取从站的线圈状态在地址0001处声明,并读取100个线圈的长度。
视频加载中...
以上为本次内容全部,希望对您有用,非常感谢您抽出宝贵的时间来这里。欢迎在评论区留言,并持续关注获取更多精彩内容。
页面更新:2024-04-16
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号