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