常見(jiàn)問(wèn)題

專注于提供先進(jìn)工業(yè)自動(dòng)化產(chǎn)品
智慧物聯(lián)網(wǎng)及行業(yè)解決方案
您的當(dāng)前位置:首頁(yè) > 常見(jiàn)問(wèn)題

詳解串口通信232/485/422,一文就可以搞定!
發(fā)布時(shí)間:2022-11-15 閱讀次數(shù):544次

一、RS232基礎(chǔ)知識(shí)

 

計(jì)算機(jī)與計(jì)算機(jī)或計(jì)算機(jī)與終端之間的數(shù)據(jù)傳送可以采用串行通訊和并行通訊二種方式。由于串行通訊方式具有使用線路少、成本低,特別是在遠(yuǎn)程傳輸時(shí),避免了多條線路特性的不一致而被廣泛采用。

 

在串行通訊時(shí),要求通訊雙方都采用一個(gè)標(biāo)準(zhǔn)接口,使不同的設(shè)備可以方便地連接起來(lái)進(jìn)行通訊。RS-232-C接口(又稱EIA RS-232-C)是目前最常用的一種串行通訊接口。

 

RS-232-C是美國(guó)電子工業(yè)協(xié)會(huì)EIA(Electronic Industry Association)制定的一種串行物理接口標(biāo)準(zhǔn)。RS是英文“推薦標(biāo)準(zhǔn)”的縮寫(xiě),232為標(biāo)識(shí)號(hào),C表示修改次數(shù),代表RS232的最新一次修改(1969),在這之前,有RS232B、RS232A。它是在1970 年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”。


 

1、電氣特性

 

EIA-RS-232C對(duì)電器特性、邏輯電平和各種信號(hào)線功能都作了規(guī)定。

 

在TxD和RxD上:邏輯1(MARK)=-3V~-15V ,邏輯0(SPACE)=+3~+15V 在RTS、CTS、DSR、DTR和DCD等控制線上:信號(hào)有效(接通,ON狀態(tài),正電壓)=+3V~+15V 信號(hào)無(wú)效(斷開(kāi),OFF狀態(tài),負(fù)電壓)=-3V~-15V

 

根據(jù)設(shè)備供電電源的不同,+-5、+-10、+-12和+-15這樣的電平都是可能的。

 

2、連接器的機(jī)械特性

 

由于RS-232C并未定義連接器的物理特性,因此,出現(xiàn)了DB-25、DB-15和DB-9各種類型的連接器,其引腳的定義也各不相同。最近,8管腳的RJ-45型連接器變得越來(lái)越普遍,盡管它的管腳分配相差很大。EIA/TIA 561標(biāo)準(zhǔn)規(guī)定了一種管腳分配的方法,但是由Dave Yost發(fā)明的被廣泛使用在Unix計(jì)算機(jī)上的Yost串連設(shè)備配線標(biāo)準(zhǔn) ('Yost Serial Device Wiring Standard')以及其他很多設(shè)備都沒(méi)有采用上述任一種連線標(biāo)準(zhǔn)。下表中列出的是被較多使用的RS-232中的信號(hào)和管腳分配:


信號(hào)的標(biāo)注是從DTE設(shè)備的角度出發(fā)的,TD、DTR和RTS信號(hào)是由DTE產(chǎn)生的,RD、DSR、CTS、DCD和RI信號(hào)是由DCE產(chǎn)生的。

 

PC 機(jī)的RS-232 口為9 芯針插座。一些設(shè)備與PC 機(jī)連接的RS-232 接口,因?yàn)椴皇褂脤?duì)方的傳送控制信號(hào),只需三條接口線,即“發(fā)送數(shù)據(jù)TXD”、“接收數(shù)據(jù)RXD”和“信號(hào)地GND”。


