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

📄 unit1.cpp

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

        m_bContinue = TRUE;
        pEventThread = new EventThread(false);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void TForm1::CheckEvent()
{
        USHORT usEventType;
        PT_CheckEvent ptCheckEvent;
        PT_CounterEventRead ptCounterEventRead;
        DWORD dwEvtCountOver, dwEvtCountUnder;
        DWORD dwCntrValue;
        USHORT usOverFlow;
        ULONG* pCompareData;
        ULONG ulSize;
        char strValue[50];

        dwEvtCountOver = 0;
        dwEvtCountUnder = 0;
        DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
        pCompareData = new ULONG[ulSize / sizeof(ULONG)];

        ptCounterEventRead.counter = m_CurCounter;
        ptCounterEventRead.count = &dwCntrValue;
        ptCounterEventRead.overflow = &usOverFlow;

        ptCheckEvent.EventType = &usEventType;
        ptCheckEvent.Milliseconds = 1000;
        while(m_bContinue)
        {
                if (DRV_CheckEvent(m_DriverHandle, &ptCheckEvent) == SUCCESS)
                {
                        if ((usEventType == (ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter)) ||
                                (usEventType == (ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter)))
                        {
                                if (usEventType == (ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter))
                                {
                                        dwEvtCountOver = dwEvtCountOver + 1;
                                        editEvtCountOver->Text = IntToStr(dwEvtCountOver);
                                }
                                if (usEventType == (ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter))
                                {
                                        dwEvtCountUnder = dwEvtCountUnder + 1;
                                        editEvtCountUnder->Text = IntToStr(dwEvtCountUnder);
                                }

                                // Change compare data
                                if ((m_CompType) && (m_CompIndex < 7))
                                {
                                        m_CompIndex += 1;
                                        DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, &ulSize);
                                        switch(m_CompIndex)
                                        {
                                        case 0:
                                                pCompareData[m_CurCounter] = StrToInt(editD0->Text);
                                                editCompData->Text = editD0->Text;
                                                break;
                                        case 1:
                                                pCompareData[m_CurCounter] = StrToInt(editD1->Text);
                                                editCompData->Text = editD1->Text;
                                                break;
                                        case 2:
                                                pCompareData[m_CurCounter] = StrToInt(editD2->Text);
                                                editCompData->Text = editD2->Text;
                                                break;
                                        case 3:
                                                pCompareData[m_CurCounter] = StrToInt(editD3->Text);
                                                editCompData->Text = editD3->Text;
                                                break;
                                        case 4:
                                                pCompareData[m_CurCounter] = StrToInt(editD4->Text);
                                                editCompData->Text = editD4->Text;
                                                break;
                                        case 5:
                                                pCompareData[m_CurCounter] = StrToInt(editD5->Text);
                                                editCompData->Text = editD5->Text;
                                                break;
                                        case 6:
                                                pCompareData[m_CurCounter] = StrToInt(editD6->Text);
                                                editCompData->Text = editD6->Text;
                                                break;
                                        case 7:
                                                pCompareData[m_CurCounter] = StrToInt(editD7->Text);
                                                editCompData->Text = editD7->Text;
                                                break;
                                        }
                                        DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, ulSize);
                                }
                        }
                }
                DRV_CounterEventRead(m_DriverHandle, &ptCounterEventRead);
                sprintf(strValue, "%lu", dwCntrValue);
                editCntrCount->Text = strValue;
        }
        delete[] pCompareData;
}
//---------------------------------------------------------------------------
void TForm1::KillThread()
{
    DWORD ExitCode;

     m_bContinue = FALSE;

     if (pEventThread)
     {
          pEventThread->Terminate();
          GetExitCodeThread((void *)(pEventThread->Handle), &ExitCode);
          if(ExitCode==STILL_ACTIVE)
                TerminateThread((void *)(pEventThread->Handle), ExitCode);
     }

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

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall EventThread::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------

__fastcall EventThread::EventThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall EventThread::Execute()
{
        //---- Place thread code here ----
        Form1->CheckEvent();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStopClick(TObject *Sender)
{
        PT_EnableEvent ptEnableEvent;

        btnSelDev->Enabled = TRUE;
        btnStart->Enabled = TRUE;
        btnStop->Enabled = FALSE;
        btnClose->Enabled = TRUE;

        //Disable event
        ptEnableEvent.Enabled = FALSE;
        ptEnableEvent.Count = 1;
        if (m_OverComp)
        {
                ptEnableEvent.EventType = ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
        }
        if (m_UnderComp)
        {
                ptEnableEvent.EventType = ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
        }

        // Reset counter
        m_ErrCde = DRV_CounterReset(m_DriverHandle, m_CurCounter);

        m_bContinue = FALSE;

        editEvtCountOver->Text = "0";
        editEvtCountUnder->Text = "0";

        // Terminate thread
        KillThread();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSetCompClick(TObject *Sender)
{
        ULONG ulSize;
        ULONG* pCompData;
        USHORT usCounter;

        usCounter = cmbCounter->ItemIndex;

        // Set compare data
        m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
        if (m_ErrCde == SUCCESS)
        {
                pCompData = new ULONG[ulSize / sizeof(ULONG)];
                m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, pCompData, &ulSize);
                pCompData[usCounter] = StrToInt(editSingleData->Text);
                m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, pCompData, ulSize);
                editCompData->Text = editSingleData->Text;
                delete[] pCompData;
        }
        m_CompType = 0;
        m_CompIndex = 0;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::btnSetTableClick(TObject *Sender)
{
        ULONG* pCompareData;
        ULONG ulSize;
        USHORT usCounter;

        usCounter = cmbCounter->ItemIndex;

        // Set Compare Data
        m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NULL, &ulSize);
        pCompareData = new ULONG[ulSize / sizeof(ULONG)];
        m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, &ulSize);
        pCompareData[usCounter] = StrToInt(editD0->Text);
        m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, pCompareData, ulSize);
        editCompData->Text = editD0->Text;
        delete[] pCompareData;

        // Set compare type and compare table index
        m_CompType = 1;
        m_CompIndex = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnResetClick(TObject *Sender)
{
        USHORT usCounter;

        usCounter = cmbCounter->ItemIndex;
        m_ErrCde = DRV_CounterReset(m_DriverHandle, usCounter);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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