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

📄 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, MainForm, Global, Driver, Event, Paras;

type
  TGetEvent = class(TThread)
  private
    { Private declarations }

  protected
    procedure Execute; override;
    procedure adTerminateEvent;
  public
    constructor Create();
  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; }

{*************************************************************
 * Function: Handle the error code. If the input error code > 0,
 *           it means some error apperent.  This function can
 *           show the error message to a message box and stop
 *           this application.
 * Input:    The error code.
 * return:   none
 ************************************************************* }
Function DoesErr(var lErrCode: LongInt): integer;
var
  szErrMsg   : string[100];
  pszErrMsg  : PChar;
begin
  {Check the pressed error code}
  If (lErrCode <> 0) Then
  begin
    pszErrMsg := @szErrMsg;
    DRV_GetErrorMessage(lErrCode, pszErrMsg);
    MessageBox(0, pszErrMsg, 'Thread Message', MB_OK);
    DoesErr := 1;

  end
  else
    DoesErr := 0;
end;

{ TGetEvent }
constructor TGetEvent.Create();
begin
  inherited Create(False);
end;

procedure TGetEvent.Execute;

begin
  { Place thread code here }

  {Prepare structure for checking conversion status}
  pFdiStatus := @gdwFdiStatus;
  pRetrieved := @gdwRetrieved;
  {Cyclic get deiver's event}
  while (usThreadLoop = 1) do
  begin
    {1. Get the Device event}
    if DRV_CheckEvent(ghDev, ptCheckEvent) <> 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 (usEventType = ADS_EVT_DI_LOBUFREADY) then
    begin
      {process buffer change event}
      gdwDIBufferChangeCounter := gdwDIBufferChangeCounter + 1;
      lErrCde := DRV_ClearFlag(ghDev, ADS_EVT_DI_OVERRUN);
      lErrCde := DRV_FDICheck( ghDev, pFdiStatus, pRetrieved);
      frmMain.txtBuffName.Text :='Lower half buffer';

      if( DoesErr(lErrCde) = 1 ) then
        Exit;
    end;

    {3. Does it contain the buffer change event?}
    if (usEventType = ADS_EVT_DI_HIBUFREADY)  then
    begin
      {process buffer change event}
      gdwDIBufferChangeCounter := gdwDIBufferChangeCounter + 1;
      lErrCde := DRV_ClearFlag(ghDev, ADS_EVT_DI_OVERRUN);
      frmMain.txtBuffName.Text :='Higher half buffer';
      if( DoesErr(lErrCde) = 1 ) then
        Exit;
    end;

    {4. Does it contain Overrun event?}
    if (usEventType = ADS_EVT_DI_OVERRUN) then
    begin
      {process overrun event}
      gdwDIOverRunCounter := gdwDIOverRunCounter + 1;
      lErrCde := DRV_ClearFlag(ghDev, ADS_EVT_DI_OVERRUN);
      if( DoesErr(lErrCde) = 1 ) then
        Exit;
    end;

    {5. Does it contain terminate event?}
    if (usEventType = ADS_EVT_DI_TERMINATED) then
    begin
      {process terminate event}
      gdwDITerminateCounter := gdwDITerminateCounter + 1;
      usThreadLoop := 0;
      frmMain.EditTerminate.Text := IntToStr( gdwDITerminateCounter );
      adTerminateEvent();
      frmMain.BtStop.Click ;
      lErrCde := DRV_ClearFlag(ghDev, ADS_EVT_DI_OVERRUN);
      if( DoesErr(lErrCde) = 1 ) then
        Exit;
      exit;
    end;

    frmMain.EditBufferChange.Text := IntToStr( gdwDIBufferChangeCounter );
    frmMain.EditOverrun.Text := IntToStr( gdwDIOverRunCounter );
    frmMain.EditTerminate.Text := IntToStr( gdwDITerminateCounter );

  end;


end;

procedure TGetEvent.adTerminateEvent();
begin
  {Close the converting form and make it to retrieved convered data}

end;


end.

⌨️ 快捷键说明

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