Modbus 通讯 示例

创建表
数据库创建表有几个范式需要遵守,大家可以去看看。
这里想提一点的就是,表的id字段,或者说记录的索引。
一般比较偷懒的做法就是直接用递增的序列.,一般数据库都有这个特性,自增字段。这个做法具有弊端。刚开始的时候或许还觉着方便,等到后期业务集成化提高的时候,就会发现问题。当多个业务系统进行合并的时候,自增Id不可避免的冲突。某些业务标识也用这个自增Id的时候,会因为这个标识不可更改,给业务的实现和调整带来一些困难。表中可以有自增字段,不建议作为业务中的记录索引。这里推荐采用GUID,理论上是不会重复的,一个系统能遇到的概率,比一个bug产生的概率小太多。如果不能避免程序出现bug,就别提这个。有人可能会说,性能比数字低,传输、存储等效率低、开销大。大家可以去试试有多大影响吧。

  • 设备表:Device Modbus 通讯 示例
    文章图片

  • 点表:TagModbus 通讯 示例
    文章图片


数据库
简单的就选择Mysql,创建数据库monitor
创建表语句

Modbus 通讯 示例
文章图片

数据库创建完成
Modbus 通讯 示例
文章图片


开发环境
本人用C#较多,比较顺手,先不折腾别的。后面有时间可以把python操练一下。另外尝试一下DotNet Core3.0。

Modbus协议
先找个轮子跑起来吧。轮子挺多,这里选择NModbus4。看了一下资料,NModbus4对 DotNet Core3.0支持不太友好,计划做个简单的迁移。之所以这么做,是因为NModbus4 开放写入事件响应接口,这样就可以做到对实时写入数据的监视。或许其他Modbus实现也支持,我还没看到吧。

数据库操作
之前接触过好些orm,这里选择sqlsugar。

工程创建
梳理了一下思路,开干。撸了一下午。基本结构出来了。
【Modbus 通讯 示例】
Modbus 通讯 示例
文章图片

结果展示
服务端显示写入的数据区和地址
客户端显示读取的数据类型等信息
截图如下,基本完成目标。后续有时间继续完善吧
Modbus 通讯 示例
文章图片


    推荐阅读