VC++环境 用MSComm控件实现计算机与GSM模块串口通信,该怎么处理
VC++环境 用MSComm控件实现计算机与GSM模块串口通信
用MSComm控件实现的关于GSM与计算机串口通信的部分程序 程序执行结果是没结果 什么反应都木有
receivestr是全局变量
CString receivestr;
void CGSMli2Dlg::OnButton2() //发送按钮
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString sendphone;
receivestr="";
m_ctrlComm.SetOutput(COleVariant("AT+CMGF=1\r"));
if(receivestr.Find("OK")>0)
{
m_ctrlComm.SetOutput(COleVarian("AT+CMGS="+sendphone+"\r"));
if(receivestr.FindOneOf(">")>=0)
{
m_ctrlComm.SetOutput(COleVariant(m_strsend+"\x1A"));
if(receivestr.Find("OK")>=0)
MessageBox("短信发送成功!");
}
}
}
void CGSMli2Dlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
BYTE rxdata[2048];
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2)
{
variant_inp=m_ctrlComm.GetInput();
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("%c",bt);
receivestr+=strtemp;
}
}
}
大家帮我看看问题出在哪儿 谢谢
------解决方案--------------------
1.首先保证硬件连接正常(这个必须保证OK)
2.用串口测试工具测试你的GSM是否和测试工具能通信,不能则查找GSM的原因或发送格式原因
3.以上没有问题了,那就是你的程序问题:接收函数没有错,大家都这么用.你单步调试看看发送数据是否为你要发的数据,这个很重要(也许是你处理发送字符时的错误)。
4.最后就检查下变量是否都正确
------解决方案--------------------
首先用 串口工具 比如 串口大师 发指令给 GSM模块,验证正确与否,再写程式
------解决方案--------------------
你在OnButton2中读取receivestr,而receivestr在OnOnCommMscomm1中修改。
你执行OnButton2的时候,OnOnCommMscomm1根本没有机会执行到,知道问题了吧?
编程不是像你这么简单的!
------解决方案--------------------
就算你的OnButton2和OnOnCommMscomm1可同时运行,你如何保证
m_ctrlComm.SetOutput(COleVariant("AT+CMGF=1\r"));之后,OnOnCommMscomm1一定执行到了,并且
receivestr得到的返回值?
你这段代码还有很多工作要做,你完全没有流程控制,因为你是应答式的。
用MSComm控件实现的关于GSM与计算机串口通信的部分程序 程序执行结果是没结果 什么反应都木有
receivestr是全局变量
CString receivestr;
void CGSMli2Dlg::OnButton2() //发送按钮
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString sendphone;
receivestr="";
m_ctrlComm.SetOutput(COleVariant("AT+CMGF=1\r"));
if(receivestr.Find("OK")>0)
{
m_ctrlComm.SetOutput(COleVarian("AT+CMGS="+sendphone+"\r"));
if(receivestr.FindOneOf(">")>=0)
{
m_ctrlComm.SetOutput(COleVariant(m_strsend+"\x1A"));
if(receivestr.Find("OK")>=0)
MessageBox("短信发送成功!");
}
}
}
void CGSMli2Dlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
BYTE rxdata[2048];
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2)
{
variant_inp=m_ctrlComm.GetInput();
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("%c",bt);
receivestr+=strtemp;
}
}
}
大家帮我看看问题出在哪儿 谢谢
------解决方案--------------------
1.首先保证硬件连接正常(这个必须保证OK)
2.用串口测试工具测试你的GSM是否和测试工具能通信,不能则查找GSM的原因或发送格式原因
3.以上没有问题了,那就是你的程序问题:接收函数没有错,大家都这么用.你单步调试看看发送数据是否为你要发的数据,这个很重要(也许是你处理发送字符时的错误)。
4.最后就检查下变量是否都正确
------解决方案--------------------
首先用 串口工具 比如 串口大师 发指令给 GSM模块,验证正确与否,再写程式
------解决方案--------------------
你在OnButton2中读取receivestr,而receivestr在OnOnCommMscomm1中修改。
你执行OnButton2的时候,OnOnCommMscomm1根本没有机会执行到,知道问题了吧?
编程不是像你这么简单的!
------解决方案--------------------
就算你的OnButton2和OnOnCommMscomm1可同时运行,你如何保证
m_ctrlComm.SetOutput(COleVariant("AT+CMGF=1\r"));之后,OnOnCommMscomm1一定执行到了,并且
receivestr得到的返回值?
你这段代码还有很多工作要做,你完全没有流程控制,因为你是应答式的。