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;


发布评论