上位机开发福利!快速掌握.NET中的Modbus通信

net,modbus · 浏览次数 : 0

小编点评

**安装 NuGet 包** ``` Install-Package Wesky.Net.OpenTools -Version 1.0.8 ``` **开发 Winform 面板** 1. 创建一个新的 Winform 项目。 2. 选择“项目模板”>“Windows Forms”。 3. 配置项目属性,例如项目名称、应用程序名称、启动方法等。 4. 创建一个 Form 对象,并将其添加到窗体中。 **连接 Modbus 服务端** 1. 创建一个新的类,命名为 `ModbusClient`。 2. 使用 `IModbusReadWriteService` 接口实现连接和读写操作。 3. 编写连接操作解析逻辑,例如读取服务端地址,设置连接参数等。 4. 使用静态数组存储客户端连接信息,方便根据连接序号操作不同客户端。 **读取测试** 1. 创建一个新的方法,命名为 `ReadTest`。 2. 使用 `IModbusReadWriteService` 接口的 `ReadInt32` 方法读取第一个客户端的 bool 值。 3. 打印读取的值。 **写入测试** 1. 创建一个新的方法,命名为 `WriteTest`。 2. 使用 `IModbusReadWriteService` 接口的 `Write` 方法写入数据到第一个客户端。 3. 打印写入的值。 **示例代码** ```csharp public class ModbusClient { private readonly IModbusReadWriteService rwService; public ModbusClient() { // 连接到服务端 } public bool ReadTest() { // 获取第一个客户端的 bool 值 } public void WriteTest(int value) { // 将数据写入第一个客户端 } } ``` **注意** * 与服务器端使用的服务端地址和端口有关。 * 可以根据实际需求修改客户端连接信息。 * 可以使用依赖注入的形式,将 `IModbusReadWriteService` 实例化为单例。

正文

 

安装nuget包 Wesky.Net.OpenTools  1.0.8或以上版本。支持.net framework 4.6以上版本,以及所有.net core以及以上版本引用。

 

开发一个简单的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

 

与上位机开发福利!快速掌握.NET中的Modbus通信相似的内容:

上位机开发福利!快速掌握.NET中的Modbus通信

安装nuget包 Wesky.Net.OpenTools 1.0.8或以上版本。支持.net framework 4.6以上版本,以及所有.net core以及以上版本引用。 开发一个简单的Winform界面,用来测试使用。如需该winform的demo,可以在公众号【Dotnet Dancer】后

WPF中以MVVM方式,实现RTSP视频播放

前言视频播放在上位机开发中经常会遇到,基本上是两种常见的解决方案 1.采用厂家提供的sdk和前端控件进行展示,常见的海康/大华都提供了相关sdk及文档 2.开启相机onvif协议,捅过rtsp视频流进行播放,前端可以采用web方式,或者wpf中的视频控件进行展示。 项目需求,决定了最终采用开启相机o

初识上位机(下):C#读写PLC数据块数据

作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去。这里我用两篇小文带你快速进入上位机开发领域。上一篇,我们搭建了一个PLC的模拟仿真环境,本篇我们使用C#开发一个简单的PLC数据读取和写入的应用程序。

初识上位机(上):搭建PLC模拟仿真环境

作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去。这里我用两篇小文带你快速进入上位机开发领域。首先,我们先要搭建一个PLC的模拟仿真环境,以便后续能够使用C#开发上位机程序。

.NET周报【1月第1期 2023-01-06】

国内文章 【开源】基于.net6+gtksharp实现的Linux下的图形界面串口调试工具 https://www.cnblogs.com/flykai/p/17007554.html 由于公司的上位机等硬件项目都是基于Linux操作系统的,软硬件通讯调试麻烦,市面上又没有好用的图形操作软件来实现便

NetCore 开源项目

前言:工作几年了,面试的时候问一堆,实则都是增删改查。感觉做net搞上位机的比较多,然而我一直做的都是web方向。以前还会背八股文,现在工作之后只会增删改,CV了。不知道后面会不会转行,唉~ 这个既是教程也是学习,我想尝试自己去做一个开源的前后端项目,看看我现在到底能做个什么样。 这篇文章,算是个开

【单片机入门】(四)应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用

引言 各位大佬,晚上好啊,在上一篇博客中,我们讲了什么是UART串口通讯,以及使用USB转TTL使得单片机可以和c#上位机做一个串口通讯,接下来,为大家带来PWM的概念原理,以及实际案例,使用PWM对电机进行速度调制,因为本课程的最后是做一个红外遥控的智能小车,所以是需要电机四个,驱动四个,轮胎四个

[转帖]重写Nacos服务发现逻辑动态修改远程服务IP地址

https://www.cnblogs.com/changxy-codest/p/14632574.html 背景 还是先说下做这个的背景,开发环境上了K8S,所有的微服务都注册在K8S内的Nacos,注册地址为K8S内部虚拟IP,K8S内的服务之间相互调用没有问题,但是本机开发联调调用其他微服务就

Blazor Hybrid (Blazor混合开发)更好的读取本地图片

在 Blazor Hybrid 应用中,Razor 组件在设备上本机运行。 组件通过本地互操作通道呈现到嵌入式 Web View 控件。 组件不在浏览器中运行,并且不涉及 WebAssembly。 Razor 组件可快速加载和执行代码,组件可通过 .NET 平台完全访问设备的本机功能。 Web Vi

深度学习框架火焰图pprof和CUDA Nsys配置指南

注:如下是在做深度学习框架开发时,用到的火焰图pprof和 CUDA Nsys 配置指南,可能对大家有一些帮助,就此分享。一些是基于飞桨的Docker镜像配置的。 一、环境 & 工具配置 0. 开发机配置 # 1.构建镜像, 记得映射端口,可以多映射几个;记得挂载ssd目录,因为数据都在ssd盘上