为什么在串口上发送短信有时会冻结硬件?

时间:2012-09-27 07:57:26

标签: c# sms timeout serial-port

我有一个小程序,通过SerialPort发送短信。它连续工作7-8天很好,每天发送数百封邮件。但有时它会在发送消息时挂起,只有硬件重置才能解决它。

当调制解调器正在等待消息(显示"> "字符串)时发生问题,并且我发送了消息。当调制解调器收到CTRL+Z (ASCII#26)字符时,它应该发送回"OK"。但我从未接受过这种回应,从那时起,每次写入尝试都以System.TimeoutException: The write timed out结束。异常。

我可以捕获异常,但我无法解决问题(硬件重置除外)。从第一个超时异常开始,串口将无法工作 - 即使对于超级终端也不行。我有机会尝试两种不同的调制解调器,但它们都产生相同的症状。 (不同的调制解调器,但是同一台计算机。)我没有办法在生产环境中,在不同的机器上测试它10天。

我使用了串行监视器软件,它还显示串行端口(或调制解调器)发回写超时错误。当我初始化我的串口时,我将WriteTimeout属性设置为100(ms)。我必须根据调制解调器的制造商使用硬件握手。

我只发送简单的短信(没有PDU,不超过160个字符)。

我已经找到this线程,谈论写入超时和硬件握手。我可以提高写超时值,但我想知道为什么这个问题只是偶然发生。而且我想知道这是否是我的问题......

我正在使用C#4.0,该程序在Windows 2008 64位服务器上运行。

有什么想法吗?


UPDATE 根据丹尼斯的提示,我们找到了解决方案。看门狗部分是我自己的软件,检测超时异常。发生这种情况时,程序将向专用硬件发送命令以切换调制解调器的电源。起初,这种专用硬件本来就是一种重复卡,但我们发现了一条特殊的延长线,可通过RS-232或USB或ETHERNET进行控制。 (打开和关闭它的插头。)

1 个答案:

答案 0 :(得分:1)

对于经常使用GSM调制解调器的人来说,这是一个众所周知的问题。通常,您可以在软件级别注意,硬件重置是唯一有效的方法。

如果您要查看通过GSM newtork工作的任何ATM,您会发现有一个小型看门狗设备,用于单个产品 - 进行硬件重置(它关闭电源,比上)。