📄 diintform.pas
字号:
unit DiintForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,Driver,event,EventThread,Global;
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;
Label7: TLabel;
Label2: TLabel;
stIntSource: TStaticText;
tmrShow: TTimer;
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 :='';
stIntSource.Caption := '';
{set event parameters and enable event}
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI0;
ptEnableEvent.Enabled := 1;
ptEnableEvent.Count := StrToInt(txtInterruptCount.Text);
ErrCde := DRV_EnableEvent(lDriverHandle, ptEnableEvent);
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;
TData.stIntSource := @stIntSource;
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;
//disable event
tmrShow.Enabled := False;
ptEnableEvent.EventType := ADS_EVT_INTERRUPT_DI0;
ptEnableEvent.Enabled := 0;
ptEnableEvent.Count := StrtoInt(txtInterruptCount.Text);
ErrCde := DRV_EnableEvent(lDriverHandle,ptEnableEvent);
if(ErrCde <> SUCCESS) then
begin
DRV_GetErrorMessage(ErrCde, @szErrMsg);
Application.MessageBox(szErrMsg, 'Error!!', MB_OK);
Exit;
end;
//close devie
DRV_DeviceClose(lDriverHandle);
btnEnable.Enabled := True;
btnDisable.Enabled := False;
btnClose.Enabled := True;
grpDeviceSelection.Enabled := True;
rdgPriority.Enabled := True;
txtInterruptCount.Enabled := True;
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);
stIntSource.Caption := szStatus;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -