MFC com控件数据接收后实时处理
我用的是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)
}}