1
PLC编程实用指南
1.10.3.6 6.3.6  计算机用OPC编程
6.3.6 计算机用OPC编程

1.OPC概述

早期,程序间的数据交换用是动态数据链(DDE)。其缺点是速度慢。OPC Server/Client是OLE for Process Control的缩写,是一套利用微软的COM/DCOM技术,把OLE应用于工业控制领域。是微软处理程序间通信、数据交换的新技术。是DDE的进一步发展。

OPC Server(服务器)提供了许多的接口,Client(客户)端透过这些接口,可以取得与OPCServer相连的硬件装置的信息,而无须了解这些硬件装置的细节信息。这样,使用OPC即可把通信程序与应用程序分开。通信程序用于与PLC通信,与PLC交换数据,做OPC的服务器,Serv-er。而应用程序作为OPC的客户,Client,与通信程序交换数据。有了这个OPC,应用程序可很容易实现对PLC监控、数据采集等功能了。

用于PLC的OPC服务器除了自身实现与PLC通信的功能外,还要有一组一组接口(inter-face),以通过这些接口为客户提供服务。

OPC服务器接口由3类对象组成,相当于3种层次上的接口:服务器(Server)、组(Group)和数据项(Item)。

(1)服务器对象(Server)拥有服务器的所有信息,同时也是组对象(Group)的容器,一个服务器对应于一个OPC Server,即一种设备的驱动程序。在一个Server中,可以有若干个组。操作系统用CLSID,即128位长的标识码,识别。在每一这类文件安装时,由操作系统向其指定唯一的标识码。

(2)组对象(Group)拥有本组的所有信息,同时包容并逻辑组织OPC数据项(Item)。组是应用程序组织数据的一个单位。客户可对之进行读写,还可设置客户端的数据更新速率。当服务器缓冲区内数据发生改变时,OPC将向客户发出通知,客户得到通知后再进行必要的处理,而无需浪费大量的时间进行查询。OPC规范定义了两种组对象:公共组(或称全局组,public)和局部组(或称局域组、私有组,Local)。公共组由多个客户共有,局部组只隶属于一个OPC客户。全局组对所有连接在服务器上的应用程序都有效,而局域组只能对建立它的Client有效。一般说来,客户和服务器的一对连接只需要定义一个组对象。在一个组中,可以有若干个项。

(3)数据项(Item)是读写数据的最小逻辑单位,一个项与一个具体的位号相连。项隶属于某一个组。是服务器端定义的对象,通常指向设备的一个寄存器单元。OPC客户对设备寄存器的操作都是通过其数据项来完成的。通过定义数据项,OPC规范尽可能地隐藏了设备的特殊信息,也使OPC服务器的通用性大大增强。OPC数据项并不提供对外接口,客户不能直接对之进行操作,所有操作都是通过组对象进行的。

应用程序作为OPC接口中的客户(Client)方,硬件驱动程序作为OPC接口中的服务器(Server)方。每一个OPC Client应用程序,都可接若干个OPC Server,每一个硬件驱动程序可以为若干个应用程序提供数据。

客户操作数据项的一般步骤为

1)通过服务器对象接口枚举服务器端定义的所有数据项。

2)将要操作的数据项加入客户定义的组对象中。

3)通过组对象对数据项进行读写等操作。

每个数据项的数据结构包括三个成员变量:即数据值、数据质量和时间戳。数据值是以变量类型表示的。

……

有的厂商PLC不提供通信协议,只提供OPC服务程序。而用OPC实现通信比较方便,故越来越多被采用。

2.FinsGateway

FinsGateWay现在版本是finsgateway2003。是欧姆龙的FINS协议的驱动程序。通过该驱动,上位机可以通过各层网络(包括网络互连)来访问网上的PLC。若采用运行版(Run-time版),上位组态软件可直接通过FinsGateWay的驱动,方便地与PLC进行通信。

若采用开发版,则该软件提供Sysmac Compolet,即VB/VC控件,同样也可以为自己开发的程序提供驱动。它实质也是OPC。

FinsGateway有两种通信服务。一是FINS信息服务通信,使用网络通信命令。计算机发送,PLC响应,总是成对的。二是数据链接通信,用内存共享。在计算机方,参与共享内存称之为事件内存(EventMemory),可与PLC的DM区进行数据链接通信。事件内存还可作为FINS服务器,被其他应用访问。

图6-129a所示为FINS信息服务通信示意。它的数据交换是靠发送通信命令及接收响应实现。计算机接收到数据存于事件内存中。图6-129b所示为事件内存与PLC DM数据链接通信示意。它的数据交换是自动实现的。

