⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opccallback.pas

📁 omroln OPC 用delphi描述了同OMROLnOPC通讯的过程
💻 PAS
字号:
{*******************************************************}
{                                                       }
{       OPC Data Access 2.0  Custom Interface           }
{                                                       }
{       Delphi Sample - Callback Interface              }
{*******************************************************}

unit OPCCallback;

interface

uses
  Windows, SysUtils, ActiveX, OPCDA;

type
  TOnDataRecvEvent = procedure (Sender: TObject; ItemHandle: OPCHANDLE;
    ItemValue: Variant; ItemTime: TDateTime) of Object;
    
  // class to receive IConnectionPointContainer data change callbacks
  TOPCDataCallback = class(TInterfacedObject, IOPCDataCallback)
  private
    FOnDataRecvEvent: TOnDataRecvEvent;
  public
    function OnDataChange(dwTransid: DWORD; hGroup: OPCHANDLE;
      hrMasterquality: HResult; hrMastererror: HResult; dwCount: DWORD;
      phClientItems: POPCHANDLE; pvValues: POleVariant; pwQualities: PWORD;
      pftTimeStamps: PFileTime; pErrors: PHResult): HResult; virtual; stdcall;
    function OnReadComplete(dwTransid: DWORD; hGroup: OPCHANDLE;
      hrMasterquality: HResult; hrMastererror: HResult; dwCount: DWORD;
      phClientItems: POPCHANDLE; pvValues: POleVariant; pwQualities: PWORD;
      pftTimeStamps: PFileTime; pErrors: PHResult): HResult; virtual; stdcall;
    function OnWriteComplete(dwTransid: DWORD; hGroup: OPCHANDLE;
      hrMastererr: HResult; dwCount: DWORD; pClienthandles: POPCHANDLE;
      pErrors: PHResult): HResult; virtual; stdcall;
    function OnCancelComplete(dwTransid: DWORD; hGroup: OPCHANDLE):
      HResult; virtual; stdcall;
  published
    property OnDataRecvEvent: TOnDataRecvEvent read FOnDataRecvEvent
      write FOnDataRecvEvent;
  end;

implementation
// TOPCDataCallback methods

function TOPCDataCallback.OnDataChange(dwTransid: DWORD;
  hGroup: OPCHANDLE; hrMasterquality: HResult; hrMastererror: HResult;
  dwCount: DWORD; phClientItems: POPCHANDLE; pvValues: POleVariant;
  pwQualities: PWORD; pftTimeStamps: PFileTime; pErrors: PHResult): HResult;
var
  ClientItems: POPCHANDLEARRAY;
  Values: POleVariantArray;
  Qualities: PWORDARRAY;
  I: Integer;
  RecvTime: TDateTime;
begin
  Result := S_OK;
  RecvTime := Now;
  ClientItems := POPCHANDLEARRAY(phClientItems);
  Values := POleVariantArray(pvValues);
  Qualities := PWORDARRAY(pwQualities);
  for I := 0 to dwCount - 1 do
    if Qualities[I] = OPC_QUALITY_GOOD then
    begin
      if Assigned(FOnDataRecvEvent) then
        FOnDataRecvEvent(nil, ClientItems[I], Values[I], RecvTime);
    end;
end;

function TOPCDataCallback.OnReadComplete(dwTransid: DWORD;
  hGroup: OPCHANDLE; hrMasterquality: HResult; hrMastererror: HResult;
  dwCount: DWORD; phClientItems: POPCHANDLE; pvValues: POleVariant;
  pwQualities: PWORD; pftTimeStamps: PFileTime; pErrors: PHResult): HResult;
begin
  Result := OnDataChange(dwTransid, hGroup, hrMasterquality, hrMastererror,
    dwCount, phClientItems, pvValues, pwQualities, pftTimeStamps, pErrors);
end;

function TOPCDataCallback.OnWriteComplete(dwTransid: DWORD;
  hGroup: OPCHANDLE; hrMastererr: HResult; dwCount: DWORD;
  pClienthandles: POPCHANDLE; pErrors: PHResult): HResult;
begin
  Result := S_OK;
end;
function TOPCDataCallback.OnCancelComplete(dwTransid: DWORD;
  hGroup: OPCHANDLE): HResult;
begin
  Result := S_OK;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -