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

📄 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;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnSelectClick(TObject *Sender)
{
    char  szDescription[80];
    //This function is for getting the device number
    DRV_SelectDevice(Handle, True, (ULONG*)&lDeviceNum, szDescription);
    txtDeviceName->Caption = AnsiString(szDescription);

    if(hDeviceHandle)
       DRV_DeviceClose(&hDeviceHandle);

    lErrCde = DRV_DeviceOpen(lDeviceNum, &hDeviceHandle);
    if(lErrCde != SUCCESS)
    {
        strcpy(szErrMsg,"Device open error !");
        Application->MessageBoxA((char*)szErrMsg,"Device Open");
        return;
    }
    // get device features
    ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
    ptDevFeatures.size = sizeof(DEVFEATURES);
    if ((lErrCde = DRV_DeviceGetFeatures(hDeviceHandle,
        (LPT_DeviceGetFeatures)&ptDevFeatures)) != SUCCESS)
    {
        DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
        DRV_DeviceClose((LONG far *)&hDeviceHandle);
        Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
        return;
    }
    


}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnExitClick(TObject *Sender)
{
   DRV_DeviceClose((LONG far *)&hDeviceHandle);
   Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnStartClick(TObject *Sender)
{
      tmrRead->Interval = txtTimer->Text.ToInt();
      tmrRead->Enabled = true;
      btnStart->Enabled = false;
      btnStop->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tmrReadTimer(TObject *Sender)
{
	ptDioReadPortByte.port = txtPort->Text.ToInt();
	ptDioReadPortByte.value = (USHORT far *)&DIValue;

	if ((lErrCde = DRV_DioReadPortByte(hDeviceHandle,
                (LPT_DioReadPortByte)&ptDioReadPortByte)) != 0)
	{
		DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
		btnStopClick(NULL);
		Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
	}
        else
           txtDIData->Text = IntToHex(DIValue,2);


}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnStopClick(TObject *Sender)
{
      tmrRead->Enabled = false;
      btnStart->Enabled = true;
      btnStop->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEnableClick(TObject *Sender)
{
    PT_EnableEvent	EventSetting;

    EventSetting.EventType = ADS_EVT_INTERRUPT;
    EventSetting.Enabled = TRUE;
    EventSetting.Count = txtCount->Text.ToInt();
    lErrCde = DRV_EnableEvent( hDeviceHandle, &EventSetting );
    if ( lErrCde != 0)
    {
       	DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
       	Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
     	return;
    }
    EventCount = 0;
    ptFDITransfer.ulRetData= &ulRetData;
    ptFDITransfer.usEventType= ADS_EVT_INTERRUPT;
    pThread = new CheckThread(true);

    if( radNormal->Checked )
        pThread->Priority = tpNormal;
    else
       pThread->Priority = tpTimeCritical;

    dwStartTime = GetTickCount();
    pThread->Resume();
    btnEnable->Enabled = false;
    btnDisable->Enabled = true;
    tmrCount->Enabled = true;
    btnSelect->Enabled = false;
    btnExit->Enabled = false;


}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnDisableClick(TObject *Sender)
{
    PT_EnableEvent	EventSetting;
    btnSelect->Enabled = true;
    btnExit->Enabled = true;
    EventSetting.EventType = ADS_EVT_INTERRUPT;
    EventSetting.Enabled = false;
    EventSetting.Count = txtCount->Text.ToInt();
    lErrCde = DRV_EnableEvent( hDeviceHandle, &EventSetting );
    if ( lErrCde != 0)
    {
       	DRV_GetErrorMessage(lErrCde,(LPSTR)szErrMsg);
       	Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);

    }
    tmrCount->Enabled = false;
    if(pThread!=NULL)
    {
       pThread->Terminate();
       DWORD dwExitCode;
       GetExitCodeThread( (void *)pThread->Handle ,&dwExitCode) ;
       if(dwExitCode == STILL_ACTIVE )
           TerminateThread( (void *)pThread->Handle, dwExitCode);
       pThread = NULL;
    }
    btnEnable->Enabled = true;
    btnDisable->Enabled = false;

}
//---------------------------------------------------------------------------


bool TfrmMain::CheckEvent()
{
        //TODO: Add your source code here

   ptCheckEvent.EventType = &CheckEventType;
   ptCheckEvent.Milliseconds =  1000;

    lErrCde = DRV_CheckEvent(hDeviceHandle, &ptCheckEvent);
    if(lErrCde == SUCCESS)
    {
         if(CheckEventType == ADS_EVT_INTERRUPT )
         {
            EventCount++;
            DRV_FDITransfer(hDeviceHandle,&ptFDITransfer);
             if(ulRetData != ulTemp)
            {
              txtIntPort->Text = IntToHex((int)((ulRetData>>16)& 0x0000ffff),4);
              txtLatchData->Text = IntToHex((int)(ulRetData & 0x0000ffff),2);
            }
            ulTemp= ulRetData;
	  }
       }

	dwCurrentTime = GetTickCount();
	if ((dwTime = dwCurrentTime - dwStartTime) > 1000) {
		ratio = (float)(((float)EventCount / (float)dwTime) * 1000.0);
		dwStartTime = GetTickCount();
		EventCount = 0;
	}

    return true;


}
void __fastcall TfrmMain::radNormalClick(TObject *Sender)
{
  if( pThread )
       pThread->Priority = tpNormal;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::radCriticalClick(TObject *Sender)
{
  if( pThread )
       pThread->Priority = tpTimeCritical;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tmrCountTimer(TObject *Sender)
{
    txtIntRate->Text = FormatFloat("0.0000",ratio);

}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
     btnSelectClick(Sender);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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