DDE与OPC技术的工作机制及在工业控制领域中的应用分析

描述

1 引言

随着工业生产的不断发展以及自动化系统集成度的不断提高,自动化控制是一种现代工业、农业、制造业等生产领域中机械电气一体自动化集成控制技术和理论。自动化控制技术广泛用于工业、农业、军事、科学研究、交通运输、商业、医疗、服务和家庭等方面。采用自动化控制不仅可以把人从繁重的体力劳动、部分脑力劳动以及恶劣、危险的工作环境中解放出来,而且能扩展人的器官功能,极大地提高劳动生产率,增强人类认识世界和改造世界的能力。因此,自动化控制是工业、农业、国防和科学技术现代化的重要条件和显着标志。因此,为了能够解决工业系统硬件设备的升级改变为软件系统带来的不便,更好的实现不同设备厂家硬件产品的集成互连,增强系统的稳定性与可靠性,工业自动化软件接口的标准化、统一化成为工业控制领域必须面临的一个问题。

为了能够使得自动化软件的开发具有统一的接口标准,dde(动态数据交换:dynamic data exchan-ge)、opc(基于过程控制的链接与嵌入:ole for process control)技术的出现和应用为不同的自动化程序系统之间能够实现简单交互、无缝互连做出了巨大的贡献。

2 dde与opc技术的工作机制

2.1 dde技术的工作机制

DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活的服务器应用程序发送一条消息请求信息,服务器应用程序根据该信息作出应答,从而实现两个程序之间的数据交换。

动态数据交换基于windows消息机制,各应用程序间通过传递消息进行对话交换信息。windows dde消息传递采用client/server模式,客户(client)是数据的请求和接受者,而服务器(server)是数据的提供者,两者之间通过请求、应答、传输三个步骤来完成数据的传送。dde协议使用服务(service)、主题(topic)和数据项(item)三级命名来标识dde所传递的数据单元。一般情况下,服务(service)就是应用程序的文件名,主题是对服务器有意义的信息单元。每次dde客户与服务程序之间的对话都是先由客户启动的,所以在每次客户启动之前,dde服务器应当首先投入运行。

当客户程序需要向服务器程序请求数据时,客户程序发送一条wm-dde-initiate消息给当前运行的所有windows应用程序,这条消息不但包含了它所需要的服务器名(service)和主题名(topic),而且指明了它所希望的数据类型,收到wm-dde-initiate消息的应用程序通过判别服务器名和会话主题决定是否应答,一旦dde服务器响应了这条被传播的消息,dde会话就开始了。

dde的工作方式有冷连接(cool link)、温连接(warm link)和热连接(hot link)等3种。在冷连接方式下,当server中的数据发生变化后不主动通知client,但client可以随时从server读写数据;在温连接方式下,当server中的数据发生变化后马上通知client,client得到通知后将数据取回;在热连接方式下,当server中的数据发生变化后马上通知client,同时将变化的数据直接送给client.

dde的网络形式称为netdde,它包含了dde的全部特征,是动态数据交换(dde)的扩充,可以在跨越网络的计算机之间使用。采用netdde后,两个或更多网络上的应用能够通过dde共享来建立网络上不同工作站之间的连接,从而实现站站之间的动态信息共享。

2.2 opc技术的工作机制

OPC全称是Object Linking and Embeding(OLE) for Process Control,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。在过去,为了存取现场设备的数据信息,每一个应用软件开发商都需要编写专用的接口函数。由于现场设备的种类繁多,且产品的不断升级,往往给用户和软件开发商带来了巨大的工作负担。通常这样也不能满足工作的实际需要,系统集成商和开发商急切需要一种具有高效性、可靠性、开放性、可互操作性的即插即用的设备驱动程序。在这种情况下,OPC标准应运而生。OPC标准以微软公司的OLE技术为基础,它的制定是通过提供一套标准的OLE/COM接口完成的,在OPC技术中使用的是OLE 2技术,OLE标准允许多台微机之间交换文档、图形等对象。

