📄 unit1.pas
字号:
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 + -