雙向接口能夠只需要3根線制作是因?yàn)镽S-232的所有信號(hào)都共享一個(gè)公共接地。非平衡電路使得RS-232非常的容易受兩設(shè)備間基點(diǎn)電壓偏移的影響。對(duì)于信號(hào)的上升期和下降期,RS-232也只有相對(duì)較差的控制能力,很容易發(fā)生串話的問(wèn)題。RS-232被推薦在短距離(15m以內(nèi))間通信。由于非對(duì)稱電路的關(guān)系,RS-232接口電纜通常不是由雙絞線制作的。

 

3、傳輸電纜

 

RS-232-C標(biāo)準(zhǔn)規(guī)定的數(shù)據(jù)傳輸速率為每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特,驅(qū)動(dòng)器允許有2500pF的電容負(fù)載,通信距離將受此電容限制。

 

例如,采用150pF/m的通信電纜時(shí),最大通信距離為15m;若每米電纜的電容量減小,通信距離可以增加。傳輸距離短的另一原因是RS-232屬單端信號(hào)傳送,存在共地噪聲和不能抑制共模干擾等問(wèn)題,因此一般用于20m以內(nèi)的通信。

 

由RS-232C標(biāo)準(zhǔn)規(guī)定在碼元畸變小于4%的情況下,傳輸電纜長(zhǎng)度應(yīng)為50 英尺,其實(shí)這個(gè)4%的碼元畸變是很保守的,在實(shí)際應(yīng)用中,約有99%的用戶是按碼元畸變10-20%的范圍工作的,所以實(shí)際使用中最大距離會(huì)遠(yuǎn)超過(guò)50英尺,美國(guó)DEC公司曾規(guī)定允許碼元畸變?yōu)?0%而得出下面實(shí)驗(yàn)結(jié)果。其中1 號(hào)電纜為屏蔽電纜,型號(hào)為DECP.NO.9107723 內(nèi)有三對(duì)雙絞線,每對(duì)由22# AWG 組成,其外覆以屏蔽網(wǎng)。2 號(hào)電纜為不帶屏蔽的電纜。型號(hào)為DECP.NO.9105856-04是22#AWG 的四芯電纜。


 

4、鏈路層

 

在RS-232標(biāo)準(zhǔn)中,字符是以一系列位元來(lái)一個(gè)接一個(gè)的傳輸。最長(zhǎng)用的編碼格式是異步起停asynchronous start-stop格式,它使用一個(gè)起始位后面緊跟7或8 個(gè)數(shù)據(jù)比特,這個(gè)可能是奇偶位,然后是兩個(gè)停止位。所以發(fā)送一個(gè)字符需要10比特,帶來(lái)的一個(gè)好的效果是使全部的傳輸速率,發(fā)送信號(hào)的速率以10分劃。

 

串行通信在軟件設(shè)置里需要做多項(xiàng)設(shè)置,最常見(jiàn)的設(shè)置包括波特率、奇偶校驗(yàn)和停止位。波特率是指從一設(shè)備發(fā)到另一設(shè)備的波特率,即每秒鐘多少比特bits per second (bit/s)。典型的波特率是300、1200、2400、9600、19200等bit/s。一般通信兩端設(shè)備都要設(shè)為相同的波特率,但有些設(shè)備也可以設(shè)置為自動(dòng)檢測(cè)波特率。

 

奇偶校驗(yàn)Parity是用來(lái)驗(yàn)證數(shù)據(jù)的正確性。奇偶校驗(yàn)一般不用,如果使用,那么既可以做奇校驗(yàn)也可以做偶校驗(yàn)。奇偶校驗(yàn)是通過(guò)修改每一發(fā)送字節(jié)(也可以限制發(fā)送的字節(jié))來(lái)工作的。如果不作奇偶校驗(yàn),那么數(shù)據(jù)是不會(huì)被改變的。在偶校驗(yàn)中,因?yàn)槠媾夹r?yàn)位會(huì)被相應(yīng)的置1或0(一般是最高位或最低位),所以數(shù)據(jù)會(huì)被改變以使得所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中“1”的個(gè)數(shù)為偶數(shù);在奇校驗(yàn)中,所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中“1”的個(gè)數(shù)為奇數(shù)。奇偶校驗(yàn)可以用于接受方檢查傳輸是否發(fā)送生錯(cuò)誤——如果某一字節(jié)中“1”的個(gè)數(shù)發(fā)生了錯(cuò)誤,那么這個(gè)字節(jié)在傳輸中一定有錯(cuò)誤發(fā)生。如果奇偶校驗(yàn)是正確的,那么要么沒(méi)有發(fā)生錯(cuò)誤要么發(fā)生了偶數(shù)個(gè)的錯(cuò)誤。


 

