C#上位机与S7-1200PLC通过OPC方式通讯---读写数据
一、OPC介绍
OPC(OLE for Process Control)工业控制和生产自动化领域中使用的硬件和软件的接口标准,以便有效地在应用和过程控制设备之间读写数据。我们在使用过程中就把它理解一套协议或者规范,主要用于工控领域。OPC中有很多规范,这里使用OPC DA规范来进行数据的读写操作。
OPC标准采用C/S模式,OPC服务器负责向OPC客户端不断的提供数据。OPC服务器包括3类对象(Object):服务器对象(Server)、组对象(Group)和项对象(Item)。
在客户端开发时,要使用OpcServer对象来实现客户端与Opc服务器之间的连接。一个OpcServer对象下有多个OpcGroup,一个OpcGroup下有多个OpcItem,在自定义接口下的Client开发,是以Group为单位的操作,数据读写都是通过OpcGroup进行的。
二、OPC服务器连接PLC
对于OpcSever,我选用的是KEPServer来与PLC进行通讯,当然也可以使用西门子的Simatic Net。
那么KEPServer的基本原理是什么?
在C#中我们需要调用动态库Interop.OPCAutomation.dll(使用Simatic Net的话,动态链接库会不同),这个动态库可以理解为是KEPServer的一个客户端,这个客户端给我我们提供读写PLC的接口,我们通过接口调用,与KepServer服务端交互,实现PLC操作。
KEPServerEX提供的西门子SiemensTCP/IP驱动能够为用户提供一个OPC服务器接口,将西门子TCP/IP以太网设备连接到OPC客户端应用程序中。
下面以西门子S7-1200系列PLC为例,说明C#如何通过KEPServer如何与PLC通讯。(以下配置是我在测试时实际配置,大家在测试时可根据自身情况进行)
1.硬件软件配置
?博途V15(或其他)
?Visual Studio2017 .Net Framework 4.6
?KEPServerEX5
?S7-1200PLC
2.编写PLC程序
做通讯测试之前,先编写好PLC的程序,建立读取的数据和写入的数据。
PLC的IP地址:10.10.10.130
该测试案例最终实现的结果:在C#端能读取PLC的数据,也能向PLC中写入数据。写完后下载到PLC中。
程序中我用到了以下变量:(在PLC端我写了一组流水灯程序,用到了4个DO点;同时读取的两个real型数据也进行了自加处理,便于查看读取效果。)
2. KEPServer配置
这里对关键配置说明
第一步:新建通道:New Channel
l 注:①新建通道后修改通道名“Channel name”或不作修改,单击“下一步”。如下将通道名“Channel name”修改为“西门子S7-1200”。
②选择设备驱动“Device driver”,在下图的下拉列表中选择“Siemens TCP/IP Ethernet” 。
第二步:新建设备:New Device
l 注:①修改设备名称“Device name”,修改为“PLC”。
②选择设备驱动“Device driver”,在下图的下拉列表中选择“Siemens TCP/IP Ethernet”
③选择设备模型“Device model”,选择“S7-1200”。
④选择设备ID“Device ID”, 这里指的是所要连接的PLC设备的IP地址。为:10.10.10.130,则设置如下:
⑤Rack(0~7):实际机架的位置,应该与STEP7中的对应设置一致;
⑥CPU Slot(1~31):实际连接的PLC的CPU所在的槽位,应该与STEP7中的对应设置一致;
第三步:新建标签:New Tag
l 注:变量地址一定与PLC地址及数据类型一致!
建立好标签后如图:
测试与PLC的连接状态:
三、OPC Client端读取OPC服务器数据。
在OPCServer端配置好后,进行OPCClient端的操作。
OPC 读数有三种方式:同步、异步、订阅。OPC 写数有两种方式:同步、异步。(它们之间的区别可查阅相关资料)
采用自动化接口,OPC服务器使用的是KepserverEx.V5,采用订阅方式读取数据(属于异步读取方式),异步写入数据。
1.VS2017新建“Windows窗体应用(.NET Framework)”项目。窗体中添加Label、TextBox、Button等控件,客户端界面如图所示:
2. 新建C#工程后添加动态链接库:Interop.OPCAutomation.dll,添加命名空间:using OPCAutomation;(使用SIMATIC NET添加的命名空间不同)
3. 定义OPC相关变量
4. 建立连接对象
单击“连接OPC服务器”按钮,连接服务器
5. 设置组属性
6. 建立OPC标签集合
语法格式为:objItems.AddItems(Num, ref strItemIDs, ref lClientHandles, out lserverhandles, out lErrors, RequestedDataTypes, AccessPaths);
7.定义异步事件
8. 订阅方式读数据
void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
9. 异步写数据
语法格式:
objGroup.AsyncWrite(int NumItems, ref SerHandles, ref AsyncValue_Wt, out lErrors_Wt,lTransID_Wt, out lCancelID_Wt);
void AsyncWriteComplete(int TransactionID, int NumItems, ref Array ClientHandles,ref Array Errors)
{
MessageBox.Show("数据写入成功!");
}
10. 释放资源
用完资源释放:语法格式
11. 运行C#程序。
四、通讯测试
见图片和视频,可以看到数据能成功读取和写入。
本文暂时没有评论,来添加一个吧(●'◡'●)