计算机系统应用教程网站

网站首页 > 技术文章 正文

C_Sharp作上位机与西门子PLC通讯 数据读写

btikc 2024-09-17 13:25:20 技术文章 52 ℃ 0 评论

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#程序。

四、通讯测试

见图片和视频,可以看到数据能成功读取和写入。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表