▼點(diǎn)擊下方名片,關(guān)注公眾號(hào)▼
近期小編開(kāi)發(fā)了【跟我學(xué)CANopen】系列課程,會(huì)陸陸續(xù)續(xù)連載更新完畢,相關(guān)目錄如下(由于內(nèi)容較多導(dǎo)致文字太小,下圖請(qǐng)放大后查看),歡迎關(guān)注【玩轉(zhuǎn)單片機(jī)與嵌入式】公眾號(hào)持續(xù)跟進(jìn)學(xué)習(xí)。
歡迎關(guān)注【玩轉(zhuǎn)單片機(jī)與嵌入式】公眾號(hào),回復(fù)【CANopen】關(guān)鍵字獲取CANopen相關(guān)的全部?jī)?nèi)容。
對(duì)象字典索引區(qū)域定義中,0x1000h~0x9FFFh是通信對(duì)象子協(xié)議區(qū)和制造商特定子協(xié)議區(qū)。
01通訊對(duì)象子協(xié)議區(qū)
通訊對(duì)象子協(xié)議區(qū)(Communication profile area)定義了所有和通信有關(guān)的對(duì)象參數(shù)。如下圖所示。
標(biāo)綠色底紋的索引范圍1000h ~1029h為通用通訊對(duì)象,所有CANopen節(jié)點(diǎn)都必須具備這些索引,否則將無(wú)法加入CANopen網(wǎng)絡(luò)。其他索引根據(jù)實(shí)際情況進(jìn)行分配與定義。
02制造商狀態(tài)寄存器(索引1002h)
這個(gè)32位寄存器包含一個(gè)指針(16位索引和8位子索引)以及對(duì)象字典條目的長(zhǎng)度(8位)。該寄存器中的內(nèi)容由設(shè)備制造商來(lái)設(shè)定。
03同步參數(shù)(索引 1005h、1006h、1007h和1019h)
同步報(bào)文COB標(biāo)識(shí)符參數(shù)(索引1005h)是一個(gè)32位對(duì)象。它不僅包含使用的CAN 標(biāo)識(shí)符,還包含3個(gè)控制位:第31位為預(yù)留位; 第30位確定設(shè)備是發(fā)送同步報(bào)文(生產(chǎn)者為1)還是接收同步報(bào)文(消費(fèi)者為0);第29位用來(lái)區(qū)分11位CAN標(biāo)識(shí)符(0)和29位CAN標(biāo)識(shí)符(1)。如果參數(shù)中沒(méi)有定義這些位,而且用戶又試圖用SDO寫操作來(lái)設(shè)定這些位,那么系統(tǒng)就會(huì)發(fā)送SDO中止消息來(lái)應(yīng)答。
通信循環(huán)周期(索引1006h)是針對(duì)同步報(bào)文發(fā)送方而言的,該參數(shù)設(shè)置同步周期(單位為us)。同步報(bào)文的接收方同樣也可以設(shè)置一個(gè)通信循環(huán)周期,這樣如果在規(guī)定的時(shí)間內(nèi)接收方?jīng)]有收到同步報(bào)文,就會(huì)產(chǎn)生一個(gè)事件來(lái)通知應(yīng)用程序,從而采取相應(yīng)的措施。
同步窗口長(zhǎng)度(索引1007h)以u(píng)s為單位。在同步窗口時(shí)間范圍內(nèi),PDO傳輸必須在同步報(bào)文發(fā)送之后才能進(jìn)行。否則,這一情況將通知給應(yīng)用程序。
同步計(jì)數(shù)器溢出參數(shù)(索引1019h)中包含一個(gè)8位值(范圍為0?240,其他值均保留),該值可用來(lái)復(fù)位同步報(bào)文中的計(jì)數(shù)器。如果該值為0,則發(fā)送不含計(jì)數(shù)器字節(jié)的同步報(bào)文。
注意:該值必須是使用的同步PDO的倍數(shù)(1—240)。
04設(shè)備監(jiān)控(索引 100Ch、100Dh、1016h和1017h)
有兩個(gè)參數(shù)可用于配置心跳功能。一個(gè)是生產(chǎn)者心跳報(bào)文時(shí)間間隔(索引1017h) ,它表示的是發(fā)送心跳報(bào)文的周期(單位為ms) 。網(wǎng)絡(luò)中的所有設(shè)備會(huì)對(duì)心跳報(bào)文進(jìn)行分析,從而確定設(shè)備故障。另一個(gè)參數(shù)是消費(fèi)者心跳時(shí)間間隔(索引1016h) ,它最多可包含127個(gè)條目,條目記錄被監(jiān)控設(shè)備的節(jié)點(diǎn)ID以及時(shí)間(單位為ms)。
消費(fèi)者心跳時(shí)間間隔必須大于消費(fèi)者心跳周期,否則在發(fā)送下一個(gè)心跳報(bào)文之前,就先會(huì)發(fā)出設(shè)備故障消息。一旦用戶設(shè)置了索引1017h的值(該值不為0) ,被監(jiān)控設(shè)備進(jìn)入預(yù)操作狀態(tài)后就會(huì)開(kāi)始發(fā)送心跳報(bào)文。第一次收到心跳報(bào)文時(shí)開(kāi)始監(jiān)控設(shè)備。
如果其中某個(gè)心跳時(shí)間間隔為0,那么相應(yīng)的監(jiān)控就會(huì)停止。由于這里是一種生產(chǎn)者/消費(fèi)者關(guān)系,因此,當(dāng)心跳時(shí)間間隔改變時(shí),所有消費(fèi)者(監(jiān)控某一設(shè)備的所有設(shè)備)同樣也必須收到心跳時(shí)間間隔參數(shù)發(fā)生變化通知,并進(jìn)行相應(yīng)的調(diào)整。
在此,我們不推薦NMT主機(jī)使用節(jié)點(diǎn)保護(hù)來(lái)監(jiān)控設(shè)備(況且該保護(hù)方式還是基于遠(yuǎn)程幀),而是引入2個(gè)新的參數(shù):“保護(hù)時(shí)間”(索引100Ch) 和“壽命因子”(100Dh) .對(duì)象100Ch表示NMT主機(jī)通過(guò)遠(yuǎn)程幀查詢NMT狀態(tài)所用的時(shí)間間隔(單位為ms)。如果不支持心跳機(jī)制,就必須使用該對(duì)象。
如果對(duì)象100Ch的值為0,則保護(hù)功能無(wú)效。
本文小部分內(nèi)容引用自網(wǎng)絡(luò),若有侵權(quán)請(qǐng)聯(lián)系刪除。
E N D