我的預想是想把串口接收的位元組里面的部分資料提取出來。但是我做出來的卻顯示不了,Debug的時候,卻可以看到對應變數是正確的。求大神支招。代碼如下:
void CCommReceiveDlg::OnCommReceive()
{
// TODO: 在此處添加訊息處理程式代碼
CString wendu;
// CString sFile = _T("abc.txt");
CStdioFile file;
int nEvent = m_mscomm.get_CommEvent();//得到事件
if(nEvent == 2)
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len, k;
k = m_mscomm.get_InBufferCount();//接識訓沖區字符數
BYTE rxdata[92160] = {};
if (k>0)
{
variant_inp = m_mscomm.get_Input(); //讀緩沖區
safearray_inp = variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數
len = safearray_inp.GetOneDimSize(); //得到有效資料長度
for (k = 0; k<len; k++)
safearray_inp.GetElement(&k, rxdata + k);//轉換為BYTE型陣列,存入rxdata
}
for (int j = 0; j<len; j++)
{
if ( rxdata[j] == 0x6D&&rxdata[j+9]==0x3C) //提取溫度資料
{
char str = rxdata[j+6];
wendu.Format(_T("%d"),str);
m_VoltageDisplay = wendu;
}
}
}
UpdateData(FALSE);
}
大概是這個意思;比如我每次發送10個位元組,開頭是包頭,0x6D,包尾是0x3C。第7位是我需要提取的資料,提取出來后進行顯示。這個工程很少代碼,可以留郵箱我發給大神們,跪求支招。
uj5u.com熱心網友回復:
for (int j = 0; j<len; j++)
{
if ( rxdata[j] == 0x6D&&rxdata[j+9]==0x3C) //提取溫度資料
{
char str = rxdata[j+6];
wendu.Format(_T("%d"),str);
m_VoltageDisplay = wendu;
}
}
-----------------------
你指的是這里的資料嗎?str的值?你Debug下除錯看看資料是否正確?最好不要用char型別,改用BYTE,char是有符號的數,范圍是-128~127, BYTE是無符號的,范圍是0~255.如果資料超過char的范圍,可能最后的值并不是你想要的資料。
uj5u.com熱心網友回復:
對的,Debug的時候,str的資料會變成正確的資料,wendu也會
uj5u.com熱心網友回復:
那既然資料獲取都沒有什么問題,那就是顯示上的問題?你是怎么顯示的?是想把m_VoltageDisplay的值顯示在UI上?uj5u.com熱心網友回復:
m_VoltageDisplay是我的EditControl控制元件的成員變數呢,我直接讓這個EditControl顯示一個常量,又正常。
uj5u.com熱心網友回復:
我下位機發送的資料不會低于50的,也不會超過180.是被限定著的。debug下,第七位資料顯示的都是85.十六進制是55.不過溫度是CString型別,一個int型。資料是對的
uj5u.com熱心網友回復:
流式設備, 正常來說,需要一個緩沖區接收了但是沒有處理的資料,因為讀取到的資料可能只是是資料包的一部分,
比如 \x1"12345678"\x02 是一個完整的包, 但是如果是超過一次接收到的,如 \x1"1234" 第二次是 "5678"\x02
那么按上面的程式永遠決議不出資料包
uj5u.com熱心網友回復:
資料存盤轉存到rxdata的時候,設定個斷點,先看一下rxdata的資料是否正確再往下面跑。 每次發送10個位元組,有可能存在,第一次10個位元組發送完成后,你還在處理資料的時候,第二次已經發送過來,接著就會導致資料丟失的情況。假設A一直在發,B就會一直在收。這樣你的rxdata接收到的資料就會存在問題。你可以用環形串口收資料。
uj5u.com熱心網友回復:
求指教 ,求代碼,我也遇到這個問題uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
流式傳輸必然會遇到的問題:1.粘包
2.滑動視窗
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/96766.html
標籤:界面
下一篇:CBitmap::CreateCompatibleBitmap建立之后默認是a monochrome stock bitmap,如何改變選擇
