武漢波仕電子公司 2009-10 027-51518044 孫漢華
本文所說的“串口”是指RS-232或者RS-485/RS-422口,但是由于RS-485(或RS-422)口一般都是從PC機的RS-232口轉換而來,其軟件是通用的,所以本文評論的“串口”一般就指PC機的RS-232口。這里所說的“虛擬串口”是指通過USB/串口轉換器生成的串口。有人在使用USB/串口轉換器時發現某些以前在傳統RS-232口上運行正常的軟件卻不能夠使用,因而就說通過USB轉換出來的串口不是真正的串口。
這里所謂的“傳統RS-232口”是指從PC機的主板或者從總線,比如臺式機的PCI或者ISA總線、筆記本的PCMCIA總線上擴展出來的RS-232口,是有真實物理地址的串口。USB的全稱是通用串行總線,它與PCI之類的并行總線有本質的區別。USB口沒有分配固定的總線I/O地址也沒有固定中斷號,它的地址是通過軟件來虛擬的,而傳統的RS-232口有固定的I/O地址以及中斷號。這就是某些通信軟件在傳統RS-232口可以運行而在USB/串口轉換器的RS-232口上不能夠運行的原因。如果通信軟件內有直接I/O讀寫語句,那么肯定無法在USB/串口轉換器的串口上運行。另外還有一個原因就是對RTS/CTS、DTR/DSR這些握手信號的操作,即使是通過虛擬讀寫不是通過直接I/O讀寫來操作這些握手信號,但由于USB/串口轉換器對這些握手信號的虛擬讀寫過程的初始化往往比較耗時,所以容易導致握手信號讀寫失敗。
現在的臺式計算機大部分還都保留有一個真實物理地址的RS-232口,一般是COM1口。如果在計算機的背后有一個DB-9針的口,那就是COM1串口。COM1串口的基地址為3FC,COM2串口的基地址為2FC。在WINDOWS me以及以前版本操作系統下可以直接進行物理地址的I/O讀寫操作,比如
BASIC語言為OUT &H3FC,2 匯編語言為OUT 3FC,2
PASCAL語言為port[$3fc]:=2; C語言為outportb (0x3fc,2);
VC++語言為:_outp (0x3fc,2);
在Windows XP以及以后版本操作系統下,上面的語句已經禁止執行,但是可以將I/O操作指令編為動態連接庫來調用,可以達到一樣的I/O操作效果。
USB/串口轉換器的虛擬串口代替傳統的RS-232、RS-485、RS-422口是必然的發展趨勢,就象PCI總線代替ISA總線、Windows代替DOS一樣,盡管后者都更加適合工業通信和工業測控。Windows操作系統從來不是優先考慮工業通信和工業測控的實時性要求,反而越來越拋棄工業通信和工業測控。只有CPU、總線等硬件速度的改進使延時減小從而接近實時性。由于通過虛擬I/O操作代替物理的固定I/O讀寫是解決Windows可靠性的一條基本原則,所以用戶越來越遠離Windows內核的操作。事實上,從Windows XP開始就沒有了直接I/O讀寫指令,甚至Windows me的直接I/O讀寫也是通過將DOS的I/O讀寫指令編輯成為動態連接庫然后來調用的。Windows XP下的直接I/O讀寫是通過動態連接庫的調用來實現,參見波仕電子網站的軟件。另外減少USB虛擬串口對RTS/CTS、DTR/DSR這些握手信號的虛擬操作的延時也是一個技術難點,這主要是由USB/串口轉換器內部UART的信號初始化處理延時導致的。避免頻繁使用最好不要使用這些握手信號是較好的解決方法。波仕電子所有產品的RS-485接口均使用了零延時自動收發轉換技術,這就保證轉換過程中不需要任何握手信號來控制收與發的切換。
如果你的計算機的RS-232口是從USB轉換出來的,那么肯定地說,這個RS-232口一定是虛擬串口。這是由USB的特性決定的。虛擬串口由于沒有真實物理地址所以是不能夠進行以上的對COM口地址(比如3FC、2FC)的I/O讀寫操作,包括用調用動態連接庫的方法。USB口當然是可以進行其他地址的I/O操作的,可以參考波仕的U46BL、U812BL產品說明書。
如果你的計算機串口是從臺式計算機的PCI插卡擴展出來的,那么目前的產品我們還沒有見到虛擬串口的,也就是說現在的PCI串口卡都是真實物理地址的串口。由于PCI串口卡的電路板是沒有殼子的,所以我們也很容易地從電路板上的元件型號看出來。從原理上來講,也可以從PCI口先擴展出USB口再將這個USB轉換出RS-232口。我們現在的許多筆記本的內置光驅就已經采用了USB口(不是指外掛的光驅!)。當你準備拔下U盤,按照要求用鼠標點擊左面右下腳的“安全刪除硬件”,如果同時出現USB光驅的提示就是說明你的筆記本光驅是USB接口的,雖然實際物理接口可能是一排插針的插卡。
唯一有可能混淆的是PCMCIA串口卡以及改進型EXPRESS CARD串口卡擴展出的RS-232口。大部分PCMCIA串口卡擴展的RS-232口都是真實物理地址的,否則就失去了它相對USB的優勢。PCMCIA對于筆記本的作用就象PCI對于臺式計算機一樣。波仕的PCMCIA、EXPRESS CARD串口卡擴展出來的都是真實物理地址的串口。EXPRESS CARD是PCMCIA的一種改進,有L形和條形,見波仕PCMCIA232的說明書。EXPRESS CARD 與PCMCIA并不兼容。最近已經出現了某些EXPRESS CARD串口卡擴展出來的RS-232口并不是真實物理地址的串口,而是先將EXPRESS CARD轉換成為USB然后再轉換出RS-232口。如果你有包含讀寫串口物理地址的程序,就無法在這樣的EXPRESS CARD上運行。
如何識別EXPRESS CARD擴展的串口是虛擬串口還是真實物理地址串口呢?以Windows XP為例,先安裝驅動程序。點擊:我的電腦\屬性\系統屬性\硬件\設備管理器\端口,找到新出現的COM口,再點擊: 屬性\詳細信息,如果是真實物理地址的串口,就會顯示物理地址以及中斷號,比如3FC、2FC之類,如果是USB虛擬串口,就會顯示USB的字樣,比如設備范例ID:USB\VID_067B&PID_2303\5&18CD3484&1&2。
如果你對以上的USB虛擬串口、PCI或PCMCIA擴展的串口都不滿意,那么還有一種選擇,就是以太網/串口轉換器,見波仕ETH232系列說明書。雖然以太網/串口轉換器生成的RS-232口也是虛擬串口,但是它并不出現在“\設備管理器\端口”中,所以也無法用上面看“屬性\詳細信”的方法。我們大量應用的實際情況表明,以太網虛擬串口的通用性好于USB虛擬串口,可能是由于以太網支持全雙工通信的原因。以太網/串口轉換器的缺點是需要供電,另外驅動程序以及虛擬串口程序是專用的。