快捷搜索:  汽车  科技

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)在C#中我们需要调用动态库Interop.OPCAutomation.dll(使用Simatic Net的话,动态链接库会不同),这个动态库可以理解为是KEPServer的一个客户端,这个客户端给我我们提供读写PLC的接口,我们通过接口调用,与KepServer服务端交互,实现PLC操作。那么KEPServer的基本原理是什么?在客户端开发时,要使用OpcServer对象来实现客户端与Opc服务器之间的连接。一个OpcServer对象下有多个OpcGroup,一个OpcGroup下有多个OpcItem,在自定义接口下的Client开发,是以Group为单位的操作,数据读写都是通过OpcGroup进行的。二、OPC服务器连接PLC对于OpcSever,我选用的是KEPServer来与PLC进行通讯,当然也可以使用西门子的Simatic Net。

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进行的。

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(1)

二、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型数据也进行了自加处理,便于查看读取效果。)

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(2)

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的c区(Sharp作上位机与西门子PLC通讯)(3)

测试与PLC的连接状态:

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(4)

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(5)

三、OPC Client端读取OPC服务器数据。

在OPCServer端配置好后,进行OPCClient端的操作。

OPC 读数有三种方式:同步、异步、订阅。OPC 写数有两种方式:同步、异步。(它们之间的区别可查阅相关资料)

采用自动化接口,OPC服务器使用的是KepserverEx.V5,采用订阅方式读取数据(属于异步读取方式),异步写入数据。

1.VS2017新建“Windows窗体应用(.NET Framework)”项目。窗体中添加Label、TextBox、Button等控件,客户端界面如图所示:

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(6)

2. 新建C#工程后添加动态链接库:Interop.OPCAutomation.dll,添加命名空间:using OPCAutomation;(使用SIMATIC NET添加的命名空间不同)

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(7)

3. 定义OPC相关变量

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(8)

4. 建立连接对象

单击“连接OPC服务器”按钮,连接服务器

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(9)

5. 设置组属性

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(10)

6. 建立OPC标签集合

语法格式为:objItems.AddItems(Num ref strItemIDs ref lClientHandles out lserverhandles out lErrors RequestedDataTypes AccessPaths);

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(11)

7.定义异步事件

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(12)

8. 订阅方式读数据

void KepGroup_DataChange(int TransactionID int NumItems ref Array ClientHandles ref Array ItemValues ref Array Qualities ref Array TimeStamps)

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(13)

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. 释放资源

用完资源释放:语法格式

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(14)

11. 运行C#程序。

四、通讯测试

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

组态王读取西门子plc的c区(Sharp作上位机与西门子PLC通讯)(15)

猜您喜欢: