以下是核心代碼;顯示界面會卡一會,然后只顯示接收到的最后一組資料,而不是反復更新資料顯示
void CTEST_MFCApplication1Dlg::OnBnClickedButtonOpen()
{
// TODO: 在此添加控制元件通知處理程式代碼
//UpdateData(true);
RT_CAN can;
RT_COM com;
CAN_msg msg;
msg.id = 0x01223211; //配置訊息ID
msg.len = 8; //配置訊息長度
msg.format = EXTENDED_FORMAT; //配置訊息格式
msg.type = REMOTE_FRAME; //配置訊息型別
if (can.Open(3, 115200))
{
//打開虛擬串口成功的操作
for (int j = 1; j < 10; j++)
{
UpdateData(true);
for (int i = 1; i <= 15; i++)
{
can.RecvCANMessage(&msg);
int temp = (msg.data[1] << 8) | msg.data[2];
switch (msg.data[0])
{
case 0x00:m_V0 = temp;
break;
case 0x01:m_V1 = temp;
break;
case 0x02:m_V2 = temp;
break;
case 0x03:m_V3 = temp;
break;
case 0x04:m_V4 = temp;
break;
case 0x05:m_V5 = temp;
break;
case 0x06:m_V6 = temp;
break;
case 0x07:m_V7 = temp;
break;
case 0x08:m_I0 = temp;
break;
case 0x09:m_I1 = temp;
break;
case 0x0a:m_I2 = temp;
break;
case 0x0b:m_I3 = temp;
break;
case 0X0c:m_P0 = temp;
break;
case 0X0d:m_P1 = temp;
break;
case 0X0e:m_P2 = temp;
break;
case 0X0f:m_P3 = temp;
break;
case 0X10: m_POSITION_X = temp;
break;
case 0X11: m_POSITION_Y = temp;
break;
case 0X12: m_POSITION_Z = temp;
break;
case 0X13:m_T = temp;
break;
case 0X14:m_T0 = temp;
break;
case 0X15:m_T1 = temp;
break;
case 0X16:m_T2 = temp;
break;
default:m_T3 = temp;
}
}
UpdateData(false);
}
}
else
{
MessageBox(_T("打開設備失敗!"));
return;
}
}
uj5u.com熱心網友回復:
在回圈中添加訊息回圈:MSG msg;
if (GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
uj5u.com熱心網友回復:
很強!!!解決了uj5u.com熱心網友回復:
哈哈!
老瞎
又碰上一只死
!
uj5u.com熱心網友回復:
用了之后;我發現有丟包的情況發生,怎么辦?比如第一個變數應該一直有值;但現在偶然有值更新變化;
uj5u.com熱心網友回復:
正宗的辦法不是在void CTEST_MFCApplication1Dlg::OnBnClickedButtonOpen()里面的回圈中添加訊息回圈;而是將void CTEST_MFCApplication1Dlg::OnBnClickedButtonOpen()里面的回圈拆成
使用CTEST_MFCApplication1Dlg的
一個成員變數作回圈控制變數,
另一個狀態變數區別是否在回圈中,
SetTimer啟動一個計時器,
CTEST_MFCApplication1Dlg::OnTimer中根據回圈控制變數和狀態變數處理每次回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/127710.html
標籤:界面
上一篇:VS2013中,一段陳述句是暗的,怎么執行這段陳述句?
下一篇:RichEdit文本內容拖放截獲
