hub4com – comport 轉接網路與虛擬裝置

這篇又要來介紹我工作上的東西了,也是有趣的小玩具,對於通訊系統的測試上蠻有用的。這是在 Windows 上的工具,WinXP, Win7 或 Win10 都能夠使用 (32/64 bit)。

socat 這篇有點像,光從題目都很難理解要講的是什麼東西,所以上網找東西也不太好找。就以列表來說明功能,可能會好懂一點。透過這篇文章的說明,可以達成下面的功能。

  1. 在遠端開啟一個 TCP Server,用 Telnet 連入後會開啟遠端的 COMPORT,就可以網路來監控遠端的 COMPORT。
  2. 在機器上產生成對的虛擬 COMPORT,可以互通。例如產生 COM20, 21,寫入 COM20 的資料,可以在 COM21 讀到。
  3. 以 Telnet 連線到遠端的 Telnet server,並將資料轉到指定的 COMPORT。

透過上面功能的組合,能以

  1. Telnet 的方式存取遠端的 COMPORT
  2. 以 COMPORT 方式存取 Telnet
  3. 本地端以 COMPORT 的方式存取遠端的 COMPORT

因為在開發嵌入式系統時,遠端的測試機可能就只有透過 COMPORT 連接而已,而如果都用 VNC 遠端搖控的方式,很難達到測試自動化。當這些訊息都可以透過網路的轉接,在本地以 COMPORT 的方式來呈現,那不管機器在本地還是遠端,測試程式都可以把它們當成本地機器,以一致的方式來撰寫程式了。

 

COM0COM – HUB4COM

雖然本文的 title 是講 hub4com,但它其實是一個 Null-modem emulator (com0com) 開源專案的子專案。它們放置的位置有些許不同,文末會提供一版我自行整合的版本,本文即是以該版本來演示:

  1. com0com: https://sourceforge.net/projects/com0com/files/com0com/
  2. hub4com: https://sourceforge.net/projects/com0com/files/hub4com/

com0com 的用途在於產生一對虛擬的 COMPORT,從 A Port 寫入的東西,可以在 B Port 讀到,反之亦然。虛擬 COMPORT 數可產生多對,自己只使用到2對,但應該沒有特別的限制才對。

單純的 COM0COM 並不是很有用,可能只能用來模擬 COMPORT 對通的行為。但透過 hub4com 的這支程式,它可以將虛擬 COMPORT的資料轉入或轉出網路。還有如 COMPORT 一對2的資料轉接,可以將一組做為資料交換,另一組單純的監控。

COM0COM 操作

com0com 主要是由執行檔 setupc 這支程式來進行虛擬 COMPORT 的新增與移除。32 bit 與 64 bit 所使用的程式不同,程式分別放在 i386 與 x64 的目錄裡,請依自己的平台類行,將所有的檔案複製到根目錄。請注意,使用 setupc 時,要使用管理員權限才能成功新增。

新增 COMPORT

虛擬 COMPORT 都是以一對的型式來新增。下面的命令,就會分別產生 COM70 與 COM80,往 COM70 寫入的資料,可以在 COM80 讀到,反之亦然。

安裝畫面

安裝後,再 Teraterm 連線時,就可以看到兩個新增的 COMPORT。

Teraterm 連線列出

列出虛擬 COMPORT

要列出已經新增的虛擬 COMPORT ,使用以下的命令。

移除虛擬 COMPORT

移除所有的 COMPORT,則使用以下的命令

測試

要測試虛擬 COMPORT 是否可以使用,可以開啟兩份 Teraterm 分別開啟 COM70 與 COM80,在 COM70 輸入的東西就會顯示在 COM80上。

 

單純的 com0com 並不是非常有用,下面會就會透過 hub4com 來達成更有力的應用。

HUB4COM 操作

下面的應用,都是以我自己的使用經驗來做為範例。下面的範例可分為單機,與雙機(本機與遠端)。這些範例做了以下假設

  1. 每一台都已經安裝了兩個虛擬 COMPORT, COM70 與 COM80,並且有一個實體的 COMPORT COM1。
  2. 每一台機單都連接了一個測試裝備,其網路與COMPORT皆互相連接。

hub4com 可以有很複雜的參數設定,開發者已經提供了簡化的 com2tcp.bat 檔來簡化其使用。原則上的用法是

  1. com2tcp.bat \\.\comX IP PORT: 連線到遠端的 TCP 連線,將之與本地的 comX 串接
  2. com2tcp.bat \\.comX PORT: 在本地端等待 TCP port 的連入,當連入時會開啟與 comX 的連線

單機應用 – 主動連線到telnet server轉到本機comport

第一個使用範例,是要將一個 telnet 連線,當做一個 COMPORT 的方式來連。當測試裝備的COMPORT很慢,或者是會掉字時,就可以此方法來提供較快較穩定的連線。

設置此連線的命令為

當以 Teraterm 打開 COM80 時,就會與 192.168.1.100 port 23 建立一個 TCP 連線,也就是 telnet 連線。以一個比較簡單好展示的例子,就是連到 ptt。

下達上面的命令後,連到 COM80,就可以看到 ptt 的畫面了。

單機應用 – 接受連入連線轉接到實體comport

這個應用是接 COM1 連接到測試裝備,並在 PC 上 Listen TCP Port 2323。此時可以從網路上用telnet連到這台 PC 的 2323 port,就可以看到測試裝備的 console。

此設定的命令為

單機應用 – 接受連入連線轉接到虛擬comport

將上面兩個命令結合,就可以達成從網路接受tcp連線,透過虛擬 comport 連線到測試設備的telnet server,其實這也就是一般的 port forwarding,只是用 hub4com 來實現。

有網路為何要用 comport,有comport為何要用網路?有時是程式要配合測試設備,所以在不同的情況,這些命令還是有它們的用處。

 

雙機應用 – 串接本地虛擬COMPORT與遠端COMPORT

雙機應用或n機應用,主要是用一台主機來連到多台遠端機器,以 COMPORT 的方式來設定這些機器,做通訊測試。測試的命令,其實就是以上面的單機應用命令做組合。

 

Windows PC1 以 COMPORT 來連接測試設備

 

若是 Windows PC1 要以 telnet 來連接測試設備

進階設定 – 二對虛擬COMPORT,一組轉接,一組監控

hub4com 也可以將其中一組COMPORT的資料轉發到其它的通訊埠去,可以是單向,也可以是雙向。

其中關鍵的部份是 route 的參數,裡面的 0:1 代表將後面的第一個 COMPORT 輸出轉到第二個 COMPORT,0:2 代表將後面的第一個 COMPORT 輸出轉到第三個 COMPORT,1:0代表將後面的第二個 COMPORT 輸出轉到第一個 COMPORT。

所以這代表 COM1 / COM70 的輸出入是互通的,而 COM1 的輸出是單向到 COM71 的,所以可以從 COM71 來監控 COM1 的輸出。因為 hub4com 在執行的時候 COM1 會被佔用,而使用者無法從本機觀察到其輸出,透過這個額外的命令,就可以透過額外的 COMPORT 來監控。

結語

完整的 hub4com 指令還頗為複雜,有興趣的讀者可以再研究看看。很多的測試程式,是以 COMPORT 的方式來控制設備。以本文提供的方式,可以讓本端/遠端的設備,對測試程式來說有一致的介面,提高測試程式的重用性,而無需針對網路通訊再另做修改。

附件

我的 hub4com+com0com

Leave a Reply