C#通信类库
Posted HwLib慧兰博
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#通信类库相关的知识,希望对你有一定的参考价值。
对于搞工控的同学来说,使用C#大多是为了开发SCADA。虽然在大型项目中使用组态软件具有无法比拟的优势,但是对于小型项目,尤其是设备制造商来说,使用C#开发SCADA有着非常大的成本优势。除此之外,使用C#开发一些控件来拓展组态软件不具备的功能也是一个方向,比如我们的WinCC数据报表控件就是一个例子。
SCADA的开发过程中有个非常重要的部分就是通信。工业自动化涉及的硬件厂商多、设备种类多,因此相关的通信协议也很多。目前主流的有S7协议、Modbus RTU/TCP协议、OPC协议等等。对于这些协议,目前市面上基本都有相应的开源或者免费组件,比如S7协议有SNAP7,OPC DA有OPC基金会的OPCAutomation.dll等。既然如此,那我们还有必要再开发通信类库吗?我觉得是有必要的。原因如下:
1、
现有的类库或者组件使用较复杂,编程工作量较大;
有鉴于此,我们有了这样的一个想法,那就是开发一个统一的通信类库,集成各种主流通信协议。
不论使用哪种协议,我们都可以调用同样名称的方法。
而且该类库应该具备更多的功能,比如读写、重连等,而我们只需要知道变量名就可以进行读写操作。
HwLib.Communication
就是这样的一款控件。由于刚出来不久,目前它只支持S7和OPC DA两种协议,后续将会集成更多的通信协议,比如Modbus、FINS等。HwLib.Communication通信类库最大的优势就是使用简单,开发效率高。下面我们分别以OPC和S7通信为例来介绍。
首先我们创建一个新项目,引用类库HwLib.Communication。
然后在窗体加载时实例化HwLib.Communication中的S7协议。实例化时需要三个参数,分别是目标PLC的IP地址、机架号和槽号。
然后我们调用S7协议的Add方法开始注册变量。下图中我们注册了两个变量,Tag1和Tag2,这两个变量是我们在项目中的其它地方访问PLC数据的标记。我们不需要再关注地址什么的,只需要使用这两个变量名即可,就像我们在组态软件中使用标签名一样。
上图中我们添加了两个变量,地址分别是DB1.DBD14和DB1.DBX0.1,数据类型分别是浮点型和布尔型。添加了变量后,我们在窗体上添加一个定时器和两个文本框。在定时器的触发事件中我们读取这两个变量的值显示到文本框里。
从上图中可以看到,控件使用非常简单,我们只需要根据变量名就可以获取数据。数据的读取由控件后台自动执行。保存并运行程序,我们就可以看到效果了。
如果要写数据的话也很简单。窗体上添加一个按钮,点击事件中写入下面代码。
上图中的代码很简单,调用Write方法,将变量“Tag1”的值更新为99.9。保存并运行程序,点击按钮就可以看到效果了。
OPC DA
通信也是一样,首先实例化类库中的OPC DA协议。
实例化OPC DA协议需要两个参数,分别是计算机地址和OPC服务器名称。如果本机的话就填“127.0.0.1”。然后也是一样的调用Add方法注册变量信息。
两个参数分别是变量名和OPC标签名称。因为OPC DA协议传递的是object类型,所以在注册变量信息时无需数据类型参数。注册了变量后,我们在窗体上添加一个定时器和两个文本框。在定时器的触发事件中我们读取这两个变量的值显示到文本框里。
从上图中可以看到,无论是S7还是OPC,它们的使用方法都是一样的,我们只需要根据变量名就可以获取数据。数据的读取由控件后台自动执行。保存并运行程序,我们就可以看到效果了。
如果要写数据的话也很简单。窗体上添加一个按钮,点击事件中写入下面代码。
上图中的代码很简单,调用Write方法,将变量“Tag1”的值更新为99.9。保存并运行程序,点击按钮就可以看到效果了。
后续我们还将在类库中集成Modbus TCP、FINS等协议,为自己使用C#开发SCADA提供更多的选择。
HwLib.Communication将跟随《C#与工业自动化》教程的U盘版一起发布。只要您订购我们的《C#与工业自动化》U盘版即可免费获取该控件(不提供源码)。如果您之前购买过《C#与工业自动化》的exe版本,也可以选择升级到U盘版来获取。
HwLib(慧兰博)技术团队专注于高端自动化技术,如果您对我们的技术教程感兴趣的话,可以X宝上搜索店铺“hwlib”或者“慧兰博”
关于HwLib(慧兰博)技术团队的更多信息:www.hwlib.com.cn
HwLib(慧兰博)技术团队技术资料:
https://www.jianguoyun.com/p/DR20ZAEQq_K3CBivk5kD
或者
https://pan.baidu.com/s/1cInKRSJIRcKQHylV3gafmw
提取码:0s3j
往期导读
专注于工业自动化高端编程应用
以上是关于C#通信类库的主要内容,如果未能解决你的问题,请参考以下文章
客户端类库与web服务/web服务与服务端类库的通信
C#异步编程之async/await
C#个人通信录,里面有个登陆的if (OpertDB.ExecuteReader(sql))这一句不知道怎么解决
Java类库和包有啥区别?
详解C# 网络编程系列:实现类似QQ的即时通信程序
详解C# 网络编程系列:实现类似QQ的即时通信程序