在opc技术出现以前,dde技术是绝大多数控制系统都支持和采用的数据交换方式。但是,由于dde是基于windows信息传递而建立的技术,因此,当通信量较大时,就会出现数据刷新速度慢、安全性管理机制差、可靠性能低等现象,从而就有可能致使dde客户程序在较长时间内得不到回应。和dde 技术相比,基于com和dcom技术的opc技术具有数据传送性能高、 安全性管理性能好、开发成本低等特点。

服务器

最初阶段的opc规范是由opc基金会的先驱fisher-rosemount、rockwell、opto 22、intellution、intuitive technology公司于1996年8月发布的,目前opc基金会成员在全球已超过300多个,其中包括世界上几乎所有主要的控制系统、仪器仪表、过程控制系统生产厂家。

opc以ole/com/dcom技术为基础,是ole(object linking and embedding)for process control的缩写,是微软公司的对象链接和嵌入技术在过程控制方面的应用。与dde一样,opc也采用client/server模式。opc服务器是数据源的提供者,数据源可以是plc、dcs、条形码读取器等控制设备,随控制系统的构成不同,作为数据源的opc服务器既可以是和opc应用程序在同一台计算机上运行的本地opc服务器,也可以是在另外计算机上运行的远程opc服务器。opc客户是数据的使用者,它按照opc接口规范从opc服务器获取所需要的数据。

OPC服务器通常支持两种类型的访问接口,它们分别为不同的编程语言环境提供访问机制。这两种接口是:自动化接口(Automation interface);自定义接口(Custom interface)。自动化接口通常是为基于脚本编程语言而定义的标准接口,可以使用VisualBasic、Delphi、PowerBuilder等编程语言开发OPC服务器的客户应用。而自定义接口是专门为C++等高级编程语言而制定的标准接口。OPC现已成为工业界系统互联的缺省方案,为工业监控编程带来了便利,用户不用为通讯协议的难题而苦恼。任何一家自动化软件解决方案的提供者,如果它不能全方位地支持OPC,则必将被历史所淘汰。

opc客户与opc服务器的接口有自定义接口(custom interface)和自动化接口(automation interface)两种形式。自定义接口是一组com接口,主要用于采用c++语言的应用程序开发;自动化接口是自动化的ole接口,主要用于采用vb,delphi等基于脚本编程语言的应用程序开发。对于客户端应用程序的开发,采用自定义接口的方式运行效率高,但开发难度较大;采用自动化接口的方式运行效率低,但开发简单。这两种接口与opc服务器的通信方式可用1图所示。

服务器

图1 自定义接口和自动化接口与opc服务器通信方式示意图

对于分布式计算机上的opc客户程序的开发,opc标准采用dcom技术实现服务器和客户程序的通讯。

opc的数据访问主要有同步数据访问和异步数据访问两种方式。同步数据访问时,opc服务器在将按照opc应用程序要求的数据返回之前,opc应用程序一直处于等待状态,也就是说,同步方式的数据访问在要求的动作没有完成前不能执行任何opc应用程序侧的处理。与之相比,异步方式的数据访问在对opc服务器提出数据访问要求后,立即返回到opc应用程序侧的主处理程序中,opc服务器完成数据访问时通知opc应用程序,opc应用程序从而得到数据访问结果。当opc应用程序采用自动化接口访问opc服务器时,同步和异步数据操作分别由syncread、syncwrite和asyncread、asyncwrite四个opc组对象的方法函数来实现。

3 dde与opc技术应用

当前,dde、opc技术在许多世界着名的自动化厂家的i/o通讯服务器、scada等自动化软件中都得到了体现。例如wonderware 公司的daserver和intouch、siemens公司的simatic net和wincc、 rockwell-ab公司的rslinx和rsview32等。其中daserver和rslinx既可作为opc server,又可作为dde server;wincc和rsview32则既可以作为opc client,又可作为dde client.同时,由于各家的软件接口都合乎dde、opc接口规范标准,所以,不同厂家的i/o通讯、scada等软件产品也可以很方便的实现互连。

下面分别以wonderware 公司的intouch与daserver(dassidirect)、intouch与rockwell-ab公司的rslinx进行dde通讯,siemens 公司的wincc 与simatic net 、wincc 与rslinx进行opc通讯的方法为例说明dde、opc技术在工业自动化软件的应用情况。

