2

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

现在,为方便起见,我使用 com0com 空调制解调器模拟器 ( http://com0com.sourceforge.net/ ) 成功模拟了串行电缆,以便两个进程使用虚拟 COM 端口在同一台机器上运行。这完美无缺。

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

4

1 回答 1

2

我终于发现了如何使用 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. 然后,当两个应用程序实例都在运行时,我只需按一下即可停止 com2tcp 进程CTRL+C在控制台中 - 这会像电缆断裂一样破坏端口到端口的通信!通过这种方式,我可以轻松地根据需要模拟和调试行为。

于 2013-11-06T15:20:37.273 回答