版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-流控制

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

數(shù)據(jù)在傳輸過(guò)程中容易出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象,例如:兩臺(tái)計(jì)算機(jī)通過(guò)串口傳輸數(shù)據(jù)時(shí),或者臺(tái)式機(jī)與單片機(jī)之間進(jìn)行通信時(shí),可能由于兩端計(jì)算機(jī)的處理速度不同,出現(xiàn)接收端的數(shù)據(jù)緩沖區(qū)已滿,而發(fā)送端依然繼續(xù)發(fā)送數(shù)據(jù),則導(dǎo)致數(shù)據(jù)丟失。流控制的出現(xiàn)就是為了解決這種數(shù)據(jù)丟失的問(wèn)題。

簡(jiǎn)介這里講到的“流”,當(dāng)然指的是數(shù)據(jù)流。數(shù)據(jù)在兩個(gè)串口之間傳輸時(shí),常常會(huì)出現(xiàn)丟失數(shù)據(jù)的現(xiàn)象,或者兩臺(tái)計(jì)算機(jī)的處理速度不同,如臺(tái)式機(jī)與單片機(jī)之間的通訊,接收端數(shù)據(jù)緩沖區(qū)已滿,則此時(shí)繼續(xù)發(fā)送來(lái)的數(shù)據(jù)就會(huì)丟失。我們?cè)诰W(wǎng)絡(luò)上通過(guò)modem進(jìn)行數(shù)據(jù)傳輸,這個(gè)問(wèn)題就尤為突出。流控制能解決這個(gè)問(wèn)題,當(dāng)接收端數(shù)據(jù)處理不過(guò)來(lái)時(shí),就發(fā)出“不再接收”的信號(hào),發(fā)送端就停止發(fā)送,直到收到“可以繼續(xù)發(fā)送”的信號(hào)再發(fā)送數(shù)據(jù)。因此流控制可以控制數(shù)據(jù)傳輸?shù)倪M(jìn)程,防止數(shù)據(jù)的丟失。 pc機(jī)中常用的兩種流控制是硬件流控制(包括rts/cts、dtr/cts等)和軟件流控制xon/xoff(繼續(xù)/停止)。1

工作原理當(dāng)接收端的數(shù)據(jù)緩沖區(qū)已滿,無(wú)法處理數(shù)據(jù)來(lái)時(shí),就發(fā)出"不再接收"的信號(hào),發(fā)送端則停止發(fā)送,直到發(fā)送端收到"可以繼續(xù)發(fā)送"的信號(hào)再發(fā)送數(shù)據(jù)。計(jì)算機(jī)中常用的兩種流控制分別是硬件流控制(RTS/CTS、DTR/DSR等)和軟件流控制(XON/XOFF)。

硬件流控制硬件流控制必須將相應(yīng)的電纜線連上。硬件流控制常用方式為:RTS/CTS(請(qǐng)求發(fā)送/清除發(fā)送)流控制和DTR/DSR(數(shù)據(jù)終端就緒/數(shù)據(jù)設(shè)置就緒)流控制。

當(dāng)用RTS/CTS流控制時(shí),需將通訊兩端的RTS、CTS線對(duì)應(yīng)相連,數(shù)據(jù)終端設(shè)備(如計(jì)算機(jī))使用RTS來(lái)啟動(dòng)調(diào)制解調(diào)器或其它數(shù)據(jù)通訊設(shè)備的數(shù)據(jù)流,而數(shù)據(jù)通訊設(shè)備(如調(diào)制解調(diào)器)則用CTS來(lái)啟動(dòng)和暫停來(lái)自計(jì)算機(jī)的數(shù)據(jù)流。這種硬件握手方式的過(guò)程為:通過(guò)程序?yàn)榻邮斩司彌_區(qū)大小設(shè)置一個(gè)高位標(biāo)志(可為緩沖區(qū)大小的75%)和一個(gè)低位標(biāo)志(可為緩沖區(qū)大小的25%),當(dāng)緩沖區(qū)內(nèi)數(shù)據(jù)量達(dá)到高位時(shí),接收端將CTS線置低電平(送邏輯0),當(dāng)發(fā)送端的程序檢測(cè)到CTS為低后,就停止發(fā)送數(shù)據(jù),直到接收端緩沖區(qū)的數(shù)據(jù)量低于低位而將CTS置高電平。RTS則用來(lái)標(biāo)明接收設(shè)備有沒(méi)有準(zhǔn)備好接收數(shù)據(jù)。

DTR/DSR流控制的工作方式與RTS/CTS流控制類(lèi)似,不再進(jìn)行贅述。2

軟件流控制由于電纜線的限制,普通的控制通訊中一般不用硬件流控制,而使用軟件流控制。軟件流控制常通過(guò)XON/XOFF來(lái)實(shí)現(xiàn)。這種軟件握手方式的過(guò)程為:當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量超過(guò)設(shè)定的高位時(shí),就向數(shù)據(jù)發(fā)送端發(fā)出XOFF字符(十進(jìn)制的19或Control-S,設(shè)備編程說(shuō)明書(shū)會(huì)有詳細(xì)闡述),發(fā)送端收到XOFF字符后就立即停止發(fā)送數(shù)據(jù);當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量低于設(shè)定的低位時(shí),就向數(shù)據(jù)發(fā)送端發(fā)出XON字符(十進(jìn)制的17或Control-Q),發(fā)送端收到XON字符后就立即開(kāi)始發(fā)送數(shù)據(jù)。一般可以從設(shè)備配套源程序中找到發(fā)送的字符是什么。

兩種控制方式的比較當(dāng)通過(guò)軟件流控制方式傳輸二進(jìn)制數(shù)據(jù)時(shí),標(biāo)志字符也有可能在數(shù)據(jù)流中出現(xiàn)而引起誤操作,這是軟件流控制的缺陷,而硬件流控制不會(huì)有這個(gè)問(wèn)題。

本詞條內(nèi)容貢獻(xiàn)者為:

肖志勇 - 副教授 - 江南大學(xué)