基于C#语言的工业计算机与S7-300的OPC通讯
2011-11-18黄希敏
黄希敏
(陕西教育学院,陕西 西安 710100)
1 前言
OPC(OLE for Process Control)是一种用于工业数据通讯的标准协议,使开发人员能够方便的按照OPC协议编程实现OPC客户端程序与OPC服务器之间的通讯。为了实现工业计算机与S7-300的实时数据通讯,本文以西门子公司的SIMATIC NET作为OPC服务器,使用C#语言编程实现OPC客户端程序与SIMATIC NET OPC服务器之间的数据通讯。
2 SIMATIC NET OPC服务器及连接配置
SIMATIC NET是西门子在工业控制系统提供的一个开放的、多元的通讯系统,可以实现工业现场的PLC、主机、工作站和个人电脑联网通讯。通讯的网络包括了工业以太网、PROFIBUS、PROFIBUS-PA等。SIMATIC NET OPC服务器不但提供了数据访问的接口,同时还提供了报警和事件的接口等多种功能。
为了能够让SIMATIC NET系统正常的工作,必须安装SIMATIC NET软件。网络通讯方式为工业以太网。按照OPC接口的规定,C或C++语言编写的客户机应用程序可以使用自定义接口和自动化接口。其他的编程语言(如VB,Delphi,C#等)编写的客户机应用程序只能使用自动化接口。
2.1 安装软件
工业计算机的操作系统为XP系统,SIMATIC NET软件的版本为SIMATIC.NET 2006,编程环境为Microsoft Visual Studio 2008。当SIMATIC NET软件安装成功后,在桌面上可以看到Station Configuration、SIMATIC Manager等的快捷图标。
2.2 OPC服务器与S7-300连接通讯
首先,打开 SIMATIC NET软件的 Station Configuration Editor窗口进行PC硬件机架的配置,在打开的窗口中依次在第一行和第三行插入OPC Server和IE General,同时还需要对工业计算机的网络进行配置,以保证PC站的IP地址与S7-300的IP地址属于同一IP段。以上操作完成后,点击“Station Name”按钮来给PC指定一个名称,例如:“ethernetOPC”。图1为PC硬件机架的配置界面截图。
图1 PC硬件机架的配置Fig.1 configuration of PC hardware chassis
其次,打开Configuration Console窗口对控制台进行配置。在打开的窗口中首先可以查看到以太网的模式已经从PG mode切换到Configuration mode,然后单击“Access Points”把S7ONLINE的指向选项选为“PC internal(local)”。
最后,打开 SIMATIC Manager窗口,通过“File→New”创建一个新项目,如:“S7300OPC”。通过“Insert→Station→Simatic PC Station”插入一个PC站,并且命名与上述命名的PC站名称相同,本文中即“ethernetOPC”。创建成功后,双击Configuration进入PC Station组态,从硬件目录串口选择与已安装的SIMATIC NET软件版本相符的硬件插入到与上述PC硬件机架对应的位置。双击“Configure Network”进行NetPro配置,选择OPC Server连接表的第一行,通过“Insert→New Connection”来建立一个新的连接,在弹出的连接属性画面中,选择“S7 connection”属性。然后在“S7 connection”属性窗口中按照提示输入S7-300与工业计算机的IP地址,双击“Address Details”设置符合S7-300的机架号0和插槽号2。上述操作完成后,编译无误后保存。
上述步骤完成后,就实现了S7-300与SIMATIC NET OPC服务器的数据通讯,可以通过OPC Scout来检查连接是否正常。图2为OPC Scout的运行界面截图。
图2 OPC Scout的运行界面截图Fig.2 Screenshot of running interface of OPC Scout
图2 中,Item Names项为S7 PLC站的变量地址。例如:S7:[S7 connection_1]DB400,INT44中,S7为协议ID,这是S7协议规定的;[S7 connection_1]为连接名,这是用户定义的OPC连接字符串标识名;DB400为数据块,INT44为变量的类型和地址。OPC Scout要能够正常的访问S7 PLC站的变量地址,必须严格按照上述的变量编址方式。
3 OPC客户端程序的软件实现
本文研究的OPC客户端与SIMATIC NET OPC服务器的数据通讯,实际是为了实现S7-300与工业计算机的数据通讯。在已经配置好的SIMA-TIC NET OPC服务器的基础上,确定了OPC Server名“OPC.SIMATICNET”和采用自动化接口,并且严格按照S7 PLC站的变量编址方式,可以编程实现基于C#编程语言的OPC客户端程序与SIMATIC NET OPC服务器通讯。图3为实现OPC客户端与OPC服务器连接通讯的程序流程图。
(1)添加引用。OpcRcw.DA和OpcRcw.Comn是西门子提供的关于OPC通讯的两个动态链接库文件。在C#编程环境中引用这两个文件,调用这两个动态连接库中的接口函数。
图3 OPC客户端与OPC服务器通讯程序流程图Fig.3 Flow chart of communication between OPC client and OPC server
using OpcRcw.Comn;
using OpcRcw.Da;
(2)定义OPC相关变量。在进行与OPC服务器的连接之前,首先要定义OPC相关的变量,其中包括:OPC的服务器名,OPC服务器的对象名等。
internal const string SERVER_ NAME =“OPC.SIMATICNET“;//OPC服务器名
private IOPCServer pIOPCServer;//定义OPCServer对象
…
(3)实现与OPC服务器的连接。public bool ConnectServer(string node_name,out string error),其中node_name为OPC服务器的计算机名称,连接过程中的错误信息捕捉给error输出。函数返回true和false,分别代表成功和失败。具体的步骤:创建服务器对象创建OPC组对象-向组对象中添加多项OPC客户端读写操作。
(4)创建服务器对象。pIOPCServer=(IOPCServer)System.Activator.CreateInstance(svr-Componenttyp)
(5)创建OPC组对象。public bool AddGroup(string groupName,int bActive,int updateRate,out string error),其中groupName为创建组对象的组名,bActive为组的激活状态,updateRate为组的刷新频率,创建组对象过程中的错误信息捕捉给error输出。函数返回true和false,分别代表成功和失败。
(6)向组对象中添加多项。public bool AddItems(string[]itemsName,int[]itemsID,out string error),其中itemsName为要添加的项的名称,是一个字符串数组,itemsID为与字符串数组相对应的序号数组。添加项对象过程中的错误信息捕捉给error输出。函数返回true和false,分别代表成功和失败。
(7)OPC客户端读写操作。OPC客户端进行读写操作之前,首先要根据通讯方式是同步还是异步,从而实例化指针IOPCSyncIO/IOPCAsyncIO接口。本文的OPC客户端通讯采用同步方式。
实际应用过程中,IOPCSyncIO接口分别提供了读、写的方法,即 IOPCSyncIO.READ和IOPCSyncIO.WRITE。
(8)断开与OPC服务器的连接。public bool Close(out string error),其中,断开连接过程中的错误信息捕捉给error输出。函数返回true和false,分别代表成功和失败。在程序断开与OPC服务器的连接之前,必须先删除已经创建的OPC对象并且释放内存。
上述利用C#编程语言实现OPC客户端程序与SIMATIC NET OPC服务器的数据通讯,在OPC通讯客户端系统界面上实时显示了数据的读写情况。图4为OPC通讯客户端运行界面截图。
图4 OPC通讯客户端程序运行界面Fig.4 program running interface for client of OPC communication
4 结束语
以SIMATIC NET OPC为服务器,S7-300与SIMATIC NET OPC服务器连接配置,采用C#计算机编程语言实现了OPC客户端程序与OPC服务器的数据读写操作。通过多次的应用测试证明,OPC客户端程序运行可靠,操作简单,符合现场对实时监控的要求。
[1] Christian Nagel Bill Evjen Jay Glynn著,李铭译.C#高级编程(6版)[M].北京:清华大学出版社,2008,11.
[2] 罗斌,罗顺文.Visual C#2005编程技巧大全[M].北京:中国水利水电出版,2007.
[3] 蒋秀凤,何凤英.Oracle 9i数据库管理教程[M].北京:清华大学出版社,2005.
[4] 滕永昌.Oracle 9i数据库管理员使用大全[M].北京:清华大学出版社,2004.
[5] 阳宪惠.工业数据通讯与控制网络[M].北京:清华大学出版社,2003.