要使用COM端口接收并识别短信息,代码如下,总是调试不通,请各位高人指点.另外请问如何才能自动识别端口号?DCB dcb;
char ATCommand[50];
DWORD wCount;hCom = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hCom == (HANDLE)0xFFFFFFFF)
AfxMessageBox("打开串口错误");

GetCommState(hCom, &dcb);
dcb.BaudRate = 19200; //波特率为9600
dcb.ByteSize = 8; //数据位数为7位
dcb.Parity = 0; //偶校验
dcb.StopBits = 1; //两个停止位
dcb.fBinary = TRUE;
dcb.fParity = TRUE;

if (!SetCommState(hCom, &dcb))
AfxMessageBox("串口设置错误");
SetupComm(hCom, 1024, 1024);
PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
SetCommMask(hCom ,EV_ERR|EV_RXCHAR);sprintf(ATCommand, "AT+CPMS=%d\r", 1);
//strcpy(ATCommand, "at+cpms='MT',+CPMS:2,352,OK");
if(NULL == WriteFile(hCom, ATCommand, strlen(ATCommand), &wCount, NULL))
AfxMessageBox("串口初始化错误");
else if(wCount != strlen(ATCommand))
AfxMessageBox("串口初始化错误");
ReadFile(hCom, pBuffer, 500, &wCount, NULL);

解决方案 »

  1.   

    设备名是"solomon usb modem",能否通过设备名找到端口?
    solomon公司给我的AT命令是
    at+cpms=?         
    +CPMS:(IM,OM,BM,MT,DM),(OM,DM),(IM)                                   
    OK  
    at+cpms="MT"            
    +CPMS:2,352           
    OK 
    请教下应该怎么写入程序中呢?
    出现的问题是程序运行时一直堵塞在
    ReadFile(hCom, pBuffer, 500, &wCount, NULL);
    中,但是手机卡中有一条已读信息却无法读出,我想会不会是AT命令写法有问题?
      

  2.   

    我现在在用TEXT模式读SMS,但是读出来的却是
    "+CMGR:"REC RE"
    "AD","01861","2"
    "006/7/6,17:48:7""
    "        "
    "        "
    "        "
    "10086    HF   18"
    "61       OK"
    查看了所接收到的数据,只有前两个字节有内容,估计是PDU格式的数据,但是我一直是按照TXT模式收的数据,怎么会后面出现PDU格式的数据呢?而且这个GPRS MODEM不支持PDU。
    但是有一次得到了很多资料,估计那就是信息,但是在没有做任何程序改动的情况下为什么会有时候收得到有时候收不到呢?
    而且在同一端口也是有时候能识别该硬件,有时候识别不到,返回ERROR。
    请教各位……