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

📄 mainform.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 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;

        cmdOpenDeviceClick(Sender);

	dwCount = sizeof(DWORD);
	//Get the Di status change channel
	m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_BoardID, &m_BoardID, &dwCount);
       if(BD_USB4761 == m_BoardID)
           EnableControls(true);
       else
       {
           EnableControls(false);
           return;
       }

	//Get the Di channel trigger mode
	m_ErrCde = DRV_DeviceGetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, &dwCount);
        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);
          chkDiInterrupt[i]->Checked = false;
         }




}
//---------------------------------------------------------------------------
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::cmdStartClick(TObject *Sender)
{

      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(true);
      pThread->Priority =  tpTimeCritical;
      //
      // User controls setting
      //
      pThread->Resume();
      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=5000;
	char szTemp[80];
        ULONG status;


	while(bThreadloop)
	{
		status = DRV_CheckEvent(m_DeviceHandle, &ptCheckEvent);
                if(ChkErr(status))
                {
                    cmdStop->Enabled = false;
                    cmdExit->Enabled = true;
                    cmdStart->Enabled = true;
                    cmdOpenDevice->Enabled = true;
                    cmdCloseDevice->Enabled = false;
                    DRV_DeviceClose(&m_DeviceHandle);
                    bThreadloop = FALSE;
                }
		switch(usEventTye)
		{

		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++;
			txtDiInterrupt4->Text = IntToStr(m_DI4Count);
			break;
		case ADS_EVT_INTERRUPT_DI5:
			m_DI5Count++;
			txtDiInterrupt5->Text = IntToStr(m_DI5Count);
			break;
		case ADS_EVT_INTERRUPT_DI6:
			m_DI6Count++;
			txtDiInterrupt6->Text = IntToStr(m_DI6Count);
			break;
		case ADS_EVT_INTERRUPT_DI7:
			m_DI7Count++;
			txtDiInterrupt7->Text = IntToStr(m_DI7Count);
			break;
                case ADS_EVT_DEVREMOVED:
                        Application->MessageBoxA("The Device is removed! Please reopen the device!","Driver Message",0);
                        cmdStop->Enabled = false;
                        cmdExit->Enabled = true;
                        cmdStart->Enabled = true;
                        cmdOpenDevice->Enabled = true;
                        cmdCloseDevice->Enabled = false;
                        DRV_DeviceClose( &m_DeviceHandle);
                        bThreadloop = FALSE;
                        break;
		default :
			break;
		}
	}
        return true;
}
void __fastcall TfrmMain::cmdExitClick(TObject *Sender)
{

  Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition7Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);

}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition6Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);
        
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition5Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);
        
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition4Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);
        
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition3Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);
        
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition2Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);
        
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition1Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);
        
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lstDiSignalCondition0Click(TObject *Sender)
{
      m_DITriggerMode=0;
      for(int i=0;i<8;i++)
              m_DITriggerMode = m_DITriggerMode | (lstDiSignalCondition[i]->ItemIndex << i);
      DRV_DeviceSetProperty(m_DeviceHandle, CFG_IrqDiTriggerSignals, &m_DITriggerMode, 4);
        
}

//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
      DWORD ExitCode;
	if ( m_DeviceHandle!= NULL )
	{
		if(pThread)
		{
		   GetExitCodeThread((void *)pThread->Handle,&ExitCode);
		   if(ExitCode==STILL_ACTIVE)
			   TerminateThread((void *)pThread->Handle,ExitCode);

		}
		DRV_DeviceClose( &m_DeviceHandle );
	}
        
}
//---------------------------------------------------------------------------


void TfrmMain::EnableControls(bool bEnabled)
{
 
  // Auxiliary DI interrupt event controls enable or disable
  for (int i = 0; i < 8; i++)
  {
    lstDiSignalCondition[i]->Enabled = bEnabled;
    chkDiInterrupt[i]->Enabled = bEnabled;
    txtDiInterrupt[i]->Enabled = bEnabled;
  }

  // Execution controls enable and disable
  cmdStart->Enabled = bEnabled;
  cmdStop->Enabled = False;

}

//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmdOpenDeviceClick(TObject *Sender)
{

        cmdCloseDeviceClick(Sender);
        m_ErrCde = DRV_DeviceOpen(m_DeviceNum,&m_DeviceHandle);
        if(!ChkErr(m_ErrCde))
        {
             cmdOpenDevice->Enabled = false;
             cmdCloseDevice->Enabled = true;
        }
        else
             m_DeviceHandle = 0;

	for(int i=0; i<8; i++)
         {
          chkDiInterrupt[i]->Checked = false;
         }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::cmdCloseDeviceClick(TObject *Sender)
{
        ULONG ExitCode;
	if ( m_DeviceHandle!= NULL )
	{
		if(pThread)
		{
		   GetExitCodeThread((void *)pThread->Handle,&ExitCode);
		   if(ExitCode==STILL_ACTIVE)
			   TerminateThread((void *)pThread->Handle,ExitCode);

		}
		DRV_DeviceClose( &m_DeviceHandle );
	}
        cmdOpenDevice->Enabled = true;
        cmdCloseDevice->Enabled = false;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -