Delphi7.0開發OPC客戶端程序


 OPC是OLE for Process Control的縮寫,即把OLE應用於工業控制領域,OPC是建立在OLE規範之上,它爲工業控制領域提供了一種標準的數據訪問機制。OPC服務器由三類對象組成:服務器(Server)、組(Group)、數據項(Item)。服務器對象(Server)擁有服務器的所有信息,同時也是組對象(Group)的容器。組對象(Group)擁有本組的所有信息,同時包容並邏輯組織OPC數據項(Item)。在這裏數據項(Item)就是指所有的PLC信號的輸入與輸出。OPC組對象(Group)提供了客戶組織數據的一種方法。客戶可對之進行讀寫,還可以設置客戶端的數據更新速率。當服務器緩衝區內的數據發生改變時,OPC將向客戶發出通知,客戶得到通知後再進行必要的處理。而無須浪費大量的時間進行查詢。OPC規範定義了兩種組對象:公共組和局部組(私有組)。公共組由多個客戶共有,局部組只隸屬於一個OPC客戶。一般來說,客戶和服務器的一對連接只需要定義一個組對象。在每個組對象中,客戶可以加入多個OPC數據項(Item)。OPC數據項(Item)是服務器端定義的對象,通常指向設備的一個寄存器單元。OPC客戶對設備寄存器的操作都是通過其數據項來完成的,通過OPC數據項(Item),OPC規範儘可能地隱藏了設備的特殊信息,也使OPC服務器的通用性大大增強。OPC數據項(Item)並不提供對外接口,客戶不能直接對之進行操作,所有的操作都是通過組對象進行的。每個OPC數據項(Item)的數據結構包括三個成員變量:即數據值、數據質量和時間戳。數據值是以Variant形式表示的。

Delphi7.0加載Siemens動態庫:
1.打開Delphi7.0,點擊Project->Import Type Library
2.在Import Type Library裏面找到Siemens OPC DAAutomation 2.0 (Version 1.0),在Class Nams裏面可以看三個類方法(TOPCGroups,TOPCGroup,TOPCServer),默認的Palette Page爲ActiveX,單擊Install…

Delphi7.0中編寫客戶端程序:
1.連接OPC服務器
  在Form上面添加三個OPC控件:
  OPCGroup1: TOPCGroup;
  OPCGroups1: TOPCGroups;
  OPCServer1: TOPCServer;

Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
var
  Group:OPCGroup;
  testItem:OPCItem;
  OPCItems:string;
  OPCItemsValues:string;
 
  OPCServer1.Connect1('OPC服務名稱(Intellution.OPCiFIX.1)','結點名稱(OPC主機名稱)');//連接OPC服務器
  OPCServer1.OPCGroups.DefaultGroupUpdateRate:=500;//設置更新頻率
  Group:=OPCServer1.OPCGroups.Add('MyGroup'); //添加Group
   
  testItem:=Group.OPCItems.AddItem('SCADA.YPA1_SILO_CHARGEWEIGHTACT.F_CV',1);//添加OPC數據項


2.讀取OPC數據項
Delphi/Pascal code
?
1
2
3
4
var
  myvalue,myquality,mytimestamp:OleVariant;
  testItem.Read(OPCDevice,myvalue,myquality,mytimestamp);
  Edit1.Text:=myvalue;


3.寫OPC數據項
Delphi/Pascal code
?
1
2
3
var
  myvalue:OleVariant;
  testItem.Write(myvalue);


4.斷開OPC
Delphi/Pascal code
?
1
2
  OPCServer1.OPCGroups.RemoveAll;
  OPCServer1.Disconnect;


完整代碼:
Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OPCSiemensDAAutomation_TLB, OleServer;
 
type
  TForm1 = class(TForm)
    OPCGroup1: TOPCGroup;
    OPCGroups1: TOPCGroups;
    OPCServer1: TOPCServer;
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Group:OPCGroup;
  testItem:OPCItem;
  OPCItems:string;
  OPCItemsValues:string;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  //連接OPC
  OPCServer1.Connect1('Intellution.OPCiFIX.1','OPSServer01');
  OPCServer1.OPCGroups.DefaultGroupUpdateRate:=500;
  Group:=OPCServer1.OPCGroups.Add('MyGroup');
  testItem:=Group.OPCItems.AddItem('SCADA.YPA1_SILO_CHARGEWEIGHTACT.F_CV',1);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  //斷開OPC
  OPCServer1.OPCGroups.RemoveAll;
  OPCServer1.Disconnect;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  myvalue,myquality,mytimestamp:OleVariant;
begin
  //讀OPC數據項
  testItem.Read(OPCDevice,myvalue,myquality,mytimestamp);
  Edit1.Text:=myvalue;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
  myvalue:OleVariant;
begin
  //寫OPC數據項
  testItem.Write(myvalue);
end;
 
end.


具體操作圖文說明請到網盤下載
注:具體設備的OPC驅動雖然不一致,但是都有統一的標準,本文只是針對Siemens設備,如果有錯誤歡迎批評指教!

發佈了13 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章