modbus协议

DevExpress

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 主/从站状态图

1、 Modbus 主站通常在上位机中使用, 当核心控制器这样的下位机
系统作为主站时, 需要用户自己编写稳定性好的协议栈。 图 2-4 为主站的
状态图。
在这里插入图片描述
主站状态图的说明:
(1) 状态空闲表示没有待解决的事务请求。 这是电源加电后的默认状
态。 当处于“空闲” 状态下主站才可以发送事务请求, 发送一个事务请
求之后, 主站从“空闲” 状态进入“等待应答” 状态, 并且传输过程只
能发送一次请求。
(2) 主站通过单播模式向从站发送事务请求时, 主站处于“等待应答”
状态, 为避免主站因收不到响应应答而无限期处于“等待应答” 状态下,
同时会启动一个“响应超时” 状态。 响应超时必须设置足够的时间, 从
站才可以处理请求并返回响应。 主站通过广播方式向从站发送事务请求
时, 从站虽然不返回响应, 主站将进入“转换延迟” 状态。 主站必须设
置适当的延迟时间保证所有从站在处理请求时可以接收到新的请求。 转
换延迟时间一般要短于响应超时, 通常在 9600bit/s 速率时, 响应超时典
型范围是从一秒到几秒, 而转换延迟是从 100ms 到 200ms。 当然转换延
迟也必须是足够长 [15,16] 。
(3) 主站收到一个应答时, 会首先检验是否符合标准, 如果检验结果
是异常, 则响应超时继续计时。 如果检验结果是期望应答, 处理完应答
后进入空闲状态。 当没有收到应答的时候, 就会产生异常, 主站重新进
入空闲状态后发出重试请求。 主站可以规定重试的最大上限次数 [17] 。
(4) 传输数据帧异常通常包含单个字符的奇偶校验错误和整个数据
帧的冗余校验(CRC) 错误。 主站状态图没有标示对串行链路的访问和
报文帧在传输异常之后的重试请求。
主站的实际性质是一个主动性的处理数据请求过程, 主站在通信时
每一次传输的数据帧在请求周期、 数据帧内容以及处理请求上不总是一
致。

2.5 Modbus 协议报文
Modbus 协议定义了 一个和基础通信层没有关联的协议数据单元
(PDU) 。 特定符合条件的总线或者工业网络上的 Modbus 协议映射是可
以在应用数据单元(ADU) 上添加一些额外字段, 构建一个完整的 Modbus
数据帧, 如图 2-7 所示。
在这里插入图片描述
ADU 单元由发起事务请求的客户机建立, 通过功能码向服务器指示
具体运行操作类别。 Modbus 创建了 由客户 机发起的事务请求模式。
Modbus 协议中 PDU 单元的功能码段是用一个字节编码, 编码的有效范
围是 1~255, 其中 128~255 是用作表示异常响应。

Modbus 协议在串行链路上的实现, 最大的 RS-485 ADU 单元是 256
个字节, 这规定了 Mdobus PDU 单元的范围。 所以, 对于串行链路通信,
Modbus PDU 字节数为 256 减去 1 个字节的从站地址和两个字节的 CRC
校验等于 253 字节。

2.6 Modbus 事物处理的定义
图 2-10 是描述服务器处理 Modbus 事务请求的流程图。 服务器处理
事务请求时, 采用标准的 Modbus 服务器处理事务和建立 Modbus 响应。
有两种不同的响应,分别是正常和异常的 Modbus 响应。 正常响应功能码
就是初始请求功能码。 异常功能码长度是请求功能码加上 0x80, 并且提
示一个异常码来指出错误原因。
在这里插入图片描述

2.7 Modbus 协议两种串行链路传输模式

Modbus 协议在串行链路上有两种事务传输模式: RTU 模式和 ASCII
模式。 控制器可以选择其中一种模式在 Modbus 网络通信, 但是默认设置
模式一定为 RTU。 虽然有些特殊的 Modbus 串行连路上要求使用 ASCII
模式, 但是 Modbus 设备间需要相同的模式才能进行通信, 这意味着所有
设备都要实现 RTU 模式。 ASCII 模式只是一个选项。 在 Modbus 通信链
路上, 配置每个控制器时, 所有设备除了传输模式必须一致外, 串口参
数也必须一致。 这两类通信模式只能用于标准的 Modbus 工业网络, 它们
定义了链路上传输报文的位内容和确定了如何将报文打包和解码的方

2.7.1 RTU 传输模式

