📄 diintform.pas
字号:
unit DiintForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,Driver,EventThread,Global,Event;
type
TForm1 = class(TForm)
grpDeviceSelection: TGroupBox;
labDeviceName: TLabel;
btnSelectDevice: TButton;
GroupBox2: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label1: TLabel;
txtInterruptCount: TEdit;
stFrequency: TStaticText;
rdgPriority: TRadioGroup;
btnEnable: TButton;
btnDisable: TButton;
stCounts: TStaticText;
btnClose: TButton;
Memo1: TMemo;
tmrShow: TTimer;
DI0: TCheckBox;
DI1: TCheckBox;
DI2: TCheckBox;
DI3: TCheckBox;
DI4: TCheckBox;
DI5: TCheckBox;
DI6: TCheckBox;
DI7: TCheckBox;
procedure btnEnableClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnSelectDeviceClick(Sender: TObject);
procedure btnDisableClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure tmrShowTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
lDeviceNum : Longint;
lDriverHandle : Longint;
szDescription : array[0..81] of Char;
ErrCde : LRESULT;
szErrMsg : array[0..80] of Char;
myEventThread : TEventThread;
TData : PT_ThreadData;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnEnableClick(Sender: TObject);
var
ptEnableEvent :PT_EnableEvent;
begin
ErrCde := DRV_DeviceOpen(lDeviceNum, lDriverHandle);
if(ErrCde <> SUCCESS)then
begin
DRV_GetErrorMessage(ErrCde, @szErrMsg);
Application.MessageBox(szErrMsg, 'Error!!', MB_OK);
Exit;
end;
stCounts.Caption := '' ;
stFrequency.Caption :='';
{set event parameters and enable event}
ptEnableEvent.Enabled := 1;
ptEnableEvent.Count := StrToInt(txtInterruptCount.Text);
if (DI0.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI0;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI0.Enabled := FALSE;
end;
if (DI1.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI1;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI1.Enabled := FALSE;
end;
if (DI2.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI2;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI2.Enabled := FALSE;
end;
if (DI3.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI3;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI3.Enabled := FALSE;
end;
if (DI4.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI4;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI4.Enabled := FALSE;
end;
if (DI5.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI5;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI5.Enabled := FALSE;
end;
if (DI6.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI6;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI6.Enabled := FALSE;
end;
if (DI7.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI7;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI7.Enabled := FALSE;
end;
if(ErrCde <> SUCCESS)then
begin
DRV_GetErrorMessage(ErrCde, @szErrMsg);
Application.MessageBox(szErrMsg, 'Error!!', MB_OK);
Exit;
end;
{create thread and suspend it}
TData.lDriverHandle := lDriverHandle;
TData.stCounts := @stCounts;
TData.stFrequency := @stFrequency;
myEventThread := TEventThread.Create(TData);
{set the thread priority}
if(rdgPriority.ItemIndex = 0)then
begin
myEventThread.Priority := tpNormal;
end
else if(rdgPriority.ItemIndex = 1)then
begin
myEventThread.Priority := tpTimeCritical;
end;
{//start the thread}
myEventThread.Resume;
tmrShow.Enabled := True;
btnEnable.Enabled := False;
btnDisable.Enabled := True;
btnClose.Enabled := False;
grpDeviceSelection.Enabled := False;
rdgPriority.Enabled := False;
txtInterruptCount.Enabled := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
If(DRV_SelectDevice(Handle, False, lDeviceNum, szDescription)=1) Then
Begin
Application.MessageBox('Can not Open Select Device Dialog', 'Error');
btnCloseClick(Sender);
End;
labDeviceName.Caption := szDescription;
rdgPriority.ItemIndex := 0;
txtInterruptCount.Text := '1';
end;
procedure TForm1.btnSelectDeviceClick(Sender: TObject);
begin
DRV_SelectDevice(Handle, False, lDeviceNum, szDescription);
labDeviceName.Caption := szDescription;
end;
procedure TForm1.btnDisableClick(Sender: TObject);
var
ptEnableEvent: PT_EnableEvent;
begin
myEventThread.Terminate;
myEventThread.WaitFor;
tmrShow.Enabled := False;
//disable event
ptEnableEvent.Enabled := 0;
ptEnableEvent.Count := StrtoInt(txtInterruptCount.Text);
if (DI0.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI0;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI0.Enabled := true;
end;
if (DI1.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI1;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI1.Enabled := true;
end;
if (DI2.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI2;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI2.Enabled := true;
end;
if (DI3.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI3;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI3.Enabled := true;
end;
if (DI4.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI4;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI4.Enabled := true;
end;
if (DI5.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI5;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI5.Enabled := true;
end;
if (DI6.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI6;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI6.Enabled := true;
end;
if (DI7.Checked) then
begin
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI7;
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
DI7.Enabled := true;
end;
if(ErrCde <> SUCCESS) then
begin
DRV_GetErrorMessage(ErrCde, @szErrMsg);
Application.MessageBox(szErrMsg, 'Error!!', MB_OK);
Exit;
end;
//close devie
btnEnable.Enabled := True;
btnDisable.Enabled := False;
btnClose.Enabled := True;
grpDeviceSelection.Enabled := True;
rdgPriority.Enabled := True;
txtInterruptCount.Enabled := True;
DRV_DeviceClose(lDriverHandle);
end;
procedure TForm1.btnCloseClick(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if(btnDisable.Enabled = True) then
begin
btnDisableClick(Sender);
end;
end;
procedure TForm1.tmrShowTimer(Sender: TObject);
begin
stFrequency.Caption := szBuf;
stCounts.Caption := IntToStr(dwCount);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -