最近在写一个串口通讯的程序,其中有一个功能是:手机发送短信给GSM 然后我通过mscomm控件来接收短信。现在我遇到了一个问题,我这里采用事件触发机制的,当在缓存里有字符串的时候就会触发oncomm事件,然后通过一个commenvnt属性来判断事件。的那个返回值是2的时候,就说明缓存有字符串来了,但是我这里每次发短信过来的时候这个返回值一直是6.然后我查过了,ComEvRing返回值是 6 表示检测到响铃信号  这我就郁闷了,我明明是发送短信。然后我继续调用input函数来取得缓存里的数据,然后也是得不到,得到的长度是0。表示里面没有数据,是空的。这我更加郁闷了。因为我用超级终端调试过gsm模块。当短信发过来的时候,超级终端上会显示+SMIT。等提示信息。这难道不是数据么。  于是我想了很久,我觉得他那里显示的是 检测到响铃信号,是不是就是说+SMIT。这些字符串是超级终端经过处理的,事实上GSM发给电脑的就是一个信号,然后通过这个信号来再发送at指令。然后才是真正的短信内容发到端口。然后commevent的返回值才会是2!   以上是我遇到的问题 和我目前对这个问题的初步理解。由于是初学者,更何况这个串口通讯也刚刚接触,以上有一些表述上的错误和理解上的错误希望大家多多包容,有什么好的建议,希望能回个帖子,谢谢各位了!

解决方案 »

  1.   

    不好意思 忘了把那部分代码传上来了void CDoor3Dlg::OnCommMscomm1()
    {
    // TODO: 在此处添加消息处理程序代码
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048];
    CString strtemp,change;
    int kk=m_CtrlCom1.get_CommEvent();
    if (kk)
    {
    variant_inp=m_CtrlCom1.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(L"%c",bt);
    m_EditCom1Rev+=strtemp;

    }


    }此处是这样的,我调试的时候看来一下kk这个值,也就是commevent属性的返回值。他的值是6.  当然我在电脑上模拟的两个串口上进行通讯的时候他的值是2. 也就是我所期望的值。  但是和gsm通讯的时候确实6.  好了问题就是这样~
      

  2.   

    难道真没人愿意回答我的问题么? 我这个问题google了很久,真心找不出答案~