前言
CANopen是一種基于CAN總線的高層通信協(xié)議,其核心對(duì)象字典(Object Dictionary)定義了設(shè)備的全部參數(shù)與功能。為滿足不同廠商設(shè)備在特定場(chǎng)景下的要求,對(duì)象字典必須被精確配置,而手動(dòng)修改這一過程通常較為繁瑣。在最新發(fā)布的 hpm_sdk v1.10.0 中,支持使用 CANopenEditor 編輯的對(duì)象字典,讓開發(fā)者可以更直觀地管理對(duì)象字典與網(wǎng)絡(luò)。本文將介紹如何利用這款新工具編輯對(duì)象字典,并一鍵生成可直接編譯的源文件。
1、CANopenEditor 獲取
CANopenEditor 工具獲取鏈接:https://github.com/CANopenNode/CANopenEditor
工具包下載地址:https://github.com/CANopenNode/CANopenEditor/releases/tag/v4.2.3
工具使用步驟如下:
1. 下載并解壓 CANopenEditor-v4.2.3-binary.zip 工具包;
2. 運(yùn)行 CANopenEditor-v4.2.3-binary/net8.0-windows/EDSEditor.exe 以啟動(dòng)編輯器;
3. 通過菜單 File -> Open,導(dǎo)入 CANopenEditor-v4.2.3-binary/net8.0-windows/Profiles 下的 DS301_profile.xpd 協(xié)議模板即可開始編輯。
導(dǎo)入成功后,如下圖所示:

以下是該工具配置菜單欄的介紹:
1. Device Info 中存放了該模板字典的基本信息;
2. Object Dictionary 是對(duì)象字典中具體的內(nèi)容定義,包含每個(gè)對(duì)象以及具體的含義,這是對(duì)象字典的精髓;
3. TX PDO Mapping 和 RX PDO Mapping 顯示了前面字典中,配置的 PDO 映射關(guān)系;
4. Modules 可以忽略。
2. CANopenEditor 配置
進(jìn)入 Object Dictionary 目錄,如下圖所示:

這是 CANopenEditor 配置的重點(diǎn),以下是菜單選項(xiàng)的簡(jiǎn)單介紹:
1. Communication Specific Parameters, 大部分和通信相關(guān)的參數(shù)以及通用的參數(shù)都在這個(gè)里面定義;
2. Manufacturer Specific Parameters, 存放設(shè)備或者功能相關(guān)的參數(shù);
3. Device Profile Specific Parameters, 存放和行業(yè)協(xié)議相關(guān)參數(shù),比如 DS402/DS401 相關(guān)協(xié)議在這個(gè)部分定義。
2.1 配置標(biāo)準(zhǔn)對(duì)象參數(shù)
左邊 Object Dictionary 目錄下,已有部分標(biāo)準(zhǔn)對(duì)象參數(shù)(置灰的表示已有定義,但是在該模板中未使能),用戶可以根據(jù)自己的需求,對(duì)這些參數(shù)進(jìn)行配置。
以對(duì)象 0x1008(Manufacturer device name) 為例,介紹對(duì)象的參數(shù)含義及配置方法:

如上圖,這部分配置由四個(gè)部分組成:
1. 對(duì)象 0x1008 此時(shí)置灰,表明該對(duì)象未使能,此時(shí)導(dǎo)出 map 表,這個(gè)對(duì)象不會(huì)被包含在內(nèi);
2. 介紹了該對(duì)象的名稱和屬性:Name - Manufacturer device name, Obj Type - VAR(variable 相當(dāng)于變量,還有 array 相當(dāng)于數(shù)組,record 相當(dāng)于結(jié)構(gòu)體,這個(gè)參數(shù)在對(duì)象添加時(shí)確定,確定后無法修改), Data Type - VISIBLE_STRING, SDO - ro(對(duì)于SDO協(xié)議的權(quán)限是只讀), PDO - no(對(duì)于PDO協(xié)議沒有訪問權(quán)限), SRDO - no, Default Value - 未填寫;該部分為只讀,在第 4 部分進(jìn)行配置;
3. 對(duì)象的名稱以及描述在這部分配置;
4. 對(duì)象的屬性,也是對(duì)象配置最重要的部分,如第 2 部分中提到的 Data Type, Access SDO/PDO/SRDO, Default Value 就在這部分配置; 同時(shí),還有三個(gè)重要參數(shù)需要關(guān)注, 即 Count Label - 表明這個(gè)參數(shù)歸屬哪種協(xié)議, Storage Group - PERSIST_COMM(選擇性持久化通信參數(shù),介紹該對(duì)象的存儲(chǔ)屬性,是否應(yīng)該保存到ROM中,相對(duì)應(yīng)的還有 ROM/RAM), Enabled - 勾選即使能該對(duì)象;
而此處,我們需要對(duì)該對(duì)象第 4 部分的部分屬性做如下修改:
1. Default Value: HPMICRO Canopen Demo
2. Access SDO: rw
3. Enabled: 勾選
至此,對(duì)象 0x1008 已配置完成。
2.2 介紹生成的對(duì)象字典文件
在執(zhí)行完章節(jié) 2.1 后,直接生成對(duì)象字典文件(具體操作請(qǐng)參考章節(jié) 2.4) OD.c/OD.h, 其中對(duì)象 0x1008 的屬性應(yīng)該和我們上述設(shè)置一一對(duì)應(yīng),以下依舊以對(duì)象 0x1008 為例,簡(jiǎn)單介紹這兩個(gè)文件。
2.2.1 OD.c 文件
打開生成的 OD.c,可以看到如下結(jié)構(gòu)體:
1. OD_PERSIST_COMM - 主要對(duì)象參數(shù)的結(jié)構(gòu)體,屬性是選擇性持久化通信參數(shù),上述定義的對(duì)象 0x1008 就定義在這個(gè)結(jié)構(gòu)體內(nèi);

