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

📄 getevent.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
字号:
unit GetEvent;

interface

uses
  Classes, SysUtils, windows,
  Init ,Convert, Driver;

type
  TGetEvent = class(TThread)
  private
    { Private declarations }
    dwDeviceNumber : Longint;
  protected
    procedure Execute; override;
    procedure adInterruptEvent;
    procedure adBufChangeEvent;
    procedure adOverrunEvent;
    procedure adTerminateEvent;
  public
    constructor Create(dwDevNum : Longint);
  end;

implementation

{ Important: Methods and properties of objects in VCL can only be used in a
  method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TGetEvent.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TGetEvent }

constructor TGetEvent.Create(dwDevNum : Longint);
begin
    inherited Create(False);
    dwDeviceNumber := dwDevNum;
end;

procedure TGetEvent.Execute;
var
    ptChkEvent  : PT_CheckEvent;
    wEventType  : Word;
begin
    { Place thread code here }

    {Prepare structure for checking conversion status}
    with ptChkEvent do
    begin
        EventType    := @wEventType;
        Milliseconds := 5000;
    end;

    {Cyclic get deiver's event}
    while (frmInit.bThreadLoop = True) do
    begin
        {1. Get the Device event}
        if DRV_CheckEvent(frmInit.hDevHandle, ptChkEvent) <> 0 then
        begin
            {If cannot get event close and terminate thread}
            MessageBox(0,'Check Event Error !','Thread Message',MB_OK);
            exit;
        end;

        {2. Does it contain the Interrupt event?}
        if (wEventType and ADS_EVT_INTERRUPT) <> 0 then
            {process interrupt event}
            adInterruptEvent();

        {3. Does it contain the buffer change event?}
        if (wEventType and ADS_EVT_BUFCHANGE) <> 0 then
            {process buffer change event}
            adBufChangeEvent();

        {4. Does it contain Overrun event?}
        if (wEventType and ADS_EVT_OVERRUN) <> 0 then
            {process overrun event}
            adOverrunEvent();

        {5. Does it contain terminate event?}
        if (wEventType and ADS_EVT_TERMINATED) <> 0 then
        begin
            {process terminate event}
            adTerminateEvent();
            exit;
        end;
    end;

end;

procedure TGetEvent.adInterruptEvent();
begin
    {Process Interrupt event}
end;

procedure TGetEvent.adBufChangeEvent();
begin
    {Process Buffer change event}
end;

procedure TGetEvent.adOverrunEvent();
var
    lErrCde  : Longint;
    szErrMsg : string[50];
begin
    {Process overrun event.
     This demo does not care the overrun event, just clear it}
    lErrCde := DRV_ClearOverrun(frmInit.hDevHandle);
    if lErrCde <> 0 then
    begin
        DRV_GetErrorMessage(lErrCde, PChar(@szErrMsg));
        MessageBox(0, PChar(@szErrMsg), 'Thread Message', MB_OK);
    end;
end;

procedure TGetEvent.adTerminateEvent();
begin

    {Close the converting form and make it to retrieved convered data}
    if frmConverting.hThreadGetEvent <> 0 then
    begin
        frmInit.bThreadLoop := False;
        frmConverting.hThreadGetEvent := 0;
        frmConverting.Close;
    end;
end;

end.

⌨️ 快捷键说明

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