停止位是在每個(gè)字節(jié)傳輸之后發(fā)送的,它用來(lái)幫助接受信號(hào)方硬件重同步。

 

在串行通信軟件設(shè)置中D/P/S是常規(guī)的符號(hào)表示。8/N/1(非常普遍)表明8bit數(shù)據(jù),沒(méi)有奇偶校驗(yàn),1bit停止位。數(shù)據(jù)位可以設(shè)置為7、8或者9,奇偶校驗(yàn)位可以設(shè)置為無(wú)(N)、奇(O)或者偶(E),奇偶校驗(yàn)位可以使用數(shù)據(jù)中的比特位,所以8/E/1就表示一共8位數(shù)據(jù)位,其中一位用來(lái)做奇偶校驗(yàn)位。停止位可以是1、1.5或者2位的(1.5是用在波特率為60wpm的電傳打字機(jī)上的)。

 

5、傳輸控制

 

當(dāng)需要發(fā)送握手信號(hào)或數(shù)據(jù)完整性檢測(cè)時(shí)需要制定其他設(shè)置。公用的組合有RTS/CTS,DTR/DSR或者XON/XOFF(實(shí)際中不使用連接器管腳而在數(shù)據(jù)流內(nèi)插入特殊字符)。

 

接受方把XON/XOFF信號(hào)發(fā)給發(fā)送方來(lái)控制發(fā)送方何時(shí)發(fā)送數(shù)據(jù),這些信號(hào)是與發(fā)送數(shù)據(jù)的傳輸方向相反的。XON信號(hào)告訴發(fā)送方接受方準(zhǔn)備好接受更多的數(shù)據(jù),XOFF信號(hào)告訴發(fā)送方停止發(fā)送數(shù)據(jù)直到知道接受方再次準(zhǔn)備好。XON/XOFF一般不贊成使用,推薦用RTS/CTS控制流來(lái)代替它們。

 

XON/XOFF是一種工作在終端間的帶內(nèi)方法,但是必須兩端都支持這個(gè)協(xié)議,而且在突然啟動(dòng)的時(shí)候會(huì)有混淆的可能。

 

XON/XOFF可以工作于3線的接口。RTS/CTS最初是設(shè)計(jì)為電傳打字機(jī)和調(diào)制解調(diào)器半雙工協(xié)作通信的,每次它只能一方調(diào)制解調(diào)器發(fā)送數(shù)據(jù)。終端必須發(fā)送請(qǐng)求發(fā)送信號(hào)然后等到調(diào)制解調(diào)器回應(yīng)清除發(fā)送信號(hào)。盡管RTS/CTS是通過(guò)硬件達(dá)到握手,但它有自己的優(yōu)勢(shì)。

 

6、RS-232標(biāo)準(zhǔn)的不足

 

經(jīng)過(guò)許多年來(lái)RS-232 器件以及通信技術(shù)的改進(jìn),RS-232 的通信距離已經(jīng)大大增加。由于RS-232 接口標(biāo)準(zhǔn)出現(xiàn)較早,難免有不足之處,主要有以下四點(diǎn):

(1) 接口的信號(hào)電平值較高,易損壞接口電路的芯片,又因?yàn)榕cTTL 電平不兼容故需使用電平轉(zhuǎn)換電路方能與TTL 電路連接。

(2) 傳輸速率較低,在異步傳輸時(shí),波特率為20Kbps?,F(xiàn)在由于采用新的UART 芯片16C550 等,波特率達(dá)到115.2Kbps。

(3) 接口使用一根信號(hào)線和一根信號(hào)返回線而構(gòu)成共地的傳輸形式, 這種共地傳輸容易產(chǎn)生共模干擾,所以抗噪聲干擾性弱。

