中文 | English

探索micro:bit的奧妙:處理錯誤之重新傳輸

簡介

    在先前的文章中,讀者大概注意到無線通訊不總是那麼可靠。換句話說,不是您傳送的每則訊息,都可能被另外一端接收到。而在這一篇文章中,讀者將學習如何增加您的訊息被收到的機率。若您的訊息遺失了,該怎麼做?這篇文章將包含一個簡單但有效的方法——重新傳輸。

簡而言之,您將學習到:

  • 無線通訊的錯誤
  • 重新傳輸作為可靠的方法

因此,讀者們將會需要下列配備:

  • 兩個micro:bit
  • 一位隊友

背景

    在無線通訊中,錯誤可因幾項原因而發生。例如,也許有實體的障礙物,像是牆、門,甚至人。當無線訊號穿過這些障礙物,訊號會失去動力,有時候還會反彈!在傳送裝置和接收裝置中,有愈多障礙物,出現錯誤的機會便愈高。

    此外,如果傳送裝置和接收裝置距離太過遙遠,它們也許無法溝通。試著想像一下,在兩個人中間有許多障礙物,他們不一定總能夠聽到對方說什麼。

    無線錯誤的另一個原因,可能是廣播干擾。這是因為無線通訊是以廣播方式發出,這意指可能有許多位廣播者,而他們的訊息傳輸,在接收裝置那端可能會碰撞,導致這些廣播彼此干擾。

 

小知識:干擾

    在無線通訊中,干擾是指當訊號前往目的地裝置途中,受到任何其它裝置的破壞。

    想像一下,在一間教室中,當每個人皆同時說話,您的朋友所說一半以上的話,您會漏掉。您朋友的聲音訊號在前往您的途中,受到其他聲音訊號的干擾。而在網路中,這樣的現象被稱之為「丟包」。

 

小知識:丟包

    當一個或多個在電腦網路中間穿梭的資料包,無法抵達它們的目的地裝置,便產生了丟包的狀況。丟包以資料包遺失和送達的比例進行計算,請見下面的公式:

丟包=資料包遺失/資料包送達

    此外,如果有太多干擾,您可能收到不正確的訊息!例如,您可能聽到「Bat」,但其實您的朋友喊的是「Cat」。在網路中,這是一項資料包錯誤,而資料包錯誤以資料包錯誤率計算。

 

小知識:資料包錯誤率

    資料包錯誤率是指,被收到的資料包有一項或多項錯誤,以及資料包正確送達的比率。公式如下:

資料包錯誤率=有錯誤的資料包/正確送達的資料包

    本篇文章中,我們將涵蓋一項簡單的方法處理這些錯誤,亦即重新傳輸。重新傳輸是指,傳送裝置自動多次重新傳輸訊息,以增加正確接收的機率。

    下面的圖表中,讓我們假設傳送裝置知道通訊媒介會失去一半的資料包。亦即,丟包率是0.5或50%。作為傳送裝置的micro:bit,決定傳送每一個資料包兩次,以增加訊息傳送至目的地的機率。第一個資料包亦即所謂的傳輸,而第二個資料包便是重新傳輸了。所以,重新傳輸的次數為1。

 

    使用「重新傳輸」結合另一個方法是很常見的。例如,當傳送裝置確定有錯誤,它們才會進行重新傳輸。我們將於下一篇文章詳細解釋。

 

寫程式囉:重新傳輸

    這項活動最好與隊友一起進行,讀者將在任務1中創造出資料包錯誤,然後在任務2中,測試不同的資料包錯誤率。而在任務3中,您將為重新傳輸的解決方案撰寫程式,以處理這些錯誤。在這項任務中,您也將會運作一系列的實驗,以計算重新傳輸進行的效果好不好。

 

任務1:創造資料包錯誤

描述:在無線通訊中,資料包可能隨機地出現錯誤,而這樣的情況可能使測試您針對本篇文章而撰寫的程式碼變得困難。為要測試錯誤,您將使用在JavaScript程式積木編輯器中,使用客製化的程式積木,以傳送含有錯誤的訊息。

    「錯誤廣播函式」(ErrorRadio Blocks)就如同「廣播函式」,但擁有額外的錯誤參數。這項參數的預設值是20,意指資料包錯誤率是0.2或20%。

 

