首页 理论教育 使用OPC编程实现计算机控制

使用OPC编程实现计算机控制

时间:2023-06-16 理论教育 版权反馈
【摘要】:公共组由多个客户共有,局部组只隶属于一个OPC客户。每一个OPC Client应用程序,都可接若干个OPC Server,每一个硬件驱动程序可以为若干个应用程序提供数据。有的厂商PLC不提供通信协议,只提供OPC服务程序。而用OPC实现通信比较方便,故越来越多地被采用。计算机接收到数据存于事件内存中。此软件还提供使用VB等实例程序,可用以当OPCServer与S7-200通信时,实现VB程序与OPCServer交换数据。

使用OPC编程实现计算机控制

1.OPC概述

OPC服务器接口由三类对象组成,相当于三种层次上的接口:服务器(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,每一个硬件驱动程序可以为若干个应用程序提供数据。

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

978-7-111-56641-0-Chapter06-199.jpg

图5-124 使用PRODAVE Api通信VB程序

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

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

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

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

……

有的厂商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服务器,被其它应用访问。

978-7-111-56641-0-Chapter06-200.jpg

图5-125 数据链接示意

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

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

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

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

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

978-7-111-56641-0-Chapter06-201.jpg

图5-126 运行S7-200_PCAccess程序画面

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

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

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

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

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

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

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

978-7-111-56641-0-Chapter06-202.jpg

图5-127 用VB编写的OPC客户机样板程序

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

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

如异步读(用鼠标左键点击“ReadAsyncron”键),则会在图5-127中9文本框中,计数所读次数。如图示,已读6次。同步读则不计次数。

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

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

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

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

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

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

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

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

要强调的是,在建立本工程时,一定要加载如图5-128所示的关于S7-200.OPCServer的OPC类,即OPCSimens-DAAutomation OPCServer类,如图5-129所示。

978-7-111-56641-0-Chapter06-203.jpg

图5-128 VB实例程序窗口画面

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

978-7-111-56641-0-Chapter06-204.jpg

图5-129 加载OPC引用对象

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

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

这时,可在VB平台上,用鼠标左键点击“View”-“Object Browser”菜单项,将弹出如图5-130所示的“ObjectBrowser”窗口。

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

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

978-7-111-56641-0-Chapter06-205.jpg

图5-130 对象浏览器窗口

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

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

978-7-111-56641-0-Chapter06-206.jpg

提示:如没有加载OPCSimensDAAutomation OPCServer类,以上定义是不成立的。

再次是,建立OPC连接,加入项目组。这些用初始化程序实现。

初始化程序如下:

978-7-111-56641-0-Chapter06-207.jpg

978-7-111-56641-0-Chapter06-208.jpg

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

978-7-111-56641-0-Chapter06-209.jpg

978-7-111-56641-0-Chapter06-210.jpg

项目数变化时,可重新激发初始化。项目数变化程序如下:

978-7-111-56641-0-Chapter06-211.jpg

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

978-7-111-56641-0-Chapter06-212.jpg

这时,如要读数据,可用鼠标左键点击“读数据”按键,执行读数据程序。读数据程序如下:

978-7-111-56641-0-Chapter06-213.jpg

978-7-111-56641-0-Chapter06-214.jpg

这时,如写读数据,可先在数据区填写合法数据,再用鼠标左键点击“写数据”按键,执行写数据程序。写数据程序如下:

978-7-111-56641-0-Chapter06-215.jpg

其它程序:

978-7-111-56641-0-Chapter06-216.jpg

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

978-7-111-56641-0-Chapter06-217.jpg

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

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