2009-07-11 36 views
0

我有一个Wavecom至尊GSM调制解调器。我编写了一个简单的应用程序,与调制解调器通信并读取它接收的文本消息。调制解调器在串行通信期间挂起

我的应用程序查询有关存储在其内存,如果数大于0时,它读取邮件从调制解调器的内存中删除他们的邮件数量信息的调制解调器。我每隔几秒就以这种方式查询调制解调器。

然而不幸的是,调制解调器挂起每隔几分钟,并AT任何我发送给它的命令没有反应。我想出的解锁通信的唯一解决方案是关闭串口并重新打开它。然后在接下来的几分钟内一切正常,此后串行端口必须在调制解调器挂起时重新打开。

它当然可以调制解调器的错,但我不知道我与它沟通的方式是否正常。首先,我打开调制解调器的串行端口进行异步操作。然后我设置DCB结构如下:

GetCommState(PortHandle, DCB); 
DCB.BaudRate := 115200; 
DCB.ByteSize := 8; 
DCB.Parity := NOPARITY; 
DCB.StopBits := ONESTOPBIT; 
DCB.EvtChar := #13; 
SetCommState(PortHandle, DCB); 
SetCommMask(PortHandle, EV_RXFLAG); 

//the modem does not respond without setting these: 
EscapeCommFunction(PortHandle, SETDTR); 
EscapeCommFunction(PortHandle, SETRTS); 

然后我所做的就是发送AT命令并等待调制解调器的响应。我不使用任何流量控制。我所做的一切都是等待通信事件,当调制解调器响应时,从串口队列中读取数据,然后写入一些AT命令,然后输入#13字符来查询调制解调器的消息。

我想我可能设置不正确的DCB结构,你可以看到,我不修改它的某些字段。由于我对串口的知识不够,我不知道如何设置RTS和DTR控制(启用/禁用/握手/切换)。

如果你注意到,在处理调制解调器的这样一些明显的错误,我想如果你解释我什么,我做错了感激。如果一切都很好,另一方面,也许你有一个想法,为什么调制解调器挂起?

预先感谢您。

回答

1

通常,DCB设置是您应该验证的第一件事。调制解调器文档应提及串行端口设置。如果不是使用调制解调器的型号在线搜索。

1

确保在设备管理器,调制解调器流量控制和程序都设置相同。我不知道德尔福,但我认为DCB应该有一个“标志”字段。尝试将其设置为24以进行硬件流量控制。

相关问题