工业生产中, 设备在 Modbus 串行链路上采用 RTU 模式时, 协议报
文中每一个 8bit 字节中含有 4bit 十六进制的字符。 RTU 模式的字符密度
比 ASCII 模式高, 在相同的波特率下可以比 ASCII 码传输更多的数据帧。
RTU 模式是一个八位的二进制编码系统, 每个字节包含十一位字符。 每
个字节包含: 一个起始位, 八个从最低有效位开始发送的数据位, 一个
奇偶校验和一个停止位。 偶校验是系统默许的校验模式。 RTU 模式的数
据帧包含从站循环地址、 功能码、 数据字段和冗余校验(CRC) 几个部
分 [22] 。 图 2-11 为 RTU 模式帧描述图。
在这里插入图片描述

第 3 章 Modbus 协议的功能码

3.1 Modbus 协议功能码分类

Modbus 功能码主要分为三类。
第一类为公共功能码:
(1) 已经定义的功能码;
(2) 唯一的功能码;
(3) 由 Modbus 官网认证的;
(4) 已公开的文档;
(5) 可进行标准测试的功能码;
(6) 包括已被定义的公用功能码与保留给后续使用的功能码。
第二类为使用者自己定义的功能码:
(1) 在十进制的 65~72 和 100~110 这两个区域内使用者自己可以定义
功能码。
(2) 研究者实现一个功能码而需要得到 Modbus 组织批准。
(3) 被选功能码不是唯一的;
(4)如果研究者希望将某种功能设置为公共功能码时, 需要启动 RFC,
并且创建一个新的公共功能码。
第三种为保留功能码:
(1) 某些用作商业用途的功能码。

3.2 Modbus 协议公共功能码定义

在这里插入图片描述
在这里插入图片描述

3.3 Modbus 协议公共功能码描述

客户机设备向服务器设备传达事务请求时, 客户机期望接收一个正
常响应。 客户机的查询可能会导致以下几种情况。 第一种当服务器接收
到正常的事务请求时, 那么将返回一个正常响应。 第二种是因为通信出
错服务器未能接收到事务请求, 不能返回响应, 客户机将会认定传输超
时。 第三种是服务器接收到错误的事务请求, 也不会返回响应, 客户机
认定传输超时。 第四种是服务器接收到正常的事务请求但是无法处理请
求(例如请求写单个不存在的线圈) , 则服务器将会返回异常响应信息。

3.4 Modbus 协议异常响应

客户机设备向服务器设备传达事务请求时, 客户机期望接收一个正
常响应。 客户机的查询可能会导致以下几种情况。 第一种当服务器接收
到正常的事务请求时, 那么将返回一个正常响应。 第二种是因为通信出
错服务器未能接收到事务请求, 不能返回响应, 客户机将会认定传输超
时。 第三种是服务器接收到错误的事务请求, 也不会返回响应, 客户机
认定传输超时。 第四种是服务器接收到正常的事务请求但是无法处理请
求(例如请求写单个不存在的线圈) , 则服务器将会返回异常响应信息。
异常响应包含两个与正常响应不一致的字段, 即功能码字段和数据
字段。 先来介绍功能码字段。 在正常响应报文中, 服务器功能码字段与
开始的事务请求功能码一致。 所有功能码的 MSB 设置为 0。 当异常响应
时, 服务器功能码 MSB 值将被置为 1, 相当于正常响应功能码值加上
0x80。 MSB 值可以作为异常响应的标志, 通过设置 MSB 值, 主站能够
检测数据帧中异常码字段。 当正常响应时, 对于数据帧, 服务器将返回
事务请求中所要求的全部信息。 如果是异常响应, 从站就返回异常码信
息 [23] 。 异常码分类如表 3-2 所示。

第 5 章 Modbus 读/写文件功能码的研究与实现

5.1 读文件记录功能码

文件是记录的结构。每个文件包括 10000 个记录,寻址这些记录为十进制 0000 至 9999 或十六
进制 0X0000 至 0X270F,例如寻址记录 12 为 12。

用含有 7 个字节的独立“子请求”域定义每个组:
参考类型:1 个字节(必须规定为 6)

在这里插入图片描述
03 14 07(后续字节统计) 06(读文件记录功能码) 00 01(文件号) 00 00(文件起始地址) 00 18(24个寄存器) 65 24

03 14 32
在这里插入图片描述

写文件
request:03(从站地址) 15(功能码) 0D(不包括crc校验后面13个字节) 06(引用类型) 00 01(文件1) 00 00(文件起始地址) 00 03(寄存器长度是00 03)
reponse:03(从站地址) 15(功能码) 0D(不包括crc校验后面13个字节) 06(引用类型) 00 01(文件1) 00 00(文件起始地址) 00 03(寄存器长度是00 03) 09 98(CRC校验)

验证写文件是否正确,读文件测试

request:03 14(功能码) 07(不包括crc校验后面7个字节) 06(引用类型) 00 01(文件1) 00 00(文件起始地址) 00 18(寄存器长度00 18) 65 24(CRC校验)
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金士顿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值