978-7-111-39745-8-Chapter07-241.jpg

图6-129 数据链接示意

FinsGateway还有网络中继功能,可跨网络通信。还有套接字代理服务器功能,允许被TCP/IP网络上程序访问。此外,欧姆龙的还有PLC reporter32数据收集软件,安装后在EXCEL表格中直接设定,可把读取DM区的数据,转为EXCEL表格显示。

3.计算机与S7-200使用OPC通信VB程序实例

西门子公司为S7-200运用OPC通信提供了S7-200_PC Access软件。它的演示版可从西门子网站下载。此软件还提供使用VB等实例程序,可用以当OPCServer与S7-200通信时,实现VB程序与OPCServer交换数据。图6-130所示为运行S7-200_PC Access后显示的画面。

978-7-111-39745-8-Chapter07-242.jpg

图6-130 运行S7-200_PC Access程序画面

1—“Test Client Status”键 2—“Test Client”窗口

从图6-130可知,它已建立了1个PLC,为NewPLC。而在NewPLC下,建立了一个NewFold-er。在此NewFolder下,建立了两个Item,一个为NewItem,另一个为NewItem(1)。前者指定地址为QB0,后者指定地址为iVB100。并指定其为字节,可读写(RW)。

在建立PLC时,还要对PLC的站点号进行设定,以确保读写是针对该PLC的。该图设定了两个PLC,一个为站2(NewPLC),另一为站3(NewPLC(1))。

然后,用鼠标把NewItem、NewItem(1)拖放到测试窗口(Test Client)。再用鼠标左键,单击工具条上的“Test Client Status”键,如通信正常(测试窗口的Quality项good),则将显示所监控数据的值。如图所示,这时对应QB0的值为01,对应VB100的值为32。而且还打上时间印记,即14点28分00秒31毫秒。如果数据有变化,时间印记将改为当时计算机的时间。

这里只建立不多的数据,即PLC、Folder及Item监视。其实可建立更多项。监视的PLC可遍及整个PPI网络,数据项也只是受计算机及通信速度的限制。可知,有了这个软件,通过PPI网,实现计算机与S7-200通信是很方便的。什么程序不用编,做好以上建立及有关设定,即可把这个OPC的服务器运行起来,用以监视PLC的数据。

然而,它的这个OPC服务器,不能写数据,也不能处理、存储数、打印数据,或进行动画显示。所以还不能作为实际的应用程序。

为此,要有OPC客户机。本OPC可用VB、VC以至于微软的EXCEL都可作为它的客户机。图6-131所示为用VB编写的OPC客户机画面。这是西门子提供的例子程序。

978-7-111-39745-8-Chapter07-243.jpg

图6-131 用VB编写的OPC客户机样板程序

运行该程序后,要先建立连接(点击“Connect”键),然后再点击“Add Group”键,加入组“Group2”(图中4)。再填写“Item1”、“Item2”的内容,分别为“2,QB0,byte”、“2,VW4,word”(图中3、7),点击“Add Item”键,加入项目“Item1”、“Item2”的内容。

提示:在建立连接时,指定“S7-200.OPCServer”,在加入项目时,指定“2,QB0,byte”等是不能有错的。前者代表OPC服务器名,后者代表访问的数据特征。这里的2为PLC站址,QB0为数据地址,byte数据类型。应按要求填写,不能出错。

这时,可点击“Read Syncron”或“Read Asyncron”键,进行同步或异步读数据。如读通信成功,将在图中1、11文本框中,显示所读值。

如异步读(击“Read Asyncron”键),则会在图中9文本框中,计数所读次数。如图示,已读6次。同步读则不计次数。

在图中2、12文本框中,写入合法数据,再点击“Write Syncron”或“Write Asyncron”键,如通信成功,可把所填数据写入PLC的“2,QB0”及“2,VW4”中。

如异步写(点击“Write Asyncron”键),则会在图中8文本框中计数所写次数。如图示,已读8次。同步写则不计次数。

如在图中6处的选择框中进行选定(如图示,打上对号),则只要PLC数据变化,将把变化后的数据显示在图中14、15文本框中。如不选定,则数据变化,也不把变化的数据读入。

该实例提供有全部的VB原代码,熟悉VB的读者可参阅,以得到更多的信息。

