如何使用com0com null-modem仿真器模拟故障/电缆断开

时间:2013-10-16 09:58:32

标签: emulation com0com

这是一个简短的故事:我需要在我们的应用程序中调试一些非常具体的错误情况。该应用程序在双工系统上运行,该系统由两台通过串行电缆连接的机器组成;通过这条电缆,两台机器都会交换某种“心跳”信号。在该领域非常罕见的不可预测的情况下,物理介质中的信号失真导致了不良行为。我们可以通过简单地剥离串行电缆以“野蛮”的方式部分地再现它。

现在,为方便起见,我使用com0com null-modem仿真器(http://com0com.sourceforge.net/)成功模拟了串行电缆,这样两个进程都可以使用虚拟COM端口在同一台机器上运行。这非常有效。

我的问题是:如何使用com0com来模拟电缆断线/串口故障/信号失真?我可以吗故意阻止其中一个虚拟端口发送/接收数据?

1 个答案:

答案 0 :(得分:2)

我终于找到了如何使用com0com和com2tcp工具(它是com0com项目的一部分)来实现它。这个方法在本文档中描述:http://com0com.sourceforge.net/doc/UsingCom0com.pdf com0com项目是一个非常有用且令人惊奇的事情!

基本上,我们的想法是在机器上创建两对虚拟COM端口。在我的例子中,它们是:COM7&lt; - &gt; COM8和COM9&lt; - &gt; COM10。然后,使用com2tcp实用程序,我通过TCP重定向COM8和COM10之间的数据传输。在两个控制台窗口中,我将com2tcp作为服务器启动一次,作为客户端启动一次(如上文所述)。特别是,我使用com2tcp --telnet \\.\COM8 12345(其中12345是某个TCP端口号)和com2tcp.exe --telnet \\.\COM10 1.2.3.4 12345(其中1.2.3.4是我机器的IP地址)。我的应用程序的两个实例都使用COM7和COM9,因此通信如下:PROCESS1 <-> COM7 <-> COM8 <---- TCP ----> COM10 <-> COM9 <-> PROCESS2。然后,当两个应用程序实例都在运行时,我只需通过在控制台中按CTRL+C来停止com2tcp进程 - 这就像电缆中断那样完全打破了端口到端口的通信!通过这种方式,我可以根据需要轻松地模拟和调试行为。