当前位置:首页 > 工业控制 > 工业控制
[导读]1 引言 VC(Visual C++)是功能强大的一种Windows应用程序可视化软件开发工具。VC支持面向对象的设计方法,并可以使用功能强大的微软基础类库MFC(Micro - soft foundation class)。并且由于Microsoft公司在操作市场

1  引言
VC(Visual  C++)是功能强大的一种Windows应用程序可视化软件开发工具。VC支持面向对象的设计方法,并可以使用功能强大的微软基础类库MFC(Micro - soft foundation class)。并且由于Microsoft公司在操作市场上的垄断地位,用VC开发出来的软件稳定性好、可移植性强,而且软件与硬件相互独立[1],可以用来开发控制系统的上层管理系统。RSView32是作为一种专门用于工业控制的组态软件,不仅包含了大量图形开发工具和现成图形库,使用户能够方便的进行系统开发,而且还可以对报警、活动记录、事件、历史趋势等进行组态,是一个功能强大的工业自动化产品[2],因此可以很方便地对下层设备进行组态。在实际系统开发时,利用OPC技术把两种工具有效的结合起来,使上层的VC程序通过RSView32间接地与下层PLC进行数据通信,以获取令人满意的结果。

2  OPC介绍
OPC(OLE for Process Control)是根据Microsoft的OLE(现在Active)、COM(部件对象模型)和DCOM(分布式部件对象模型)技术所要求的功能制定的一个开放和互用式的用户界面标准,它保证了自动化/控制应用程序和区域系统/设备之间的互用。它以OLE/COM机制作为应用程序级的通讯标准,采用 CLIENT/SERVER模式,典型的OPC体系结构如图1所示:

图1     典型的OPC体系结构
OPC规范中提供了两套接口方案,即定制接口和自动化接口。定制接口效率高,通过该接口能够发挥OPC服务器的最佳性能,采用C++语言的客户一般采用定制接口方案;自动化接口使解释性语言和宏语言访问OPC服务器成为可能,采用VB等语言的客户一般采用自动化接口。
OPC 数据存取服务器由三类对象组成:服务器(Server)、组(Group)、数据项(Item)。服务器对象用于指出特定的OPC服务器应用程序名,并作为组对象的容器;组对象存储由若干Item组成的Group信息并逻辑组织数据项;数据项对象()存储具体的Item的定义、数据值、状态值等信息,一个 Item就代表一个具体的过程变量。OPC客户应用程序要获取OPC服务器的数据,必须事先指定服务器应用程序所在的计算机名(服务器应用程序和客户应用程序不在同一台PC上)、OPC数据访问服务器名和该服务器提供的OPC项的定义。
建立OPC连接后,客户应用程序一般可以通过三种方式从OPC 服务器读取数据:使用同步接口IOPC- SyncIO,简单有效,适合于只读取少量数据的客户程序;使用接口IOPCCallback的“订阅”的功能OnChange,每当数据有变化时,服务器自动通知客户;使用异步接口IOPCASyncIO2,可以直接与物理设备通讯,速度慢但数据精确度高。

3  RSView32作为OPC服务器
西门子专门用于工业控制的通用组态软件之一RSView32支持OPC技术,它可以用作一个OPC客户和外部OPC服务器软件通信,也可以作为一个OPC服务器和其它第三方支持OPC技术的软件进行连接。本文中RSView32作为服务器,VC应用程序作为客户端,采用C/S模式实现两者之间的数据交换
3.1  使RSView32作为OPC服务器[4]
用下列方法之一使RSView32作为OPC服务器:
(1) 选择“启动”编辑器里“启动”页上的“OPC/DDE服务器”复选框;
(2) 发出RTDataServerOn命令(从命令行或另一个 RSView32组件里,使用RTDataServerOff命令可以取消此功能),这将允许其它应用程序读取数值但不能改变它;
(3) 发出RTDataWriteEnable命令(从命令行或另一个RSView32组件里,使用RTDataWriteDisable命令可以取消此功能),这允许从外部OPC应用程序写入,以改变RSView32的标记值。
3.2  建立 OPC 客户项目[4]
VC应用程序要从RSView32取得数据,必须使用下列信息:
服务器:RSI.RSView32OPCTagServer;
类型:本机/远程;
服务器计算机名或地址:如果客户和服务器在同一计算机上,这项可以是空白。
访问路径:项目名;
更新速率:一个以秒为单位的速率;
条目:标记名。可以通过查看RSView32的标签数据库获得。

