关于串口读写数据问题

liuharris 2010-10-25 03:51:32
请教大家一个串口读写数据的问题,自己写的一个串口类CSerialPort,封装有OpenCom(),CloseCom();
WriteCom();ReadCom()...等等方法,一个用在短信发送的GsmComm类,包括GsmInit(),GsmSendMsg()....等等方法,GsmInit()中调用了类CSerialPort的方法WriteCom()对MODEM进行初始化;通过ReadCom()读取返回数据判断初始化是否成功.

现在我在一个窗口类CMyDlg中开一个线程监控串口,有返回数据的时候调用ReadCom()读取数据并输出到列表框。我在这个窗口类中直接调用CSerialPort的WriteCom(),数据接收没有问题。但我在窗口类调用GsmInit()的时候,线程就监控不到串口有数据返回。不知道问题出在哪里,请高手指教。

在CMyDlg.cpp中通过以下方式调用CSerialPort的成员函数是对的,如
--CMyDlg.cpp--
CSerialPort SP; //全局对象
BOOL CMyDlg::OnInitDialog()
{
......
if(!SP.OpenCom("COM1", 9600, NOPARITY, 8, ONESTOPBIT))
MessageBox("串口打开失败");
......
}

void CMyDlg::OnSend()
{
.......
SP.WriteCom("AT\r\n"); //发送AT指令
.......
线程监控到串口有接收数据,调用SP.ReadCom()读数据等等,打开串口成功,返回数据也是正确的
}

在类GsmComm中成员函数也用到了CSerialPort的方法
--GsmComm.cpp--
CSerialPort SPort; //全局对象
BOOL GsmComm::GsmInit()
{
CString strAns;
// 测试设备是否存在
SPort.WriteCom("AT\r\n");
Sleep(100);
SPort.ReadCom(strAns);
if (strAns.Find("OK")<0)
return FALSE; //找不到GSM MODEM

// 关闭回显
SPort.WriteCom("ATE0\r\n");

// PDU短信模式
SPort.WriteCom("AT+CMGF=0\r\n");
Sleep(100);
SPort.ReadCom(strAns);
if(strAns.Find("OK")<0) return FALSE;

return TRUE;
}


如果我在CMyDlg.cpp中如下方法调用的话,串口打开成功,但写数据失败,没有数据返回
CMyDlg.cpp

void CMyMDlg::OnSend() //发送按钮
{
......
GsmComm gsmc;// 此定义为全局对象结果也是一样的,应该不是问题所在
gsmc.GsmInit();//初始化MODEM(此处涉及了写数据和读数据的函数)
.....
这样初始化不成功,请问那里错了,那个地方出问题了。
另外,在CMyDlg中调用GsmComm的成员函数,只要不涉及到读串口和写串口等串口相关操作的,调用后的结果都是
正确的,请教!
}

...全文
200 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxqinge 2010-11-04
  • 打赏
  • 举报
回复
我试了下自己的串口类,可以在多个类中调用
可能是你的串口类封装有问题吧
sxqinge 2010-11-04
  • 打赏
  • 举报
回复
呵呵,你这串口类在多个类中调用了,肯定会产生问题的,原因我也说不清楚。
我一般都只在一个类中进行调用处理
龙哥依旧 2010-10-25
  • 打赏
  • 举报
回复
为什么要自己写个串口类?早就有封装好的了!
vivvan 2010-10-25
  • 打赏
  • 举报
回复
还是单步调试,看下错误代码吧。。。。
liuharris 2010-10-25
  • 打赏
  • 举报
回复
线程只是监控串口数据的,不做别的工作。目前不知道为什么读写串口失败
LZNJ06 2010-10-25
  • 打赏
  • 举报
回复
这要看线程是属于那个窗口类的,没有监控到,说明线程不属于那个类吧。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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