c# - 为什么在串口上发送 SMS 有时会卡住硬件?

标签 c# sms timeout serial-port

关闭。这个问题是off-topic .它目前不接受答案。












想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。

9年前关闭。




Improve this question




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

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

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

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

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

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

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

有任何想法吗?

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

最佳答案

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

如果您查看任何通过 GSM newtork 工作的 ATM,您会发现那里有一个小型看门狗设备,它仅用于单一的事情 - 进行硬件重置(它关闭电源,而不是打开电源)。

关于c# - 为什么在串口上发送 SMS 有时会卡住硬件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12616635/

相关文章:

c# - 组织大型 C# 解决方案

c# - LINQ To Object 是否在内部进行任何调整?

c# - 如何在运行时获取当前类名?

android - 如何监控每条已发送短信的状态?

android - 收到短信并在android中的textview中显示

安卓 : SEND_SMS Permission not listed for tablet

java - Android TCP套接字超时

c# - 客户端在超时异常时超过了 sendTimeout

Java,限制BufferedReader读取时间

java - 移动设备上连接的适当超时是多少?