全网最通俗易懂的Modbus功能码详解(二)

  上一篇我们聊了Modbus最常用的四个读取数据的功能码,它们分别是:  ● 01(读线圈): 读取设备内部用于控制输出的开关状
    上一篇我们聊了Modbus最常用的四个读取数据的功能码,它们分别是:
  ● 01(读线圈): 读取设备内部用于控制输出的开关状态,比如灯亮不亮。
  ● 02(读离散输入):读取设备接收到的外部开关信号,比如按钮是否被按下。
  ● 03(读保持寄存器): 读取设备内部的配置参数或设定值,比如设定温度或目标转速。
  ● 04(读输入寄存器):读取设备的实时测量数据或动态运行状态。
  今天我们一起来看看写入数据的功能码。毕竟工控嘛,只能看不能控可不行,对吧?
  Modbus功能码人话版
  功能码05 - 写单个线圈
  (Write Single Coil)
  有时也被称为强制单线圈(Force Single Coil),但还是“写单个线圈”这个说法更好理解。
  还记得功能码01是用来读取开关量的吗?那功能码05就是用来改变这个开关量状态的。
  这就好比你对智能家居下达指令:"把客厅的灯打开!"或者"把空调关掉!"
  ● 写入值 = 0xFF00 表示开(ON)
  ● 写入值 = 0x0000 表示关(OFF)
  以上两个值是Modbus协议推荐的值。为什么不是直接用1和0呢?这是为了提高数据传输的可靠性,用相差较大的特殊数值来确保指令的准确性。
  实际使用中,设备支持的写入值应以说明书为准。
  功能码06 - 写单个保持寄存器
  (Write Single Register)
  还记得功能码03可以读取保持寄存器的值吗?功能码06就是用来修改这些值的。请注意,修改的一般是设备参数或设定值。
  例如:
  ● 把空调的目标温度从25度改成26度
  ● 把传送带的目标速度从50转/分钟改成60转/分钟
  它就像是一个"设定按钮",每次只能调整一个参数。
  功能码15 - 写多个线圈
  (Write Multiple Coils)
  功能码05每次只能控制一个开关,而Modbus协议是请求-响应这种一问一答式的协议,当需要控制多个状态时,多次一问一答很低效。
  功能码15则可以一次性控制多个开关。
  想象一下这个场景:
  你要回家了,想一次性关掉公司所有的灯。与其一个个关(用功能码05发送多次),不如用功能码15一次性发送"全部关闭"的指令,既快速又高效。
  而且,功能码15支持混合状态设置,说人话就是,同一条报文中,可以灵活设置多个开关量的不同状态,不一定非要全部开启或全部关闭。
  例如,1、3、5号灯开,2、4、6号灯关。这样的控制方式功能码15同样支持。
  功能码16 - 写多个保持寄存器
  (Write Multiple Registers)
  同样的道理,功能码16是功能码06的"批量版本"。它能一次性修改多个参数值。
  举个例子:空调系统需要同时设置:
  ● 目标温度
  ● 风速大小
  ● 运行模式
  ● 定时时间
  用功能码16就能一次性搞定,不用发送四次功能码06的写入命令。
  极简总结
  Modbus协议的功能码可以按照读取和写入两大类分类:
  01~04都是用于读取数据:
  ● 01 读取开关量
  ● 02 读取外部开关信号
  ● 03 读取设备设定参数
  ● 04 读取实时测量数据
  05,06,15,16用于写入数据:
  ● 05 写单个开关量
  ● 15 写多个开关量
  ● 06 写单个设定值
  ● 16 写多个设定值
  看到这里你或许会有疑问,为什么介绍完05和06直接就跳到15和16了?07~14这些功能码呢?16之后还有没有了? (来源:168中自网)
免责声明:本文内容来源于第三方或整理自互联网,本站仅提供展示,不拥有所有权,不代表本站观点立场,也不构成任何其他建议,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容,不承担相关法律责任。如发现本站文章、图片等内容有涉及版权/违法违规或其他不适合的内容, 请及时联系我们进行处理。

相关推荐