⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#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 + -