輕松掌握CANOpen最難理解的對(duì)象字典
摘要:CANopen是一種架構(gòu)在控制局域網(wǎng)路(Controller Area Network, CAN)上的高層通訊協(xié)議,其中對(duì)象字典是協(xié)議中最為核心的概念,透徹掌握其相關(guān)內(nèi)容,運(yùn)用CANOpen將會(huì)如魚得水,游刃有余。
CANopen對(duì)象字典(OD: Object Dictionary)是CANopen協(xié)議最為核心的概念。所謂的對(duì)象字典就是一個(gè)有序的對(duì)象組,描述了對(duì)應(yīng)CANopen節(jié)點(diǎn)的所有參數(shù),包括通訊數(shù)據(jù)的存放位置也列入其索引,這個(gè)表變成可以傳遞形式就叫做EDS文件(電子數(shù)據(jù)文檔Electronic Data Sheet)。對(duì)象字典,就像體檢表,具備這個(gè)人每個(gè)功能的參數(shù),便于用人單位(主站)進(jìn)行合理分配工作。如圖 1所示。
圖 1 對(duì)象字典與體檢表
每個(gè)對(duì)象采用一個(gè)16位的索引值來(lái)尋址,這個(gè)索引值通常被稱為索引,其范圍在0x0000到0xFFFF之間。為了避免數(shù)據(jù)大量時(shí)無(wú)索引可分配,所以在某些索引下也定義了一個(gè)8 位的索引值,這個(gè)索引值通常被稱為子索引,其范圍是0x00到0xFF之間。
每個(gè)索引內(nèi)具體的參數(shù),最大用32位的變量來(lái)表示,即Unsigned32,四個(gè)字節(jié)。
每個(gè)CANopen設(shè)備都有一個(gè)對(duì)象字典,使用電子數(shù)據(jù)文檔(EDS文件)來(lái)記錄這些參數(shù),而不需要把這些參數(shù)記錄在紙上。對(duì)于CANopen網(wǎng)絡(luò)中的主節(jié)點(diǎn)來(lái)說(shuō),不需要對(duì)CANopen從節(jié)點(diǎn)的每個(gè)對(duì)象字典項(xiàng)都訪問(wèn)。
CANopen對(duì)象字典中的項(xiàng)由一系列子協(xié)議來(lái)描述。子協(xié)議為對(duì)象字典中的每個(gè)對(duì)象都描述了它的功能、名字、索引、子索引、數(shù)據(jù)類型,以及這個(gè)對(duì)象是否必需、讀寫屬性等等,這樣可保證不同廠商的同類型設(shè)備兼容。
CANopen協(xié)議的核心描述子協(xié)議是DS301,其包括了CANopen協(xié)議應(yīng)用層及通信結(jié)構(gòu)描述,其它的協(xié)議子協(xié)議都是對(duì)DS301 協(xié)議描述文本的補(bǔ)充與擴(kuò)展。在不同的應(yīng)用行業(yè)都會(huì)起草一份CANopen設(shè)備子協(xié)議,子協(xié)議編號(hào)一般是DS4xx 。
對(duì)象字典概述
如表 1所示,為對(duì)象字典索引區(qū)域定義,其中標(biāo)綠色底紋的通訊對(duì)象子協(xié)議區(qū)和制造商特定子協(xié)議區(qū)是用戶需要關(guān)注的區(qū)域。
表 1 對(duì)象字典概述
Index range索引范圍 |
Description描述 |
0000h |
Reserved保留 |
0001h to 025Fh |
Data types數(shù)據(jù)類型 |
0260h to 0FFFh |
Reserved保留 |
1000h to 1FFFh |
Communication profile area通訊對(duì)象子協(xié)議區(qū) |
2000h to 5FFFh |
Manufacturer-specific profile area制造商特定子協(xié)議區(qū) |
6000h to 9FFFh |
Standardized profile area標(biāo)準(zhǔn)化設(shè)備子協(xié)議區(qū) |
A000h to AFFFh |
Network variables網(wǎng)絡(luò)變量(符合IEC61131-3) |
B000h to BFFFh |
System variables用于路由網(wǎng)關(guān)的系統(tǒng)變量 |
C000h to FFFFh |
Reserved保留 |
通訊對(duì)象子協(xié)議區(qū)(Communication profile area)
通訊對(duì)象子協(xié)議區(qū)(Communication profile area)定義了所有和通信有關(guān)的對(duì)象參數(shù),如表 2所示,標(biāo)綠色底紋的索引范圍1000h to 1029h為通用通訊對(duì)象,所有CANopen節(jié)點(diǎn)都必須具備這些索引,否則將無(wú)法加入CANopen網(wǎng)絡(luò)。其他索引根據(jù)實(shí)際情況進(jìn)行分配與定義。
表 2 通訊對(duì)象子協(xié)議區(qū)
Index range索引范圍 |
Description描述 |
1000h to 1029h |
General communication objects通用通訊對(duì)象 |
1200h to 12FFh |
SDO parameter objects SDO參數(shù)對(duì)象 |
1300h to 13FFh |
CANopen safety objects 安全對(duì)象 |
1400h to 1BFFh |
PDO parameter objects PDO參數(shù)對(duì)象 |
1F00h to 1F11h |
SDO manager objects SDO管理對(duì)象 |
1F20h to 1F27h |
Configuration manager objects配置管理對(duì)象 |
1F50h to 1F54h |
Program control object程序控制對(duì)象 |
1F80h to 1F89h |
NMT master objects網(wǎng)絡(luò)管理主機(jī)對(duì)象 |
通用通訊對(duì)象(General communication objects)
由于通用通訊對(duì)象十分重要,NMT主站(CANopen主站)在啟動(dòng)時(shí),通常都全部或者部分讀取所有從站中通用通訊對(duì)象中的索引,所以所有的通用通訊對(duì)象都必須在CANopen從站中實(shí)現(xiàn),使用者也必須熟知這些索引地址與其含義。如表 3所示。
表 3 通用通訊對(duì)象
Index索引 |
Object對(duì)象 |
Name名字 |
1000h |
VAR變量 |
Device type設(shè)備類型 |
1001h |
VAR變量 |
Error register錯(cuò)誤寄存器 |
1002h |
VAR變量 |
Manufacturer status register制造商狀態(tài)寄存器 |
1003h |
ARRAY數(shù)組 |
Pre-defined error field預(yù)定義錯(cuò)誤場(chǎng) |
1005h |
VAR變量 |
COB-ID Sync message同步報(bào)文COB標(biāo)識(shí)符 |
1006h |
VAR變量 |
Communication cycle period同步通信循環(huán)周期(單位us) |
1007h |
VAR變量 |
Synchronous windows length同步窗口長(zhǎng)度(單位us) |
1008h |
VAR變量 |
Manufacturer device name制造商設(shè)備名稱 |
1009h |
VAR變量 |
Manufacturer hardware version制造商硬件版本 |
100Ah |
VAR變量 |
Manufacturer software version制造商軟件版本 |
100Ch |
VAR變量 |
Guard time守護(hù)時(shí)間(單位ms) |
100Dh |
VAR變量 |
Life time factor壽命因子(單位ms) |
1010h |
VAR變量 |
Store parameters保存參數(shù) |
1011h |
VAR變量 |
Restore default parameters恢復(fù)默認(rèn)參數(shù) |
1012h |
VAR變量 |
COB-ID time stamp時(shí)間報(bào)文COB標(biāo)識(shí)符(發(fā)送網(wǎng)絡(luò)時(shí)間) |
1013h |
VAR變量 |
High resolution time stamp高分辨率時(shí)間標(biāo)識(shí) |
1014h |
VAR變量 |
COB-ID emergency緊急報(bào)文COB標(biāo)識(shí)符 |
1015h |
VAR變量 |
Inhibit time emergency緊急報(bào)文禁止時(shí)間(單位100us) |
1016h |
ARRAY數(shù)組 |
Consumer heartbeat time消費(fèi)者心跳時(shí)間間隔(單位ms) |
1017h |
VAR變量 |
Producer heartbeat time生產(chǎn)者心跳時(shí)間間隔(單位ms) |
1018h |
RECORD記錄 |
Identity object廠商ID標(biāo)識(shí)對(duì)象 |
1019h |
VAR變量 |
Sync.counter overflow value同步計(jì)數(shù)溢出值 |
1020h |
ARRAY數(shù)組 |
Verify configuration驗(yàn)證配置 |
1021h |
VAR變量 |
Store EDS存儲(chǔ)EDS |
1022h |
VAR變量 |
Storage format存儲(chǔ)格式 |
1023h |
RECORD記錄 |
OS command操作系統(tǒng)命令 |
1024h |
VAR變量 |
OS command mode操作系統(tǒng)命令模式 |
1025h |
RECORD記錄 |
OS debugger interface操作系統(tǒng)調(diào)試接口 |
1026h |
ARRAY數(shù)組 |
OS prompt操作系統(tǒng)提示 |
1027h |
ARRAY數(shù)組 |
Module list模塊列表 |
1028h |
ARRAY數(shù)組 |
Emergency consumer緊急報(bào)文消費(fèi)者 |
1029h |
ARRAY數(shù)組 |
Error behavior錯(cuò)誤行為 |
制造商特定子協(xié)議(Manufacturer-specific Profile)
對(duì)象字典索引2000h to 5FFFh為制造商特定子協(xié)議,通常是存放所應(yīng)用子協(xié)議的應(yīng)用數(shù)據(jù)。而上文所描述的通訊對(duì)象子協(xié)議區(qū)(Communication profile area)是存放這些應(yīng)用數(shù)據(jù)的通信參數(shù)。比如廣州致遠(yuǎn)電子的XGate-COP10從站模塊規(guī)定了:
lRPDO的通訊參數(shù)存放在1400h to 15FFh 映射參數(shù)存放在1600h to 17FFh 數(shù)據(jù)存放為2000h 之后廠商自定義區(qū);
lTPDO的通訊參數(shù)存放在1800h to 19FFh 映射參數(shù)存放在1A00h to 1BFFh 數(shù)據(jù)存放為2000h 之后廠商自定義區(qū)。
對(duì)于在設(shè)備子協(xié)議中未定義的特殊功能,制造商也可以在此區(qū)域根據(jù)需求定義對(duì)象字典對(duì)象。因此這個(gè)區(qū)域?qū)τ诓煌膹S商來(lái)說(shuō),相同的對(duì)象字典項(xiàng)其定義不一定相同。
標(biāo)準(zhǔn)化設(shè)備子協(xié)議(Standardized profile area)
標(biāo)準(zhǔn)化設(shè)備子協(xié)議,為各種行業(yè)不同類型的標(biāo)準(zhǔn)設(shè)備定義對(duì)象字典中的對(duì)象。目前已有十幾種為不同類型的設(shè)備定義的子協(xié)議,例如 DS401、DS402、DS406等,其索引值范圍為0x6000~0x9FFF。同樣,這個(gè)區(qū)域?qū)τ诓煌臉?biāo)準(zhǔn)化設(shè)備子協(xié)議來(lái)說(shuō),相同的對(duì)象字典項(xiàng)其定義不一定相同。