(4) 傳輸距離有限,最大傳輸距離標(biāo)準(zhǔn)值為50 米,實(shí)際上也只能用在15米左右。

 

二、RS485基礎(chǔ)知識(shí)

 

針對(duì)RS-232串口標(biāo)準(zhǔn)的局限性,人們又提出了RS-422,RS-485接口標(biāo)準(zhǔn)。RS-485/422采用平衡發(fā)送和差分接收方式實(shí)現(xiàn)通信:發(fā)送端將串行口的TTL電平信號(hào)轉(zhuǎn)換成差分信號(hào)A、B兩路輸出,經(jīng)過(guò)線纜傳輸之后在接收端將差分信號(hào)還原成TTL電平信號(hào)。由于傳輸線通常使用雙絞線,又是差分傳輸,所以又極強(qiáng)的抗共模干擾的能力,總線收發(fā)器靈敏度很高,可以檢測(cè)到低至200mV電壓。故傳輸信號(hào)在千米之外都是可以恢復(fù)。

 

1、RS-485 的電氣特性

 

驅(qū)動(dòng)器能輸出±7V的共模電壓

接收器的輸入電阻RIN≥12kΩ

輸入端的電容≤50pF 在節(jié)點(diǎn)數(shù)為32個(gè),配置了120Ω的終端電阻的情況下,驅(qū)動(dòng)器至少還能輸出電壓1.5V(終端電阻的大小與所用雙絞線的參數(shù)有關(guān)) 發(fā)送端:邏輯'1'以兩線間的電壓差為+(2 至6) V 表示;邏輯'0'以兩線間的電壓差為-(2 至6)V 表示。接收器的輸入靈敏度為200mV(即(V+)-(V-)≥0.2V,表示信號(hào)'0';(V+)-(V-)≤-0.2V,表示信號(hào)'1')

 

2、傳輸速率與傳輸距離

 

RS-485 的數(shù)據(jù)最高傳輸速率為10Mbps,最大的通信距離約為1219M,傳輸速率與傳輸距離成反比,在10Kb/S的傳輸速率下,才可以達(dá)到最大的通信距離。

 

但是由于RS-485 常常要與PC 機(jī)的RS-232口通信,所以實(shí)際上一般最高115.2Kbps。又由于太高的速率會(huì)使RS-485 傳輸距離減小,所以往往為9600bps 左右或以下。

 

3、網(wǎng)絡(luò)拓?fù)?

 

RS-485 接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,抗共模干能力增強(qiáng),即抗噪聲干擾性好。RS-485采用半雙工工作方式,支持多點(diǎn)數(shù)據(jù)通信。

 

RS-485總線網(wǎng)絡(luò)拓?fù)湟话悴捎媒K端匹配的總線型結(jié)構(gòu)。即采用一條總線將各個(gè)節(jié)點(diǎn)串接起來(lái),不支持環(huán)形或星型網(wǎng)絡(luò)。如果需要使用星型結(jié)構(gòu),就必須使用485中繼器或者485集線器才可以。RS-485/422總線一般最大支持32個(gè)節(jié)點(diǎn),如果使用特制的485芯片,可以達(dá)到128個(gè)或者256個(gè)節(jié)點(diǎn),最大的可以支持到400個(gè)節(jié)點(diǎn)。


 

4、連接器

 

RS-485 的國(guó)際標(biāo)準(zhǔn)并沒(méi)有規(guī)定RS485 的接口連接器標(biāo)準(zhǔn)、所以采用接線端子或者DB-9、DB-25 等連接器都可以。

 

三、RS422基礎(chǔ)知識(shí)

 

RS-422 的電氣性能與RS-485近似一樣。主要的區(qū)別在于:

(1)RS-485 有2 根信號(hào)線:發(fā)送和接收都是A 和B。由于RS-485 的收與發(fā)是共用兩根線,所以不能夠同時(shí)收和發(fā)(半雙工)。