2. OD_RAM - 存儲(chǔ)屬性為 RAM 的對(duì)象;對(duì)象定義在 OD_PERSIST_COMM 還是 OD_RAM 即受上述的 Storage Group 參數(shù)決定;
3. ODObjs - 描述了所有對(duì)象的參數(shù)類型,訪問屬性和參數(shù)長(zhǎng)度;此時(shí)對(duì)象 0x1008 屬性為 SDO 可讀寫, 缺省值(HPMICRO Canopen Demo)長(zhǎng)度為 20 字節(jié);

4. OD - sample 中最終會(huì)通過這個(gè)結(jié)構(gòu)體指針對(duì) map 進(jìn)行讀寫;
2.2.2 OD.h 文件
OD.h 中定義了上述 OD.c 中用到的所有的變量和結(jié)構(gòu)體的定義, 比如上述提到的 OD_PERSIST_COMM_t, OD_RAM_t 等;此外,用戶還需要關(guān)注的是以下宏定義:

這些宏定義描述了 CANopen 中所有協(xié)議涉及的對(duì)象數(shù)量,這個(gè)是根據(jù)上述 Count Label 統(tǒng)計(jì)出的。以宏定義 OD_CNT_NMT 為例,表明 NMT 數(shù)量為 1,在 CANopen 協(xié)議中,NMT 協(xié)議是最基本的協(xié)議之一,數(shù)量必須大于 1,否則會(huì)報(bào)錯(cuò)。

綜上,我們介紹了如何使能并配置一個(gè)對(duì)象,同時(shí)介紹了 CANopenEditor 的配置和生成 map 表的對(duì)應(yīng)關(guān)系。當(dāng)然,想要配置出和 SDK sample 中同樣的 map 表,還需要修改很多參數(shù),用戶可以參考 hpm_sdk v1.10.0 中,hpm_sdk/middleware/CANopenNode/port/objdict 路徑下的 OD.c 文件,配置基本的參數(shù)對(duì)象。
2.3 增加一個(gè)新的對(duì)象參數(shù)
經(jīng)過章節(jié) 2.1, 2.2 的配置,設(shè)備已具備一個(gè)基本的對(duì)象字典結(jié)構(gòu)。然而,該默認(rèn)配置中所有 PDO 的映射參數(shù)均為空。這意味著,即使 PDO 的傳輸條件被滿足,從站設(shè)備也因缺乏有效的數(shù)據(jù)映射而不會(huì)發(fā)送任何 PDO 報(bào)文。因此必須在對(duì)象字典中定義應(yīng)用對(duì)象,并將其配置到相應(yīng)的 PDO 映射表中。本章節(jié)將詳細(xì)闡述如何新增一個(gè)應(yīng)用對(duì)象條目,設(shè)定其 SDO 訪問權(quán)限,并將其分配為 TPDO 的映射內(nèi)容,從而使能有效的過程數(shù)據(jù)通信。

在 Manufacturer Specific Parameters 區(qū)域, 左擊 Name, 選擇 Add,會(huì)出現(xiàn)一個(gè) Create new OD Index 的對(duì)話框,用戶需要設(shè)定三個(gè)參數(shù):Index, Name, Object Type。
此處設(shè)定:
1. Index - 2102
2. Name - PDO_Para(表明這是給 PDO 使用的一個(gè)對(duì)象參數(shù))
3. Object Type - VAR(表明這是一個(gè)變量)
點(diǎn)擊 Create, 這個(gè)參數(shù)就添加好了。但是,用戶還需要對(duì)這個(gè)對(duì)象進(jìn)行屬性配置,如 2.1 章節(jié)中對(duì)第 4 部分對(duì)象屬性的描述,配置如下:
1. Default Value: 0xAA
2. Data Type: UNSIGNED32
3. Access SDO, PDO: rw(對(duì) PDO, SDO 都分配了讀寫屬性,主站可以通過這兩種協(xié)議對(duì) 0x2102 這個(gè)對(duì)象的數(shù)據(jù)進(jìn)行讀寫)
4. Storage Group: RAM
5. Enabled: 勾選
當(dāng)然,由于這個(gè)參數(shù)是給 PDO 使用的,因此還需要修改 0x1600(RPDO) 和 0x1A00(TPDO) 的 subindex0 和 subindex1,以 0x1600 為例:

