回 帖 发 新 帖 刷新版面

主题:求助:串口通信(发短信息)

// 发送短消息
// pSrc: 源PDU参数指针
BOOL gsmSendMessage(const SM_PARAM* pSrc)
{
    int nPduLength;        // PDU串长度
    unsigned char nSmscLength;    // SMSC串长度
    int nLength;           // 串口收到的数据长度
    char cmd[16];          // 命令串
    char pdu[512];         // PDU串
    char ans[128];         // 应答串
    
    nPduLength = gsmEncodePdu(pSrc, pdu);    // 根据PDU参数,编码PDU串
    strcat(pdu, "\x01a");        // 以Ctrl-Z结束
    
    gsmString2Bytes(pdu, &nSmscLength, 2);    // 取PDU串中的SMSC信息长度
    nSmscLength++;        // 加上长度字节本身
    
    // 命令中的长度,不包括SMSC信息长度,以数据字节计
    sprintf(cmd, "AT+CMGS=%d\r", nPduLength / 2 - nSmscLength);    // 生成命令
    
    WriteComm(cmd, strlen(cmd));    // 先输出命令串
    
    nLength = ReadComm(ans, 128);   // 读应答数据
    
    // 根据能否找到"\r\n> "决定成功与否
    if(nLength == 4 && strncmp(ans, "\r\n> ", 4) == 0)
    {
        WriteComm(pdu, strlen(pdu));        // 得到肯定回答,继续输出PDU串
    
        nLength = ReadComm(ans, 128);       // 读应答数据
    
        // 根据能否找到"+CMS ERROR"决定成功与否
        if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
        {
            return TRUE;
        }
    }
    
    return FALSE;
}
运行的时候串口发出去收不到MODEM(西门子的TC35i模块)返回的应答字符串     
(执行时直接跳过if(nLength == 4 && strncmp(ans, "\r\n> ", 4) == 0)到了return FALSE;)。

请问是什么原因啊?怎么做?

回复列表 (共2个回复)

沙发

为什么不用CreateFile()   //打开串口
          WriteFile()  //好像是这样的。  写串口
          ReadFile()   //   读串口

板凳


硬件没有问题吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册