(2)RS-422 有4 根信號(hào)線:兩根發(fā)送(Y、Z)、兩根接收(A、B)。由于RS-422 的收與發(fā)是分開(kāi)的,所以可以同時(shí)收和發(fā)(全雙工)。

(3)支持多機(jī)通信的RS-422將Y-A 短接作為RS-485 的A、將RS-422 的Z-B 短接作為RS-485 的B可以這樣簡(jiǎn)單轉(zhuǎn)換為RS-485。


 

很多人往往都誤認(rèn)為RS-422串行接口是RS-485串行接口的全雙工版本,實(shí)際上,它們?cè)陔娖魈匦陨洗嬖谥簧俨町?,共模電壓范圍和接收器輸入電阻不同使得該兩個(gè)標(biāo)準(zhǔn)適用于不同的應(yīng)用領(lǐng)域。RS-485串行接口的驅(qū)動(dòng)器可用于RS-422串行接口的應(yīng)用中,因?yàn)镽S-485串行接口滿足所有的RS-422串行接口性能參數(shù),反之則不能成立。對(duì)于RS-485串行接口的驅(qū)動(dòng)器,共模電壓的輸出范圍是-7V和+12V之間;對(duì)于RS-422串行接口的驅(qū)動(dòng)器,該項(xiàng)性能指標(biāo)僅有±7V。RS-422串行接口接收器的最小輸入電阻是4KΩ;而RS-485串行接口接收器的最小輸入電阻則是12KΩ。

 

四、串口基礎(chǔ)知識(shí)

 

串口是計(jì)算機(jī)上一種非常通用設(shè)備通信的協(xié)議(不要與通用串行總線Universal Serial Bus或者USB混淆)。大多數(shù)計(jì)算機(jī)包含兩個(gè)基于RS232的串口。串口同時(shí)也是儀器儀表設(shè)備通用的通信協(xié)議;很多GPIB兼容的設(shè)備也帶有RS-232口。同時(shí),串口通信協(xié)議也可以用于獲取遠(yuǎn)程采集設(shè)備的數(shù)據(jù)。

 

串口通信的概念非常簡(jiǎn)單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時(shí)用另一根線接收數(shù)據(jù)。它很簡(jiǎn)單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。比如IEEE488定義并行通行狀態(tài)時(shí),規(guī)定設(shè)備線總常不得超過(guò)20米,并且任意兩個(gè)設(shè)備間的長(zhǎng)度不得超過(guò)2米;而對(duì)于串口而言,長(zhǎng)度可達(dá)1200米。


 

串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時(shí)在另一根線上接收數(shù)據(jù)。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對(duì)于兩個(gè)進(jìn)行通行的端口,這些參數(shù)必須匹配:

 

1、波特率

這是一個(gè)衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個(gè)數(shù)。例如300波特表示每秒鐘發(fā)送300個(gè)bit。當(dāng)我們提到時(shí)鐘周期時(shí),我們就是指波特率例如如果協(xié)議需要4800波特率,那么時(shí)鐘是4800Hz。這意味著串口通信在數(shù)據(jù)線上的采樣率為4800Hz。通常電話線的波特率為14400,28800和36600。波特率可以遠(yuǎn)遠(yuǎn)大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB設(shè)備的通信。

2、數(shù)據(jù)位

這是衡量通信中實(shí)際數(shù)據(jù)位的參數(shù)。當(dāng)計(jì)算機(jī)發(fā)送一個(gè)信息包,實(shí)際的數(shù)據(jù)不會(huì)是8位的,標(biāo)準(zhǔn)的值是5、7和8位。如何設(shè)置取決于你想傳送的信息。比如,標(biāo)準(zhǔn)的ASCII碼是0~127(7位)。擴(kuò)展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡(jiǎn)單的文本(標(biāo)準(zhǔn) ASCII碼),那么每個(gè)數(shù)據(jù)包使用7位數(shù)據(jù)。每個(gè)包是指一個(gè)字節(jié),包括開(kāi)始/停止位,數(shù)據(jù)位和奇偶校驗(yàn)位。由于實(shí)際數(shù)據(jù)位取決于通信協(xié)議的選取,術(shù)語(yǔ)“包”指任何通信的情況。

