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

📄 unit1.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Driver, Event, Paras, GetEvent;

type
  TForm1 = class(TForm)
    GroupBox8: TGroupBox;
    GroupBox9: TGroupBox;
    editSingleData: TEdit;
    btnSetComp: TButton;
    GroupBox1: TGroupBox;
    editDevName: TEdit;
    btnSelDev: TButton;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    cmbCounter: TComboBox;
    chkOverComp: TCheckBox;
    chkUnderComp: TCheckBox;
    GroupBox5: TGroupBox;
    chkDOIndicate: TCheckBox;
    GroupBox6: TGroupBox;
    chkBigComp: TCheckBox;
    chkSmallComp: TCheckBox;
    GroupBox7: TGroupBox;
    rdoPulse: TRadioButton;
    rdoLevel: TRadioButton;
    GroupBox3: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    editEvtCountOver: TEdit;
    GroupBox4: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    editD0: TEdit;
    editD1: TEdit;
    editD2: TEdit;
    editD3: TEdit;
    editD4: TEdit;
    editD5: TEdit;
    editD6: TEdit;
    editD7: TEdit;
    btnStart: TButton;
    btnStop: TButton;
    btnClose: TButton;
    Label13: TLabel;
    editCompData: TEdit;
    btnSetTable: TButton;
    Label12: TLabel;
    editCntrCount: TEdit;
    editEvtCountUnder: TEdit;
    btnReset: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnSelDevClick(Sender: TObject);
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure CheckEvent();
    procedure btnCloseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure cmbCounterChange(Sender: TObject);
    procedure btnSetCompClick(Sender: TObject);
    procedure btnSetTableClick(Sender: TObject);
    procedure btnResetClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  m_ErrCde: Longint;
  m_DriverHandle: Longint;
  m_szErrMsg: array [0..79] of char;
  m_ulDevNum: Longint;
  m_bContinue: Boolean;
  m_OverComp: SHORT;
  m_UnderComp: SHORT;
  m_CurCounter: SHORT;
  m_CompType: SHORT;  // Compare table or single compare
  m_CompIndex: SHORT; // Compare table index
  Thread  : TCheckThread;
  ptEnableEvent : PT_EnableEvent;     // Enable event
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
        DeviceName: array [0..49] of char;
        ulSize: Longint;
        pBuffer: array of Longint;
        iSize: Integer;
begin
        m_ulDevNum := 0;
        DRV_SelectDevice(Handle, FALSE, m_ulDevNum, DeviceName);
        editDevName.Text := DeviceName;
        m_ErrCde := DRV_DeviceOpen(m_ulDevNum, m_DriverHandle);
        if (m_ErrCde <> SUCCESS) then
        begin
                DRV_GetErrorMessage(m_ErrCde, @m_szErrMsg[0]);
                MessageBox(Handle, m_szErrMsg, 'Device Open', MB_OK);
        end;
        cmbCounter.ItemIndex := 0;
        m_OverComp := 1;
        m_UnderComp := 0;
        m_CompType := 1;  // Initialize Compate Type to Compare table
        m_CompIndex := 0;

        // Get Indicator property
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, NIL, ulSize);
        if (m_ErrCde = SUCCESS) then
        begin
                iSize := ulSize div SizeOf(ulSize);
                SetLength(pBuffer, iSize);
                m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, @pBuffer[0], ulSize);
                if ((pBuffer[0] and OVERCOMPLEVEL) <> 0) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkBigComp.Checked := TRUE;
                        rdoLevel.Checked := TRUE;
                end;
                if ((pBuffer[0] and OVERCOMPPULSE) <> 0) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkBigComp.Checked := TRUE;
                        rdoPulse.Checked := TRUE;
                end;
                if ((pBuffer[0] and UNDERCOMPLEVEL) <> 0) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkSmallComp.Checked := TRUE;
                        rdoLevel.Checked := TRUE;
                end;
                if ((pBuffer[0] and UNDERCOMPPULSE) <> 0) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkSmallComp.Checked := TRUE;
                        rdoPulse.Checked := TRUE;
                end;
        end;
end;

procedure TForm1.btnSelDevClick(Sender: TObject);
var
        DeviceName: array [0..49] of char;
begin
        DRV_SelectDevice(Handle, FALSE, m_ulDevNum, DeviceName);
        editDevName.Text := DeviceName;
        m_ErrCde := DRV_DeviceOpen(m_ulDevNum, m_DriverHandle);
        if (m_ErrCde <> SUCCESS) then
        begin
                DRV_GetErrorMessage(m_ErrCde, @m_szErrMsg[0]);
                MessageBox(Handle, m_szErrMsg, 'Device Open', MB_OK);
        end;
end;

procedure TForm1.btnStartClick(Sender: TObject);
var
        pBuffer: array of Longint;
        ulSize: Longint;
        ptEnableEvent: PT_EnableEvent;
        ptCounterEventStart: PT_CounterEventStart;
        iSize: Integer;
begin
        m_CurCounter := cmbCounter.ItemIndex;

        if (m_CompType = 1) then
                btnSetTableClick(Sender);

        if (chkOverComp.Checked) then
                m_OverComp := 1
        else
                m_OverComp := 0;

        if (chkUnderComp.Checked) then
                m_UnderComp := 1
        else
                m_UnderComp := 0;

        // Set indicator
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, NIL, ulSize);
        iSize := ulSize div SizeOf(ulSize);
        SetLength(pBuffer, iSize);
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, @pBuffer[0], ulSize);
        pBuffer[m_CurCounter] := 0;
        if (chkDOIndicate.Checked ) then
        begin
                if (chkBigComp.Checked) then
                begin
                        if (rdoLevel.Checked) then
                                pBuffer[m_CurCounter] := pBuffer[m_CurCounter] OR OVERCOMPLEVEL;
                        if (rdoPulse.Checked ) then
                                pBuffer[m_CurCounter] := pBuffer[m_CurCounter] OR OVERCOMPPULSE;
                end;
                if (chkSmallComp.Checked) then
                begin
                        if (rdoLevel.Checked) then
                                pBuffer[m_CurCounter] := pBuffer[m_CurCounter] OR UNDERCOMPLEVEL;
                        if (rdoPulse.Checked ) then
                                pBuffer[m_CurCounter] := pBuffer[m_CurCounter] OR UNDERCOMPPULSE;
                end;
        end;
        m_ErrCde := DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrIndicatorControl, @pBuffer[0], ulSize);

        // EnableEvent
        ptEnableEvent.Count := 1;
        ptEnableEvent.Enabled := 1;
        if (m_OverComp = 1) then
        begin
                ptEnableEvent.EventType := ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde := DRV_EnableEvent(m_DriverHandle, ptEnableEvent);
                if (m_ErrCde <> SUCCESS) then
                begin
                        DRV_GetErrorMessage(m_ErrCde, @m_szErrMsg[0]);
                        MessageBox(Handle, m_szErrMsg, 'Driver Message', MB_OK);
                end;
        end;
        if (m_UnderComp = 1) then
        begin
                ptEnableEvent.EventType := ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde := DRV_EnableEvent(m_DriverHandle, ptEnableEvent);
                if (m_ErrCde <> SUCCESS) then
                begin
                        DRV_GetErrorMessage(m_ErrCde, @m_szErrMsg[0]);
                        MessageBox(Handle, m_szErrMsg, 'Driver Message', MB_OK);
                end;

⌨️ 快捷键说明

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