4  VC应用程序作为OPC客户端的程序实现
在VC环境中使用定制接口开发OPC客户应用程序,下面是程序实现的关键步骤。
4.1  包含OPC头文件
开发OPC客户应用程序,除了需要OPC接口外,还需要在程序中包含OPC标准库文件,可以从OPC基金会网站(网址:www.opcfoundation.org)下载这些文件:
#include "opcda_i.c"    OPC数据存取接口
#include "opcda.h"      OPC数据存取2.0头文件
#include "opccomn_i.c"  OPC公共接口定义
#include "opccomn.h"    OPC公共头文件
4.2  初始化COM支持库
由于OPC是基于COM技术制定,所以在使用接口类之前必须首先使用CoInitialize(NULL)函数初始化COM库,如果成功,函数返回值等于S_ OK。
4.3  连接opc服务器
OPC 客户能够连接到OPC服务器上,并建立OPC组和OPC数据项,这是OPC数据访问的基础,如果没有这个机制,数据访问的其它机能不可能实现[4]。连接 OPC服务器,OPC客户需要事先指定计算机名(如果OPC服务器和OPC客户不在同一台计算机上)和OPC数据访问服务器名 (RSI.RSView32OPCTagServer)。实现代码如下:
ConnectToServer(/*in */LPOLESTR ProgID,/*in*/ BOOL IsRemote,/*out */ IUnknown **ppUnknown)
{
CLSID OPCCLSID;
HRESULT hRet=CLSIDFromProgID(ProgID,&OPCCLSID);
//将字符串ProgID转换为唯一OPCCLSID
if(IsRemote)
//opc服务器和opc客户不在同一台计算机上
{  
COSERVERINFO ServerInfo;
memset(&ServerInfo,0,sizeof(ServerInfo));
ServerInfo.pwszName=T2OLE("ServerComouter");
MULTI_QI qi[1];
memset(qi, 0, sizeof(qi));
qi[0].pIID=&IID_IUnknown;
HRESULT hRet=CoCreateInstanceEx(OPCCLSID,NULL,CLSCTX_REMOTE_SERVER,
&ServerInfo,1,qi);
*ppUnknown=qi[0].pItf;
}
else
//opc服务器和opc客户在同一台计算机上
{
hRet=CoCreateInstance(OPCCLSID,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,
(void **)ppUnknown);
}
}
4.4  创建OPC组
IOPCServer接口的AddGroup()方法可以创建一个有指定名称和属性的OPC组。在调用该方法之前,可以使用上一步得到的Iunknown接口指针,通过QueryInterface()方法请求IOPCServer接口指针。代码如下:  
ppUnknown->QueryInterface(IID_IOPCServer,(void **)&pServer);
//得到IOPCServer接口指针
pServer->AddGroup(L"",TRUE,500,1235,&lTimeBias,&fTemp,0,&hOPCServerGroup,  &dwActualRate,IID_IOPCItemMgt,& pOPCItemMgt);
4.5  添加数据项
IOPCItemMgt接口的AddItem()方法可以添加具有特殊属性的指定数量的数据项。
pOPCItemMgt->AddItems(ItemNumber,ItemArray,
(OPCITEMRESULT**)&pItemResult,(HRESULT **)&pErrors);
ItemArray 为OPCITEMDEF类型结构数组,它包含数据项的详细信息,客户需要知道要进行交换的数据在RSView32标签数据库中的名称、数据类型及作为 OPC服务器的RSView32项目名称。添加数据项之前,要用这些数据项信息对ItemArray结构数组进行初始化。
4.6  数据交换
成功地增加完所需要的数据项后,OPC客户(VC应用程序)和OPC服务器(RSView32)就可以进行数据交换了。在数据量不大的情况下,可以使用 IOPCSyncIO同步接口的Write()和Read()两个方法进行数据的读写操作,从而实现OPC客户(VC应用程序)和OPC服务器 (RSView32)之间的数据交换。代码如下:
ppUnknown->QueryInterface(IID_IOPCSyncIO,(void **)&pOPCSync);
//得到IOPCSyncIO接口指针
pOPCSync->Read(OPC_DS_CACHE,ReadNumber,hServerRead,&pItemValue,&pErrors);
//读ReadNumber个数据
pOPCSync->Write(WriteNumber,hServerWrite,WriteValue,&pErrors);
//写WriteNumber个数据
4.7  释放接口指针
在VC应用程序停止运行之前必须使用Release()方法删除已创建的OPC对象并释放内存。

