题
我有一个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控制(启用/禁用/握手/切换)。
如果您发现在处理调制解调器的这样一些明显的错误,我想如果你解释我什么,我做错了感激。如果一切正常,而另一方面,也许你为什么调制解调器挂有一个想法?
感谢您提前。
解决方案
通常的DCB设置你应该确认的第一件事情。调制解调器文档应该提及的串行端口设置。如果不是您的调制解调器的型号在网上搜索。
其他提示
请确保在设备管理器,调制解调器流量控制和程序都设置相同。我不知道德尔福,但我认为DCB应该有一个“标志”字段。尝试将其设置为24的硬件流程控制。
不隶属于 StackOverflow