曹劍馨
(陜西國際商貿(mào)學(xué)院 信息工程學(xué)院,陜西 咸陽 712046)
近年來,工業(yè)控制網(wǎng)絡(luò)隨著微電子技術(shù)、計算機技術(shù)以及通信技術(shù)的快速發(fā)展也不斷向前發(fā)展,從計算機集成控制系統(tǒng)CCS發(fā)展到基于模擬信號傳輸?shù)募⒖刂葡到y(tǒng)(DCS),再到數(shù)字化、智能化、全分散的現(xiàn)場總線控制系統(tǒng)FCS,最后到工業(yè)以太網(wǎng)等等。工業(yè)控制網(wǎng)絡(luò)[1]作為一種特定應(yīng)用的網(wǎng)絡(luò),相比較商業(yè)信息網(wǎng)絡(luò),具有其自身的要求和特點,其中非常重要的一點就是實時性要求高,不僅要求傳輸速度快,還要求響應(yīng)快。
在CAN總線[2-3]通信系統(tǒng)中,其固有的仲裁機制會導(dǎo)致優(yōu)先級低的幀自動退出發(fā)送,只能等待總線再次空閑的時候,再去競爭總線。對于優(yōu)先級低的報文,只有在負(fù)載率較小時,才能競爭到總線訪問權(quán),從而獲得被發(fā)送的機會;但是在負(fù)載率較大的情況下,就會出現(xiàn)總線只發(fā)送高優(yōu)先級信息,而低優(yōu)先級信息得不到發(fā)送,被長時間延時甚至造成信息丟失的現(xiàn)象,因此影響到整個網(wǎng)絡(luò)的實時性能[4-7]。
針對這一問題,提出了一種基于EDF動態(tài)優(yōu)先級調(diào)度算法的實現(xiàn)方法,以改善CAN總線系統(tǒng)信息調(diào)度的靈活性。
CAN總線的媒體訪問方式為載波監(jiān)聽多路訪問/沖突檢測機制CSMA/CD[8-9],CSMA/CD是Carrier Sense Multiple Access/Collision Detect的縮寫。
這種控制方式不會對任何工作站預(yù)約發(fā)送時間,而是采用爭用技術(shù),即工作站的發(fā)送是隨機的,必須在網(wǎng)絡(luò)上爭用傳輸介質(zhì)。當(dāng)同一時刻有多個工作站向傳輸線路發(fā)送數(shù)據(jù)時,為避免這些信息在傳輸線上相互混淆從而遭破壞的情況出現(xiàn),每個工作站在發(fā)送信息之前,必須要監(jiān)聽傳輸線上是否有信息在發(fā)送,以達(dá)到盡量避免由于這種競爭而引起的沖突。
一個工作站在發(fā)送數(shù)據(jù)前,需要先進(jìn)行總線的監(jiān)聽,以判斷總線上是否有其他工作站正在發(fā)送數(shù)據(jù)。如果判定總線此時是空閑狀態(tài),則可以進(jìn)行數(shù)據(jù)的發(fā)送。反之,等待一定時間間隔后重試。
當(dāng)存在多個節(jié)點同時訪問總線需要發(fā)送數(shù)據(jù)時,對于這種沖突的處理,CAN總線采用非破壞性逐位仲裁技術(shù)[10-12],會停止低優(yōu)先級數(shù)據(jù)幀的發(fā)送,而確保高優(yōu)先級的數(shù)據(jù)幀可以繼續(xù)發(fā)送。
最早截止期優(yōu)先調(diào)度算法EDF[13-15]是Earliest Deadline First的縮寫,屬于動態(tài)優(yōu)先級調(diào)度算法中很重要的一種調(diào)度理論。
任務(wù)的優(yōu)先級依據(jù)任務(wù)距離截止期限動態(tài)進(jìn)行分配。任務(wù)的截止期限越早,優(yōu)先級越高;反之,優(yōu)先級越低。
任務(wù)優(yōu)先級分配計算式定義為di(t)-t。其中,di(t)代表t時刻的任務(wù)截止期,由此式?jīng)Q定下一時刻應(yīng)該調(diào)度哪個任務(wù)。
在EDF調(diào)度算法中,消息的優(yōu)先級不再是靜態(tài)固定的,而是在每個時刻,都要計算下個時刻系統(tǒng)中任務(wù)的相對截止期來進(jìn)行優(yōu)先級的分配,并且系統(tǒng)下一時刻的調(diào)度任務(wù)具有不確定性,與系統(tǒng)中其他任務(wù)有關(guān)聯(lián),這就使得系統(tǒng)具有較好的適應(yīng)性。
在MATLAB/Simulink軟件的Stateflow仿真環(huán)境中搭建10節(jié)點的CAN總線通信系統(tǒng)仿真平臺。母版模型中包含2個部分,分別為節(jié)點模型塊與總線模型塊。節(jié)點模型塊個數(shù)為10個,總線模型塊個數(shù)為1個,且所有模塊為并行關(guān)系。
引入EDF動態(tài)優(yōu)先級調(diào)度算法的仿真模型較沒有引入之前的模型最大的變化在于節(jié)點模型塊中的“send”模塊,對其分別增加了“pri”狀態(tài)與“resent”狀態(tài)以及一些狀態(tài)遷移線。改進(jìn)后的節(jié)點模型塊如圖1所示。
圖1 改進(jìn)后的節(jié)點模塊
此節(jié)點模型塊包括“send”“buffer”“period_data_put”3部分。其中,“period_data_put”用于對simulink輸入的數(shù)據(jù)進(jìn)行采集,總線系統(tǒng)負(fù)載率的大小就是通過改變此處的數(shù)據(jù)采集周期來調(diào)整的;在“datain”中,采集的數(shù)據(jù)被組裝數(shù)據(jù)幀,這里組裝為CAN標(biāo)準(zhǔn)短幀的形式;“buffer”代表節(jié)點的緩沖器,數(shù)據(jù)幀的組裝完成后,開始由“null”轉(zhuǎn)換到“nonull”,當(dāng)數(shù)據(jù)發(fā)送完成后,再返回“null”狀態(tài),等待下一次觸發(fā)?!皊end”代表節(jié)點發(fā)送部分,當(dāng)總線上有數(shù)據(jù)等待傳輸時,觸發(fā)由“sleep”到“wait”的轉(zhuǎn)換,“pri”負(fù)責(zé)完成系統(tǒng)中報文優(yōu)先級的分配,當(dāng)本節(jié)點通過總線仲裁獲得發(fā)送權(quán)限時,狀態(tài)由“pri”轉(zhuǎn)換到“transmission”,實現(xiàn)數(shù)據(jù)的發(fā)送;如果判定某報文的截止期小于0,則觸發(fā)由“pri”到“resent”的轉(zhuǎn)換,重新發(fā)送數(shù)據(jù);當(dāng)數(shù)據(jù)幀傳送完畢后,由“transmission”轉(zhuǎn)換到“sleep”,等待下次數(shù)據(jù)發(fā)送。
改進(jìn)后的總線模塊如圖2所示。
圖2 改進(jìn)后的總線模塊
此總線模塊中也包括3個狀態(tài):“idel”“busy”“space”??偩€最初處于“idel”狀態(tài),代表沒有數(shù)據(jù)發(fā)送的空閑狀態(tài),當(dāng)有信息需要發(fā)送時,開始對待發(fā)節(jié)點的優(yōu)先級進(jìn)行仲裁,仲裁結(jié)果做為由“idel”轉(zhuǎn)換到“busy”的觸發(fā)條件;“busy”代表數(shù)據(jù)處于發(fā)送狀態(tài),當(dāng)數(shù)據(jù)發(fā)送完畢后,通過“return”事件觸發(fā)由“busy”到“space”的轉(zhuǎn)換;經(jīng)過一個“space(幀間隔)”后,回到“idel”狀態(tài),代表總線空閑狀態(tài),等待下一次傳輸。
本文的仿真中進(jìn)行了以下設(shè)定:傳輸速率為200 Kbit/s,總運行時間為0.25 s,每幀報文的數(shù)據(jù)長度為100 bit;同時,在沒有引入EDF算法對總線系統(tǒng)進(jìn)行改進(jìn)前,假設(shè)了各節(jié)點的優(yōu)先級為:節(jié)點1信息優(yōu)先級>節(jié)點2信息優(yōu)先級> …>節(jié)點10信息優(yōu)先級。
選擇10個節(jié)點中數(shù)據(jù)更具代表性的4個節(jié)點(節(jié)點1、節(jié)點7、節(jié)點9、節(jié)點10)進(jìn)行研究,分別對4個節(jié)點在不同負(fù)載率下的數(shù)據(jù)發(fā)送成功率進(jìn)行分析,引入EDF算法前的仿真結(jié)果如圖3所示。引入EDF算法后的仿真結(jié)果如圖4所示。
圖3 改進(jìn)前的總線模型仿真結(jié)果
圖4 改進(jìn)后的總線模型仿真結(jié)果
由圖3可以看出,隨著負(fù)載率的逐漸增大,節(jié)點1的信息幾乎都能得到發(fā)送,甚至在負(fù)載率為110%時,也能達(dá)到接近于100%的發(fā)送成功率。但是,其他節(jié)點由于優(yōu)先級較低,會隨著負(fù)載率的增長(尤其負(fù)載率達(dá)到70%以上時)會出現(xiàn)數(shù)據(jù)發(fā)送成功率急速下降的現(xiàn)象,節(jié)點9、節(jié)點10表現(xiàn)的尤為明顯,這就會導(dǎo)致大量數(shù)據(jù)不能及時得到發(fā)送甚至數(shù)據(jù)丟失,總線系統(tǒng)的通信實時性能受到嚴(yán)重影響。
由圖4可以看出,隨著負(fù)載率的增加,各節(jié)點的數(shù)據(jù)發(fā)送成功率依然總體呈現(xiàn)下降趨勢,但是這種趨勢較之前明顯更加平緩。與圖3中的數(shù)據(jù)相比較,每個節(jié)點在不同負(fù)載率下的數(shù)據(jù)發(fā)送成功率基本都有提高,尤其從節(jié)點10來看,在負(fù)載率為110%時,其數(shù)據(jù)發(fā)送成功率為49%,與圖3中的35%相比較,有顯著提高,證明總線系統(tǒng)的通信實時性能得到改善。
本文針對基于靜態(tài)優(yōu)先級調(diào)度算法的CAN總線系統(tǒng)存在的缺陷,提出了基于EDF動態(tài)優(yōu)先級調(diào)度算法的CAN總線通信系統(tǒng)改進(jìn)方法,并使用MATLAB的Stateflow工具箱搭建仿真平臺,仿真結(jié)果證實使用動態(tài)優(yōu)先級調(diào)度算法EDF對CAN總線通信系統(tǒng)進(jìn)行改進(jìn),有效提高了總線上數(shù)據(jù)發(fā)送的成功率,尤其是高負(fù)載下各節(jié)點數(shù)據(jù)發(fā)送的成功率,改善了多報文傳輸時的實時性問題。