📄 mainform.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
long ChkErr(long lErrCde)
{
char sErrMsg[128];
if (lErrCde != 0)
{
DRV_GetErrorMessage(lErrCde, sErrMsg);
Application->MessageBox(sErrMsg, "Error!!", MB_OK);
return 1;
}
else
return 0;
}
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmdSelectDeviceClick(TObject *Sender)
{
char DeviceName[100];
char szTemp[80];
bThreadloop = FALSE;
DWORD dwCount;
DWORD ExitCode;
// TODO: Add your control notification handler code here
if ( m_DeviceHandle!= NULL )
{
if(pThread)
{
GetExitCodeThread((void *)pThread->Handle,&ExitCode);
if(ExitCode==STILL_ACTIVE)
TerminateThread((void *)pThread->Handle,ExitCode);
}
DRV_DeviceClose( &m_DeviceHandle );
}
DRV_SelectDevice( Handle, FALSE, &m_DeviceNum, DeviceName );
txtDeviceName->Text=DeviceName;
m_ErrCde = DRV_DeviceOpen( m_DeviceNum, &m_DeviceHandle);
if (ChkErr(m_ErrCde))
{
// Device open error, clear the driver handle and
// disable all configuration controls.
m_DeviceHandle = 0;
return;
}
dwCount = sizeof(DWORD);
//Get the Di status change channel
m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_BoardID, &m_BoardID, &dwCount);
if(BD_PCI1755 == m_BoardID || BD_MIC3755 == m_BoardID)
EnableControls(true);
else
{
EnableControls(false);
return;
}
//Get the Di status change channel
m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_IrqDiChangeStatusChannel, &m_StatusChannel, &dwCount);
txtChangeStatusChannel->Text = IntToStr(m_StatusChannel);
//Get the Pattern match value
m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_DiPatternMatchValue, &m_MatchValue, &dwCount);
txtPatternMatchValue->Text = IntToHex((__int64)m_MatchValue,4);
//Get the Di channel trigger mode
m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, &dwCount);
//Get the counter2 value
dwCount = sizeof(DWORD)*3;
m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_CounterCountValue, &(m_CounterValue[0]), &dwCount);
txtCounterValue->Text = IntToStr(m_CounterValue[2]);
if (ChkErr(m_ErrCde))
{
//
// Device open error, clear the driver handle and
// disable all configuration controls.
//
m_DeviceHandle = 0;
return;
}
for(int i=0; i<8; i++)
lstDiSignalCondition[i]->ItemIndex =(m_DITriggerMode>>i & 1);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
lstDiSignalCondition[0] = lstDiSignalCondition0;
lstDiSignalCondition[1] = lstDiSignalCondition1;
lstDiSignalCondition[2] = lstDiSignalCondition2;
lstDiSignalCondition[3] = lstDiSignalCondition3;
lstDiSignalCondition[4] = lstDiSignalCondition4;
lstDiSignalCondition[5] = lstDiSignalCondition5;
lstDiSignalCondition[6] = lstDiSignalCondition6;
lstDiSignalCondition[7] = lstDiSignalCondition7;
chkDiInterrupt[0] = chkDiInterrupt0;
chkDiInterrupt[1] = chkDiInterrupt1;
chkDiInterrupt[2] = chkDiInterrupt2;
chkDiInterrupt[3] = chkDiInterrupt3;
chkDiInterrupt[4] = chkDiInterrupt4;
chkDiInterrupt[5] = chkDiInterrupt5;
chkDiInterrupt[6] = chkDiInterrupt6;
chkDiInterrupt[7] = chkDiInterrupt7;
txtDiInterrupt[0] = txtDiInterrupt0;
txtDiInterrupt[1] = txtDiInterrupt1;
txtDiInterrupt[2] = txtDiInterrupt2;
txtDiInterrupt[3] = txtDiInterrupt3;
txtDiInterrupt[4] = txtDiInterrupt4;
txtDiInterrupt[5] = txtDiInterrupt5;
txtDiInterrupt[6] = txtDiInterrupt6;
txtDiInterrupt[7] = txtDiInterrupt7;
bThreadloop = true;
pThread=NULL;
cmdSelectDeviceClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt0Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt0->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI0;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt1Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt1->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI1;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt2Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt2->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI2;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt3Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt3->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI3;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt4Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt4->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI4;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt5Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt5->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI5;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt6Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt6->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI6;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkDiInterrupt7Click(TObject *Sender)
{
ptEnableEvent.Enabled=chkDiInterrupt7->Checked;
ptEnableEvent.EventType=ADS_EVT_INTERRUPT_DI7;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkFDiPatternMatchClick(TObject *Sender)
{
ptEnableEvent.Enabled=chkFDiPatternMatch->Checked;
ptEnableEvent.EventType=ADS_EVT_DI_PATTERNMATCH;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
txtPatternMatchValue->Enabled = !chkFDiPatternMatch->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkTimerClick(TObject *Sender)
{
ptEnableEvent.Enabled=chkTimer->Checked;
ptEnableEvent.EventType=ADS_EVT_TC_TIMER;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
txtCounterValue->Enabled = !chkTimer->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::chkStatusChangeClick(TObject *Sender)
{
ptEnableEvent.Enabled=chkStatusChange->Checked;
ptEnableEvent.EventType=ADS_EVT_DI_STATUSCHANGE;
ptEnableEvent.Count=1;
DRV_EnableEvent(m_DeviceHandle,&ptEnableEvent);
txtChangeStatusChannel->Enabled = !chkStatusChange->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmdStartClick(TObject *Sender)
{
txtCounterEvent->Text = "0";
txtPatternMatchEvent->Text = "0";
txtStatusChangeEvent->Text = "0";
m_DI0Count = 0;
m_DI1Count = 0;
m_DI2Count = 0;
m_DI3Count = 0;
m_DI4Count = 0;
m_DI5Count = 0;
m_DI6Count = 0;
m_DI7Count = 0;
m_MatchCount = 0;
m_StatusCount = 0;
m_TimerCount = 0;
for(int i = 0; i < 8; i++)
txtDiInterrupt[i]->Text = "0";
//
// Create thread to check events
//
bThreadloop=true;
pThread = new CheckThread(false);
//
// User controls setting
//
cmdStop->Enabled = true;
cmdExit->Enabled = false;
cmdStart->Enabled = false;
cmdSelectDevice->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmdStopClick(TObject *Sender)
{
DWORD ExitCode;
bThreadloop=false;
Sleep(200);
if(pThread)
{
pThread->Terminate();
GetExitCodeThread((void *)pThread->Handle,&ExitCode);
TerminateThread((void *)pThread->Handle,ExitCode);
pThread=NULL;
}
cmdStop->Enabled = false;
cmdExit->Enabled = true;
cmdStart->Enabled = true;
cmdSelectDevice->Enabled = true;
}
//---------------------------------------------------------------------------
bool TfrmMain::CheckEvent()
{
//TODO: Add your source code here
PT_CheckEvent ptCheckEvent; // Check event
USHORT usEventTye;
ptCheckEvent.EventType=&usEventTye;
ptCheckEvent.Milliseconds=500;
char szTemp[80];
while(bThreadloop)
{
DRV_CheckEvent(m_DeviceHandle, &ptCheckEvent);
switch(usEventTye)
{
case ADS_EVT_DI_PATTERNMATCH:
m_MatchCount++;
txtPatternMatchEvent->Text = IntToStr(m_MatchCount);
break;
case ADS_EVT_DI_STATUSCHANGE:
m_StatusCount++;
txtStatusChangeEvent->Text = IntToStr(m_StatusCount);
break;
case ADS_EVT_TC_TIMER:
m_TimerCount++;
txtCounterEvent->Text = IntToStr(m_TimerCount);
break;
case ADS_EVT_INTERRUPT_DI0:
m_DI0Count++;
txtDiInterrupt0->Text = IntToStr(m_DI0Count);
break;
case ADS_EVT_INTERRUPT_DI1:
m_DI1Count++;
txtDiInterrupt1->Text = IntToStr(m_DI1Count);
break;
case ADS_EVT_INTERRUPT_DI2:
m_DI2Count++;
txtDiInterrupt2->Text = IntToStr(m_DI2Count);
break;
case ADS_EVT_INTERRUPT_DI3:
m_DI3Count++;
txtDiInterrupt3->Text = IntToStr(m_DI3Count);
break;
case ADS_EVT_INTERRUPT_DI4:
m_DI4Count++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -