2013-10-16 363 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進程 - 並且完全按照電纜斷開的方式斷開端口間通信!以這種方式,我可以根據需要輕鬆模擬和調試行爲。