求助:串口通信数据处理问题

zhqguicn 2004-09-16 09:48:46
我用vc做了一个通过modem拨号采集温度的程序,大体思想是这样的:每隔一小时对所有传感器连续拨号,采集他们的温度,程序是单线程的,但是我不知道如何判断对一个传感器采集温度结束,什么时候再采集下一个传感器的温度。
我的方法是设了两个个全局变量bool b_ReadDataOver;int iData;
在CTempratureView::OnCommMscomm() 里对数据处理完毕,使b_ReadDataOver=true;iData=采集的温度值;
在CTempratureView::OnTimer(UINT nIDEvent) 里拨完一个传感器的号之后设置一个循环,不断判断
b_ReadDataOver的值,当他为true的时候,停止循环,保存iData,然后拨下个传感器的号。
CTempratureView::OnTimer(UINT nIDEvent) 程序大体如下:
{
拨一个传感器的号码
while(1)
{if(b_ReadDataOver==true) break;}
保存iData;
继续拨下一个传感器的号码
}

但是我这种方法不行,拨一个号程序就停住了,不能继续拨下一个号,估计是b_ReadDataOver的值没有传过来,一直在 while循环里边循环。
哪位高手帮帮我,这种问题一般都怎样处理,用什么方法判断下一次拨号比较好。而且我不想把程序改成多线程的,那样涉及的问题太多。


...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuli95612 2004-10-13
  • 打赏
  • 举报
回复
关注
Mr-Chen 2004-09-23
  • 打赏
  • 举报
回复
单线程是没有问题的
查看一下你的串口状态
hlfeng 2004-09-17
  • 打赏
  • 举报
回复
楼主:你好!
我也在做一个类似的程序,也是通过modem收集前端的一些数据,想问一下你:
当初始化modem后,m_comm.GetInput();//清除串口输入缓冲区中残留数据
m_SendData="ATZ\r\n";//调制解调器初始化
m_comm.SetOutput(COleVariant(m_SendData));
返回的是什么?
当拨号后: m_SendData="ATDT"+m_PhoneNumber+"\r\n"; //拨号
m_comm.SetOutput(COleVariant(m_SendData));
如何判断拨号是否成功?
有关此类的资料在哪儿有详解?
谢谢
hlfeng 2004-09-17
  • 打赏
  • 举报
回复
在初始化那段中,返如下值:
发送 返回
"ATZ" ---> "ATZ"
"ATZ\r" ---> "ATZOK"(除去ATZ与OK中间的空格)
"ATZ\r\n" ---> 同上
"ATZ\n" ---> "ATZ"
这里为什么要加"\r\n"?

在拨号后的情况:先返回"ATDT"这个字符,接下来返回"BUSY",一直都是这样,我用电话机拨对方的modem,可以拨通并且有响应,为什么会拨不通呢?
zhqguicn 2004-09-16
  • 打赏
  • 举报
回复
我用的是MFC
tengfei2005 2004-09-16
  • 打赏
  • 举报
回复
在ReadFile前用一下
BOOL ClearCommError(
HANDLE hFile, // handle to communications device
LPDWORD lpErrors, // error codes
LPCOMSTAT lpStat // communications status
);
判断lpStat-〉cbInQue 是否〉0

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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