delphi用Automation接口编写OPC客户端

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 ItemViewClick(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 ItemViewExpanding(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;。

相关文档
最新文档