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

📄 thread.pas

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

Interface

Uses Windows, Classes, Dialogs, SysUtils, Graphics, Controls, Forms,
  StdCtrls, Buttons, ExtCtrls, Driver;

Type
	PT_ThreadData = Record
		lDeviceHandle        :	Longint;
	   labPatternMatchCount :	^TStaticText;
	   labMatchChannel      :	^TStaticText;
	   labMatchCount        :	^TStaticText;
	   labOverflowChannel   :	^TStaticText;
	   labOverflowCount     :	^TStaticText;
	   labStatus            :	^TStaticText;
	   labChannelNo         :	^TStaticText;
	   labStatusCount       :	^TStaticText;

	   RisingEventCount     :	^Integer;
	   FallingEventCount    :	^Integer;
	   PatternEventCount    :	^Integer;
	   CountMatchEventCount :	^Integer;
	   CountOverflowEventCount :	^Integer;
   End;

	TWatchThread = class(TThread)
	private

	protected
		procedure Execute; override;

	public

		EventType     : Integer;
		ReturnValue   : Integer;
		ptCheckEvent  : PT_CheckEvent;
		ptFDITransfer : PT_FDITransfer;
		MData         : PT_ThreadData;

		constructor Create(TData: PT_ThreadData);

  End;

Implementation


constructor TWatchThread.Create(TData: PT_ThreadData);
Begin
	MData := TData;

	inherited Create(False);

End;


Procedure TWatchThread.Execute;
var
	lErrCde       : Longint;
Begin
   ptCheckEvent.EventType := @EventType;
   ptCheckEvent.Milliseconds := 1000;
	While not Terminated do
	  Begin
      lErrCde := DRV_CheckEvent(MData.lDeviceHandle, ptCheckEvent);
		if lErrCde <> 0 then
			Exit;

      Case EventType of

      	ADS_EVT_PATTERNMATCH:     { Pattern Match Event }
         Begin
            ptFDITransfer.EventType := ADS_EVT_PATTERNMATCH;
            ptFDITransfer.RetData   := @ReturnValue;
            lErrCde := DRV_FDITransfer(MData.lDeviceHandle, ptFDITransfer);
            If lErrCde <> 0 Then
              Begin
               DRV_DeviceClose(MData.lDeviceHandle);
               Exit;
              End;
            Inc(MData.PatternEventCount^);
            MData.labPatternMatchCount.Caption := IntToStr(MData.PatternEventCount^);
         End;

      	ADS_EVT_COUNTERMATCH:
         Begin
            ptFDITransfer.EventType := ADS_EVT_COUNTERMATCH;
            ptFDITransfer.RetData   := @ReturnValue;
            lErrCde := DRV_FDITransfer(MData.lDeviceHandle, ptFDITransfer);
            If lErrCde <> 0 Then
              Begin
               DRV_DeviceClose(MData.lDeviceHandle);
               Exit;
              End;
            Inc(MData.CountMatchEventCount^);
            MData.labMatchChannel.Caption := IntToStr(ReturnValue);
            MData.labMatchCount.Caption := IntToStr(MData.CountMatchEventCount^);
         End;

      	ADS_EVT_COUNTEROVERFLOW:
         Begin
            ptFDITransfer.EventType := ADS_EVT_COUNTEROVERFLOW;
            ptFDITransfer.RetData   := @ReturnValue;
            lErrCde := DRV_FDITransfer(MData.lDeviceHandle, ptFDITransfer);
            If lErrCde <> 0 Then
              Begin
               DRV_DeviceClose(MData.lDeviceHandle);
               Exit;
              End;
            Inc(MData.CountOverflowEventCount^);
            MData.labOverflowChannel.Caption := IntToStr(ReturnValue);
            MData.labOverflowCount.Caption := IntToStr(MData.CountOverflowEventCount^);
         End;

      	ADS_EVT_STATUSCHANGE:
         Begin
            ptFDITransfer.EventType := ADS_EVT_STATUSCHANGE;
            ptFDITransfer.RetData   := @ReturnValue;
            lErrCde := DRV_FDITransfer(MData.lDeviceHandle, ptFDITransfer);
            If lErrCde <> 0 Then
              Begin
               DRV_DeviceClose(MData.lDeviceHandle);
               Exit;
              End;
            If (ReturnValue And $FF) > 0 Then
              Begin
               Inc(MData.FallingEventCount^);
               MData.labStatus.Caption := 'Falling';
               MData.labChannelNo.Caption := IntToStr(ReturnValue And $FF);
               MData.labStatusCount.Caption := IntToStr(MData.FallingEventCount^);
              End
            Else If (ReturnValue And $FF00) > 0 Then
              Begin
               Inc(MData.RisingEventCount^);
               MData.labStatus.Caption := 'Rising';
               MData.labChannelNo.Caption := IntToStr(ReturnValue shr 8);
               MData.labStatusCount.Caption := IntToStr(MData.RisingEventCount^);
              End;
         End;
      End;
	  End;
End;


End.

⌨️ 快捷键说明

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