关于串口读写数据问题
请教大家一个串口读写数据的问题,自己写的一个串口类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的成员函数,只要不涉及到读串口和写串口等串口相关操作的,调用后的结果都是
正确的,请教!}