📄 mainform.pas
字号:
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Driver, Thread, event, paras;
type
TfrmMain = class(TForm)
txtDeviceName: TEdit;
cmdSelectDevice: TButton;
grpDiInterrupt: TGroupBox;
GroupBox1: TGroupBox;
lstDiSignalCondition0: TListBox;
lstDiSignalCondition1: TListBox;
lstDiSignalCondition2: TListBox;
lstDiSignalCondition3: TListBox;
lstDiSignalCondition4: TListBox;
lstDiSignalCondition5: TListBox;
lstDiSignalCondition6: TListBox;
lstDiSignalCondition7: TListBox;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
chkDiInterrupt0: TCheckBox;
chkDiInterrupt1: TCheckBox;
chkDiInterrupt2: TCheckBox;
chkDiInterrupt3: TCheckBox;
chkDiInterrupt4: TCheckBox;
chkDiInterrupt5: TCheckBox;
chkDiInterrupt6: TCheckBox;
chkDiInterrupt7: TCheckBox;
txtDiInterrupt1: TEdit;
txtDiInterrupt2: TEdit;
txtDiInterrupt3: TEdit;
txtDiInterrupt0: TEdit;
txtDiInterrupt4: TEdit;
txtDiInterrupt5: TEdit;
txtDiInterrupt6: TEdit;
txtDiInterrupt7: TEdit;
cmdStart: TButton;
cmdStop: TButton;
cmdExit: TButton;
cmdOpenDevice: TButton;
cmdCloseDevice: TButton;
procedure cmdSelectDeviceClick(Sender: TObject);
procedure cmdStartClick(Sender: TObject);
procedure cmdStopClick(Sender: TObject);
procedure EnableControls(bEnabled : boolean );
procedure cmdExitClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure chkDiInterrupt0Click(Sender: TObject);
procedure chkDiInterrupt1Click(Sender: TObject);
procedure chkDiInterrupt2Click(Sender: TObject);
procedure chkDiInterrupt3Click(Sender: TObject);
procedure chkDiInterrupt4Click(Sender: TObject);
procedure chkDiInterrupt5Click(Sender: TObject);
procedure chkDiInterrupt6Click(Sender: TObject);
procedure chkDiInterrupt7Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure lstDiSignalCondition7Click(Sender: TObject);
procedure lstDiSignalCondition6Click(Sender: TObject);
procedure lstDiSignalCondition5Click(Sender: TObject);
procedure lstDiSignalCondition4Click(Sender: TObject);
procedure lstDiSignalCondition3Click(Sender: TObject);
procedure lstDiSignalCondition2Click(Sender: TObject);
procedure lstDiSignalCondition1Click(Sender: TObject);
procedure lstDiSignalCondition0Click(Sender: TObject);
procedure CheckEvent();
procedure cmdOpenDeviceClick(Sender: TObject);
procedure cmdCloseDeviceClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
lstDiSignalCondition : array[0..8] of TListBox;
chkDiInterrupt : array[0..8] of TCheckBox;
txtDiInterrupt : array[0..8] of TEdit;
m_DeviceHandle : LongInt;
m_DeviceNum : integer;
bThreadloop : Boolean;
m_ErrCde : LongInt; // Return error code
m_CounterValue : array[0..3] of DWORD;
m_MatchValue : DWORD;
m_DITriggerMode : LongInt;
szErrMsg : Array[0..80] of char;
m_StatusChannel : DWORD;
m_DI0Count : DWORD;
m_DI1Count : DWORD;
m_DI2Count : DWORD;
m_DI3Count : DWORD;
m_DI4Count : DWORD;
m_DI5Count : DWORD;
m_DI6Count : DWORD;
m_DI7Count : DWORD;
m_MatchCount : DWORD;
m_StatusCount : DWORD;
m_TimerCount : DWORD;
m_BoardID : DWORD;
Thread : TCheckThread;
ptEnableEvent : PT_EnableEvent; // Enable event
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
Function DoesErr(var lErrCode: LongInt): integer;
var
szErrMsg : string[100];
pszErrMsg : PChar;
iRet : integer;
begin
{Check the pressed error code}
If (lErrCode <> 0) Then
begin
pszErrMsg := @szErrMsg;
DRV_GetErrorMessage(lErrCode, pszErrMsg);
iRet := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
DoesErr := 1;
end
else
DoesErr := 0;
end;
procedure TfrmMain.cmdSelectDeviceClick(Sender: TObject);
var
DeviceName : Array[0..100] of char ;
dwCount : Longint;
ExitCode : DWORD;
i : integer;
begin
bThreadloop:=false;
// TODO: Add your control notification handler code here
if ( m_DeviceHandle<> 0 ) then
begin
if( Assigned(Thread)) then
begin
GetExitCodeThread(Thread.Handle,ExitCode);
if(ExitCode=STILL_ACTIVE) then
TerminateThread(Thread.Handle,ExitCode);
end;
DRV_DeviceClose( m_DeviceHandle );
end;
DRV_SelectDevice( Handle, FALSE, m_DeviceNum, DeviceName );
txtDeviceName.Text:=DeviceName;
cmdOpenDeviceClick(Sender);
dwCount := sizeof(DWORD);
//Get the Di status change channel
m_ErrCde := DRV_DeviceGetProperty(m_DeviceHandle, CFG_BoardID, @m_BoardID, dwCount);
if(BD_USB4761 = m_BoardID) then
EnableControls(true)
else
begin
EnableControls(false);
exit;
end;
//Get the Di channel trigger mode
m_ErrCde := DRV_DeviceGetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, @m_DITriggerMode, dwCount);
for i:=0 to 7 do
lstDiSignalCondition[i].ItemIndex :=((m_DITriggerMode shr i) and 1);
end;
procedure TfrmMain.cmdStartClick(Sender: TObject);
var
i: integer;
begin
for i := 0 to 7 do
txtDiInterrupt[i].Text := '0';
m_DI0Count := 0;
m_DI1Count := 0;
m_DI2Count := 0;
m_DI3Count := 0;
m_DI4Count := 0;
m_DI5Count := 0;
m_DI6Count := 0;
m_DI7Count := 0;
//
// Create thread to check events
//
bThreadloop:=true;
Thread := TCheckThread.Create(true);
Thread.Priority := tpTimeCritical;
Thread.Resume;
// User controls setting
//
cmdStop.Enabled := true;
cmdExit.Enabled := false;
cmdStart.Enabled := false;
cmdSelectDevice.Enabled := false;
end;
procedure TfrmMain.cmdStopClick(Sender: TObject);
var
ExitCode : DWORD;
begin
bThreadloop:=false;
if( Assigned(Thread)) then
begin
Thread.Terminate();
GetExitCodeThread(Thread.Handle,ExitCode);
if(ExitCode = STILL_ACTIVE) then
TerminateThread(Thread.Handle,ExitCode);
end;
cmdStop.Enabled := false;
cmdExit.Enabled := true;
cmdStart.Enabled := true;
cmdSelectDevice.Enabled := true;
end;
procedure TfrmMain.EnableControls(bEnabled : boolean );
var
i : integer;
begin
// DI interrupt event controls enable or disable
for i := 0 to 7 do
begin
lstDiSignalCondition[i].Enabled := bEnabled;
chkDiInterrupt[i].Enabled := bEnabled;
txtDiInterrupt[i].Enabled := bEnabled;
end;
// Execution controls enable and disable
cmdStart.Enabled := bEnabled;
cmdStop.Enabled := False;
end;
procedure TfrmMain.cmdExitClick(Sender: TObject);
begin
Close();
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
ExitCode : DWORD;
begin
bThreadloop:=false;
if( Assigned(Thread)) then
begin
Thread.Terminate();
GetExitCodeThread(Thread.Handle,ExitCode);
if(ExitCode = STILL_ACTIVE) then
TerminateThread(Thread.Handle,ExitCode);
end;
cmdStop.Enabled := false;
end;
procedure TfrmMain.chkDiInterrupt0Click(Sender: TObject);
begin
ptEnableEvent.Enabled := Smallint(chkDiInterrupt0.Checked );
ptEnableEvent.EventType := ADS_EVT_DI_INTERRUPT0;
ptEnableEvent.Count := 1;
DRV_EnableEvent(m_DeviceHandle,ptEnableEvent);
end;
procedure TfrmMain.chkDiInterrupt1Click(Sender: TObject);
begin
ptEnableEvent.Enabled := Smallint(chkDiInterrupt1.Checked );
ptEnableEvent.EventType := ADS_EVT_DI_INTERRUPT1;
ptEnableEvent.Count := 1;
DRV_EnableEvent(m_DeviceHandle,ptEnableEvent);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -