1. 何謂串口?
串口幾乎為所有計算機的裝置通訊協議標準。請別與通用串行總線 (Universal serial bus,USB) 產生混肴。大多數的計算機均配備 2 組 EIA-232 架構的串行端口。串口亦為常見的通訊協議,適用于控制多種儀器設備,并可搭配 EIA-232 通訊端口使用多款 GPIB 兼容的裝置。此外,用戶可透過數據擷取的串口通訊功能,進而整合遠程取樣裝置。請注意,EIA-232 與 EIA-485/422 亦可為所謂的 RS-232 與 RS-485/422。
串口通訊的概念極為簡單。串行端口將同時傳送并接收 1 個位 (Bit) 的信息字節 (Byte)。雖然此傳輸量低于并行通訊作業,卻可傳輸完整的字節;適用于較長距離的通訊作業。以 IEEE 488 規格的平行通訊作業為例,設備之間的接線總長度不得超過 20米(65英尺);任兩組裝置之間的長度不超過 2米(6.5英尺)。而串口卻可達最長 1200米(4000英尺)。
?
一般情況下,工程師均使用串行傳輸 ASCII 數據。并透過三種傳輸線完成通訊作業 - 接地線 (Ground)、傳送線 (Transmit)與接收線 (Receive)。由于串口屬于異步化,因此串行端口可于其中 1 個信道傳送數據,并于另 1 個信道接收數據。其他通道可視情況而進行握手(Handshaking)。重要的串口特性為波特率 (Baud rate)、數據位、停止位 (Stop bit),與奇偶同位 (Parity)。若要溝通兩組通訊端口,則必須符合這些參數:
1、波特率 (Baud rate) 為通訊的速度量測作業,顯示每秒所傳輸的位數。舉例來說,300 波特率即為每秒達 300個位。工程師所稱的頻率周期 (Clock cycle) 即為波特率;若協議呼叫信號 (Protocol call) 為 4800 波特率,意即頻率為 4800 Hz。亦表示串行端口以 4800 Hz 的速率,進行數據信道的取樣。常見的電話線路波特率為 14400、28800,與 33600。波特率當然可以大于上述這些數字,但這些速率將限制設備之間的距離。因此高波特率均用于裝置距離相近的通訊作業,常見的即為 GPIB 裝置。
2、數據位數 (Data bit),代表傳輸作業中的實際數據位。當計算機傳送信息框架 (Frame) 時,實際數據總數可能不滿 8 位??蚣艿臉藴蕯抵禐?5、7,與 8 位。應根據所傳輸的信息,選擇所需的設定。舉例來說,標準 ASCII 可為 0 ~ 127 的數值 (7 位)。延伸的 ASCII 則使用 0 ~ 255 (8 位)。若傳輸中的數據為標準 ASCII,則各個框架若能傳送 7 位數據,即屬高效率的通訊作業。1 個框架即為單一字節 (Byte) 的傳輸,包含開始/停止 (Start/stop) 位、數據位,與奇偶校驗 (Parity)。由于所選的通訊協議將影響實際位數,因此可使用“框架 (Frame)”代表所有的范例。
停止位 (Stop bit) 可針對單一框架的通訊作業末端發出信號。常見數值為 1、1.5,與 2 位。由于數據將受到跨信道的頻率所影響,而各組裝置又具有自己的頻率,因此任 2 組裝置可能會稍稍落后同步化作業。因此,停止位不僅可指出傳輸作業末端,并可為計算機頻率速度提供發生錯誤的空間。停止位所占的位數越多,則不同頻率的同步化越具彈性;但亦將拖慢傳輸速度。
3、奇偶校驗 (Parity) 為串口通訊作業錯誤檢查的簡易形式。奇偶校驗具分為 4 種類型 – Even、Odd、Marked,與 Spaced。亦可不使用奇偶校驗。針對 Even 與 Odd,串行端口將設定奇偶校驗位 (Parity bit,為數據位之后的最后 1 個位) 為 1 個數值,以確認該傳輸作業具有邏輯高位 (Logic-high) 位的 Even 或 Odd 數。舉例來說,若資料為 011,針對 Even 奇偶校驗的奇偶校驗位則為 0,才能讓邏輯高位位的數字為 Even。在奇偶校驗為 Odd 的情況下,奇偶校驗位「1」將導致「3」的邏輯高位位。Marked 與 Spaced 的奇偶校驗將不會實際檢查數據位,但會根據 Marked 奇偶校驗設定高的奇偶校驗位,或根據 Spaced 奇偶校驗設定低的奇偶校驗位。此將讓接收裝置了解位的狀態,以進一步判定噪聲是否使數據發生中斷,或傳送與接收裝置是否尚未同步化。
2. EIA-232 概述
EIA-232 為 IBM 兼容計算機架構的串口鏈接功能,可用以連接計算機與傳感器/調制解調器,或用于儀器控制等許多功能。EIA-232 硬件可達最長 15 公尺的通訊距離。EIA-232 限用于計算機串行端口與裝置之間的點對點連結。因此,計算機往往需要額外的 EIA-232 串行端口。標準計算機 EIA-232 串行端口與許多串行接口的制造商,將試圖平衡 Win32 API 于串口通訊函數調用中的功能。Win32 API 原來是設計用于調制解調器通訊作業,且并未建置完整的 EIA-232 協議?;诖隧椣拗疲琖in32 API 并無法溝通某些裝置。
NI 則提供多款平臺的 EIA-232 串行接口,包含 PCI、USB、PCMCIA、ExpressCard、PXI,與以太網絡。根據所使用的平臺,NI 串行接口卡提供 1、2、4、8,與 16 埠的版本。此外,NI EIA-232 串行接口卡更提升了某些功能,如最高 1 Mb/s 的高速波特率、透過 DMA 傳輸方式而降低 CPU 使用率、可選購的 2000 V 埠對埠隔離,與可設定的非標準波特率。所有的 NI 串行接口卡均包含 NI-Serial 驅動程序,可建置完整的 EIA-232 協議,并針對應用開發作業提供簡單易用的高階功能。NI-Serial 驅動程序可彌補 Win32 API 的缺點,亦即任何 EIA-232 架構的裝置,均可搭配使用 NI 串口裝置。
3. EIA-422 概述
EIA-422 為蘋果公司麥金塔 (Mac) 計算機的串口鏈接接口。與 EIA-232 所使用的非平衡式信號 (Unbalanced signal) 相較,EIA-422 使用截然不同的電子信號。EIA-422 的差動傳輸 (Differential transmission),就是透過 2 組線路以各自進行信號的傳輸與接收,因此其抗擾性與傳輸距離的表現均優于 EIA-232。在工業級應用中,抗擾性 (Noise immunity) 與傳輸距離可享有較佳的優勢。
NI 則提供多款平臺的 EIA-485/422 串行接口卡,包含 PCI、USB、PCMCIA、ExpressCard、PXI,與以太網絡。根據所使用的平臺,NI 串行接口卡具有 1、2、4,與 8 埠的版本。此外,NI EIA-485/422 串行接口卡更新增了多項功能,如最高 3 Mb/s 的高速波特率、透過 DMA 傳輸方式而降低 CPU 使用率、可選購的 2000 V 埠對埠隔離,與可設定的非標準波特率。所有的 NI 串行接口卡均包含 NI-Serial 驅動程序,可建置完整的 EIA-485/422 協議,并針對應用開發作業提供簡單易用的高階功能。
4. EIA-485 概述
EIA-485 為 EIA-422 的改良版本,從原本的 10 組裝置提高至 32 組裝置,并定義必要的電子特性參數,于最大負載保持適當的信號電壓。透過增強的多端點 (Multidrop) 功能,即可透過單一 EIA-485 串行端口進行裝置的網絡鏈接作業。EIA-485 的抗擾性與多端點功能,使其成為工業級應用的串口連結首選,適于將多款分布式裝置連接至計算機或其他控制器,以進行于數據搜集、HMI,與其他作業。EIA-485 集 EIA-422 的優點于一身,因此所有的 EIA-422 裝置亦可由 EIA-485 進行控制。透過 EIA-485 硬件,串口通訊作業可達最長 1200米(4000英尺)的連接線總長度。
NI 則提供多款平臺的 EIA-485/422 串行接口卡,包含 PCI、USB、PCMCIA、ExpressCard、PXI,與以太網絡。根據所使用的平臺,NI 串行接口卡具有 1、2、4,與 8 埠的版本。此外,NI EIA-485/422 串行接口卡更新增了多項功能,如最高 3 Mb/s 的高速波特率、透過 DMA 傳輸方式而降低 CPU 使用率、可選購的 2000 V 埠對埠隔離,與可設定的非標準波特率。所有的 NI 串行接口卡均包含 NI-Serial 驅動程序,可建置完整的 EIA-485/422 協議,并針對應用開發作業提供簡單易用的高階功能。
5. NI 串行接口卡接頭的輸出針腳 (Pinout)
DB-9 Male
DB-25 Male
10-Position Modular Jack
Pin
EIA-232
EIA-485/422
Pin
EIA-232
EIA-485/422
Pin
EIA-232
EIA-485/422
1
DCD
GND
2
TXD
RTS+ (HSO+)
1
No Connect
No Connect
2
RXD
CTS+ (HSI+)
3
RXD
CTS+ (HSI+)
2
RI
TXD-
3
TXD
RTS+ (HSO+)
4
RTS
RTS- (HSO-)
3
CTS
TXD+
4
DTR
RXD+
5
CTS
TXD+
4
RTS
RTS- (HSO-)
5
GND
RXD-
6
DSR
CTS- (HSI-)
5
DSR
CTS- (HSI-)
6
DSR
CTS- (HSI-)
7
GND
RXD-
6
GND
RXD-
7
RTS
RTS- (HSO-)
8
DCD
GND
7
DTR
RXD+
8
CTS
TXD+
20
DTR
RXD+
8
TXD
RTS+ (HSO+)
9
RI
TXD-
22
RI
TXD-
9
RXD
CTS+ (HSI+)
-
-
-
-
-
-
10
DCD
GND
6. 何謂握手 (Handshaking)?
此 EIA-232 通訊作業,可進行 3 種線路的簡易鏈接作業 - Tx、Rx,與接地。然而,針對所要傳輸的數據,其2端均需以相同波特率進行數據的頻率化 (Clocking)。雖然此方式適用于大多數的應用,此功能卻受限于系統對問題的反應速度,如發生過載 (Overloaded) 的接收器。而串口握手 (Handshaking) 可協助解決相關問題。3 種最常見的 EIA-232 握手形式,即為軟件握手、硬件握手,與 Xmodem。
軟件握手
此方式是將數據字節作為控制字符 (Control character),近似于 GPIB 使用命令字符串 (Command string) 的方式。由于控制字符可透過傳輸線路,如正常數據般進行傳輸,因此亦可整合 Tx、Rx,與接地而成簡易的 3 線式集合。透過 SetXMode 函式,即可啟用或停用 2 個控制字符:XON 與 XOFF。數據接收器將傳送這些字符,以于通訊期間暫停傳送器。
此方式的最大缺點,也是最重要的概念:數據值將不再使用 Decimal 17 與 19。由于這些數值為無字符 (Noncharacter) 數值,因此往往不會影響 ASCII 的傳輸作業;然而,若以二進制法傳輸數據,則極可能將這些數值作為數據進行傳輸,導致傳輸作業發生錯誤。
硬件握手
此方式將使用實際的硬件線路。如同 Tx 與 Rx 線路一般,RTS/CTS 與 DTR/DSR 線路可搭配使用。若其中 1 個線路為輸出,則另 1 個線路即為輸入。
第一種線路集為 RTS (Request to Send) 與 CTS (Clear to Send)。當接收器可接收資料時,則將插入 (Assert) RTS 線路,表示接收器已可接收資料。接著將由 CTS 輸入線路的傳送器讀取此訊息,表示已可傳送數據。
第二種線路集為 DTR (Data Terminal Ready) 與 DSR (Data Set Ready)。由于此種線路可讓串行端口與調制解調器之間通訊現有狀態,因此主要用于調制解調器的通訊作業。舉例來說,當調制解調器可為計算機傳送數據時,將先中斷 DTR 線路,代表目前是透過電話線進行鏈接作業。接著 DSR 線路將讀取該訊息,計算機則開始傳送數據。在一般情況下,DTR/DSR 線路是用以表示系統可進行通訊作業,而 RTS/CTS 線路則用于獨立的數據框架。
在 LabWindows/CVI 中,SetCTSMode 函式將啟用或停用硬件握手。若已啟用 CTS 模式,則 LabWindows/CVI 將依循下列規則:
計算機傳送數據時:
EIA-232 函式庫必須于傳送數據之前,偵測該 CTS 線路為高 (High) 狀態。
計算機接收數據時:
若通訊端口為開啟狀態,且輸入隊列具有容納數據的空間,則函式庫將引發 (Raise) RTS 與 DTR。
若通訊端口輸入隊列已達 90%,則函式庫將降低 RTS 并提升 DTR。
若通訊端口輸入隊列近乎空白,則函式庫將引發 RTS 并保持 DTR 為高狀態。
若通訊端口為關閉,則函式庫將降低 RTS 與 DTR。
XModem 握手
雖然此種協議已普遍用于調制解調器通訊作業,若其他裝置均可使用此種協議,仍可直接于裝置之間使用 XModem 協議。在 LabWindows/CVI 中,使用者可選擇是否隱藏實際的 XModem 建置。只要計算機透過 XModem 協議連接其他裝置,即可使用 LabWindows/CVI 的 XModem 函式,以傳送檔案至其他地址 (Site)。該函式為 XModemConfig、XModemSend,與 XModemReceive。
根據下列參數使用協議:start_of_data、end_of_trans、neg_ack、ack、wait_delay、start_delay、max_tries,與 packet_size。傳輸數據的 2 邊必須同時認可這些參數,而 XModem 則提供相關標準定義。然而,使用者可透過 LabWindows/CVI 中的 XModemConfig 函式修改這些參數,以符合任何需求。在接收器 (Receiver) 傳送 neg_ack 字符之后,即可于 XModem 中使用這些參數。此字符將告訴傳送器 (Sender) 已準備好接收資料。于每次傳輸嘗試之間,接收器均將使用 start_delay 時間,直到滿足 max_tries 或接收到傳送器的 start_of_data。若滿足 max_tries,則接收器將提醒使用者目前無法溝通傳送器。若的確接收到傳送器的 start_of_data,則接收器將讀取后續的信息封包。此封包具有封包號碼、可檢查錯誤的封包補充碼、packet_size 字節的實際數據封包,與用于更多錯誤檢查的數據總和檢查碼 (Checksum)。在讀取數據之后,接收器將呼叫 wait_delay,并于稍后傳送認可字符 (Ack) 回傳送器。若傳送器未接受到 ack,則將重新傳送 max_tries 數據封包,直到接收 ack 為止。若傳送器一直未接收 ack,則將通知使用者傳送檔案失敗。
由于傳送器必須以 packet_size 字節的封包傳送數據,因此若沒有足夠數據填滿最后的封包,則傳送器將使用 ASCII NULL (0) 字節填滿數據封包。如此將使接收檔案大于源文件。由于 XModem 傳輸作業的封包號碼,極可能增加 XON/OFF 控制字符而造成通訊中斷,因此 XModem 協議并不適合搭配使用 XON/XOFF。
評論