上位机开发福利!快速掌握.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.得到仪器协议 当我们需要与医疗器械等下位机数据 ...
随机推荐
- [一本通1681]统计方案 题解(Meet in mid与逆元的结合)
题目描述 小\(B\)写了一个程序,随机生成了\(n\)个正整数,分别是\(a[1]-a[n]\),他取出了其中一些数,并把它们乘起来之后模\(p\),得到了余数\(c\).但是没过多久,小\(B\) ...
- Docker 学习路线 3:安装设置 Docker Desktop 与 Docker 引擎指南
Docker提供了一个名为Docker Desktop的桌面应用程序,简化了安装和设置过程.还有另一个选项可以使用Docker引擎进行安装. Docker Desktop网站 Docker引擎 Doc ...
- 十城百校联动!HDC.Together 2023 HarmonyOS学生公开课与千余名校园学子见证鸿蒙力量
8月6日,HDC.Together2023 HarmonyOS学生公开课在东莞松山湖举办.有来自清华大学.北京大学.哈尔滨工业大学等全国百余所高校,千余名学生开发者齐聚会场,与华为高级技术专家.生 ...
- 整理k8s————k8s概念[一]
前言 简单整理一下k8s. 正文 k8s 是基于容器的一套解决方案,那么解决了什么问题呢? 解决了分布式部署问题. k8s 特点: 轻量 开源 弹性伸缩:IPVS 知识图谱: 更多的看官网就好. 结 ...
- IIS 出现405
前言 在一次配置服务器中,出现一个问题,那就是使用put和delete 出现405. 当时我蒙了,调试的时候好好的,部署405. 原因是put和delete是非简单请求,也就是说非安全请求了. 这时候 ...
- 【Oracle】列拆行/对多行数据的单行数据进行分割并多行显示
[Oracle]列拆行/对多行数据的单行数据进行分割并多行显示 参考链接:Oracle 一行字符串拆分为多行_oracle一行拆分成多行-CSDN博客 背景:要对一个表的字段的内容进行分割,分隔符都是 ...
- 力扣607(MySQL)-销售员(简单)
题目: 表: SalesPerson 表: Company 表: Orders 编写一个SQL查询,报告没有任何与名为 "RED" 的公司相关的订单的所有销售人员的姓名. 以 任意 ...
- C++ 访问说明符详解:封装数据,控制访问,提升安全性
C++ 访问说明符 访问说明符是 C++ 中控制类成员(属性和方法)可访问性的关键字.它们用于封装类数据并保护其免受意外修改或滥用. 三种访问说明符: public:允许从类外部的任何地方访问成员. ...
- 一位 sealer maintainer 的心路历程
简介: 本文作者将回顾个人参与 sealer 开源项目的机缘巧合,参与过程中的挑战,以及从中获取的所悟所感,写下一段文字进行分享,希望对开源新人有所帮助,能够激励想参与开源工作但还未踏出第一步的同学. ...
- 最佳实践:使用阿里云CDN加速OSS访问
简介: 用户直接访问OSS资源,访问速度会受到OSS的下行带宽以及Bucket地域的限制.如果通过CDN来访问OSS资源,带宽上限更高,并且可以将OSS的资源缓存至就近的CDN节点,通过CDN节点进行 ...