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

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

安装nuget包:Wesky.Net.OpenTools 

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

图片

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

图片

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

图片

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

图片

读取测试。

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

图片

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

图片

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

图片

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

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

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

图片

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

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

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

图片

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

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

图片

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

图片

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

图片

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

引入地址

NModbus What is it? ----------- NModbus is a C# 3.0 implementation of the Modbus protocol. More information at the NModbus project web site http://nmodbus.com/ The Latest Version ------------------ The latest binary distribution can be found on the NModbus project web site http://nmodbus.com/ The latest source for the project can be found at the NModbus project's google code page http://code.google.com/p/nmodbus/ Documentation ------------- Documentation is available in chm format (NModbus.chm) License ------- Copyright (c) 2006 Scott Alexander Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值