CANopen總線是一種架構在控制局域網絡(CAN總線)上的高層通信協(xié)議,包括通信子協(xié)議及設備子協(xié)議,常在嵌入式系統(tǒng)中使用,也是工業(yè)控制常用到的一種工業(yè)現(xiàn)場總線。前文我們好了CANOPEN協(xié)議詳解,本文我們重點介紹CANopen總線協(xié)議使用指南。
CANopen總線有兩種通訊方式:SDO和PDO。SDO通常由主站發(fā)送用于讀取從站信息或配置從站PDO運行方式,從站接收到消息后需要應答,如下圖所示。
PDO為生成者消費者模式,消息發(fā)出后不需要等待回復,一條消息可以有多個消費者。從站進入操作模式后會按照配置的通訊參數周期發(fā)送PDO消息或事件觸發(fā)發(fā)送PDO。如果配置了SYNC功能,收到指定個數的同步幀后發(fā)送PDO。當然主站也可發(fā)送PDO消息。如下圖所示。
撥動canopen總線無線IO設備的撥碼開關,將節(jié)點號設置為2,波特率設置為10k。如下圖所示。
設備上電后會向主站先后發(fā)送兩條幀ID為0x700+NOD_ID,數據為00(設備處于初始化狀態(tài))和7F(設備處于預操作狀態(tài))的消息,如下圖所示。
此時設備處于預操作狀態(tài),在ECanTools工具選擇canopen選項,點擊添加從站ID為2。選擇NMT功能選項,選擇“start remoteb node”后點擊NMT,如下圖所示。
此時上位機會發(fā)送一條幀ID為000,數據為01(運行狀態(tài))02(節(jié)點2,如果廣播則為00)的數據。此時節(jié)點2的無線IO設備會開始通過PDO(生產者消費者模式)發(fā)送幀ID為182,數據長度為2字節(jié)的消息,其兩字節(jié)數據對應16個DI口,若DI有輸入對應位置1。注意此功能為廣成自定義,并非標準cia301協(xié)議。效果如下圖所示。
當然使用can工具手動發(fā)送數據也是一樣的效果,如下圖所示。
閱讀EDS文件可知索引2000h子索引01h可知設置其中的值可以改變TPDO1的inhibit time(禁止時間)。禁止時間的作用是設置pdo發(fā)送的最小間隔。這里使用手動發(fā)送SOD(一問一答模式)進行演示。
手動發(fā)送時將幀ID設置為602(600代表是SDO功能+節(jié)點號2),第一個數據2B代表寫入兩字節(jié)。注意后面的數據低字節(jié)在前,所以2000h索引寫做0020h,寫入的數據1FF寫做01FF。發(fā)送后從站返回幀ID為582數據頭為60的一條消息,代表剛才的寫入成功。重新進入操作狀態(tài)后,觀察此時的從站發(fā)送的PDO數據的時間戳,變?yōu)榱?/span>511us即1FF。但是要注意的是標準的cia301協(xié)議中,禁止時間的單位是100us。如何使用SDO讀取和寫入長度超過4字節(jié)的數據見詳細文檔。
想要配置DO口的輸出狀態(tài)需要從站在操作狀態(tài)下,主站向從站發(fā)送幀ID為0X200+NOD_ID長度為2字節(jié)的PDO消息。如下圖所示,發(fā)送數據為0F 00此時0-3DO口全部打開(低字節(jié)在前)。
由于此產品PDO功能不全,接下來用舉例子的方式解釋如何使用SDO配置PDO功能。剛才說過2000索引01字索引中的數據可以改變DI數據的PDO發(fā)送最小間隔,現(xiàn)在假設這個數據是可以映射的。下圖是各個TPDO和RPOD的COB-ID、通訊參數、映射參數的數值。
觀察上圖COB-ID,可知RPDO1被用來讀取數據,配置DO口的輸出狀態(tài)了,因為剛才就是使用主站控制發(fā)送幀ID為202的PDO數據來控制DO口狀態(tài)的?,F(xiàn)在我們使用從站的RPDO2來讀取主站發(fā)送的的幀ID為302的TPDO數據,從而控制從站TPDO1數據(即DI口輸入情況)的返回速率。
通訊對象的可配置參數如下圖所示,注意RPDO和TPDO的通訊對象可配置的參數范圍和意義不完全相同,詳情見詳細文檔和cia301文檔。
這里作為簡單演示,我們只用修改1401索引01字索引中COB-ID數據,使用SDO的方法將其配置為302。其它子索引中的數據假設合理能正常通訊,其具體含義和作用見詳細文檔和cia301文檔。映射對象1601索引中的數據構成很簡單,1601索引00子索引中存放的值代表:除了00子索引外還有多少子索引,有多個子索引的00子索引中存放的值都是這個意義。由于要修改的數據只有一處,且存放在2000索引01子索引數據為16位,所以只需要使用SDO向1601索引01子索引寫入 0x20000110(最后的10代表存放16位數據,如果是08代表8位數據,20代表32位數據)即可,然后向1601 00索引寫入01。如果要存入的數據有多個地址繼續(xù)增加1601的子索引個數,并將00子索引的值改為對應個數即可。但是要注意所以映射索引存儲的數據加起來不能超過8字節(jié)。
為了系統(tǒng)的穩(wěn)定性,對通訊對象和映射對象進行修改時,要先使能對應PDO(01 子索引最高位置1)和清空映射對象00子索引的值。
602 22 01 14 01 02 03 00 80 (將COB-ID設置為302并失能該PDO)
602 22 01 16 00 00 00 00 00 (情況映射對象個數數據)
602 22 01 16 01 10 01 00 20 (10 格式標識16位,01子索引2000索引)
602 22 01 16 00 01 00 00 00 (1個參數)
602 22 01 14 01 02 03 00 00 (使能PDO)
配置完成后使用上位機發(fā)送幀ID為302的PDO信息,從站就會將其存入RPDO2的映射索引2000 01中,從而改變發(fā)送DI狀態(tài)的速率。
打開SYNC功能,主站會按照設置的時間周期性地發(fā)送幀ID為80沒有數據的信號,該信號可觸發(fā)從站發(fā)送PDO信息,由于此設備PDO功能不全無法演示,具體效果和配置方法見詳細文檔和cia301文檔。
EMCY功能是當從站發(fā)送錯誤時返回的報文,也無法演示。
節(jié)點保護服務的原理是NMT主站可向相應的從站發(fā)送包含CAN-ID 700h +節(jié)點ID的RTR消息。隨后從站必須發(fā)送消息進行響應;從站回復的消息結構如下。其中位 7 在每次傳送時都會進行交替,從而能夠確定消息是否丟失。在位 6 到 0 中輸入從站當前的 NMT 狀態(tài)。如下圖所示。
從站等待主站發(fā)送RTR消息的時間為 100Ch:00(守護時間)*100D:00(生存因素),配置完成后在上位機打開節(jié)點保護,效果如下圖所示。
送至 CAN 總線??赏ㄟ^將對象 1017h:00h 中的創(chuàng)建心跳時間設為非零值,從而激活該服務。如下圖所示,將1017h:00h設置為不為0的數后從站周期性地返回心跳。
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動化的發(fā)展,提升資源利用率,更多產品更多資料,感興趣的小伙伴可以登錄我們的億佰特官網和企業(yè)公眾號(微信號:cdebyte)進行了解,也可以直接撥打400電話咨詢技術專員!
相關閱讀: