📄 mainform.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnSelectClick(TObject *Sender)
{
char szDescription[80];
//This function is for getting the device number
DRV_SelectDevice(Handle, True, (ULONG*)&lDeviceNum, szDescription);
txtDeviceName->Caption = AnsiString(szDescription);
if(hDeviceHandle)
DRV_DeviceClose(&hDeviceHandle);
lErrCde = DRV_DeviceOpen(lDeviceNum, &hDeviceHandle);
if(lErrCde != SUCCESS)
{
strcpy(szErrMsg,"Device open error !");
Application->MessageBoxA((char*)szErrMsg,"Device Open");
return;
}
// get device features
ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
ptDevFeatures.size = sizeof(DEVFEATURES);
if ((lErrCde = DRV_DeviceGetFeatures(hDeviceHandle,
(LPT_DeviceGetFeatures)&ptDevFeatures)) != SUCCESS)
{
DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
DRV_DeviceClose((LONG far *)&hDeviceHandle);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnExitClick(TObject *Sender)
{
DRV_DeviceClose((LONG far *)&hDeviceHandle);
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnStartClick(TObject *Sender)
{
tmrRead->Interval = txtTimer->Text.ToInt();
tmrRead->Enabled = true;
btnStart->Enabled = false;
btnStop->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tmrReadTimer(TObject *Sender)
{
ptDioReadPortByte.port = txtPort->Text.ToInt();
ptDioReadPortByte.value = (USHORT far *)&DIValue;
if ((lErrCde = DRV_DioReadPortByte(hDeviceHandle,
(LPT_DioReadPortByte)&ptDioReadPortByte)) != 0)
{
DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
btnStopClick(NULL);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
}
else
txtDIData->Text = IntToHex(DIValue,2);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnStopClick(TObject *Sender)
{
tmrRead->Enabled = false;
btnStart->Enabled = true;
btnStop->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEnableClick(TObject *Sender)
{
PT_EnableEvent EventSetting;
EventSetting.EventType = ADS_EVT_INTERRUPT;
EventSetting.Enabled = TRUE;
EventSetting.Count = txtCount->Text.ToInt();
lErrCde = DRV_EnableEvent( hDeviceHandle, &EventSetting );
if ( lErrCde != 0)
{
DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
return;
}
EventCount = 0;
ptFDITransfer.ulRetData= &ulRetData;
ptFDITransfer.usEventType= ADS_EVT_INTERRUPT;
pThread = new CheckThread(true);
if( radNormal->Checked )
pThread->Priority = tpNormal;
else
pThread->Priority = tpTimeCritical;
dwStartTime = GetTickCount();
pThread->Resume();
btnEnable->Enabled = false;
btnDisable->Enabled = true;
tmrCount->Enabled = true;
btnSelect->Enabled = false;
btnExit->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnDisableClick(TObject *Sender)
{
PT_EnableEvent EventSetting;
btnSelect->Enabled = true;
btnExit->Enabled = true;
EventSetting.EventType = ADS_EVT_INTERRUPT;
EventSetting.Enabled = false;
EventSetting.Count = txtCount->Text.ToInt();
lErrCde = DRV_EnableEvent( hDeviceHandle, &EventSetting );
if ( lErrCde != 0)
{
DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
}
tmrCount->Enabled = false;
if(pThread!=NULL)
{
pThread->Terminate();
DWORD dwExitCode;
GetExitCodeThread( (void *)pThread->Handle ,&dwExitCode) ;
if(dwExitCode == STILL_ACTIVE )
TerminateThread( (void *)pThread->Handle, dwExitCode);
pThread = NULL;
}
btnEnable->Enabled = true;
btnDisable->Enabled = false;
}
//---------------------------------------------------------------------------
bool TfrmMain::CheckEvent()
{
//TODO: Add your source code here
ptCheckEvent.EventType = &CheckEventType;
ptCheckEvent.Milliseconds = 1000;
lErrCde = DRV_CheckEvent(hDeviceHandle, &ptCheckEvent);
if(lErrCde == SUCCESS)
{
if(CheckEventType == ADS_EVT_INTERRUPT )
{
EventCount++;
DRV_FDITransfer(hDeviceHandle,&ptFDITransfer);
if(ulRetData != ulTemp)
{
txtIntPort->Text = IntToHex((int)((ulRetData>>16)& 0x0000ffff),4);
txtLatchData->Text = IntToHex((int)(ulRetData & 0x0000ffff),2);
}
ulTemp= ulRetData;
}
}
dwCurrentTime = GetTickCount();
if ((dwTime = dwCurrentTime - dwStartTime) > 1000) {
ratio = (float)(((float)EventCount / (float)dwTime) * 1000.0);
dwStartTime = GetTickCount();
EventCount = 0;
}
return true;
}
void __fastcall TfrmMain::radNormalClick(TObject *Sender)
{
if( pThread )
pThread->Priority = tpNormal;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::radCriticalClick(TObject *Sender)
{
if( pThread )
pThread->Priority = tpTimeCritical;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tmrCountTimer(TObject *Sender)
{
txtIntRate->Text = FormatFloat("0.0000",ratio);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
btnSelectClick(Sender);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -