上位机和工控必备!用.NET快速搞定Modbus通信的方法

modbus通信在当前的工业领域、制造业自动化、以及各类控制系统内,都属于绕不开的话题。接下来介绍一个可以简单快速实现modbus通信读写的方式,供参考。

安装nuget包:Wesky.Net.OpenTools 

使用 1.0.8或以上版本。支持.net framework 4.6以上,以及所有.net core以及以上所有.net环境项目引用。

d6e9e81b7bbb7e33535a1249870e2a4a.png

开发一个简单的Winform界面,用来测试使用。如需该winform的demo,可以在公众号【Dotnet Dancer】后台,回复 modbus 即可获取。

2b3ca03de80441d3d93038a513a4478d.png

通信连接之前,可能存在多个客户端。可以写一个modbus客户端的静态数组存储。例如有五个客户端:

ac6445ad0d27cca706584348cab9f4aa.png

连接操作解析:假设有5个连接,此处都使用同一个服务端地址,实际情况请根据自己需要进行调整。连接后的客户端,存储到静态变量里面备用,这样可以自己根据modbus连接序号,来操作不同连接进行通信。

68431f4bdb1c42f37735a12e0834140b.png

读取测试。

例如连接的第一个客户端读取bool类型的值。说明:IModbusReadWriteService接口如果你是使用依赖注入的形式,可以把它注入进来使用。此处没有使用依赖注入,则直接实例化出来使用。

fca3836dae1ec06126512d6eb793f747.png

IModbusReadWriteService接口一共提供了以下几种方法。其中,读取类型除了字符串以外,默认都是支持读取批量数据,而不是只读取一个。写入除了bool类型(线圈)和字符串,其他都支持批量写入。

dd8027d16a7a3200f2e52ed5605d564c.png

例如第二个连接客户端,用来读取short类型数据(C# 的short类型,而不是PLC的short类型,某些plc对short的定义不太一样,请提前做了解)

212316af83af429c0bbc3a5ea91a86b0.png

其他以此类推,都是实例化后的读写对象,使用读取不同的函数来实现不同的写入数据类型的效果。例如下面示例:ReadInt32代表读取Int32类型的数据。参数里面,address是设备地址,或者PLC的寄存器地址等;length是读取的长度,长度单位为byte的长度,而不是地址个数。第三个参数,里面包括了modbus客户端信息,包括socket客户端、连接配置信息等。

IModbusReadWriteService rwService = new ModbusReadWriteService();
var result = rwService.ReadInt32(address, length, modbusTcpClients[2]);

客户端参数实体类如下。MessageCode是消息码头部,如果是同一个PLC或者服务端,客户端连接该服务端进行读写消息时候,必须不一样,否则会导致modbus服务端不知道是谁请求的。这个也可以当做是唯一标识符,modbus服务端用来识别是哪个客户端发的消息的。

fdb042c8b84d712a8e6f0d562c60b1b4.png

如果想了解modbus的一些细节,可以参考我之前的文章《Modbus TCP协议解析、仿真环境以及基于.NET实现基础通信》,该文章讲解了协议规则、通信上的避坑说明、仿真环境使用,以及bool线圈的读写操作。链接地址:

https://mp.weixin.qq.com/s/VLlwYCaxwqyhv2Os0hPS5g

写入操作。写入线圈操作:

33f3b02f1832a75e60b7324586ccf04d.png

写入操作,方法为Write开头,后面接写入什么类型的值。第一个参数是写入地址,第二个参数是写入的值,第三个参数代表传入连接的客户端。

例如写入,写入支持批量写入,传入对应类型的数组,地址提供第一个地址即可,批量写入会自动在后面的地址累计写入。以下是简单参考,例如循环里面写入数据每次累加1,然后传入方法里面进行写入。

07e6f7a71b85c3b909e8f7b7aacbd09b.png

如果只写入一个,那就传一个数组元素即可:

75b08d57e93862ae212bcf6c2017112a.png

使用以上方式,测试一款使用modbus协议的某品牌系列PLC期间的读写效率日志,供参考:

d7033de675b735ff026f852afacc9ddb.png

谢谢观看。如果觉得以上内容对你有帮助,欢迎点赞、转发和在看。也欢迎关注我的公众号: Dotnet Dancer

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值