2024年4月5日发(作者:)

delphi 用Automation接口编写OPC客户端

2008-06-14 16:36:20| 分类: Delphi编程 | 标签: |字号大中小 订阅

一,首先是OPCAutomation 的安装

1)使用regsvr32 注册

2)在 Delphi 的project菜单中,选导入类型库 OPC Automation 2.0。

二 编写程序

声明 OPC 的类与接口

FOPCServer:TOPCServer;

FOPCGroup :TOPCGroup;

FOPCb :OPCBrowser;

FOPCItems :OPCItems; // interface

FOPCItem :OPCItem; // interface

// 获取OPC Server 列表

function verList(): Boolean;

var OPCServerList,OPCServerName:OleVariant;

j,i:integer;

begin

Result := false;

try

FOPCServer := (Self);

OPCServerList:=Servers;

i:=VarArrayHighBound(OPCServerList,1);

for j:=1 to i do

begin

OPCServerName:=VarArrayGet(OPCServerList,j);

(OPCServerName);

end;

except

Result := False;

end;

end;

// 连接 OPC Server

function verConnect(sServerID:string): Boolean;

begin

Result := true;

try

t1(sServerID);

except

Result := False;

end;

end;

// 断开与 OPC 服务器的连接

procedure verDisconnect;

begin

if Assigned(FOPCServer) then

begin

if Assigned(FOPCGroup) then

begin

All;

;

FOPCGroup := nil;

end;

FOPCItems := nil;

FOPCItem := nil;

nect;

;

FOPCServer := nil;

end;

end;

// 创建 连接 OPC Group

function upConnect(AGroupName: OleVariant): Boolean;

begin

Result := True;

try

FOPCGroup := (Self);

tTo((AGroupName));

Rate :=1000;

ve := True;

cribed := True; // 事件支持

except

Result := False;

end;

end;

procedure Item(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);

ld(curNode,sItemName);

end;

// (true);

end;

end;

procedure wserItem;

var

i,iOrg:integer;

sItemName:WideString;

begin

FOPCb:=Browser;

iOrg:=_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);

ld(SerVerNameNode,sItemName);

end;

end;

end

else begin //树状结构

BrowseItem(SerVerNameNode);

end;

end;

procedure wsePosition(sPosition:string);

begin

try

Root;

caption:=sPosition;

wn(sPosition);

except

;

end;

end;

procedure ViewClick(Sender: TObject);

var i: Integer;

sItemName:WideString;

begin

;

SetBrowsePosition();

with FOPCb do

begin

Filter:='*';

DataType:=0;

AccessRights:=0;

ShowLeafs(true);

for i:=1 to Count do

begin

sItemName:=Item(i);

(sItemName);

end;

end;

end;

procedure ViewExpanding(Sender: TObject; Node: TTreeNode;

var AllowExpansion: Boolean);

begin

if not ldren then

begin

SetBrowsePosition();

BrowseItem(ed);

end;

end;

//添加一个项

procedure mAdd(sItemName:string);

begin

FOPCItems := ms;

tRequestedDataType:=0;

tIsActive :=true;

FOPCItem:=m(sItemName,ItemIndex);

end;

//读取指定项

function ta(ItemName:string):OleVariant;

var

Value, Quality, TimeStamp: OleVariant;

begin

FOPCitem :=(ItemName);

if not Assigned(FOPCItem) then Exit;

(OPCDevice, Value, Quality, TimeStamp);

ReadData :=Value;

end;