曹劍馨
(陜西國際商貿學院 信息工程學院,陜西 咸陽 712046)
近年來,工業控制網絡隨著微電子技術、計算機技術以及通信技術的快速發展也不斷向前發展,從計算機集成控制系統CCS發展到基于模擬信號傳輸的集散控制系統(DCS),再到數字化、智能化、全分散的現場總線控制系統FCS,最后到工業以太網等等。工業控制網絡[1]作為一種特定應用的網絡,相比較商業信息網絡,具有其自身的要求和特點,其中非常重要的一點就是實時性要求高,不僅要求傳輸速度快,還要求響應快。
在CAN總線[2-3]通信系統中,其固有的仲裁機制會導致優先級低的幀自動退出發送,只能等待總線再次空閑的時候,再去競爭總線。對于優先級低的報文,只有在負載率較小時,才能競爭到總線訪問權,從而獲得被發送的機會;但是在負載率較大的情況下,就會出現總線只發送高優先級信息,而低優先級信息得不到發送,被長時間延時甚至造成信息丟失的現象,因此影響到整個網絡的實時性能[4-7]。
針對這一問題,提出了一種基于EDF動態優先級調度算法的實現方法,以改善CAN總線系統信息調度的靈活性。
CAN總線的媒體訪問方式為載波監聽多路訪問/沖突檢測機制CSMA/CD[8-9],CSMA/CD是Carrier Sense Multiple Access/Collision Detect的縮寫。
這種控制方式不會對任何工作站預約發送時間,而是采用爭用技術,即工作站的發送是隨機的,必須在網絡上爭用傳輸介質。當同一時刻有多個工作站向傳輸線路發送數據時,為避免這些信息在傳輸線上相互混淆從而遭破壞的情況出現,每個工作站在發送信息之前,必須要監聽傳輸線上是否有信息在發送,以達到盡量避免由于這種競爭而引起的沖突。
一個工作站在發送數據前,需要先進行總線的監聽,以判斷總線上是否有其他工作站正在發送數據。如果判定總線此時是空閑狀態,則可以進行數據的發送。反之,等待一定時間間隔后重試。
當存在多個節點同時訪問總線需要發送數據時,對于這種沖突的處理,CAN總線采用非破壞性逐位仲裁技術[10-12],會停止低優先級數據幀的發送,而確保高優先級的數據幀可以繼續發送。
最早截止期優先調度算法EDF[13-15]是Earliest Deadline First的縮寫,屬于動態優先級調度算法中很重要的一種調度理論。
任務的優先級依據任務距離截止期限動態進行分配。任務的截止期限越早,優先級越高;反之,優先級越低。
任務優先級分配計算式定義為di(t)-t。其中,di(t)代表t時刻的任務截止期,由此式決定下一時刻應該調度哪個任務。
在EDF調度算法中,消息的優先級不再是靜態固定的,而是在每個時刻,都要計算下個時刻系統中任務的相對截止期來進行優先級的分配,并且系統下一時刻的調度任務具有不確定性,與系統中其他任務有關聯,這就使得系統具有較好的適應性。
在MATLAB/Simulink軟件的Stateflow仿真環境中搭建10節點的CAN總線通信系統仿真平臺。母版模型中包含2個部分,分別為節點模型塊與總線模型塊。節點模型塊個數為10個,總線模型塊個數為1個,且所有模塊為并行關系。
引入EDF動態優先級調度算法的仿真模型較沒有引入之前的模型最大的變化在于節點模型塊中的“send”模塊,對其分別增加了“pri”狀態與“resent”狀態以及一些狀態遷移線。改進后的節點模型塊如圖1所示。

圖1 改進后的節點模塊
此節點模型塊包括“send”“buffer”“period_data_put”3部分。其中,“period_data_put”用于對simulink輸入的數據進行采集,總線系統負載率的大小就是通過改變此處的數據采集周期來調整的;在“datain”中,采集的數據被組裝數據幀,這里組裝為CAN標準短幀的形式;“buffer”代表節點的緩沖器,數據幀的組裝完成后,開始由“null”轉換到“nonull”,當數據發送完成后,再返回“null”狀態,等待下一次觸發?!皊end”代表節點發送部分,當總線上有數據等待傳輸時,觸發由“sleep”到“wait”的轉換,“pri”負責完成系統中報文優先級的分配,當本節點通過總線仲裁獲得發送權限時,狀態由“pri”轉換到“transmission”,實現數據的發送;如果判定某報文的截止期小于0,則觸發由“pri”到“resent”的轉換,重新發送數據;當數據幀傳送完畢后,由“transmission”轉換到“sleep”,等待下次數據發送。
改進后的總線模塊如圖2所示。

圖2 改進后的總線模塊
此總線模塊中也包括3個狀態:“idel”“busy”“space”。總線最初處于“idel”狀態,代表沒有數據發送的空閑狀態,當有信息需要發送時,開始對待發節點的優先級進行仲裁,仲裁結果做為由“idel”轉換到“busy”的觸發條件;“busy”代表數據處于發送狀態,當數據發送完畢后,通過“return”事件觸發由“busy”到“space”的轉換;經過一個“space(幀間隔)”后,回到“idel”狀態,代表總線空閑狀態,等待下一次傳輸。
本文的仿真中進行了以下設定:傳輸速率為200 Kbit/s,總運行時間為0.25 s,每幀報文的數據長度為100 bit;同時,在沒有引入EDF算法對總線系統進行改進前,假設了各節點的優先級為:節點1信息優先級>節點2信息優先級> …>節點10信息優先級。
選擇10個節點中數據更具代表性的4個節點(節點1、節點7、節點9、節點10)進行研究,分別對4個節點在不同負載率下的數據發送成功率進行分析,引入EDF算法前的仿真結果如圖3所示。引入EDF算法后的仿真結果如圖4所示。

圖3 改進前的總線模型仿真結果

圖4 改進后的總線模型仿真結果
由圖3可以看出,隨著負載率的逐漸增大,節點1的信息幾乎都能得到發送,甚至在負載率為110%時,也能達到接近于100%的發送成功率。但是,其他節點由于優先級較低,會隨著負載率的增長(尤其負載率達到70%以上時)會出現數據發送成功率急速下降的現象,節點9、節點10表現的尤為明顯,這就會導致大量數據不能及時得到發送甚至數據丟失,總線系統的通信實時性能受到嚴重影響。
由圖4可以看出,隨著負載率的增加,各節點的數據發送成功率依然總體呈現下降趨勢,但是這種趨勢較之前明顯更加平緩。與圖3中的數據相比較,每個節點在不同負載率下的數據發送成功率基本都有提高,尤其從節點10來看,在負載率為110%時,其數據發送成功率為49%,與圖3中的35%相比較,有顯著提高,證明總線系統的通信實時性能得到改善。
本文針對基于靜態優先級調度算法的CAN總線系統存在的缺陷,提出了基于EDF動態優先級調度算法的CAN總線通信系統改進方法,并使用MATLAB的Stateflow工具箱搭建仿真平臺,仿真結果證實使用動態優先級調度算法EDF對CAN總線通信系統進行改進,有效提高了總線上數據發送的成功率,尤其是高負載下各節點數據發送的成功率,改善了多報文傳輸時的實時性問題。