Modbus协议学习(二)

来源:互联网 发布:电子印章软件 编辑:程序博客网 时间:2024/06/05 20:39

Modbus事务处理定义

一旦服务器处理请求,使用合适的MODBUS服务器事务建立MODBUS响应。
根据处理结果,可以建立两种类型的响应:
● 一个正MODBUS响应:
● 响应功能码 = 请求功能码
● 一个MODBUS异常响应:
● 用来为客户机提供处理过程中发现的差错相关的信息;
● 响应功能码 = 请求功能码 +0x80 (二进制:1000 0000);
● 提供一个异常码来指示差错原因。

功能码分类

  1. 公共功能码:
    1.1 是较好被定义的功能码
    1.2 保证是唯一的
    1.3 MODBUS组织可改变的
    1.4 公开证明的
    1.5 具有可用的一致性测试
    1.6 MB IETF RFC 中证明的
    1.7 包含已被定义的公共指配功能码和未来使用的为指配功能码
  2. 用户定义功能码:
    2.1 有两个用户定义功能码的定义范围,即65-72和十进制100-110
    2.2 用户没有MODBUS组织的任何批准就可以选择和实现一个功能码
    2.3 不能保证被选功能码使用是唯一的
    2.4 如果用户要重新设置功能作为一个功能码,那么用户必须启动RFC,以便将改变引入公共分类中,并且指配一个新的公共功能码。
  3. 保留功能码:
    一些公司对传统产品通常使用的功能码,并且对公共使用是无效的

下图展示功能码的读取流程

几个重要的功能码

  1. (0x14)读文件记录:
    使用该功能码进行文件记录读取。根据字节数量提供所有请求数据长度,并且根据寄存器提供所有记录长度。
  2. (0x15)写文件记录:
    使用该功能码进行文件记录写入。根据字节数量提供所有请求数据长度,并且根据16 比特字的数量提供所有记录长度。
    注意:被写入的寄存器数量不能超过MODBUS 报文允许的长度:256个字节,这个寄存器数量与询问中的所有其它域组合。
    档
  3. (0x16)屏蔽写寄存器:
    该功能码用于通过利用AND 屏蔽、OR屏蔽以及寄存器内容的组合来修改特定保持寄存器的内容。使用这个功能设置或清除寄存器中的单个比特。
    算法:结果= (当前内容AND And_Mask) OR (Or_Mask AND And_Mask)

算法实例

MODBUS异常响应

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

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

异常码列表:    名称    01       非法功能    02       非法数据地址    03       非法数据值    04       从站设备故障/服务器故障    05       确认    06       服务器忙    07       存储奇偶性差错    0A       不可用网关路径    0B       网关目标设备响应失败
原创粉丝点击