📄 diintform.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "DiintForm.h"
#include "..\..\..\..\include\driver.h"
#include "EventThread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDiintfrm *Diintfrm;
//---------------------------------------------------------------------------
LONG lDriverHandle; //Driver handle
char szErrMsg[80]; // Use for MESSAGEBOX function
LRESULT ErrCde; // Return error code
static ULONG lDeviceNum; //Advantech Device Number in your system
static char szDescription[80]; //description for Select Device
static DEVFEATURES DevFeatures; // structure for device features
static PT_DeviceGetFeatures ptDevGetFeatures;
TEventThread* myEventThread;
BOOL bThreadStop;
extern char szStatus[10];
extern char szBuf[20];
extern DWORD dwCount;
//---------------------------------------------------------------------------
__fastcall TDiintfrm::TDiintfrm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDiintfrm::FormCreate(TObject *Sender)
{
//This function is for getting the device number
if(1 == DRV_SelectDevice(Handle, True, (ULONG*)&lDeviceNum, szDescription)){
Application->MessageBoxA("Can not Open Select Device Dialog", "Error");
btnCloseClick(Sender);
}
labDeviceName->Caption = AnsiString(szDescription);
bThreadStop = True;
txtInterruptCount->Text = "1";
rdgPriority->ItemIndex = 0;
}
//---------------------------------------------------------------------------
void __fastcall TDiintfrm::btnCloseClick(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TDiintfrm::btnSelectDeviceClick(TObject *Sender)
{
//This function is for getting the device number
DRV_SelectDevice(Handle, True, (ULONG*)&lDeviceNum, szDescription);
labDeviceName->Caption = AnsiString(szDescription);
}
//---------------------------------------------------------------------------
void __fastcall TDiintfrm::btnEnableClick(TObject *Sender)
{
PT_EnableEvent ptEnableEvent;
stFrequency->Caption = "";
stCounts->Caption = "";
//Open device
ErrCde = DRV_DeviceOpen(lDeviceNum, (LONG far*)&lDriverHandle);
if(ErrCde != SUCCESS){
strcpy(szErrMsg,"Device open error !");
Application->MessageBoxA((char*)szErrMsg,"Device Open");
return;
}
//set event parameters and enable event
ptEnableEvent.Enabled = True;
ptEnableEvent.Count = txtInterruptCount->Text.ToInt();
if (DI0->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI0;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI0->Enabled = False;
}
if (DI1->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI1;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI1->Enabled = False;
}
if (DI2->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI2;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI2->Enabled = False;
}
if (DI3->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI3;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI3->Enabled = False;
}
if (DI4->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI4;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI4->Enabled = False;
}
if (DI5->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI5;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI5->Enabled = False;
}
if (DI6->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI6;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI6->Enabled = False;
}
if (DI7->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI7;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI7->Enabled = False;
}
if(ErrCde != SUCCESS){
DRV_GetErrorMessage(ErrCde, (LPSTR)szErrMsg);
Application->MessageBoxA((char*)szErrMsg, "Driver Message");
return;
}
//create thread and suspend it
myEventThread = new TEventThread(True);
//set the thread priority
if(rdgPriority->ItemIndex == 0){
myEventThread->Priority = tpNormal;
}else if(rdgPriority->ItemIndex == 1){
myEventThread->Priority = tpTimeCritical;
}
//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;
bThreadStop = False;
}
//---------------------------------------------------------------------------
void __fastcall TDiintfrm::btnDisableClick(TObject *Sender)
{
PT_EnableEvent ptEnableEvent;
USHORT eventtype;
USHORT i;
//terminate the thread
myEventThread->Terminate();
myEventThread->WaitFor();
tmrShow->Enabled = False;
//disable event
ptEnableEvent.Enabled = false;
ptEnableEvent.Count = txtInterruptCount->Text.ToInt();
if (DI0->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI0;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI0->Enabled = true;
}
if (DI1->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI1;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI1->Enabled = true;
}
if (DI2->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI2;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI2->Enabled = true;
}
if (DI3->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI3;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI3->Enabled = true;
}
if (DI4->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI4;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI4->Enabled = true;
}
if (DI5->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI5;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI5->Enabled = true;
}
if (DI6->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI6;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI6->Enabled = true;
}
if (DI7->Checked)
{
ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI7;
ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
DI7->Enabled = true;
}
if(ErrCde != SUCCESS){
DRV_GetErrorMessage(ErrCde, (LPSTR)szErrMsg);
Application->MessageBoxA((char*)szErrMsg, "Driver Message");
return;
}
//close devie
DRV_DeviceClose((LONG far *)&lDriverHandle);
btnEnable->Enabled = True;
btnDisable->Enabled = False;
btnClose->Enabled = True;
grpDeviceSelection->Enabled = True;
rdgPriority->Enabled = True;
txtInterruptCount->Enabled = True;
//clear the information
stCounts->Caption = "";
stFrequency->Caption ="";
dwCount = 0;
//destory thread object
delete myEventThread;
}
//---------------------------------------------------------------------------
void __fastcall TDiintfrm::FormClose(TObject *Sender, TCloseAction &Action)
{
if(!bThreadStop){
btnDisableClick(Sender);
}
}
//---------------------------------------------------------------------------
void __fastcall TDiintfrm::tmrShowTimer(TObject *Sender)
{
stFrequency->Caption = AnsiString(szBuf);
stCounts->Caption = AnsiString(dwCount);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -