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 + -
显示快捷键?