5  结束语
OPC技术规范把硬件供应商和应用软件开发者分离开来,使得双方的工作效率都有了很大提高。软件开发商无需了解硬件的实质和操作过程,就能访问OPC数据服务器中的数据,尤其是开发商在已使用了组态软件进行实时监控的过程控制系统基础上,用C++等高级语言开发系统时,大大简化了过去从设备传输数据的复杂过程。在某铝厂的自动配料系统开发中,应用OPC技术方便地实现了VC应用程序和RSView32的数据交换,间接地实现了VC应用程序PLC的通信,获得了很好的结果。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

(全球TMT2022年10月17日讯)为全球技术基础设施提供高速连接的企业Alphawave IP Group plc发布其截至2022年9月30日的三个月交易和业务更新文告。公司从2022年9月1日起整合了已收购的O...

关键字: ALPHA IP GROUP PLC

据业内信息,近日ADM的一份内部报告显示,ADM正在计划降低其锐龙 7000 CPU的生产计划。现阶段全球市场PC的低迷和销量下滑,再加上AM5平台整体反响不佳等等一系列原因导致ADM采取这一行动计划。

关键字: PC ADM 锐龙 7000 CPU

摘要:随着我国城镇化进程加快,汽车保用量剧增,土地资源紧缺,停车难问题日益严重,提升车位空间的利用率是目前解决这个问题的有效途径之一。鉴于此,设计了一种基于PLC与小程序的自助立体停车库,以PLC为控制系统的核心,服务器...

关键字: 控制系统 PLC 通信协议

凭借其全新的功能丰富的移动交易应用程序,屡获殊荣的经纪商HFM让客户实现触手可及的全方位交易体验。 毛里求斯路易港2022年10月14日 /美通社/ -- 全球多资产经纪商...

关键字: 应用程序 FM 移动应用 ADI

伦敦2022年10月13日 /美通社/ -- Ubuntu Pro是扩展式安全维护和合规订阅服务,目前针对数据中心和工作站已推出公开测试Beta版本。Canonical将按照...

关键字: UBUNTU CANONICAL BSP 应用程序

上海2022年10月11日 /美通社/ -- 日前,国际独立第三方检测、检验和认证机构德国莱茵TUV大中华区(简称"TUV莱茵")为宁波坚锋新材料有限公司...

关键字: 新材料 PC 可持续发展 ISO

你平时除了工作还会用电脑吗?近日分析机构Canalys发布了2022年第三季度全球PC出货量报告,台式机和笔记本电脑在第三季度的总出货量同比下降18%至6940万台。其中,笔记本电脑出货量受影响最大,同比下降19%至54...

关键字: PC 台式机 惠普 联想

根据IDC全球个人计算设备季度追踪的初步结果,2022第三季度,全球PC发货量总计7420万台,传统PC市场继续下滑,需求降温和供应不平衡导致同比收缩15.0%。联想出货量1688万台,份额22.7%,比上年同期下降16...

关键字: 苹果 PC IDC 华硕

为增进大家对存储器的认识,本文将对PLC内部常用存储器的使用规则予以介绍。

关键字: 存储器 指数 PLC

摘要:香烟在燃烧后产生的废弃烟头对环境是一大危害,因此对烟头的收集及处理具有重要意义。针对城市烟头收集问题,设计了一种多功能烟头收集器,利用三维软件设计了收集器的整体结构。采用光伏板将太阳能转化为电能给收集器提供电源,结...

关键字: 烟头 结构设计 PLC

工业控制

13479 篇文章

关注

发布文章

编辑精选

技术子站

关闭