3、停止位

用于表示單個(gè)包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺(tái)設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì)。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時(shí)也越慢。4、奇偶校驗(yàn)位

在串口通信中一種簡(jiǎn)單的檢錯(cuò)方式。有四種檢錯(cuò)方式:偶、奇、高和低。當(dāng)然沒(méi)有校驗(yàn)位也是可以的。對(duì)于偶和奇校驗(yàn)的情況,串口會(huì)設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用一個(gè)值確保傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對(duì)于偶校驗(yàn),校驗(yàn)位為0,保證邏輯高的位數(shù)是偶數(shù)個(gè)。如果是奇校驗(yàn),校驗(yàn)位位1,這樣就有3個(gè)邏輯高位。高位和低位不真正的檢查數(shù)據(jù),簡(jiǎn)單置位邏輯高或者邏輯低校驗(yàn)。這樣使得接收設(shè)備能夠知道一個(gè)位的狀態(tài),有機(jī)會(huì)判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。

 

五、握手基礎(chǔ)知識(shí)

 

RS-232通行方式允許簡(jiǎn)單連接三線:Tx、Rx和地線。但是對(duì)于數(shù)據(jù)傳輸,雙方必須對(duì)數(shù)據(jù)定時(shí)采用使用相同的波特率。盡管這種方法對(duì)于大多數(shù)應(yīng)用已經(jīng)足夠,但是對(duì)于接收方過(guò)載的情況這種使用受到限制。這時(shí)需要串口的握手功能。在這一部分,我們討論三種最常用的RS-232握手形式:軟件握手、硬件握手和Xmodem。

 

1、軟件握手

我們討論的第一種握手是軟件握手。通常用在實(shí)際數(shù)據(jù)是控制字符的情況,類似于GPIB使用命令字符串的方式。必須的線仍然是三根:Tx、Rx和地線,因?yàn)榭刂谱址趥鬏斁€上和普通字符沒(méi)有區(qū)別,函數(shù)SetXModem允許用戶使能或者禁止用戶使用兩個(gè)控制字符XON和OXFF。這些字符在通信中由接收方發(fā)送,使發(fā)送方暫停。


 

例如:假設(shè)發(fā)送方以高波特率發(fā)送數(shù)據(jù)。在傳輸中,接收方發(fā)現(xiàn)由于CPU忙于其他工作,輸入buffer已經(jīng)滿了。為了暫時(shí)停止傳輸,接收方發(fā)送XOFF,典型的值是十進(jìn)制19,即十六進(jìn)制13,直到輸入buffer空了。一旦接收方準(zhǔn)備好接收,它發(fā)送XON,典型的值是十進(jìn)制17,即十六進(jìn)制11,繼續(xù)通信。輸入buffer半滿時(shí),LabWindows發(fā)送XOFF。此外,如果XOFF傳輸被打斷,LabWindows會(huì)在buffer達(dá)到75%和90%時(shí)發(fā)送XOFF。顯然,發(fā)送方必須遵循此守則以保證傳輸繼續(xù)。

 

2、硬件握手

第二種是使用硬件線握手。和Tx和Rx線一樣,RTS/CTS和DTR/DSR一起工作,一個(gè)作為輸出,另一個(gè)作為輸入。第一組線是RTS (Request to Send)和CTS(Clear to Send)。當(dāng)接收方準(zhǔn)備好接收數(shù)據(jù),它置高RTS線表示它準(zhǔn)備好了,如果發(fā)送方也就緒,它置高CTS,表示它即將發(fā)送數(shù)據(jù)。另一組線是DTR(Data Terminal Ready)和DSR(Data Set Ready)。這些現(xiàn)主要用于Modem通信。使得串口和Modem通信他們的狀態(tài)。例如:當(dāng)Modem已經(jīng)準(zhǔn)備好接收來(lái)自PC的數(shù)據(jù),它置高DTR線,表示和電話線的連接已經(jīng)建立。讀取DSR線置高,PC機(jī)開(kāi)始發(fā)送數(shù)據(jù)。一個(gè)簡(jiǎn)單的規(guī)則是DTR/DSR用于表示系統(tǒng)通信就緒,而RTS/CTS用于單個(gè)數(shù)據(jù)包的傳輸。


 

