上位机开发福利!快速掌握.NET中的Modbus通信
安装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通信的更多相关文章
- Winform 快速开发框架,上位机开发,工控机程序开发,CS程序开发
1.当客户让你做个CS程序时,当你手上一穷二白,所有都要重复造轮,你是不是很烦. 2.但如果有一个通用的,快速开发框架,就可以把你从这些基础的工作解救出来,你专注做业务就好了. 3.本人其中一个项目的 ...
- 上位机开发之三菱Q系列PLC通信实践
经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...
- 上位机开发之三菱FX3U以太网通信实践
上次跟大家介绍了一下上位机与三菱Q系列PLC通信的案例,大家可以通过点击这篇文章:上位机开发之三菱Q系列PLC通信实践(←戳这里) 今天以三菱FX3U PLC为例,跟大家介绍一下,如何实现上位机与其之 ...
- 上位机开发之西门子PLC-S7通信实践
写在前面: 就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况.然后对于西门子PLC来说,通信方式有很多,下面简单列举一下: ...
- 【专题教程第8期】基于emWin模拟器的USB BULK上位机开发,仅需C即可,简单易实现
说明:1.如果你会emWin话的,就可以轻松制作上位机.做些通信和控制类上位机,比使用C#之类的方便程度一点不差,而且你仅会C语言就可以.2.并且成功将emWin人性化,可以做些Windows系统上的 ...
- USBCAN的使用和上位机开发(MFC)
USBCAN使用手册 参见:https://blog.51cto.com/12572800/2062839 1. USB CAN软件安装与硬件接线 USB CAN是常用的CAN测试工具.它的软件资料存 ...
- C#上位机开发(二)—— Hello,World
上一篇大致了解了一下单片机实际项目开发中上位机开发部分的内容以及VS下载与安装,按照编程惯例,接下来就是“Hello,World!” 1.新建C#项目工程 首先选择新建Windows窗体应用(.NET ...
- 周立功USBCAN-II 上位机开发(MFC)
使用的USB转CAN的设备是周立功的USBCAN-II,在购买的时候,会有上位机二次开发的库文件.例程和API文档等材料,可以参考. 1.库函数的调用 首先,把库函数文件都放在工作目录下.库函数文件总 ...
- C#上位机开发(一)—— 了解上位机
在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形.温度等).用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 — ...
- 医疗器械c#上位机开发指引教程
此教程面向的读者:对医疗器械上位机编程有兴趣,或者急需了解医疗器械(尿常规.血液分析.生化.心电.B超等医疗下位仪器)的编程流程.编程细节的程序员. 1.得到仪器协议 当我们需要与医疗器械等下位机数据 ...
随机推荐
- Java HashMap 和 HashSet 的高效使用技巧
Java HashMap HashMap 是一种哈希表,它存储键值对.键用于查找值,就像数组中的索引一样.HashMap 的优势在于它可以使用任何类型作为键,并且查找速度很快. 创建 HashMap ...
- 敲重点!HarmonyOS这些更新将会影响原子化服务上架
原文:https://mp.weixin.qq.com/s/t-MaHqYiJ3z-QxaIsgWNPA,点击链接查看更多技术内容. 一.引言 随着原子化服务生态的发展,我们的业务诉求也在不断地变化, ...
- ViT:拉开Trasnformer在图像领域正式挑战CNN的序幕 | ICLR 2021
论文直接将纯Trasnformer应用于图像识别,是Trasnformer在图像领域正式挑战CNN的开山之作.这种简单的可扩展结构在与大型数据集的预训练相结合时,效果出奇的好.在许多图像分类数据集上都 ...
- IaC:实现持续交付和 DevOps 自动化的关键
基础架构即代码(IaC)和 CI/CD 流水线最初似乎并不匹配.因为它们代表了两种不同的流程.IaC 主要关注基础设施的配置和开发,而 CI/CD 则围绕软件开发.测试和部署. 然而,将 IaC 集成 ...
- 如何解决打不开Microsoft Store的痛处?
换了机房后,我最喜欢的计算器和画图3d没有了,网上的方法都行不通,怎么办? 第一步,在百度上搜索你想安装的东西,例如我搜索的画图3d,就会有这个链接. 然后,把这个链接复制到这个网站的搜索框中,就会有 ...
- 力扣29(java)-两数相除(中等)
题目: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 整数除 ...
- HarmonyOS NEXT应用开发之MpChart图表实现案例
介绍 MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI.本示例主要介绍如何使用三方库MpChart实现柱状图U ...
- 基于开放共享的自主研发—MaxCompute 持续增强生态与开放性建设
简介: MaxCompute 是阿里巴巴自研的云原生数据仓库,同时也兼容大部分大数据生态系统.一个平台无法实现所有功能和解决所有问题,MaxCompute 需持续增强生态与开放性建设,方能走得更远. ...
- Serverless 工程实践 | 快速搭建 Kubeless 平台
简介: Kubeless 是基于 Kubernetes 的原生无服务器框架.其允许用户部署少量的代码(函数),而无须担心底层架构. 快速搭建 Kubeless 平台 Kubeless 简介 Kube ...
- 深入浅出FlatBuffers原理
简介: FlatBuffers 是一个开源的.跨平台的.高效的.提供了多种语言接口的序列化工具库.实现了与 Protocal Buffers 类似的序列化格式.主要由 Wouter van Oortm ...