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

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

DotNetty 作为一个半成品,我们不需要关注细节的实现,只需要关注自己的业务即可,所以最主要的就是处理 Codecs 和 Handler。

所有的 Codecs 和 Handler 均直接或间接继承自 ChannelHandlerAdapter。为什么要分为 Codecs 和 Handler,个人理解是 Codecs 负责将消息解码为我们所需的对象或者将处理的结果编码,Handler 对解码得到的对象进行逻辑处理,达到职责分离的目的。

DotNetty 中可以注册多个 Codecs/Handler,入站消息按照注册的先后顺序执行,出站消息按照注册的先后逆序执行。

对于 Client 端:

  • 入站:ModbusDecoder --> ModbusResponseHandler

  • 出站:ModbusEncoder

对于 Server 端:

  • 入站:ModbusDecoder --> ModbusRequestHandler

  • 出站:ModbusEncoder

ModbusDecoder

DotNetty 实现 Modbus TCP 系列 (三) Codecs & Handler

ModbusDecoder 继承了 ByteToMessageDecoder。继承了 ByteToMessageDecoder 的类必须实现的唯一的抽象方法:Decode,该方法将 ByteBuffer 解析为 List,如果 List 不为空则会将该 List 传递给下一个 ChannelHandlerAdapter。

ModbusDecoder 同时为 Client 端和 Server 端使用,如果是 Server 端则将消息解析成请求类,反之如果是 Client 端则将消息解析成响应类。

ModbusResponseHandler

DotNetty 实现 Modbus TCP 系列 (三) Codecs & Handler

将接收到的响应信息加入 responses 供后续处理。

ModbusRequestHandler

DotNetty 实现 Modbus TCP 系列 (三) Codecs & Handler

responseService 为一个抽象类,用来自定义处理接收到的请求并返回结果,需要在实现 Server 端时继承并实现。

DotNetty 实现 Modbus TCP 系列 (三) Codecs & Handler

文中代码仅添加了 0x03 的方法)

ModbusEncoder

DotNetty 实现 Modbus TCP 系列 (三) Codecs & Handler

如果是 ModbusFrame 消息则 Flush,否则传递到下一个 ChannelHandlerAdapter。

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

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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
DotNetty 实现 Modbus TCP 系列 (三) Codecs & Handler

相关文章:

  • 2021-07-10
  • 2021-12-09
  • 2022-12-23
  • 2021-06-14
  • 2022-12-23
  • 2021-05-14
  • 2021-08-01
猜你喜欢
  • 2021-09-12
  • 2021-12-22
  • 2021-06-09
  • 2021-11-05
  • 2021-11-21
  • 2022-01-19
  • 2021-08-09
相关资源
相似解决方案