C#通过OPC服务器连接PLC读写数据
OPC是工业控制和生产自动化领域中使用的硬件和软件的接口标准,以便有效地在应用和过程控制设备之间读写数据。O代表OLE(对象链接和嵌入),P (process过程),C (control控制)。
OPC标准采用C/S模式,OPC服务器负责向OPC客户端不断的提供数据。OPC服务器包括3类对象(Object):服务器对象(Server)、组对象(Group)和项对象(Item)。
(1)OPC服务器对象维护有关服务器信息,并作为OPC组对象的包容器,它提供了对数据源进行读/写和通信的接口方法,可以动态地创建或释放组对象。
(2)OPC组对象由客户端定义和维护,它维护有关其自身的信息,提供包容OPC项对象的机制,从逻辑上实现对OPC项的管理。
(3)OPC项对象包含在OPC组中,可由客户端定义和维护。项代表了与数据源的连接,所有的OPC项的操作都是通过包容此项的OPC组对象完成的。
KEPServerEX提供的西门子SiemensTCP/IP驱动能够为用户提供一个OPC服务器接口,将西门子TCP/IP以太网设备连接到OPC客户端应用程序中。
下面以西门子S7-300系列PLC为例,说明如何建立KEPServerEX和该系列PLC的连接。S7-300系列PLC可通过通讯模块CP343实现通信。
2.1 设置KEPServerEX
※新建通道:New Channel
(1)打开“KEPServerEX V5.4”软件,点击软件界面“File”->“New”或者工具栏上的“New Project”,新建一个新工程:
(2)单击软件界面“Click to add a channel.”或者工具栏上的“New Channel”,新建一个通道:
(3)修改通道名“Channel name”或不作修改,单击“下一步”。
(4)选择你想分配给本通道的设备驱动“Device driver”,在下图的下拉列表中选择“Siemens TCP/IP Ethernet”,单击“下一步”:
注意:1、在上图的下拉列表中选择您要连接设备的设备驱动;
2、如果用户在使用过程中没有找到所要连接设备的驱动,则可能是没有进行完全安装,用户应该对KEPServerEX进行修改(Modify)安装。用户在安装KEPServerEX时可根据需要安装所需要的设备驱动或者全部驱动。
(5)选择设备所用的网络适配器“Network Adapter”。这里选择“Default”,单击“下一步”。
(6)对通道进行优化设置“Write Optimizations”,这里保持默认值,单击“下一步”。
(7)设置总结,单击“完成”。
至此,通道新建完成。
(8)用户可通过右键单击或者双击通道名修改通道参数:General、Network Interface、Write Optimizations。
※新建设备:New Device
(1)单击软件界面“Click to add a device”或者工具栏上的“New Device”,进行设备设置。
(2)修改设备名称“Device1 ,单击“下一步”。
(3)选择设备模型“Device model”, 这里我们选择“S7-300”,单击“下一步”。
(4)选择设备ID“Device ID”, 这里指的是所要连接的PLC设备的IP地址。假如IP地址为:192.168.0.155,则设置如下:
(5)设置通信的时间参数“Timing”,这里我们保持默认设置不变,单击“下一步”。
(6)自动降级“Auto-Demotion”设置,这里我们保持默认设置不变,单击“下一步”。
(7)通信参数“Communication Parameters”设置,这里我们保持默认设置不变,单击“下一步”。
(8)设置S7通信参数“S7 Comm. Parameters”等,这里我们保持默认设置不变,单击“下一步”。
其中:Link Type:连接类型,一般选择默认值“PC”;
Rack(0~7):实际机架的位置,应该与STEP7中的对应设置一致;
CPU Slot(1~31):实际连接的PLC的CPU所在的槽位,应该与STEP7中的对应设置一致;(实际上,我用的是3,这里不重新截图了)
注意:这些设置需要和实际连接的PLC的相应设置一致!
(9)设置字节顺序“Byte Order”,这里我们保持默认设置不变,单击“下一步”。
其中:Big Endian:大端模式,Little Endian:小端模式
(10)设置内容的显示,单击“完成”。
(11)用户可通过右键单击->Properties或者双击设备名称修改设备参数:
到这里,opc server的配置已经完成了。正常步骤应该是用C# 或C++ 或VB 写自己 的opc client,连接上opc server去读取数据了。不过可以先做连接测试,验证是否连接上,方法:
1、可以用kepserver 自带的 quick client来测试是否连接上。
※新建标签:New Tag
(1)单击软件界面“Click to add a static tag”,或者工具栏“New Tag”增加一个标签。
(2)设置Tag属性: 重点!!!! 在这里,!!西门子的PLC 的address 要用 DB220DBW130 这种形式,不能是db1900,real220, ,后面这种格式的 用wonderware 公司的smc 做da server时候 读取西门子PLC 用的。切记!
name 要有,随便给,有意义就可以,其他默认,可以选择client access 设置为只读,如果需要。
注意:你填好之后,可以单击“对号”按钮进行测试或帮助。
上述只增加了1个点。
(3)查看数值,点击quick client ,看到自己加的点的数据了。
(4)到这里,就脸上了PLC,并且读取了1 个点的值,其实实际应用中,增加点 item的过程是在自己写的opc client程序中完成的,这里是测试,就手动了。
另外,也可以用其他的opc client做测试,不用 quick client,我这里主要说一下点 地址的格式。如用 takebishi opc client 网上可以下载到的。
配置如下:
1、连接 kep server .opc---connect 会显示本地电脑上的各种opc server,因每个人电脑上安装的不同有差异。
2、增加点 Opc--add item ,因为我刚在kep server 中增加了test 这个点,点击Device1 可以看到那个点,选中test,add item 添加就可以了。看到连接成功,读取到值。
3、如果kep server 中没有想要的点,自己添加,格式为 Channel1.Device1.DB220DBW132,添加。
4、到这里,用takebishi opc client 做测试也完成了。
总结,摸索过程中,我最痛苦的就是添加item的格式问题了。用kep server 和 takebishi opc client 的西门子PLC格式为 DB220DBW132,而我以前都是用wonderware 做server 格式是,db120,real100,
有了opc serve后,就是自己开发opc client了,这个网上很多教程的,要注意里面选用opc server的时候,设置
objServer = new OPCServer(); //创建opc server对象
objServer.Connect("KEPware.KEPServerEx.V5", null); //连接opc server ,因所用opc server不同而不同