我用的是VS2013
我需要在MFC 中添加了MSCom控制元件來接收設備回傳的資料,
我要求是我需要按下我界面的BUTTON后在一定時間內每隔0.05秒發送讀取設備當前的資料指令,將讀取的資料跟我之前設定的臨界值比較,超過臨界值就發送暫停信號,不超過的話就直到設定的時間結束為止。
我現在的問題是不知道如何實時讀取快取區的資料,然后去做資料比較。請個人大神幫幫忙,感激不盡。
我的代碼:
com控制元件函式:
void CautotestHFDlg::OnOncommMscomm1()
{
// TODO: 在此處添加訊息處理程式代碼
VARIANT variant_inp;
COleSafeArray safearray_inp;
byte rxdata[1024];
//m_recv1 = "";
//UpdateData(FALSE);//更新編輯框內容
CString strtemp;
if (m_com1.get_CommEvent() == 2)
{
//m_recv1 = "";
variant_inp = m_com1.get_Input();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for (k = 0; k<len; k++)
{
safearray_inp.GetElement(&k, rxdata + k);
}
for (k = 0; k<len; k++)
{
BYTE bt = *(char*)(rxdata + k);//字符型
strtemp.Format(_T("%c"), bt); //將字符送入臨時變數strtemp存放
m_recv1 += strtemp; //加入接收編輯框對應字串
m_recv2 += strtemp; //加入接收編輯框對應字串
}
//m_com1.put_InputLen(0);//清空快取區內容
}
UpdateData(FALSE); //更新編輯框內容
}
button com按鈕設定:
void CautotestHFDlg::OnBnClickedComnet()
{
// TODO: 在此添加控制元件通知處理程式代碼
CString str;
GetDlgItemText(IDC_COMNET, str);
CWnd *h1;
h1 = GetDlgItem(IDC_COMNET);
if (!m_com1.get_PortOpen())
{
m_com1.put_CommPort(com);//com
m_com1.put_InputMode(1);
m_com1.put_Settings(_T("9600,e,7,1"));
m_com1.put_RThreshold(1);
//m_com1.put_RThreshold(1);
m_com1.put_InputLen(0);
m_com1.put_PortOpen(true);
if (m_com1.get_PortOpen())
{
str = _T("關閉計量COM");
UpdateData(true);
h1->SetWindowText(str);
}
}
else
{
m_com1.put_PortOpen(false);
if (str != _T("打開計量COM"))
{
str = _T("打開計量COM");
UpdateData(true);
h1->SetWindowText(str);
}
}
}
buttom 讀取設備存盤函式:
void CautotestHFDlg::OnBnClickedStart()
{
for (size_t i = 0; i < 20; i++)//間隔0.1秒發送讀取指令
{
RETR();//讀取設備資料的指令
1:如何在這里監測快取區是否有資料,沒有的話就等待,直到有資料進來為止2:有的話讀取,沒有的話等待
3:讀取到的資料進行比對,小于就繼續,
如何在這里添加程式等待com快取區是否有資料并讀取資料后進行比較
Sleep(100)
}}
uj5u.com熱心網友回復:
直接和成員變數或者全域變數比較,變數存放的是臨界值uj5u.com熱心網友回復:
上下機通信協議是每組資料后面都以/r/n為結尾,現在我的問題是怎么判斷我的一組資料讀取完畢了,有沒有大神幫我看看呢
uj5u.com熱心網友回復:
參考《編譯原理》中的詞法分析和有限狀態自動機。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/76836.html
