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)
而实际当次读写的长度,定义为记录长度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小康师兄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值