基于CAN總線的高壓開關(guān)柜狀態(tài)監(jiān)測單元通訊模塊
5通訊模塊的軟件實現(xiàn)
軟件是通訊模塊設(shè)計的核心,與一般使用高級語言編寫的軟件不同的是嵌入式系統(tǒng)的軟件要和硬件直接打交道,是對硬件直接操作,因此對硬件要熟練掌握才能編寫出實用的代碼。
SJA1000控制器寄存器數(shù)量眾多,幸運的是許多文章對它們的用法都作了介紹,有的還給出了其具體的代碼,筆者只簡單介紹一下驗收濾波寄存器。使用驗收濾波器,可以使監(jiān)測單元只接收需要的幀,屏蔽不需要的。這里的應(yīng)用是將驗收濾波器配置成雙濾波方式,即控制器只接收目的地址與監(jiān)測單元地址相符的或者與監(jiān)測單元廣播地址相符的幀,從而節(jié)約監(jiān)測單元的資源。
下面即以監(jiān)測單元的發(fā)送為例,簡述通訊模塊軟件的設(shè)計思路。當(dāng)監(jiān)測單元有數(shù)據(jù)發(fā)送時(如絕緣數(shù)據(jù)),可通過下列步驟完成發(fā)送的全過程:①將數(shù)據(jù)按應(yīng)用層報文的格式進(jìn)行封裝。②應(yīng)用層報文相對鏈路層來講是鏈路層的數(shù)據(jù),在鏈路層把應(yīng)用層的報文按照SJA1000的CAN幀的格式進(jìn)行拆分。CAN每次只能傳送8個有效字節(jié),在拆分時按照上文的標(biāo)識符定義,將報文拆成有序的CAN幀,這樣接受的一方就能按照標(biāo)識符將一系列屬于同一應(yīng)用層報文的幀進(jìn)行拆封。③把已拆分好的CAN幀按照標(biāo)識符定義的幀序數(shù)發(fā)送出去。發(fā)送一幀之前需要檢查SJA1000控制器狀態(tài)寄存器(SR)的狀態(tài),這包括檢查控制器發(fā)送狀態(tài),接收狀態(tài)以及發(fā)送緩沖器鎖定狀態(tài),當(dāng)控制器處于空閑狀態(tài)(不在發(fā)送狀態(tài)、不在接收狀態(tài)并且發(fā)送緩沖器被釋放),就將需發(fā)送的幀寫入發(fā)送緩沖區(qū)并啟動發(fā)送。發(fā)送下一幀重復(fù)執(zhí)行以上過程即可。
接受過程執(zhí)行與發(fā)送過程相反的操作,可以簡述為:接受CAN幀;拆封CAN幀為應(yīng)用層報文;解析報文得到數(shù)據(jù)。
6.CAN控制器異常情況的處理
SJA1000控制器在長期工作中,由于內(nèi)在及外在的因素不可避免的會產(chǎn)生錯誤,從而使控制器不能正常工作。為了控制器能夠長期正常工作,使控制器從錯誤中恢復(fù)過來??刂破魈峁┝讼鄳?yīng)的寄存器來進(jìn)行錯誤的分析和診斷,這包括接收(發(fā)送)錯誤計數(shù)器、錯誤報警限制寄存器、錯誤代碼捕捉寄存器、仲裁丟失捕捉寄存器以及狀態(tài)寄存器的幾位。同時中斷寄存器的幾位用來報告產(chǎn)生的錯誤,由程序?qū)﹀e誤進(jìn)行處理。這些寄存器具體的定義可參閱相關(guān)文獻(xiàn)。
在實際應(yīng)用時主要有兩種從錯誤狀態(tài)恢復(fù)到正常工作狀態(tài)的方法。
?。?)有錯誤發(fā)生時,在中斷服務(wù)程序里根據(jù)中斷寄存器(中斷方式,中斷使能寄存器除喚醒和接收中斷外均打開)的各位的狀態(tài),再結(jié)合相應(yīng)的寄存器即可以進(jìn)行分析和診斷了。例如出現(xiàn)應(yīng)答通道故障時則會產(chǎn)生總線錯誤中斷,檢查錯誤代碼捕捉寄存器,就可知道是產(chǎn)生了應(yīng)答通道故障。該方法的優(yōu)點是知道錯誤具體是什么而采取對應(yīng)的措施,缺點是編程比較麻煩,對協(xié)議和控制器都要十分熟悉。
(2)控制器一有錯誤發(fā)生就重新初始化(中斷方式,中斷使能寄存器除喚醒和接收中斷外均打開),讓控制器重新正常運行,該方法優(yōu)點是簡單易行,缺點是沒有考慮到錯誤發(fā)生的原因,不能作進(jìn)一步的分析和診斷。
為了簡化設(shè)計,筆者采取的是后一種方案。
7.結(jié)語
?。?)CAN作為一種有效支持分布式通信的現(xiàn)場總線,具有高的可靠性和實時性,同時又有簡單、易用以及性價比高的優(yōu)點,因此選擇CAN作為監(jiān)測單元通訊模塊的解決方案。
?。?)在研究分析CAN協(xié)議的基礎(chǔ)上,根據(jù)實際情況對CAN的標(biāo)識符作了定義,且制定了應(yīng)用層的協(xié)議,并給出了軟硬件的設(shè)計思路以及異常情況的處理方法。
(3)在實驗室的調(diào)試運行表明,采用CAN總線作為高壓開關(guān)柜監(jiān)測單元通訊模塊的解決方案取得了良好的效果。
評論