📄 unit1.cpp
字号:
btnClose->Enabled = FALSE;
m_bContinue = TRUE;
pEventThread = new EventThread(false);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void TForm1::CheckEvent()
{
USHORT usEventType;
PT_CheckEvent ptCheckEvent;
PT_CounterEventRead ptCounterEventRead;
DWORD dwEvtCountOver, dwEvtCountUnder;
DWORD dwCntrValue;
USHORT usOverFlow;
ULONG* pCompareData;
ULONG ulSize;
char strValue[50];
dwEvtCountOver = 0;
dwEvtCountUnder = 0;
DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
pCompareData = new ULONG[ulSize / sizeof(ULONG)];
ptCounterEventRead.counter = m_CurCounter;
ptCounterEventRead.count = &dwCntrValue;
ptCounterEventRead.overflow = &usOverFlow;
ptCheckEvent.EventType = &usEventType;
ptCheckEvent.Milliseconds = 1000;
while(m_bContinue)
{
if (DRV_CheckEvent(m_DriverHandle, &ptCheckEvent) == SUCCESS)
{
if ((usEventType == (ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter)) ||
(usEventType == (ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter)))
{
if (usEventType == (ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter))
{
dwEvtCountOver = dwEvtCountOver + 1;
editEvtCountOver->Text = IntToStr(dwEvtCountOver);
}
if (usEventType == (ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter))
{
dwEvtCountUnder = dwEvtCountUnder + 1;
editEvtCountUnder->Text = IntToStr(dwEvtCountUnder);
}
// Change compare data
if ((m_CompType) && (m_CompIndex < 7))
{
m_CompIndex += 1;
DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, &ulSize);
switch(m_CompIndex)
{
case 0:
pCompareData[m_CurCounter] = StrToInt(editD0->Text);
editCompData->Text = editD0->Text;
break;
case 1:
pCompareData[m_CurCounter] = StrToInt(editD1->Text);
editCompData->Text = editD1->Text;
break;
case 2:
pCompareData[m_CurCounter] = StrToInt(editD2->Text);
editCompData->Text = editD2->Text;
break;
case 3:
pCompareData[m_CurCounter] = StrToInt(editD3->Text);
editCompData->Text = editD3->Text;
break;
case 4:
pCompareData[m_CurCounter] = StrToInt(editD4->Text);
editCompData->Text = editD4->Text;
break;
case 5:
pCompareData[m_CurCounter] = StrToInt(editD5->Text);
editCompData->Text = editD5->Text;
break;
case 6:
pCompareData[m_CurCounter] = StrToInt(editD6->Text);
editCompData->Text = editD6->Text;
break;
case 7:
pCompareData[m_CurCounter] = StrToInt(editD7->Text);
editCompData->Text = editD7->Text;
break;
}
DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, ulSize);
}
}
}
DRV_CounterEventRead(m_DriverHandle, &ptCounterEventRead);
sprintf(strValue, "%lu", dwCntrValue);
editCntrCount->Text = strValue;
}
delete[] pCompareData;
}
//---------------------------------------------------------------------------
void TForm1::KillThread()
{
DWORD ExitCode;
m_bContinue = FALSE;
if (pEventThread)
{
pEventThread->Terminate();
GetExitCodeThread((void *)(pEventThread->Handle), &ExitCode);
if(ExitCode==STILL_ACTIVE)
TerminateThread((void *)(pEventThread->Handle), ExitCode);
}
}
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall EventThread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
__fastcall EventThread::EventThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall EventThread::Execute()
{
//---- Place thread code here ----
Form1->CheckEvent();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStopClick(TObject *Sender)
{
PT_EnableEvent ptEnableEvent;
btnSelDev->Enabled = TRUE;
btnStart->Enabled = TRUE;
btnStop->Enabled = FALSE;
btnClose->Enabled = TRUE;
//Disable event
ptEnableEvent.Enabled = FALSE;
ptEnableEvent.Count = 1;
if (m_OverComp)
{
ptEnableEvent.EventType = ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter;
m_ErrCde = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
}
if (m_UnderComp)
{
ptEnableEvent.EventType = ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter;
m_ErrCde = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
}
// Reset counter
m_ErrCde = DRV_CounterReset(m_DriverHandle, m_CurCounter);
m_bContinue = FALSE;
editEvtCountOver->Text = "0";
editEvtCountUnder->Text = "0";
// Terminate thread
KillThread();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSetCompClick(TObject *Sender)
{
ULONG ulSize;
ULONG* pCompData;
USHORT usCounter;
usCounter = cmbCounter->ItemIndex;
// Set compare data
m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
if (m_ErrCde == SUCCESS)
{
pCompData = new ULONG[ulSize / sizeof(ULONG)];
m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, pCompData, &ulSize);
pCompData[usCounter] = StrToInt(editSingleData->Text);
m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, pCompData, ulSize);
editCompData->Text = editSingleData->Text;
delete[] pCompData;
}
m_CompType = 0;
m_CompIndex = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSetTableClick(TObject *Sender)
{
ULONG* pCompareData;
ULONG ulSize;
USHORT usCounter;
usCounter = cmbCounter->ItemIndex;
// Set Compare Data
m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
pCompareData = new ULONG[ulSize / sizeof(ULONG)];
m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, &ulSize);
pCompareData[usCounter] = StrToInt(editD0->Text);
m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, ulSize);
editCompData->Text = editD0->Text;
delete[] pCompareData;
// Set compare type and compare table index
m_CompType = 1;
m_CompIndex = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnResetClick(TObject *Sender)
{
USHORT usCounter;
usCounter = cmbCounter->ItemIndex;
m_ErrCde = DRV_CounterReset(m_DriverHandle, usCounter);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -