PIC18單片機的CANopen通信協(xié)議
在此例中,PDO報文是在對象字典中用通信參數(shù)和映射參數(shù)來描述的。通信參數(shù)決定哪個COB―ID將被PDO使用,此例中RPD0的COB―ID為286,TPDO的COB―ID為187。映射參數(shù)包含映射到PDO里的對象在對象字典中的索引和子索引,以及對象的數(shù)據(jù)長度。此例中映射到RPDO里的對象在對象字典中的索引為3200,子索引為OO,長度為2;映射到TPDO里的對象在對象字典中的索引為3100,子索引為00,長度為1。另外某些相關變量也由對象字典所描述,可以通過sD0對象傳輸方式進行下載修改或上傳觀察。此例中的上限溫度、下限溫度,就由對象字典主索引3000、子索引00和主索引3001、子索引00分別描述。
2.3 節(jié)點的CANopen協(xié)議的軟件實現(xiàn)
在節(jié)點上實現(xiàn)CANopen協(xié)議軟件,首先要實現(xiàn)節(jié)點接收報文和發(fā)送報文的功能。接收報文的過程是,一旦有接收中斷產(chǎn)生,就把CAN接收緩沖區(qū)接收到的數(shù)據(jù)和地址放到一內(nèi)部陣列中,對接收到的報文進行分析,并送去執(zhí)行相應的子函數(shù)(NMT報文接收處理子函數(shù)、SDO報文接收處理子函數(shù)、心跳報文接收處理子函數(shù)、SDO報文接收處理子函數(shù)),最后返回主程序。發(fā)送報文的過程是,把需要發(fā)送的變量放到對象字典里,再把它們映射封裝成相應的對象,最后將報文發(fā)送到總線上。
主程序按照通信流程編寫,模塊上電后先進行通信初始化。其首先初始化CANopen協(xié)議中的通信相關參數(shù)、對象字典、節(jié)點號,再初始化CAN控制器的硬件,包括單片機的內(nèi)部寄存器、定時器、串行口、CAN控制器。通信初始化后自動進入節(jié)點初始化,并進行一些特定用戶的初始化。完成后,發(fā)送一個啟動報文自動進入預操作狀態(tài)。此時用戶的程序循環(huán)執(zhí)行著,在每個循環(huán)里,調(diào)用接收報文1次。這個模塊用來檢查接收到的對象,并作相應的處理。在NMT報文到來之前一直持續(xù)在預操作狀態(tài)。在這個狀態(tài)里,節(jié)點可以通過SD0被配置和設置參數(shù),但是不允許發(fā)送PDO。在相應的NMT報文到來后,即收到啟動遠程節(jié)點命令后,進入操作狀態(tài),在這個狀態(tài)就可以進行正常的通信了。在收到NMT報文,即停止遠程節(jié)點命令,節(jié)點進入了停止狀態(tài),從而停止PDO和SDO通信。
3 實驗結果
在軟件設計中編寫了與上位機的通信模塊程序,可以將每個節(jié)點接收和發(fā)送報文的ID號、數(shù)據(jù)長度、數(shù)據(jù)轉發(fā)到串口,便于上位機進行觀測。
圖3為系統(tǒng)傳輸數(shù)據(jù)的過程,溫度傳感節(jié)點發(fā)送報文過程為發(fā)送自啟動報文后以周期為1 s發(fā)送心跳報文,以周期為100 ms發(fā)送PDO1報文,發(fā)送數(shù)據(jù)為傳感溫度(分別為19°,20°,…,21°…)。上限溫度和下限高溫都為20°時,溫度調(diào)節(jié)節(jié)點接收報文過程為接收到NMT報文命令后進入操作狀態(tài),不斷接收PDOl報文。溫度調(diào)節(jié)節(jié)點發(fā)送報文過程為發(fā)送自啟動報文后以周期為1 s發(fā)送心跳報文,以事件觸發(fā)方式發(fā)送PDOO報文(發(fā)送數(shù)據(jù)為工作狀態(tài)長度為1,當接收到的溫度低于20°時發(fā)送數(shù)據(jù)為02表示加熱,當接收到的溫度高于20°時發(fā)送數(shù)據(jù)為01表示降溫,當接收的溫度為20°時發(fā)送數(shù)據(jù)為OO表示保持),狀態(tài)顯示燈不斷閃爍紅色、黃色、藍色。如在命令節(jié)點中發(fā)送SDO報文改變對象字典中的上限溫度和下限溫度,再觀察各節(jié)點變化。情況1,當上限溫度低于20°(為15°)時,溫度調(diào)節(jié)節(jié)點一直在降溫狀態(tài),狀態(tài)顯示燈為紅色。情況2,當下限溫度高于20°(為25°)時,溫度調(diào)節(jié)節(jié)點一直在加熱狀態(tài),狀態(tài)顯示燈為黃色,情況3,當上限溫度高于20°(為25°),下限溫度低于20°(為15°)時,溫度調(diào)節(jié)節(jié)點一直在保持狀態(tài),狀態(tài)顯示燈為藍色。命令節(jié)點在液晶顯示屏中顯示實時溫度,在狀態(tài)顯示燈中顯示實時狀態(tài)。
命令節(jié)點進行NMT對象操作時再觀察各節(jié)點狀態(tài):當按下按鈕1時,節(jié)點進入欲操作狀態(tài);當按下按鈕2時,節(jié)點重啟。
從以上兩個實驗可以看出,整個系統(tǒng)在運行過程中達到了滿意的控制效果,實現(xiàn)了基于CANopen協(xié)議的對象數(shù)據(jù)的交換,通信傳輸理想。
結 語
應用PIC18單片機自行開發(fā)的基于CANopen協(xié)議的節(jié)點,實現(xiàn)了對4種通信對象信息的通信處理,并通過測試驗證了系統(tǒng)信息傳遞的可靠性、準確性和實時性,很好地滿足了基于CANopen協(xié)議的溫度測控系統(tǒng)的要求;對于CANopen在國內(nèi)的應用和普及,以及CAN網(wǎng)絡和驅動產(chǎn)品盡早和國際接軌,具有重要的意義。
評論