uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OPCAutomation_TLB, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Panel1: TPanel;
Panel2: TPanel;
Timer1: TTimer;
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
end;
var
Form1: TForm1;
NewServer:OPCServer;
NewGroups:OPCGroups;
NewGroup:OPCGroup;
NewItems:OPCItems;
NewItem1, NewItem2, NewItem3, NewItem4, NewItem5:Variant;
Val1 : Integer;
Val2, Val3 : Boolean;
implementation
// Подключение к серверу
procedure TForm1.Button4Click(Sender: TObject);
begin
// Шаг 1, подключение
NewServer:=CoOPCServer.Create;
NewServer.Connect('CoDeSys.OPC.02',NewServer.Serve rNode);
Memo1.Clear;
Memo1.Lines.Add(NewServer.ServerName);
Memo1.Lines.Add(DateTimetostr(NewServer.LastUpdate Time));
Memo1.Lines.Add(NewServer.VendorInfo+'. Версия '+Inttostr(NewServer.MajorVersion)+'.'+Inttostr(Ne wServer.MinorVersion)+'.'+Inttostr(NewServer.Build Number));
Memo1.Lines.Add('Состояние сервера='+Inttostr(NewServer.ServerState));
// Шаг 2, создание группы
NewGroups:=NewServer.OPCGroups;
NewGroup:=NewGroups.Add('Group1');
Memo1.Lines.Add(NewGroup.Name);
// Добавим Items для обмена данных
NewItem1:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.tx', 1);
NewItem2:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz1', 1); // Левый датчик
NewItem3:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz2', 1); // Правый датчик
NewItem4:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.sec3', 1); // Левый датчик
NewItem5:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.sec1', 1); // Правый датчик
end;
// Отключение
procedure TForm1.Button5Click(Sender: TObject);
begin
NewServer.OPCGroups.RemoveAll;
NewServer.Disconnect;
Memo1.Lines.Add('Состояние сервера='+Inttostr(NewServer.ServerState));
end;
// Установить 1-ый режим
procedure TForm1.Button2Click(Sender: TObject);
begin
NewGroup.OPCItems.Item('PLC1:PLC_PRG.tx').Write(1) ;
Memo1.Lines.Add('Установлен 1-ый режим!');
end;
// Установить 2-ой режим
procedure TForm1.Button3Click(Sender: TObject);
begin
NewGroup.OPCItems.Item('PLC1:PLC_PRG.tx').Write(2) ;
Memo1.Lines.Add('Установлен 2-ой режим!');
end;
// Чтение режима
procedure TForm1.Button1Click(Sender: TObject);
begin
NewItem1.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.tx'), Val1);
Memo1.Lines.Add('Установлен режим №'+VarToStr(NewItem1.Value));
end;
// Программа таймера, обновляет показания датчиков
procedure TForm1.Timer1Timer(Sender: TObject);
begin
NewItem2:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz1', 1); // Левый
NewItem2.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.poz1'), Val2);
NewItem3:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz2', 1); // Правый
NewItem3.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.poz2'), Val3);
if NewItem2.Value then panel1.Color:=clred else panel1.Color:=clgreen ;
if NewItem3.Value then panel2.Color:=clred else panel2.Color:=clgreen ;
end;
end.