ModBus用户自定义文件读写功能

ModBus用户自定义文件读写功能

功能分类

公共功能码

  • 是较好地被定义的功能码,
  • 保证是唯一的,
  • MODBUS 组织可改变的,
  • 公开证明的,
  • 具有可用的一致性测试,
  • MB IETF RFC 中证明的,
  • 包含已被定义的公共指配功能码和未来使用的未指配保留供功能码。

用户定义功能码

  • 有两个用户定义功能码的定义范围,即 65 至 72 和十进制 100 至 110。
  • 用户没有 MODBUS 组织的任何批准就可以选择和实现一个功能码
  • 不能保证被选功能码的使用是唯一的。
  • 如果用户要重新设置功能作为一个公共功能码,那么用户必须启动 RFC,以便将改变引入公共分类中,并且指配一个新的公共功能码。

保留功能码

  • 一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。
    这里写图片描述

(0x03)读多个寄存器

发送

地址域 功能码 起始地址 寄存器数量 CRC
0x05 0x03 0x1000 0x0001 crcL crcH

回复

地址域 功能码 字节数 寄存器值 CRC
0x05 0x03 0x02 0x0001 crcL crcH

(0x10)写多个寄存器

发送

地址域 功能码 起始地址 寄存器数量 字节数 寄存器值 CRC
0x05 0x10 0x0000 0x0001 0x02 0x0001 crcL crcH

回复

地址域 功能码 起始地址 寄存器数量 CRC
0x05 0x10 0x0000 0x0001 crcL crcH

(0x14)读文件记录

发送

地址域 功能码 字节数 参考类型 文件号 记录号 记录长度 CRC
0x05 0x14 0x06 0x06 0x0001 0x0001 0x0002 crcL crcH

回复

地址域 功能码 响应数据长度 文件响应长度 参考类型 记录数据 CRC
0x05 0x14 0x07 0x05 0x06 xx xx xx xx crcL crcH

(0x15)写文件记录

发送

地址域 功能码 请求数据长度 参考类型 文件号 记录号 记录长度 记录数据 CRC
0x05 0x15 0x0a 0x06 0x0001 0x0001 0x0002 xx xx crcL crcH

回复

地址域 功能码 请求数据长度 参考类型 文件号 记录号 记录长度 记录数据 CRC
0x05 0x15 0x0a 0x06 0x0001 0x0001 0x0002 xx xx crcL crcH

有感于ModBus的文件读写文件功能有点怪异和不合理
1. 写文件功能不合理,发送和回复是一样的
2. 参考类型定死了0x06,不清楚其作用。
而且ModBus 256字节的限制,导致读写速度很慢,所以想自己扩展ModBus读写文件功能。

(0x44)自定义读文件

发送

地址域 功能码 文件号 记录号 记录包长度 记录长度 CRC
0x05 0x44 0x0001 0x0001 0x0400 0x0002 crcL crcH

回复

地址域 功能码 记录长度 记录数据 CRC
0x05 0x44 0x0002 xx xx crcL crcH

(0x45)自定义写文件

发送

地址域 功能码 文件号 记录号 记录包长度 记录长度 记录数据 CRC
0x05 0x45 0x0001 0x0001 0x0400 0x0002 xx xx crcL crcH

回复

地址域 功能码 文件号 记录号 记录包长度 记录长度 CRC
0x05 0x45 0x0001 0x0001 0x0400 0x0001 crcL crcH

N个文件,通过文件号来区分(0x0000~0xFFFF)
1个文件分成N包来读写,通过记录号来区分(0x0000~0xFFFF)
每个记录包的长度大小固定,通过记录包长度来区分(0x0000~0xFFFF)
而实际当次读写的长度,定义为记录长度。

猜你喜欢

转载自blog.csdn.net/kangweijian/article/details/80792746