📄 iopcitem.pas
字号:
{*******************************************************}
{ }
{ TiOPCItem Component }
{ }
{ Copyright (c) 1997,2003 Iocomp Software }
{ }
{*******************************************************}
{$I iInclude.inc}
{$ifdef iVCL}unit iOPCItem;{$endif}
{$ifdef iCLX}unit QiOPCItem;{$endif}
interface
uses
{$I iIncludeUses.inc}
{$IFDEF iVCL} iTypes, iGPFunctions, iOPCDLLLoader;{$ENDIF}
{$IFDEF iCLX} QiTypes, QiGPFunctions, QiOPCDLLLoader;{$ENDIF}
type
TiOPCItem = class;
TiOPCItemManager = class;
TOPCItemGetDataTypeEvent = procedure(PropertyName: String; var AVarType: TiTypeKind) of object;
TiOPCItem = class(TPersistent)
private
FPropertyName : String;
FPropertyType : TiTypeKind;
FGroupName : String;
FServerName : String;
FComputerName : String;
FItemName : String;
FAutoConnect : Boolean;
FUpdateRate : Integer;
FSignalHandle : Integer;
FData : OleVariant;
FTimeStamp : TDateTime;
FQuality : Word;
FOwner : TiOPCItemManager;
FAutoError : Boolean;
protected
procedure SetPropertyName(const Value: String);
procedure SetGroupName (const Value: String);
procedure SetServerName (const Value: String);
procedure SetComputerName(const Value: String);
procedure SetItemName (const Value: String);
procedure SetAutoConnect (const Value: Boolean);
procedure SetUpdateRate (const Value: Integer);
procedure SetAutoError (const Value: Boolean);
function GetActive: Boolean;
procedure ReceiveData(Data: OLEVariant; TimeStamp: Double; Quality: Word);
function GetQualityGood: Boolean;
procedure SetData(const Value: OleVariant);
procedure UpdateError;
public
constructor Create;
destructor Destroy; override;
procedure Activate;
procedure ActivateSuspend;
procedure Deactivate;
procedure UpdateResume;
procedure UpdateSuspend;
procedure Loaded;
property Data : OleVariant read FData write SetData;
property TimeStamp : TDateTime read FTimeStamp;
property Quality : Word read FQuality;
property Active : Boolean read GetActive;
property QualityGood : Boolean read GetQualityGood;
property Owner : TiOPCItemManager read FOwner write FOwner;
published
property PropertyName : String read FPropertyName write SetPropertyName;
property GroupName : String read FGroupName write SetGroupName;
property ComputerName : String read FComputerName write SetComputerName;
property ServerName : String read FServerName write SetServerName;
property ItemName : String read FItemName write SetItemName;
property UpdateRate : Integer read FUpdateRate write SetUpdateRate;
property AutoConnect : Boolean read FAutoConnect write SetAutoConnect;
property AutoError : Boolean read FAutoError write SetAutoError;
end;
TiOPCItemManager = class(TObject)
private
FList : TStringList;
FOnGetDesigning : TGetDesigningEvent;
FOnNewData : TNotifyEvent;
FOnGetType : TOPCItemGetDataTypeEvent;
FOwner : TComponent;
protected
function GetCount: Integer;
function GetItem (Index: Integer): TiOpcItem;
function GetDesigning: Boolean;
public
constructor Create;
destructor Destroy; override;
function DoWriteToStream : Boolean;
procedure WriteToStream (Writer: TWriter);
procedure ReadFromStream(Reader: TReader);
function FindIndex(OPCItem: TiOPCItem): Integer;
procedure Clear;
procedure Delete(Index: Integer);
function Add: Integer;
property Items[Index: Integer]: TiOpcItem read GetItem;
property Count : Integer read GetCount;
property IsDesigning : Boolean read GetDesigning;
property Owner : TComponent read FOwner write FOwner;
property OnGetDesigning : TGetDesigningEvent read FOnGetDesigning write FOnGetDesigning;
property OnNewData : TNotifyEvent read FOnNewData write FOnNewData;
property OnGetType : TOPCItemGetDataTypeEvent read FOnGetType write FOnGetType;
end;
implementation
uses
{$IFDEF iVCL} iComponent;{$ENDIF}
{$IFDEF iCLX} QiComponent;{$ENDIF}
type
TWriterAccess = class(TWriter) end;
TReaderAccess = class(TReader) end;
TiComponentAccess = class(TiComponent)end;
//***********************************************************************************************************************************
constructor TiOPCItem.Create;
begin
FUpdateRate := 500;
FAutoConnect := True;
FComputerName := 'Local';
end;
//***********************************************************************************************************************************
destructor TiOPCItem.Destroy;
begin
try
Deactivate;
except
end;
inherited;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.Loaded;
begin
try
if FAutoError then UpdateError;
if FAutoConnect then
begin
try
if not FOwner.IsDesigning then Activate;
except
on exception do;
end;
end;
except
end;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetServerName(const Value: String);
begin
FServerName := Value;
if OPCDLLNotLoaded then Exit;
if Active then Activate;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetComputerName(const Value: String);
begin
FComputerName := Value;
if OPCDLLNotLoaded then Exit;
if Active then Activate;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetItemName(const Value: String);
begin
FItemName := Value;
if OPCDLLNotLoaded then Exit;
if Active then Activate;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetUpdateRate(const Value: Integer);
begin
FUpdateRate := Value;
if OPCDLLNotLoaded then Exit;
if Active then Activate;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetAutoConnect(const Value: Boolean);
var
IsLoading : Boolean;
begin
FAutoConnect := Value;
if OPCDLLNotLoaded then Exit;
if not Assigned(Owner) then Exit;
if not Assigned(Owner.Owner) then Exit;
IsLoading := True;
if Owner.Owner is TiComponent then IsLoading := TiComponentAccess(Owner.Owner as TiComponent).Loading;
if IsLoading then Exit;
if FAutoConnect then Activate;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetPropertyName(const Value: String);
begin
FPropertyName := Value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -