📄 opcclient.pas
字号:
unit OPCClient;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
CWDSLib_TLB, CWUIControlsLib_TLB, StdCtrls, OleCtrls;
type
TForm1 = class(TForm)
CWGraph1: TCWGraph;
URLRead: TEdit;
Label1: TLabel;
ConnectBtn: TButton;
BrowseBtn: TButton;
DisconnectBtn: TButton;
StatusRead: TEdit;
Label2: TLabel;
Label3: TLabel;
TimeStampText: TEdit;
QualityLED: TCWButton;
Label4: TLabel;
CWDataSocket1: TCWDataSocket;
URLWrite: TEdit;
StatusWrite: TEdit;
WriteValue: TCWNumEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
CWDataSocket2: TCWDataSocket;
procedure ConnectBtnClick(Sender: TObject);
procedure BrowseBtnClick(Sender: TObject);
procedure DisconnectBtnClick(Sender: TObject);
procedure QuitBtnClick(Sender: TObject);
procedure CWDataSocket1DataUpdated(Sender: TObject;
const Data: _DCWData);
procedure CWDataSocket1StatusUpdated(Sender: TObject; Status,
Error: Integer; const Message: WideString);
procedure CWDataSocket2StatusUpdated(Sender: TObject; Status,
Error: Integer; const Message: WideString);
procedure WriteValueChanged(Sender: TObject; var Value,
PreviousValue: OleVariant; OutOfRange: WordBool);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ConnectBtnClick(Sender: TObject);
begin
// Connect to the specified URL
CWDatasocket1.ConnectTo(URLRead.Text, cwdsReadAutoUpdate);
CWDatasocket2.ConnectTo(URLWrite.Text, cwdsWriteAutoUpdate);
end;
procedure TForm1.BrowseBtnClick(Sender: TObject);
begin
if (CWDatasocket1.SelectURL('opc:', 'Select Read URL', 0, '') = true) then
begin
URLRead.Text := CWDatasocket1.URL;
CWDatasocket1.ConnectTo(URLRead.Text, cwdsReadAutoUpdate);
end;
if (CWDatasocket2.SelectURL('opc:', 'Select Write URL', 0, '') = true) then
begin
URLWrite.Text := CWDatasocket2.URL;
CWDatasocket1.ConnectTo(URLWrite.Text, cwdsWriteAutoUpdate);
end;
end;
procedure TForm1.DisconnectBtnClick(Sender: TObject);
begin
CWDatasocket1.Disconnect();
CWDatasocket2.Disconnect();
end;
procedure TForm1.QuitBtnClick(Sender: TObject);
begin
Application.Terminate();
end;
procedure TForm1.CWDataSocket1DataUpdated(Sender: TObject;
const Data: _DCWData);
begin
//As new data is received, chart the data on the graph.
CWGraph1.ChartY(Data.Value, 1, true);
CWGraph1.Plots.Item(2).ChartY(CWDataSocket2.Data.Value, 1);
//Read the quality and timestamp attributes
TimeStampText.Text := Data.GetAttribute('TimeStamp', 'Not Available').Value;
QualityLED.Value := (Data.GetAttribute('Quality', cwdsOPCBad).Value = cwdsOPCGood);
end;
procedure TForm1.CWDataSocket1StatusUpdated(Sender: TObject; Status,
Error: Integer; const Message: WideString);
begin
StatusRead.Text := Message;
end;
procedure TForm1.CWDataSocket2StatusUpdated(Sender: TObject; Status,
Error: Integer; const Message: WideString);
begin
StatusWrite.Text := Message;
end;
procedure TForm1.WriteValueChanged(Sender: TObject; var Value,
PreviousValue: OleVariant; OutOfRange: WordBool);
begin
CWDataSocket2.Data.Value := Value;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -