MFC com控件数据接收后实时处理

独自等待945 2018-01-10 12:08:26
我用的是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)
}}
...全文
608 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-01-11
  • 打赏
  • 举报
回复
参考《编译原理》中的词法分析和有限状态自动机。
独自等待945 2018-01-10
  • 打赏
  • 举报
回复
上下机通信协议是每组数据后面都以/r/n为结尾,现在我的问题是怎么判断我的一组数据读取完毕了,有没有大神帮我看看呢
sevancheng 2018-01-10
  • 打赏
  • 举报
回复
直接和成员变量或者全局变量比较,变量存放的是临界值

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