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 + -
显示快捷键?