至此,所有配置步驟均已完成。
2.4 輸出對(duì)象字典文件
生成對(duì)象字典文件(OD.c/OD.h), 如下圖所示:

步驟如下:
單擊 File, 選擇 Export CanOpenNode..., 修改路徑為 hpm_sdk/middleware/CANopenNode/port/objdict/, 替換已有的 OD.c/OD.h。
Notes:
Save Project As.../Export, 會(huì)將這次的改動(dòng)生成一個(gè)新的 DS301_profile.xdd,用戶下次導(dǎo)入這個(gè)文檔,就可以直接在這次的基礎(chǔ)上進(jìn)行新的開發(fā)和改動(dòng)。
Save Network XML, 會(huì)將這次改動(dòng)后的對(duì)象字典,生成一個(gè) XML 文檔,可供后續(xù)其他平臺(tái)的開發(fā)。
3. 運(yùn)行結(jié)果分析
編譯 hpm_sdk v1.10.0 中的 sample: hpm_sdk/samples/canopen/slave 并燒錄到開發(fā)板,以 hpm6p00evk 為例(作為從站),主站使用 canbox(便于觀察數(shù)據(jù)包進(jìn)行分析)。數(shù)據(jù)交互如下:
1.從站運(yùn)行成功并結(jié)束初始化后,將發(fā)送一個(gè) init(0x00) 包,然后從站會(huì)自動(dòng)切換至 pre-optional,并開始發(fā)送 pre-optional(0x7F) 包:

2.主站發(fā)送 start remote node(00 01) 命令,從站接收成功后,立刻開始發(fā)送 PDO(0xAA) 數(shù)據(jù)包,同時(shí)切換到 optional 狀態(tài)并開始發(fā)送 optional(0x05) 包:

3.當(dāng)收到 TPDO 的數(shù)據(jù)包后,說明對(duì)象 0x2102 的值和 TPDO 的屬性配置成功,而配置時(shí),還對(duì) SDO 也做了訪問配置,因此可以通過 SDO 去讀 0x2102 的值:

4.通過 SDO 改寫 0x2102,改寫成功后,PDO 將發(fā)送新的 0x2102 的值:

5.再次讀取 0x2102 的值以做確認(rèn):

此時(shí),0x2102 已經(jīng)被主站改寫為 0xBB 并保存在 map 中。
4.總結(jié)
CANopenEditor 工具可替代手動(dòng)修改,以簡(jiǎn)化對(duì)象字典的配置過程。hpm_sdk v1.10.0 中的 CANopen demo 對(duì)象字典即由該工具編輯、生成,可作為用戶實(shí)現(xiàn)自定義配置的參考基礎(chǔ)。
-
mcu
+關(guān)注
關(guān)注
147文章
18990瀏覽量
399711 -
CAN總線
+關(guān)注
關(guān)注
145文章
2047瀏覽量
135297 -
CAN
+關(guān)注
關(guān)注
59文章
3071瀏覽量
472887 -
CANopen
+關(guān)注
關(guān)注
8文章
493瀏覽量
49368
發(fā)布評(píng)論請(qǐng)先 登錄
canopen如何通過對(duì)象字典控制外設(shè)?
Canopen協(xié)議讀后感想
基于STM32的CANopen通訊協(xié)議的實(shí)現(xiàn)
canopen簡(jiǎn)單提要
canopen協(xié)議與can特點(diǎn)
如何修改CANopen節(jié)點(diǎn)的心跳報(bào)文的頻率
輕松掌握CANOpen最難理解的對(duì)象字典
CANOpen系列教程10_ 關(guān)于Canfestival及對(duì)象字典生成工具環(huán)境搭建
CANopen | 對(duì)象字典OD 02 - 修改CANopen節(jié)點(diǎn)的心跳報(bào)文發(fā)送間隔
加速CANopen設(shè)備開發(fā)的設(shè)計(jì)工具
使用ES32實(shí)現(xiàn)CANopen從機(jī)
盟通方案|CANopen數(shù)據(jù)鏈路配置工具
[CANopen] 使用 CANopenEditor 工具編輯 CANopen 對(duì)象字典
評(píng)論