底程式:
void CComPort::ComReadData()
{
BOOL bRead = TRUE;
BOOL bResult = TRUE;
DWORD dwError = 0;
DWORD BytesRead = 0;
char RXBuff;
COMSTAT comstat;
//m_ROverLapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
m_ROverLapped.Offset = 0;
m_ROverLapped.OffsetHigh = 0;
//<>一個EV_RXCHAR 接收資料信號觸發出,回圈接收快取區全部資料;
while (TRUE)
{
ComDetectStop();
ClearCommError(m_hPort, &dwError, &comstat);
if (bRead)
{
bResult = ReadFile(m_hPort, &RXBuff, 1, &BytesRead, &m_ROverLapped);
if (!bResult)
{
switch (dwError = GetLastError())
{
case ERROR_IO_PENDING: // asynchronous i/o is still in progress go to GetOverlappedResults();
{
bRead = FALSE;
break;
}
default:
{
break;
}
}
}
}
if (!bRead)
{
bRead = TRUE;
bResult = GetOverlappedResult(m_hPort, &m_ROverLapped, &BytesRead, false);
while (!bResult)
{
ComDetectStop();
bResult = GetOverlappedResult(m_hPort, &m_ROverLapped, &BytesRead, false);
}
}
Comm_RXCHAR(RXBuff);
if (comstat.cbInQue == 0)
break;
}
}
void CDevice::Comm_RXCHAR(char c /*= 0*/)
{
static CString sTempCode;
if (c == -52)
{
m_sCodeReceived = sTempCode;
m_sCodeReceived.Trim();//保存反饋資料;
sTempCode.Empty();
m_bReceived = true;
}
}
呼叫程式:
BOOL CDevice::GetDevice(CString &sCode, short nTimeout /*= 3000*/)
{
m_bReceived = false;
ComReadData();
short nIndex = 0;
while (nIndex < nTimeout)
{
if (m_bReceived)
{
sCode = m_sCodeReceived;
return true;
}
nIndex++;
Sleep(1);
}
ComReset();
return false;
}
按鍵呼叫:
void CRS485_2_1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控制元件通知處理程式代碼
CString sCode;
if (!m_device.GetDevice(sCode))
{
SetDlgItemText(IDC_EDIT2, _T("獲取失敗"));
return;
}
SetDlgItemText(IDC_EDIT2, _T(""));//清空;
SetDlgItemText(IDC_EDIT2, sCode);
}
uj5u.com熱心網友回復:
Comm_RXCHAR 中的邏輯不完整吧
void CDevice::Comm_RXCHAR(char c /*= 0*/)
{
static CString sTempCode;
if (c == -52)
{
m_sCodeReceived = sTempCode;
m_sCodeReceived.Trim();//保存反饋資料;
sTempCode.Empty();
m_bReceived = true;
}
else
{
sTempCode += c;
}
}
uj5u.com熱心網友回復:
加了這句之后會有亂碼,比如我發123,收到的是 1233燙。uj5u.com熱心網友回復:
在接收處設定斷點除錯, 除錯是一個程式員必備的基本技能uj5u.com熱心網友回復:
設定同步模式處理起來簡單,重疊IO 實際讀取數量不一定=你要讀取的數量,你這種是正常現象轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/15245.html
標籤:硬件/系統