提示:一般讲,OPC的服务器程序必须运行,然后客户机才能对其进行访问。但运行上述VB程序,可不必运行S7-200_PC Access程序。因为在这个VB程序中,已加载了有关S7-200_PC Access的OPC类。这样,在表面上,虽没有单独运行OPC服务程序,但因调用这类的有关对象时,实际上等于已运行了它的程序。

以下再介绍一个实际VB程序,看其代码的编写过程。图6-132所示为这个VB实例程序窗口画面。

该程序所用控件主要有:项目文本框(Text2组)、数据文本框(Text1组)、进度条(ProgressBar1)滚动条(VScroll1)、项目数文本框(Text3)及命令按键(Command1、2、3、4、5对应于“退出”、“加入项目”、“读数据”、“写数据”及“加入项目”)。此外,还用Frame1、Picture1及Picture2做上述控件容器。

在读、写数据前,要先填写所读、写数据项目数(最多为99,图中只显示15个项目,其余的可拉动滚动条也可显示)及每个项目文本框。要填写PLC站地址(默认为2)、数据地址(S7-200定义的地址)及数据类型(可以是BOOL、BYTE、WORD或DWORD)。然后,点击“读数据”按键,则所读数据将显示在数据文本框中。如写数据,则应先在数据文本框中填写要写的数据,再点击“写数据”按键。在“进度条”上显示已完成,而又没有出错显示,则可确认数据已写入。

978-7-111-39745-8-Chapter07-244.jpg

图6-132 VB实例程序窗口画面

1—项目文本框 2—项目数文本框 3—进度条4—滚动条 5—数据文本框

要强调的是,在建立本工程时,一定要加载如图6-132所示的关于S7-200 OPCServer的OPC类,即OPCSimensDAAutomation OPCServer类,如图6-133所示。

其过程是用鼠标左键点击工程(Project,图中1)下菜单项应用(References,图中4)。点击后,将弹出References对话框。由于安装S7-200 Access OPC软件时,已在图中3所示的路径,安装上了sopcdaauto.dll库文件,故在图中可看到“Simens DAAutomation2.0”项。选择它,并击“OK”键,将把这个OPC类加载到本工程中。

这时,可在VB平台上点击“View”-“Object Broser”菜单项,将弹出如图6-134所示的“Object Broser”窗口。

如图所示,这里 的OPC Simens DA Automation类有的成员很多。OPCItem就是其中一员,它的特性、方法很多。AddItems方法就是其中一个,可利用加入项目组。

这样,在实际上,可以不运行OPC程序,也可用VB程序,利用这些对象特性及方法,访问PLC。

有了以上加载,还要定义与这些类有关的窗口全局变量。以便在程序中使用这些变量。以下就是这些定义:

978-7-111-39745-8-Chapter07-245.jpg

图6-133 加载OPC引用对象

1—工程(Project)菜单 2—引用对象 3—相关文件名及路径 4—引用(References)子菜单

978-7-111-39745-8-Chapter07-246.jpg

图6-134 对象浏览器窗口

1—OPCItems(项目集合) 2—OPCSimensDAAutotion对象 3—AddItems(加入项目)方法 4—对AddItems方法解释

978-7-111-39745-8-Chapter07-247.jpg

提示:如没有加载OPC Simens DA Automation OPCServer类,以上定义是不成立的。再次是,建立OPC连接,加入项目组。这些用初始化程序实现。初始化程序如下:

978-7-111-39745-8-Chapter07-248.jpg

对项目的数量及具体内容可进行选择。选择后,点击“加入项目”键,则执行加入项目程序。

加入项目程序如下:

978-7-111-39745-8-Chapter07-249.jpg

项目数变化时,可重新激发初始化。

项目数变化程序如下:

978-7-111-39745-8-Chapter07-250.jpg

项目多时,如未显示的,可拉动滚动条使其显示。

拉动滚动条程序如下:

978-7-111-39745-8-Chapter07-251.jpg

978-7-111-39745-8-Chapter07-252.jpg

这时,如要读数据,可点击“读数据”按键,执行读数据程序。

读数据程序如下:

978-7-111-39745-8-Chapter07-253.jpg

这时,如写读数据,可先在数据区填写合法数据,再击“写数据”按键,执行写数据程序。

写数据程序如下:

978-7-111-39745-8-Chapter07-254.jpg

978-7-111-39745-8-Chapter07-255.jpg

为了重新设定项目,要新移除现有项目,然后,再作项目填写,再加入项目。才又可重新读、写数据。此移除过程代码如下:

978-7-111-39745-8-Chapter07-256.jpg

以上程序是西门子例子程序的简化,但可读写更多的数据。