1.用OPC实现实时数据采集方法
OPC以OLE/COM/DCOM机制为通信标准,采用客户机/服务器体系结构,是目前工业控制软件中广泛采用的一项技术。OPC服务器通常支持两种类型的访问接口:自动化接口(Automation interface)和自定义接口(Custom interface)。自动化接口通常是为基于脚本编程语言而定义的标准接口,可以使用VB、Delphi、PB等编程语言开发OPC应用程序。自定义接口是专门为C++等高级编程语言而制定的标准接口。OPC服务器程序的主要功能是收集现场设备数据信息,并通过标准OPC接口传送给OPC客户端。OPC客户端程序接收服务器发送来的数据,实现实时数据的采集与处理。符合OPC标准的客户端程序可以访问来自任何生产厂商所提供的符合OPC标准的服务器程序,正是这种开放性与通用性使OPC得到了越来越广泛的应用。
使用Delphi编程语言开发符合OPC标准的服务器端或客户端程序必须安装自动化接口:OPC Automation2.0,添加动态链接库文件OPCDAAuto.dll,如果将代码直接插入程序中编译,可以使程序移植更加方便。基本代码如下:
CoUninitialize();
r1:=CoInitialize(nil);
r1:=CLSIDFromProgID(PWideChar(WideString(OPC Server Name)),clsid); //返回服务器句柄
r1:=CoCreateInstance(clsid,nil, CLSCTX_LOCAL_SERVER,IID_IOPCServer,pOPCServer); //建立服务器连接
r1:=ServerAddGroup(pOPCServer, groupname, true, pRevisedUpdateRate,hClientGroup,GroupIf,phServerGroup); //添加组
r1:=GroupAddItem(GroupIf,ItemID,hClientGroup,VT_EMPTY,ItemHandle,CanonicalType);
// 添加项目标签
V:=ReadOPCGroupItemValue(GroupIf,ItemHandle, ItemValue, ItemQuality); //读数据
edit1.text:=inttostr(V); //显示数据
2.用DDE实现实时数据采集
Delphi中使用了4个控件完成DDE功能,它们是:
DDEClientConv: 客户程序建立并维护DDE会话;
DDEClientItem: 客户程序建立并维护数据交换通道;
DDEServerConv: 服务器程序响应DDE会话;
DDEServerItem: 服务器程序维护数据交换通道。
前两个控件用于生成一个DDE客户程序,后两个控件用于生成一个DDE服务器程序。如果一个应用程序同时应用了这些部件,则这一程序既可以充当DDE客户,也可以充当DDE服务器。会话控件DDEClientConv、DDEServerConv用于建立和维护一个DDE会话。DDE会话包括DDE服务和DDE主题两部分。DDE服务是DDE服务器的名称,是DDE服务器应用程序执行文件名去掉.EXE后缀。DDE主题是一个包含了联接信息的数据单元,是一个文件名。项目控件DDEclientItem、DDEServerItem用于建立和维护DDE数据的传输通道。 DDE项目中包含着实际欲传输的数据名称,DDE项目的格式取决于DDE服务器应用程序。
在工控软件中一般都会提供DDE服务器应用程序,用户只要使用DDEClientConv、DDEclientItem来编辑客户端程序读写数据,如果在编辑程序时动态编辑数据项目,也可以不使用DDEclientItem控件。选取System下的DdeClientConv控件,更改名称属性为Name:=DDE。Delphi的DDE提供了两种联接模式:自动和人工。通过DDEClinetConv 部件的ConnectMode属性进行设置,更改属性为人工方式:ConnenctMode:=ddeManual。当调用OpenLink方法时建立和服务器的联接,数据更新时调用RequestData方法申请并获得数据。编写采集实时数据的代码如下:
DDE.SetLink(DdeService,DdeTopic);
//设置DDE服务器名称和工程项目名称以建立连接
DDE.OpenLink ;
//打开连接
V:=StrAlloc(79);
V:=dde.RequestData(Item);
//返回标签项目数据
Label1.Caption :=V;
StrDisPose(V);
DDE.CloseLink ;
//断开连接
3.结束语
根据以上数据采集方式,只需在程序中添加定时器控件定时刷新数据,即可实现在窗口中显示实时数据。