基于delphi的opc客户端源代码

unit MainForm;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, OPCAutomation_TLB, OleServer, ComCtrls,ActiveX,

ExtCtrls;



type

TTFrmMain = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

Button2: TButton;

fwq: TComboBox;

Edit1: TEdit;

Button3: TButton;

Button4: TButton;

OPCGroup1: TOPCGroup;

OPCServer1: TOPCServer;

tv: TTreeView;

Label4: TLabel;

Edit2: TEdit;

Button5: TButton;

Button6: TButton;

Timer1: TTimer;

OPCGroups1: TOPCGroups;

procedure Button4Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure tvClick(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }





public

{ Public declarations }

end;



var

TFrmMain: TTFrmMain;

browser:opcbrowser;

FOPCItems: OPCItems;

FOPCItem: OPCItem;

nownode:ttreenode;

lujing:string;

OVItemID:OleVariant;

OVClientHandles:OleVariant;

OVServerHandles:OleVariant;

NumItems: Integer;

OVErrors: OleVariant;

function Branch(count:integer;node:TTreeNode):string;

implementation



{$R *.dfm}

function Branch(count:integer;node:TTreeNode):string;

var

st:olevariant;

subnode:TTreeNode;

y:integer;

Count2:Integer;

y1:integer;

Count3:Integer;

begin

for y:=1 to count do

begin

st:=Browser.Item(y);

subnode:= https://www.360docs.net/doc/ef8093573.html,.Items.addChild(node,st);

browser.MoveDown(st);

browser.ShowBranches;

Count3:= browser.Count;

if count3>0 then

Branch(count3,subnode)

else

begin

browser.ShowLeafs(st);

Count2:= browser.Count;

if count2>0 then

begin

for y1:=1 to count2 do

begin

st:= browser.Item(y1);

https://www.360docs.net/doc/ef8093573.html,.Items.AddChild(subnode,st);

end;

end;

end;

browser.MoveUp;

browser.ShowBranches;

end;

end;

procedure TTFrmMain.Button4Click(Sender: TObject);

begin

close;

end;



procedure TTFrmMain.Button2Click(Sender: TObject);

var

Count: integer;

rootnode: TTreeNode;

Count1:Integer;

Count2:Integer;

str: olevariant;

X: integer;

z: integer;

st2:String;

begin

OPCServer1.Connect1(fwq.text);

browser := OPCServer1.CreateBrowser;

browser.Movetoroot;

browser.ShowBranches;

Count := browser.Count;

If Count > 0 Then

For X := 1 To Count do

begin

str := browser.Item(X);

rootnode:=tv.Items.add(nil,str);

browser.movedown(str);

browser.showbranches;

Count1 := browser.Count;

If Count1 > 0 Then Branch(Count1, rootnode)

else

begin

browser.ShowLeafs(str);

Count2 := browser.Count;

if count2>0 then

begin

For z := 1 To Count2 do

begin

st

2 := browser.Item(z);

tv.Items.AddChild(rootnode,st2);

end;

end;

end;

browser.MoveUp;

browser.ShowBranches;

end;

Button2.Enabled:=false;

Button1.Enabled:=true;

NumItems := 2;

OPCGroup1.ConnectTo(OPCServer1.OPCGroups.Add('st1'));

FOPCItems:= OPCGroup1.OPCItems;





end;



procedure TTFrmMain.FormCreate(Sender: TObject);

var

servers:string;

str:string;

aobject:tobject;

begin

Button1.enabled:=false;

Button3.Enabled:=false;

Button6.Enabled:=false;

timer1.Enabled:=false;

button3.Enabled:=false;

button5.Enabled:=false;

servers:=opcServer1.GetOPCServers[1];

fwq.AddItem(servers,aobject);

fwq.Text:=servers;

end;

procedure TTFrmMain.Button1Click(Sender: TObject);

begin

timer1.Enabled:=false;

tv.Items.Clear;

Button2.Enabled:=true;

Button1.Enabled:=false;

Button3.Enabled:=false;

Button5.Enabled:=false;

Button6.Enabled:=false;

if Assigned(OPCServer1) then

begin

opcserver1.OPCGroups.RemoveAll;

OPCServer1.Disconnect;

end;

end;

procedure TTFrmMain.Button5Click(Sender: TObject);

var

itemvalue:string;

begin

if OVServerHandles[1]>0 then

begin

FOPCItem := FOPCItems.GetOPCItem(OVServerHandles[1]);

fopcitem.Write(edit2.Text);

Button3.Enabled:=false;

Button6.Enabled:=true;

end

else

begin

showmessage('请选择标签');

end;



end;

procedure TTFrmMain.Timer1Timer(Sender: TObject);

var

source:olevariant;

itemvalue:olevariant;

quality:olevariant;

timestamp:olevariant;

begin

fopcitem.Read(source,itemvalue,quality,timestamp);

edit1.Text:=fopcitem.Value;;

end;

procedure TTFrmMain.Button6Click(Sender: TObject);

begin

timer1.Enabled :=false;

button3.Enabled:=true;

end;



procedure https://www.360docs.net/doc/ef8093573.html,Click(Sender: TObject);

begin

nownode:=tv.Selected;

if nownode<>nil then

begin

Button3.Enabled:=true;

Button5.Enabled:=true;

lujing:=nownode.Text;

button3.Enabled:=true;

while nownode.Parent<>nil do

begin

nownode:=nownode.Parent ;

lujing:=nownode.Text+'.'+lujing;

end;

OVItemID := VarArrayCreate([1, 2], varOleStr);

OVItemID[1]:=lujing;

OVClientHandles := VarArrayCreate([1, 2], varInteger);

OVClientHandles[1] := 1;

OVClientHandles[2] := 2;

OVServerHandles := VarArrayCreate([1, 2], varInteger);

OVServerHandles[1]:=0;

FOPCItems.AddItems(

NumItems,

PSafeArray(TVarData(OVItemID).VOleStr),

PSafeArray(TVarData(OVClientHandles).VInteger),

PSafeArray(TVarData(OVServerHandles).VInteger),

PSafeArray(TVarData(OVErrors).VInteger),

EmptyParam,

EmptyParam

);



end;



end;

procedure TTFrmMain.Button3Click(Sender: TObject);

begin

if OVServerHandles[1]>0 then

begin

FOPCItem := FOPCItems.GetOPCItem(OVServerHandles[1]);

timer1.Enabled:=true;

Button3.Enabled:=false;

Button6.Enabled:=true;

end

else

begin

showmessage('请选择标签');

end;


end;



end.

相关文档
最新文档