init.cpp

来自「16 relay output channels and 16 isolated」· C++ 代码 · 共 630 行 · 第 1/2 页

CPP
630
字号
            GlobalUnlock(hUserBuf);
            GlobalFree(hBuf);
            GlobalFree(hUserBuf);
            DRV_DeviceClose((LONG far *)&DriverHandle);
            Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
            return;
        }
    }
    if (gwEvtFlag == 0)
    {
        ptFAITransfer.ActiveBuf = 0;     // Single buffer
        ptFAITransfer.DataType = gwDataType;
        ptFAITransfer.start    = 0;
        ptFAITransfer.count    = gulConvNum;
        ptFAITransfer.overrun  = &gwOverrun;

        if ((ErrCde = DRV_FAITransfer(DriverHandle,
            (LPT_FAITransfer)&ptFAITransfer)) != 0)
        {
            DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
            GlobalUnlock(hBuf);
            GlobalUnlock(hUserBuf);
            GlobalFree(hBuf);
            GlobalFree(hUserBuf);
            DRV_DeviceClose((LONG far *)&DriverHandle);
            Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
            return;
        }

        // Display Data
        lstData->Clear();
        if (gwDataType == 0)
           temp = (USHORT far *)ptFAITransfer.DataBuffer;
        else
           temp = (FLOAT far *)ptFAITransfer.DataBuffer;

        for(i = 0; i < gulConvNum; ++i)
        {
           if (gwDataType == 0)
               sprintf(szBuffer, "Buf[%ld] = %2x",i, ((USHORT far *)temp)[i]);
           else
               sprintf(szBuffer, "Buf[%ld] = %10.6f", i, ((FLOAT far *)temp)[i]);

           lstData->Items->Add((LPSTR)szBuffer);
        }

        // Free buffer
        GlobalUnlock(hBuf);
        GlobalUnlock(hUserBuf);
        GlobalFree(hBuf);
        GlobalFree(hUserBuf);

        // Close driver
        DRV_DeviceClose((LONG far *)&DriverHandle);

        bRun = False;
        butStop->Enabled  = False;
        butStart->Enabled = True;
        butExit->Enabled  = True;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::butExitClick(TObject *Sender)
{
    exit(0);        
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::lstDataClick(TObject *Sender)
{
   LPVOID temp;
   ULONG i;

   if (bRun)
   {
       if (gwDataType == 0)
           temp = (USHORT far *)ptFAITransfer.DataBuffer;
       else
           temp = (FLOAT far *)ptFAITransfer.DataBuffer;

       for(i = 0; i < gulConvNum; ++i)
       {
           if (gwDataType == 0)
               sprintf(szBuffer, "Buf[%ld] = %4x",i, ((USHORT far *)temp)[i]);
           else
               sprintf(szBuffer, "Buf[%ld] = %10.6f", i, ((FLOAT far *)temp)[i]);

           lstData->Items->Add((LPSTR)szBuffer);
       }
   }        
}
//---------------------------------------------------------------------------

__fastcall TMyThread::TMyThread(void) : TThread(TRUE)
{
  //Resume the thread
  Resume();
}
//----------------------------------------------------------------------------

void __fastcall TMyThread::Execute(void)
{
    USHORT usEventType;
    LONG  ErrCde;
    DWORD TickValue;
    LPVOID temp;
    ULONG i;
    ULONG ulIntCounter     = 0;  // counter by adInterruptEvent
    ULONG ulBfChgCounter   = 0;
    ULONG ulOverrunCounter = 0;

    TickValue = GetTickCount();
    TickValue = TickValue + 500000;

    while(TickValue > GetTickCount())
    {
        // Check message
        ptCheckEvent.EventType = &usEventType;
        if (gwCyclicMode)
	{
            ptCheckEvent.Milliseconds = INFINITE;
        }
	else
	{
            ptCheckEvent.Milliseconds = 1000 * (gulConvNum / gdwPacerRate) + 1000;
	}

        if ((ErrCde = DRV_CheckEvent(DriverHandle,
            (LPT_CheckEvent)&ptCheckEvent)) != 0)
        {
            Application->MessageBox("Check Event Error !","Thread Message",MB_OK);
            return ;
        }
        // Process interrupt event
        if (usEventType & ADS_EVT_INTERRUPT)
        {
            ulIntCounter++;
        }

        // Process buffer change event
        if (usEventType & ADS_EVT_BUFCHANGE)
        {
            ulBfChgCounter++;
            ptFAITransfer.ActiveBuf = 0;     // Single buffer
            ptFAITransfer.DataType = gwDataType;
            ptFAITransfer.start    = 0;
            ptFAITransfer.count    = gulConvNum;
            ptFAITransfer.overrun  = &gwOverrun;

            if ((ErrCde = DRV_FAITransfer(DriverHandle,
                   (LPT_FAITransfer)&ptFAITransfer)) != 0)
            {
                   DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                   GlobalUnlock(hBuf);
                   GlobalUnlock(hUserBuf);
                   GlobalFree(hBuf);
                   GlobalFree(hUserBuf);
                   DRV_DeviceClose((LONG far *)&DriverHandle);
                   Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
                   return;
             }
            if (gwDataType == 0)
            {
                  temp = (USHORT far *)ptFAITransfer.DataBuffer;
                  frmCheck->txtValue->Text = IntToHex(((USHORT  *)temp)[gulConvNum-1],2);
             }
             else
             {
                  temp = (FLOAT far *)ptFAITransfer.DataBuffer;
                  frmCheck->txtValue->Text = FormatFloat("0.00000",((FLOAT  *)temp)[gulConvNum-1]);
             }
        }

        // Process overrun event
        if (usEventType & ADS_EVT_OVERRUN)
        {
            ulOverrunCounter++;
        }
        frmCheck->txtInt->Text=IntToStr(ulIntCounter);
        frmCheck->txtBuffChange->Text=IntToStr(ulBfChgCounter);

        // Process terminate event
        if (usEventType & ADS_EVT_TERMINATED)
        {
            // process terminate event
            if (bRun)
            {
               ptFAITransfer.ActiveBuf = 0;     // Single buffer
               ptFAITransfer.DataType = gwDataType;
               ptFAITransfer.start    = 0;
               ptFAITransfer.count    = gulConvNum;
               ptFAITransfer.overrun  = &gwOverrun;

               if ((ErrCde = DRV_FAITransfer(DriverHandle,
                   (LPT_FAITransfer)&ptFAITransfer)) != 0)
               {
                   DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                   GlobalUnlock(hBuf);
                   GlobalUnlock(hUserBuf);
                   GlobalFree(hBuf);
                   GlobalFree(hUserBuf);
                   DRV_DeviceClose((LONG far *)&DriverHandle);
                   Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
                   return;
               }

               // Display Data
               frmMain->lstData->Clear();
               if (gwDataType == 0)
                  temp = (USHORT far *)ptFAITransfer.DataBuffer;
               else
                  temp = (FLOAT far *)ptFAITransfer.DataBuffer;

               for(i = 0; i < gulConvNum; ++i)
               {
                  if (gwDataType == 0)
                      sprintf(szBuffer, "Buf[%ld] = %2X",i, ((USHORT far *)temp)[i]);
                  else
                      sprintf(szBuffer, "Buf[%ld] = %10.6f", i, ((FLOAT far *)temp)[i]);

                  frmMain->lstData->Items->Add((LPSTR)szBuffer);
               }
               

               frmCheck->btnExit->Click();


               // Free buffer
               GlobalUnlock(hBuf);
               GlobalUnlock(hUserBuf);
               GlobalFree(hBuf);
               GlobalFree(hUserBuf);

               // Close driver
               DRV_DeviceClose((LONG far *)&DriverHandle);
               frmCheck->Hide();

               bRun = False;
               frmMain->butStop->Enabled  = False;
               frmMain->butStart->Enabled = True;
               frmMain->butExit->Enabled  = True;
            }

            return ;
        }
    }

    Application->MessageBox("Never Get Any Event !","Thread Message",MB_OK);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::chkFifoClick(TObject *Sender)
{
    long lFifoSize;
    
    if (chkFifo->Checked)
    {
        // Step 1: Open device
	ErrCde = DRV_DeviceOpen(DeviceList[gwDevice].dwDeviceNum,
                                       (LONG far *)&DriverHandle);
        if (ErrCde != SUCCESS)
	{
	    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
	    Application->MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
            return;
        }

        // Step 2: Get FIFO size
	ErrCde = DRV_GetFIFOSize(DriverHandle, &lFifoSize);
        if (ErrCde != SUCCESS)
	{
	    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
	    Application->MessageBox((LPCSTR)szErrMsg, "Driver Message", MB_OK);
            return;
	}

	// Step 3: Close device
	DRV_DeviceClose((LONG far *)&DriverHandle);

        // divide by 2 for conversion from byte to word
	giFifoSize = lFifoSize / 2;


        editFifo->Text = IntToStr(giFifoSize);
        editDataCounts->Text = IntToStr(lFifoSize);
        editFifo->Enabled = true;
        gbFifoEnable = true;
    }
    else
    {
        editFifo->Enabled = false;
        gbFifoEnable = false;
    }
}
//---------------------------------------------------------------------------
// li.zhe add 2004/11/5
void __fastcall TfrmMain::radExtTrigClick(TObject *Sender)
{
   gwExtTrig = 1;
   radExtTrig->Checked = true;
   radInterTrig->Checked = false;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::radInterTrigClick(TObject *Sender)
{
   gwExtTrig = 0;
   radExtTrig->Checked = false;
   radInterTrig->Checked = true;
}
// end li.zhe 2004/11/5
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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