本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 DotNetty 作为一个半成品,我们不需要关注细节的实现,只需要关注自己的业务即可,所以最主要的就是处理 Codecs 和 Handler. 所有的 Codecs 和 Handler 均直接或间接继承自 ChannelHandlerAdapter.为什么要分为 Codecs 和 Handler,个人理解是 Codecs 负责将消息解码为我们所需的对象或者将处理的结果编码,Handler 对解码得到的对象进行逻辑处理…
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 Client public class ModbusClient { public string Ip { get; } public int Port { get; } public short UnitIdentifier { get; } public IChannel Channel { get; private set; } private MultithreadEventLoopGroup group;…
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 ModbusFunction 类图如下: 如前文所述,所有请求/相应的 PDU 均继承自 ModbusFunction,其子类传入对应的 Function Code 并实现三个方法: CalculateLength:Data 部分的长度(该方法也可以为属性,但属性没有强制性,怕漏掉故改为抽象方法) Decode:从缓冲区解析 Data Encode:在传输前对 Data 编码 实现举例 每个 Function Cod…
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 Modbus TCP/IP 报文 报文最大长度为 260 byte (ADU = 7 byte MBAP Header + 253 byte PDU) Length = Unit Identifier 长度 + PDU 长度 MBAP Header PDU PDU 由两部分构成:Function Code(功能码) 和 Data 组成 Function Code 部分功能码: 报文类 ModbusHeader pub…
本项目的目的是为了学习 DotNetty 与 Modbus 协议,参考 modjn 实现功能 0x01: Read Coils (读取线圈/离散量输出状态) 0x02: Read Discrete Inputs (读取离散量输入值) 0x03: Read Holding Registers (读取保持寄存器值) 0x04: Read Input Registers (读取输入寄存器值) 0x05: Write Single Coil (写单个线圈或单个离散输出) 0x06: Write Sing…
修订版 1.0,1999 年3 月29 日Andy SwalesSchneider 电气公司aswales@modicon.com目录目录............................................................................................................................ 21.该规范的发展概况.............................................…
在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现. 1.移植千的准备工作 为了实现Modbus TCP通讯首先需要下载W5500的驱动源码,可以到WIZnet的官网下载: http://wizwiki.net/wiki/doku.php?id=products:w5500:driver 下载下来的压缩包,解压后如下图: 需要将ethernet文件夹拷贝到我们的项目目录中: 并在IAR的项目下添加相关…
WCF编程系列(三)地址与绑定   地址     地址指定了接收消息的位置,WCF中地址以统一资源标识符(URI)的形式指定.URI由通讯协议和位置路径两部分组成,如示例一中的: http://localhost:8000/ 表明通讯协议为http,位置是localhost(本机)的8000端口.     注意上述提到的消息是指一个独立的数据单元,一般由消息正文和消息头组成,而服务端与客户端的交互都是通过消息来进行的.     WCF中支持的传输协议包括HTTP.TCP.Peer network…
mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名,java类属性类型-数据库字段类型 前面两个都容易设置,但是第三点要求经常会出现java类型和数据库的存储类型不一样, 例如java类型是String,数据库中存储的是char.varchar.text 对于一般常见的类型对应,mybatis已经内部包含了类型转换器,使String类型的java属性…
ldap配置系列三:grafana集成ldap grafana的简介 grafana是一个类似kibana的东西,是对来自各种数据源的数据进行实时展示的平台,拥有这牛逼的外观.给一个官方的demo体验地址: https://play.grafana.org/d/000000012/grafana-play-home?orgId=1 这里提供一个demo截图. grafana的安装 grfana安装的官方参考:http://docs.grafana.org/installation/rpm/ [r…