mainform.cpp
来自「16 relay output channels and 16 isolated」· C++ 代码 · 共 217 行
CPP
217 行
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
#include "..\..\..\include\driver.h"
#include "stdio.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
LRESULT m_ErrCde; // Return error code
LONG m_DriverHandle; // driver handle
char m_szErrMsg[80]; // Use for MESSAGEBOX function
BOOL m_bHiPriority; // Evnt thread's priority
BOOL m_bContinue;
ULONG m_ulDevNum;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEnableClick(TObject *Sender)
{
PT_EnableEvent EventSetting;
PT_TimerCountSetting CounterSetting;
ULONG CounterVal=0x00;
ULONG m_nCounter0Val;
//
m_ErrCde = DRV_DeviceOpen( m_ulDevNum, &m_DriverHandle);
// Test if Supportted Device!!!
CounterSetting.counter = 2;
CounterSetting.Count = 0x0002;
m_ErrCde = DRV_TimerCountSetting(m_DriverHandle, &CounterSetting);
if ( m_ErrCde != 0) {
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
Application->MessageBox( m_szErrMsg, "Driver Message", MB_OK );
return;
}
// Real Start
EventSetting.EventType = NULL;
if( chkInterrupt->Checked )
EventSetting.EventType |= ADS_EVT_INTERRUPT;
if( chkGroup0->Checked )
EventSetting.EventType |= ADS_EVT_PORT0;
if( chkGroup1->Checked )
EventSetting.EventType |= ADS_EVT_PORT1;
// Counter Value Set
CounterSetting.counter = 2;
CounterSetting.Count = edtCounter2->Text.ToInt();
m_ErrCde = DRV_TimerCountSetting(m_DriverHandle, &CounterSetting);
if ( m_ErrCde != 0) {
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
Application->MessageBox( m_szErrMsg, "Driver Message", MB_OK );
return;
}
CounterVal = (edtCounter0->Text.ToInt() << 16) + edtCounter1->Text.ToInt() ;
CounterSetting.counter = 1;
CounterSetting.Count = CounterVal;
m_ErrCde = DRV_TimerCountSetting(m_DriverHandle, &CounterSetting);
if ( m_ErrCde != 0) {
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
Application->MessageBox( m_szErrMsg, "Driver Message", MB_OK );
return;
}
CounterSetting.counter = 0;
m_ErrCde = DRV_TimerCountSetting(m_DriverHandle, &CounterSetting);
if ( m_ErrCde != 0) {
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
Application->MessageBox( m_szErrMsg, "Driver Message", MB_OK );
return;
}
// Enable Event
EventSetting.Enabled = TRUE;
EventSetting.Count = edtCount->Text.ToInt();
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
if ( m_ErrCde != 0) {
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
Application->MessageBox( m_szErrMsg, "Driver Message", MB_OK );
return;
}
btnEnable->Enabled = false;
btnDisable->Enabled = true;
btnSelectDevice->Enabled = false;
btnExit->Enabled = false;
m_bContinue = TRUE;
pThread = new CheckThread(true);
if ( radNormal->Checked )
pThread->Priority = tpNormal;
else
pThread->Priority = tpTimeCritical;
pThread->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnDisableClick(TObject *Sender)
{
PT_EnableEvent EventSetting;
btnEnable->Enabled = true;
btnDisable->Enabled = false;
btnSelectDevice->Enabled = true;
btnExit->Enabled = true;
EventSetting.EventType = ADS_EVT_INTERRUPT;
EventSetting.Enabled = FALSE;
EventSetting.Count = 1;
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
m_bContinue = FALSE;
if(pThread!=NULL)
{
pThread->Terminate();
DWORD dwExitCode;
GetExitCodeThread( (void *)pThread->Handle ,&dwExitCode) ;
if(dwExitCode == STILL_ACTIVE )
TerminateThread( (void *)pThread->Handle, dwExitCode);
pThread = NULL;
}
if ( m_ErrCde != 0) {
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
Application->MessageBox( m_szErrMsg, "Driver Message", MB_OK );
return;
}
m_ErrCde = DRV_DeviceClose( &m_DriverHandle);
if ( m_ErrCde != 0) {
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
Application->MessageBox( m_szErrMsg, "Driver Message", MB_OK );
return;
}
}
//---------------------------------------------------------------------------
void TfrmMain::CheckEvent()
{
//TODO: Add your source code here
DWORD dwStartTime;
DWORD dwCurrentTime;
DWORD dwTime;
DWORD dwEventCount = 0;
float ratio;
char szBuf[20];
USHORT usEventType;
PT_CheckEvent ptCheckEvent;
ptCheckEvent.EventType = &usEventType;
ptCheckEvent.Milliseconds = 1000;
dwStartTime = GetTickCount();
while ( m_bContinue ) {
if (DRV_CheckEvent( m_DriverHandle, &ptCheckEvent ) == SUCCESS) {
dwEventCount++;
}
dwCurrentTime = GetTickCount();
if ((dwTime = dwCurrentTime - dwStartTime) > 1000) {
ratio = (float)(((float)dwEventCount / (float)dwTime) * 1000.0);
sprintf(szBuf,"%.3f", ratio );
edtCout->Text = szBuf;
dwStartTime = GetTickCount();
dwEventCount = 0;
}
}
return;
}
//---------------------------------------------------------------------------
__fastcall CheckThread::CheckThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall CheckThread::Execute()
{
//---- Place thread code here ----
frmMain->CheckEvent();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnSelectDeviceClick(TObject *Sender)
{
char DeviceName[50];
// TODO: Add your control notification handler code here
DRV_SelectDevice( Handle, FALSE, &m_ulDevNum, DeviceName );
labDevice->Caption = DeviceName;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
btnSelectDeviceClick (NULL);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?