dassidirect是wonderware 公司开发用于对siemens s7 200/300/400系列plc进行以太网数据访问的服务器软件,支持dde、opc、suitlink、fastdde等通讯方式。当客户程序通讯接口与dassidirect的连接采用dde方式时,dassidirect 的数据访问采用了节点名(node name)、应用程序名(application name,此处为dassidirect)、主题名(topic name)和项目名(item name)的层次结构。而当通讯接口以opc方式与dassidirect连接时,dassidirect 的数据访问则采用了节点名(node name)、服务器名(program name,此处为archestra.dassidirect.1)、组名(group name)、设备组名(device group)、连接名(link name)和项目名(item name)的层次结构。各层次项可在dassidirect软件界面中配置实现。

工程应用时,需要在dassidirect管理界面smc archestra.dassidirect.1目录下根据需要依次添加接口类型(tcp/ip)、接口处理器类型(s7 plc),并进行必要的参数设置,然后还要为device groups添加不同的topic以方便对不同变量的归类管理。intouch标签变量对dassidirect的访问是通过"访问名"的设置来实现的,所以intouch中"访问名"的设置必须和dassidirect软件中的设置一一对应,例如,"访问名"中"应用程序名"应设置为dassidirect,"访问名"中"主题名"的设置应和dassidirect中所添加的topic名称完全一致。此外,intouch标签变量"项目名"的填写也必须遵从dassidirect中item name的定义形式,例如对s7 plc数据块地址word的访问形如db11.w80,对数据块地址dword的访问形如db11.d80,对输入/输出位的访问形式分别为i5.2/q7.5等。

和wonderware公司的dassid-irect一样,rslinx也支持opc/dde两种通讯方式。当intouch和rslinx以dde方式进行通讯时,首先需要在rslinx"dde/opc topic configuration "对话框中添加新的topic,并建立该topic与要连接rslogix plc cpu之间的对应关系,然后再对intouch中"访问名"做相应的配置。不过,此时"访问名"中"应用程序名"应设置为rslinx,"访问名"中的"主题名"则应和在rslinx中所添加的topic名称完全一致。而intouch标签变量"项目名"的填写也应遵从rslinx中item name的定义形式,例如对rslogix plc cpu中全局变量controller tags地址的访问即为 plc变量地址的tag name,而对cpu中程序变量program tags地址的访问则为program:.的形式。

当采用siemens 公司的wincc作为opc client与opc服务器进行opc方式连接时,首先需要在wincc资源管理器中添加opc通讯驱动程序opc.chn,然后在出现的opc通道单元的"连接属性"和所建变量的"变量地址属性"对话框中分别填写"opc服务器名称"和"变量地址名称",这样便可建立该变量到opc服务器的连接。需要说明的是,不同的opc服务器,其opc服务器名称和地址格式是不尽相同的,例如siemens simatic net opc服务器的名称和地址访问格式(以按s7协议对s7系列 plc数据访问为例)分别是"opc.simaticnet"和"s7:[<连接名称>]",而rockwell rslinx opc服务器的名称和对rslogix 系列plc数据访问的地址格式分别是"rsllinx opc server"和"[]".

同样,其它scada软件与相关dde、opc服务器软件通讯的实现方法与此类似,不再赘述。

此外,由于dde、opc都是标准规范,所以也可以根据需要来实现dde、opc之间的接口转换来满足实际需求,例如wonderware公司的opclink便是实现opc、dde接口转换的专用软件。

4 利用vb开发dde与opc客户端

vb是Visual Basic的简称,是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。它简单易学、效率高,且功能强大可以与 Windows 专业开发工具SDK相媲美。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。

Visual 意为可视的、可见的,指的是开发像Windows操作系统的图形用户界面(Graphic User Interface,GUI)的方法,它与其他编程软件不同的是不需要编写大量代码去描述界面元素的外观和位置,只要把预先建立好的对象拖放到屏幕上相应的位置即可。应该说,这是一次质的飞跃,是一次编程技术的革命。

如上所述,目前许多scada软件都采用了dde、opc技术规范作为其软件接口,而scada监控软件在实际工程应用中则扮演了dde、opc客户端的角色。另外,wonderware公司的wwclient,siemens公司的simatic net opc scout和rockwell-ab公司的opc test client等测试软件也都是dde、opc客户端软件的实例。

dde、opc客户端软件可采用visual c++、visual basic、delphi等编程软件实现,这里主要对如何用visual basic 6.0编写dde、opc 客户端实现和dde、opc 服务器通讯的方法分别予以介绍。

4.1 利用vb开发dde 客户端

作为microsoft 公司软件产品的重要一员,visual basic理所当然的对windows操作系统的下的dde技术给予支持。visual basic为一些控件提供了用于dde动态数据交换的linktopic、linkitem、linktimeout、linkmode等属性,以及linkrequest、linkpoke、linkexecute、linksend等方法。其中,linktopic、linkitem两项属性分别对应于dde通讯架构中的主题名和数据项名,linktimeout、linkmode分别表示dde 客户端与dde服务器的尝试连接时间和连接模式(数据交换方式),linkmode有manual、notify、automatic三种方式,而automatic方式最为常用,它主要用于和dde server建立"热连接(hot link)",即在dde服务器数据发生变化时主动发送数据给客户端。linkrequest、linkpoke分别用于dde 客户端对dde服务器数据的读写操作。

根据应用程序与服务器程序dde方式通讯机制,可以在visual basic编程环境下开发适合实际需要的dde客户端应用程序。例如,visual basic访问intouch 程序变量"intouchtag"时,其代码为label1.linktopic= "view|tagn-ame"

label1.linkitem= "intouchtag"

label1.linkmode=1

label1.linkrequest

其中,代码中的"view"和"tagname"分别表示intouch windowviewer的应用程序名和主题名,"linkmode"值为1表示该应用程序与windowviewer的连接方式为automatic(即"热连接")方式。这样,当该应用代码被执行时,label1的值便随intouch windowviewer"intouchtag"变量的变化而变化。

同样可以在visual basic中添加label2、label3,并建立和dassidirect、rsllinx的dde通讯连接,使其分别随所连接s7-300 plc数据db5.dbw20、controllogix 1756-l55 plc全局变量"linxlogixtag"数值的变化而变化,其代码分别如下:

label2.linktopic = "dassidire

-ct|dasvrtopic"

label2.linkitem = "db5.w20"

label2.linkmode = 1

label2.linkrequest

label3.linktopic = "rslinx|" & "rslinxtopic"

label3.linkitem= "linxlogixtag"

label3.linkmode = 1

label3.linkrequest

其中,"dassidirect"和"dasvrtopic"、"rslinx"和"rslinxtopic"分别为dassidirect和rslinx的应用程序名以及在dassidirect和rslinx dde服务器中建立的主题名。而"db5.w20"和"linxlogixtag"则分别对应于s7-300 plc数据db5.dbw20和controllogix 1756-l55 plc全局变量linxlogixtag,这样,该段代码被执行时,label2和label3的数值将随plc中数据db5.dbw20与linxlogixtag变量值的变化而变化。

netdde是dde的网络扩展形式,主要为网络上不同计算机之间的动态数据交换提供方便。在visual basic编程环境下,也可以开发基于netdde的客户端应用程序。与开发dde客户端不同的是,网络上作为dde服务器和客户端的计算机都要启动netdde.exe服务,并在作为dde服务器的计算机上同时启动ddeshare.exe程序,对新建的dde共享进行必要的设置。如下代码的功能为计算机pc02读取pc01计算机上rslinx dde服务器所采集的"linxlogixtag" plc变量的值。

label4.linktopic= "\pc01

ndde$|pc01shrnm"

label4.linkitem= "linxlogixtag"

label4.linkmode=1

label4.linkrequest

由于netdde的访问采用了"\<计算机名>|<共享名>!<变量名>"的形式,所以,上述代码中的"pc01"、"pc01shrnm"分别为dde服务器的计算机名和ddeshare.exe程序中的新建共享名,而dde访问所需要的应用程序名rslinx和主题名rslinxtopic则在新建共享"pc01shrnm"的属性对话框中进行了设置。

此外,由于excel也支持dde技术,所以pc01计算机上rslinx dde服务器plc变量linxlogixtag的变化也可以在pc02计算机excel表格中得到体现,只需要在需要显示该值的单元格中填写如下代码='\pc01ndde$'|pc01shrnm!linxlogixtag

4.2 利用vb开发opc 客户端

利用visual basic所开发的opc客户端应用程序主要采用自动化通信接口和opc服务器程序实施通信。而opc基金会提供的opc自动化接口 opcdaauto.dll动态链接库集成了所有用于对opc服务器进行访问的对象、属性和方法,为利用visual basic开发opc客户端应用程序提供了极大方便。程序设计时,opc客户程序应当首先生成opc服务器支持的opc对象,然后再使用opc对象支持的属性和方法,实现对opc服务器的操作和访问。

opc数据访问对象主要包括opc服务器(opcserver)、opc组集合(opcgroups)、opc组(opcgroup)、opc标签集合(opcitems)、opc标签(opcitem)、opc浏览器(opcbrowser)等几个部分。程序设计时,要首先在visual basic环境下选择对opc automation 2.0接口的引用,此时,opc对象会被自动添加到正在开发的工程项目中,然后,再根据需要建立这些对象的实例并利用其属性和方法来实现对opc服务器的访问。对opc服务器的访问主要包括声明opc对象实例、连接opc server、添加标签变量、读写opc服务器(同步/异步)、断开连接等几个步骤。

opc对象实例的声明主要包括对opc服务器、opc组集合、opc组、opc标签集合、opc服务器句柄的声明及程序所需要的其它实例的声明。opc客户端和opc server的连接主要靠调用opc服务器对象实例的connect方法函数来完成,例如,连接本地计算机dassidirect和rslinx opc server 的代码分别为connect("archestra.dassidirect.1")和connect("rslinx opc server")

连接网络远程计算机(ip地址为10.144.45.45)上dassidirect和rslinx opc server 的代码分别为connect("archestra.dassidirect.1", "\10.144.45.45")和connect("rslinx opc server", "\10.144.45.45")

需要说明的是当进行远程opc连接时,必须在远程计算机上运行dcomcnfg程序,并启动该计算机opc服务器的dcom服务。

标签变量的添加主要由opc标签集合的additems方法函数实现,该函数定义了添加的标签数量、标签变量名(数组)、应用程序句柄(数组)、opc服务器句柄(数组)、错误代码(数组)等方面的信息。例如,为dassidirect和rslinx opc服务器添加标签变量的代码为tagnms(1)="portcps7.jsbf.db2,x48.0"或者tagnms(1)="linxlogixtag"

my_items.additems itmnum, tagnms, clienthdls, svrhandles, err

其中,my_items为opc标签集合的一个实例。标签变量添加完成后,可通过syncread、syncwrite和asyncread、asyncwrite四个函数实现对opc服务器中相应数据的读写操作。在读写操作完成后,程序将会自动执行syncreadcomplete、syncwritecomplete和asyncread-complete、asyncwritecomple-te等过程,opc客户端应用程序的数据显示、故障诊断等功能可在该段程序代码中实现。

此外,在对opc服务器完成读写后,可以调用opc服务器的disconnect方法来断开与相应opc服务器的连接。不过,为了节省系统开支,增加程序稳定性,通常要在断开和opc服务器连接前先移除opc服务器中的opc标签和opc组,并将opc集合对象都置为nothing,然后再执行disconnect操作并将opc server对象实例置为nothing.

5 结束语

dde、opc技术的出现与发展已经在包括工业自动控制在内的诸多领域得到了广泛的应用。dde作为一种较成熟的数据交换方式已拥有最全面的支持,而opc技术也越来越受众多自动化软硬件企业的支持与青睐,所以,在将来很长的一段时间里,dde与opc将继续在各自的应用领域发挥重要作用,dde、opc技术的出现和发展为我们提供了一个方便的数据访问接口,从而使控制系统进一步走向开放,用户系统因此受益。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分