2013-10-16 370 views
1

下面是简短的故事:我需要在应用程序中调试一些非常特定的错误情况。该应用程序运行在一个由串行电缆连接的两台机器组成的双工系统上;在这根电缆上,两台机器交换某种“心跳”信号。在该领域非常罕见的不可预测的情况下,物理介质内的信号失真已导致不良行为。我们可以通过简单地剥离串行电缆以“残酷”的方式部分地再现它。如何使用com0com null-modem模拟器模拟故障/电缆中断

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

我的问题是:我怎样才能使用com0com来模拟任何类型的电缆中断/串口故障/信号失真?我可以有意阻止其中一个用于发送/接收数据的虚拟端口?

回答

1

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

基本上,这个想法是在机器上创建两对虚拟COM端口。在我的情况下,它们是:COM7 < - > COM8和COM9 < - > 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进程 - 并且完全按照电缆断开的方式断开端口间通信!以这种方式,我可以根据需要轻松模拟和调试行为。