delphi用Automation接口编写OPC客户端.docx
-
资源ID:3155560
资源大小:37.52KB
全文页数:5页
- 资源格式: DOCX
下载积分:6.99金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
delphi用Automation接口编写OPC客户端.docx
delphi用Automation接口编写OPC客户端delphi 用Automation接口编写OPC客户端 一,首先是OPCAutomation 的安装 1)使用regsvr32 注册 OPCDAAuto.dll 2)在 Delphi 的project菜单中,选导入类型库 OPC Automation 2.0。 二 编写程序 声明 OPC 的类与接口 FOPCServer:TOPCServer; FOPCGroup :TOPCGroup; FOPCb :OPCBrowser; FOPCItems :OPCItems; / interface FOPCItem :OPCItem; / interface / 获取OPC Server 列表 function TForm1.OPCServerList: Boolean; var OPCServerList,OPCServerName:OleVariant; j,i:integer; begin Result := false; try FOPCServer := TOPCServer.Create(Self); OPCServerList:=FOPCServer.GetOPCServers; i:=VarArrayHighBound(OPCServerList,1); for j:=1 to i do begin OPCServerName:=VarArrayGet(OPCServerList,j); lboxServerName.Items.Add(OPCServerName); end; except Result := False; end; end; / 连接 OPC Server function TForm1.OPCServerConnect(sServerID:string): Boolean; begin Result := true; try FOPCServer.Connect1(sServerID); except Result := False; end; end; / 断开与 OPC 服务器的连接 procedure TForm1.OPCServerDisconnect; begin if Assigned(FOPCServer) then begin if Assigned(FOPCGroup) then begin FOPCServer.OPCGroups.RemoveAll; FOPCGroup.Free; FOPCGroup := nil; end; FOPCItems := nil; FOPCItem := nil; FOPCServer.Disconnect; FOPCServer.Free; FOPCServer := nil; end; end; / 创建 连接 OPC Group function TForm1.OPCGroupConnect(AGroupName: OleVariant): Boolean; begin Result := True; try FOPCGroup := TOPCGroup.Create(Self); FOPCGroup.ConnectTo(FOPCServer.OPCGroups.Add(AGroupName); FOPCGroup.UpdateRate :=1000; FOPCGroup.IsActive := True; FOPCGroup.IsSubscribed := True; / 事件支持 except Result := False; end; end; procedure TForm1.BrowseItem(curNode:TTreeNode); var i: Integer; sItemName:WideString; begin with FOPCb do begin Filter:='*' DataType:=0; AccessRights:=0; ShowBranches; for i:=1 to Count do begin sItemName:=Item(i); TvItemView.Items.AddChild(curNode,sItemName); end; / TvItemView.Selected.Expand(true); end; end; procedure TForm1.ADDBrowserItem; var i,iOrg:integer; sItemName:WideString; begin FOPCb:=FOPCServer.CreateBrowser; iOrg:=FOPCb.Get_Organization; if iOrg=2 then /平坦式结构 begin with FOPCb do begin Filter:='*' DataType:=0; AccessRights:=0; ShowLeafs(true); for i:=1 to Count do begin sItemName:=Item(i); TvItemView.Items.AddChild(SerVerNameNode,sItemName); end; end; end else begin /树状结构 BrowseItem(SerVerNameNode); end; end; procedure TForm1.SetBrowsePosition(sPosition:string); begin try FOPCb.MoveToRoot; caption:=sPosition; FOPCb.MoveDown(sPosition); except ; end; end; procedure TForm1.TvItemViewClick(Sender: TObject); var i: Integer; sItemName:WideString; begin ListBox1.Clear; SetBrowsePosition(TvItemView.Selected.Text); with FOPCb do begin Filter:='*' DataType:=0; AccessRights:=0; ShowLeafs(true); for i:=1 to Count do begin sItemName:=Item(i); ListBox1.Items.Add (sItemName); end; end; end; procedure TForm1.TvItemViewExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); begin if not TvItemView.Selected.HasChildren then begin SetBrowsePosition(TvItemView.Selected.Text); BrowseItem(TvItemView.Selected); end; end; /添加一个项 procedure TForm1.OPCItemAdd(sItemName:string); begin FOPCItems := FOPCGroup.OPCItems; FOPCItems.DefaultRequestedDataType:=0; FOPCItems.DefaultIsActive :=true; FOPCItem:=FOPCItems.AddItem(sItemName,ItemIndex); end; /读取指定项 function TForm1.ReadData(ItemName:string):OleVariant; var Value, Quality, TimeStamp: OleVariant; begin FOPCitem :=FOPCItems.Item(ItemName); if not Assigned(FOPCItem) then Exit; FOPCItem.Read(OPCDevice, Value, Quality, TimeStamp); ReadData :=Value; end;