DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

DotNetty 实现 Modbus TCP 系列 (一) 报文类


ModbusFunction 类图如下:

DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

如前文所述,所有请求/相应的 PDU 均继承自 ModbusFunction,其子类传入对应的 Function Code 并实现三个方法:

  • CalculateLength:Data 部分的长度(该方法也可以为属性,但属性没有强制性,怕漏掉故改为抽象方法)

  • Decode:从缓冲区解析 Data

  • Encode:在传输前对 Data 编码

实现举例

每个 Function Code 均对应 ModbusFunction 的两个子类:请求类和响应类,以 0x03(读取保持寄存器值)为例:

请求类

请求报文 Data 说明:

DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

响应类

响应报文 Data 说明:

DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

其中 ModbusCommand 为 Function Code 的枚举:

DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

文中为方便理解请求类和响应类均直接继承 ModbusFunction,实际开发中请求类和响应类均没有直接继承 ModbusFunction,而是根据其他 Function Code 的 Data 进行再次抽象后继承。

开源地址:https://github.com/VictorBu/modbus-tcp

原文地址:https://www.cnblogs.com/victorbu/p/10370286.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例