指引:

    為在JavaScript程式積木編輯器中,使用客製化積木,請從資料夾中匯入ErrorRadio.hex的檔案。與您的隊友一起決定,誰的micro:bit作為傳送裝置,而誰的micro:bit又作為接收裝置。請按照《單播通訊:一對一》中的方式,將傳送裝置和接收裝置的位址,寫入資料包中。您可以拷貝並改寫其中一個程式,這個程式是您在《單播通訊:一對一》中撰寫過的,以使用「錯誤廣播函式」(ErrorRadio Blocks)

    請撰寫一個小型的傳送程式,傳送一個數字且包含一項錯誤。然後,下載它至傳送裝置micro:bit中;同時,請撰寫一個小型的接收程式以接受數字,並且於micro:bit上的螢幕顯示出來。將程式下載至接收裝置的micro:bit中。

    請使用這些錯誤值0、50及100,改變資料包錯誤率,並藉由觀察接收裝置micro:bit的於螢幕上的顯示,測試封包錯誤。

 

任務2:傳送一連串的訊息

描述:在這個段落中,讀者將傳送一連串訊息至接收裝置micro:bit。

 

指引:延伸您在任務1中所撰寫的程式,以傳送下面這個序列:

Start 1 2 3 4 5 6 7 8 9 10 End

    您可以運用正常的廣播程式積木,以傳送「Start」和「End」,好使傳送他們不會產生錯誤。但請記得,您的micro:bit廣播功能可能掉落訊息,所以,即便是傳送「Start」和「End」也可能有錯誤,畢竟,沒有完美的廣播功能!

    接下來,請您延伸剛才所撰寫的接收程式,以計數所接收到訊息序列中的數字。請實驗性地設定錯誤參數為25、50、75,然後,使用丟包方程式,計算丟包率。接著,請每一項錯誤參數實驗皆重複三次,並根據您實驗的結果,填寫下面的表格。例如,在實驗1中,當錯誤參數設定為25時,如果您收到下面這個序列:

Start 1 5 6 7 8 9 10 End

    這意味著,您收到7個資料包而丟包了3個,所以,丟包率是0.3%。表格的第一行,請根據上面的範例填寫。然後,從您自己的實驗中,加入自己設定的錯誤參數,並根據您的實驗結果,與您的隊友討論,當您改變了錯誤參數的數值,實驗結果如何改變。

錯誤參數數值(Error value) 實驗編號 (Experiment no.) 收到的資料包 (Packet received) 丟包率 (Packet loss)
25 範例 7 0.3
25 1    
25 2    
25 3    
50 1    
50 2    
50 3    
75 1    
75 2    
75 3    

表一

 

任務3:預設重新傳輸

描述:在這項任務中,讀者將於傳送裝置這端,撰寫自動重新傳輸的程式。

 

指引:改變任務2中的傳送裝置的程式碼,以不只一次傳送序列中的每一個數字。試試看您的程式碼,請設定錯誤率為75。舉例而言,藉由設定重新傳輸數字至1,您將送出下列序列:

Start 1122334455667788991010 End

    這意味著,傳送裝置總共送出20個資料包,包括10個重新傳輸的資料包。

    改寫您的接收裝置程式碼,以計數收到不重覆的數字,也同時計數重覆的數字,並計算丟包率。例如,讓我們假設重新傳輸數字至1,接收裝置收到:

Start 112355689910 End

    這意味著,接收裝置收到8個不重覆的數字(1、2、3、5、6、8、9、10),以及3個重覆的數字(1、5、9)。請注意,丟包率為9/20(45%),但運用了重新傳輸,接收裝置只沒有收到4、7兩個數字。因此,讓我們稱這樣改善過後的丟包率為「資訊損失」。所以,運用了重新傳輸的資訊損失率為0.2。下面表格中的第一行,便根據這個範例填寫。

    運作每一項實驗三次,運用不同的重新傳輸數值,並填寫其餘的表格。

重新傳輸(Retransmissions) 實驗(Experiment) 收到不重覆的資料包(Unique Packets Received) 重覆的資料包(Duplicats) 資料包損失率(Packet loss) 資訊損失率(Information loss)
1 (example) 8 3 0.45 0.2
1 1        
1 2        
1 3        
3 1        
3 2        
3 3        
5 1        
5 2        
5 3        

表二

 

(特別感謝作者Cigdem Sengul與Anthony Kirby,以開放授權方式讓我們翻譯,特此致謝。本文僅為針對重點摘譯,若想進一步閱讀原文,請見。)

Tags Micro:bit

分享到社群