在LabWindows,函數(shù)SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下規(guī)則:當(dāng)PC發(fā)送數(shù)據(jù):RS-232庫(kù)必須檢測(cè)CTS線高后才能發(fā)送數(shù)據(jù)。當(dāng)PC接收數(shù)據(jù):如果端口打開(kāi),且輸入隊(duì)列有空接收數(shù)據(jù),庫(kù)函數(shù)置高RTS和DTR。如果輸入隊(duì)列90%滿,庫(kù)函數(shù)置低RTS,但使DTR維持高電平。如果端口隊(duì)列近乎空了,庫(kù)函數(shù)置高RTS,但使DRT維持高電平。如果端口關(guān)閉,庫(kù)函數(shù)置低RTS和DTR。

 

3、XModem握手

最后討論的握手叫做XModem文件傳輸協(xié)議。這個(gè)協(xié)議在Modem通信中非常通用。盡管它通常使用在Modem通信中,XModem協(xié)議能夠直接在其他遵循這個(gè)協(xié)議的設(shè)備通信中使用。在LabWindows中,實(shí)際的XModem應(yīng)用對(duì)用戶隱藏了。只要PC和其他設(shè)備使用XModem協(xié)議,在文件傳輸中就使用LabWindows的XModem函數(shù)。函數(shù)是XModemConfig,XModemSend和XModemReceive。


XModem使用介于如下參數(shù)的協(xié)議:start_of_data、end_of_data、neg_ack、wait_delay、 start_delay、max_tries、packet_size。這些參數(shù)需要通信雙方認(rèn)定,標(biāo)準(zhǔn)的XModem有一個(gè)標(biāo)準(zhǔn)的定義:然而,可以通過(guò) XModemConfig函數(shù)修改,以滿足具體需要。這些參數(shù)的使用方法由接收方發(fā)送的字符neg_ack確定。這通知發(fā)送方其準(zhǔn)備接收數(shù)據(jù)。它開(kāi)始嘗試發(fā)送,有一個(gè)超時(shí)參數(shù)start_delay;當(dāng)超時(shí)的嘗試超過(guò)max_ties次數(shù),或者收到接收方發(fā)送的start_of_data,發(fā)送方停止嘗試。如果從發(fā)送方收到start_of_data,接收方將讀取后繼信息數(shù)據(jù)包。包中含有包的數(shù)目、包數(shù)目的補(bǔ)碼作為錯(cuò)誤校驗(yàn)、packet_size字節(jié)大小的實(shí)際數(shù)據(jù)包,和進(jìn)一步錯(cuò)誤檢查的求和校驗(yàn)值。在讀取數(shù)據(jù)后,接收方會(huì)調(diào)用wait_delay,然后想發(fā)送方發(fā)送響應(yīng)。如果發(fā)送方?jīng)]有收到響應(yīng),它會(huì)重新發(fā)送數(shù)據(jù)包,直到收到響應(yīng)或者超過(guò)重發(fā)次數(shù)的最大值max_tries。如果一直沒(méi)有收到響應(yīng),發(fā)送方通知用戶傳輸數(shù)據(jù)失敗。

 

由于數(shù)據(jù)必須以pack_size個(gè)字節(jié)按包發(fā)送,當(dāng)最后一個(gè)數(shù)據(jù)包發(fā)送時(shí),如果數(shù)據(jù)不夠放滿一個(gè)數(shù)據(jù)包,后面會(huì)填充ASCII碼NULL(0)字節(jié)。這導(dǎo)致接收的數(shù)據(jù)比原數(shù)據(jù)多。在XModem情況下一定不要使用XON/XOFF,因?yàn)閄Modem發(fā)送方發(fā)出包的數(shù)目很可能增加到XON/OFF控制字符的值,從而導(dǎo)致通信故障。