現(xiàn)場(chǎng)總線CAN 在監(jiān)控系統(tǒng)網(wǎng)絡(luò)中通信協(xié)議設(shè)計(jì)
3.2 控制網(wǎng)絡(luò)協(xié)議:
控制網(wǎng)絡(luò)中產(chǎn)生的控制命令一般是猝發(fā)式的,對(duì)于控制系統(tǒng)而言必須確??刂泼畋患皶r(shí)并且成功的發(fā)送,控制網(wǎng)絡(luò)報(bào)文標(biāo)識(shí)符定義如下表所示:
CAN 總線中非破壞性總線仲裁技術(shù),是從協(xié)議幀標(biāo)識(shí)符的最高位開(kāi)始,即BIT.28 逐位比較下去,當(dāng)出現(xiàn)參加仲裁的雙方在某一位第一次出現(xiàn)顯隱性不同時(shí),為顯性位的那個(gè)協(xié)議幀贏得仲裁。根據(jù)CAN 總線的這一特性,即標(biāo)識(shí)符值越小發(fā)送優(yōu)先級(jí)越高,根據(jù)系統(tǒng)總線流程以及控制網(wǎng)絡(luò)中各網(wǎng)絡(luò)節(jié)點(diǎn)優(yōu)先級(jí)的高低從小到大設(shè)置各個(gè)模塊的網(wǎng)絡(luò)節(jié)點(diǎn)號(hào),如表3 所示:
當(dāng)控制網(wǎng)絡(luò)數(shù)據(jù)發(fā)送頻繁時(shí),可能導(dǎo)致部分控制命令幀由于標(biāo)識(shí)符優(yōu)先級(jí)的原因而丟失SJA1000 控制器的仲裁,雖然SJA1000 具有丟失仲裁后的自動(dòng)重新發(fā)送該報(bào)文的功能,但該控制命令幀仍然存在發(fā)送失敗的可能性,最終導(dǎo)致控制功能的失效。CAN 協(xié)議幀優(yōu)先晉升方案能夠大大降低上述情況發(fā)生的可能性,為實(shí)現(xiàn)控制命令幀發(fā)送時(shí)在丟失仲裁后重發(fā)的優(yōu)先級(jí)晉升,則必須禁止MAC 子層的自動(dòng)重發(fā)功能,由應(yīng)用層來(lái)實(shí)現(xiàn)報(bào)文的重發(fā)。該系統(tǒng)采用Philips 公司的SJA1000 作為CAN 網(wǎng)絡(luò)控制器,可以通過(guò)在報(bào)文發(fā)送時(shí)設(shè)置其命令寄存器的第0、1 位禁止其自動(dòng)重發(fā)功能,改為單次發(fā)送。
起動(dòng)發(fā)送報(bào)文之后,MCU 須判斷該網(wǎng)絡(luò)節(jié)點(diǎn)是否已經(jīng)成功發(fā)送了一條報(bào)文或者報(bào)文發(fā)送失?。菏紫龋?dāng)SJA1000 中斷寄存器出現(xiàn)了仲裁丟失中斷或者發(fā)送中斷,表明該節(jié)點(diǎn)已經(jīng)處理完了一條報(bào)文,但是仍然不知道是否發(fā)送成功。如果成功,中斷寄存器就沒(méi)有仲裁丟失中斷,但是會(huì)產(chǎn)生發(fā)送中斷,因?yàn)榘l(fā)送成功后發(fā)送緩沖區(qū)會(huì)釋放。如果發(fā)送不成功,一定是與較高優(yōu)先級(jí)的協(xié)議幀競(jìng)爭(zhēng)的結(jié)果,所以會(huì)有仲裁丟失中斷。但是改為單次發(fā)送后,發(fā)送失敗以后也會(huì)釋放緩沖區(qū),因此將同時(shí)產(chǎn)生仲裁丟失中斷以及發(fā)送中斷。在得到節(jié)點(diǎn)已經(jīng)處理完一條報(bào)文后,只要用以上的規(guī)則進(jìn)行判斷就能知道上一條報(bào)文是否發(fā)送成功,也就是用來(lái)判斷是否需要晉升節(jié)點(diǎn)所發(fā)送信息幀的優(yōu)先級(jí)并重發(fā)該幀。
控制網(wǎng)絡(luò)的標(biāo)識(shí)符劃分為三個(gè)部分,其中標(biāo)識(shí)符的第 21 至28 位用于協(xié)議幀優(yōu)先晉升,這部分標(biāo)識(shí)僅表示協(xié)議幀的優(yōu)先級(jí),它由調(diào)度機(jī)制分配給協(xié)議幀的優(yōu)先級(jí)的變化而變化,設(shè)Pi=(2n-1)-kt,Pi 項(xiàng)為當(dāng)前控制命令協(xié)議幀的優(yōu)先級(jí),(2n-1)代表其優(yōu)先級(jí)隊(duì)列的初始值,即為隊(duì)尾;n 為優(yōu)先級(jí)隊(duì)列的二進(jìn)制數(shù),BIT28:21 共有8 位數(shù),所以這一項(xiàng)數(shù)值為0FFH。kt表示優(yōu)先級(jí)晉升項(xiàng),t 為首次發(fā)送以來(lái)協(xié)議幀丟失仲裁的次數(shù),k 為晉升權(quán)重,k 取值越大協(xié)議幀優(yōu)先晉升速度就越快(該系統(tǒng)中取k=1)。由此可見(jiàn),當(dāng)某協(xié)議幀第一次發(fā)送時(shí),Pi=0FFH,當(dāng)它在發(fā)送時(shí)與其他協(xié)議幀碰撞并失去仲裁時(shí),退出發(fā)送并且置Pi=0FEH 重新發(fā)送,因?yàn)榇藭r(shí)其優(yōu)先級(jí)高于其他協(xié)議幀,在整個(gè)網(wǎng)絡(luò)中如果沒(méi)有其他和它具有相同優(yōu)先級(jí)的協(xié)議幀同時(shí)發(fā)送時(shí),即使與其他第一次發(fā)送的協(xié)議幀碰撞,也會(huì)贏得仲裁,所以增大了該幀發(fā)送成功的概率。下圖為報(bào)文優(yōu)先級(jí)晉升控制流程:
圖 2 報(bào)文優(yōu)先級(jí)晉升控制流程
除此之外,系統(tǒng)具有控制參數(shù)在線修改的功能(如修改系統(tǒng)參數(shù))。參數(shù)修改命令由上位機(jī)發(fā)出修改幀,能量管理控制器接收后進(jìn)行操作執(zhí)行。當(dāng)進(jìn)行在線控制參數(shù)修改時(shí),能量管理控制器將發(fā)出廣播消息通知控制網(wǎng)絡(luò)所有節(jié)點(diǎn)禁止所有控制動(dòng)作的輸出,以防止意外情況的發(fā)生。
在進(jìn)行參數(shù)的下載修改過(guò)程中,為避免修改幀發(fā)送失敗或丟失,從而導(dǎo)致系統(tǒng)參數(shù)混亂,甚至導(dǎo)致系統(tǒng)癱瘓的情況發(fā)生,使用幀標(biāo)識(shí)符的第11、12 位表征修改幀的結(jié)構(gòu)類型:?jiǎn)螏?、非結(jié)束多幀和結(jié)束多幀。當(dāng)待修改的參數(shù)數(shù)量較少,單個(gè)協(xié)議幀能夠包含所有修改信息時(shí),能量管理控制器接收到來(lái)自上位機(jī)的修改幀,并判斷該修改幀為單幀標(biāo)識(shí)后,則立即進(jìn)行參數(shù)存儲(chǔ)空間的修改;若待修改的參數(shù)較多,單個(gè)協(xié)議幀無(wú)法包括所有待修改數(shù)據(jù)時(shí),上位機(jī)首先發(fā)出部分修改幀使用非結(jié)束多幀標(biāo)識(shí),發(fā)送至最后一個(gè)修改幀時(shí),標(biāo)記為結(jié)束多幀。功率管理模塊只有在將全部待修改的參數(shù)接收完畢(即收到結(jié)束多幀標(biāo)識(shí))之后,才開(kāi)始對(duì)相應(yīng)參數(shù)存儲(chǔ)空間進(jìn)行數(shù)據(jù)修改的操作。完成操作之后,能量管理控制器再將相應(yīng)存儲(chǔ)空間修改完畢的數(shù)據(jù)發(fā)送反饋至上位機(jī),進(jìn)行握手確認(rèn)。采用以上系統(tǒng)參數(shù)修改機(jī)制同時(shí)結(jié)合協(xié)議幀優(yōu)先晉升方案,大幅提升了電站重要參數(shù)修改的可靠性。
4 結(jié)束語(yǔ)
船舶電站監(jiān)控系統(tǒng)網(wǎng)絡(luò)通信的實(shí)現(xiàn),節(jié)省了大量的現(xiàn)場(chǎng)線纜,整個(gè)系統(tǒng)便于調(diào)試。網(wǎng)絡(luò)數(shù)據(jù)傳輸過(guò)程中使用的協(xié)議幀優(yōu)先級(jí)晉升算法機(jī)制等處理方案以及雙冗余的網(wǎng)絡(luò)硬件結(jié)構(gòu),提高了現(xiàn)場(chǎng)總線網(wǎng)絡(luò)的可靠性和穩(wěn)定性。同時(shí),此網(wǎng)絡(luò)適應(yīng)力及擴(kuò)展力強(qiáng),可根據(jù)不同船舶電站系統(tǒng)的結(jié)構(gòu)差異靈活配置系統(tǒng)的設(shè)備,并且隨時(shí)能加入新的站點(diǎn)及第三方設(shè)備。
評(píng)論