CANopen定義了應用層。CANopen是基于CAN總線的應用層協(xié)議,在開放的現(xiàn)場總線標準中CANopen是最著名和成功的一種。
“自動化CAN用戶和制造商協(xié)會”(CiA,CANinAutomation),制定自動化CAN的應用層協(xié)議CANopen。
現(xiàn)場總線網(wǎng)絡一般只實現(xiàn)了第1層(物理層)、第2層(數(shù)據(jù)鏈路層)、第7層(應用層)。因為現(xiàn)場總線通常只包括一個網(wǎng)段,因此不需要第3層(傳輸層)和第4層(網(wǎng)絡層),也不需要第5層(會話層)第6層(描述層)
reference:
can數(shù)據(jù)幀(標準幀):
幀起始1bit、仲裁段11bit(1遠程幀發(fā)送標志位+10ID)、控制段6bit(1擴展幀標志位+1保留位+4數(shù)據(jù)長度(DLC)) 、數(shù)據(jù)段8bit、CRC15bit、ACK1bit、幀結束7bit
canopen:
1、在can數(shù)據(jù)幀的基礎上,重新定義仲裁段和數(shù)據(jù)段
1.1 仲裁段:functionCode 4bit + nodeID 7bit functionCode定義CanOpen的:PDO、SDO、EMCY、NMT、 SYNC、LSS等不同的幀
1.2 數(shù)據(jù)段:當functionCode不同時,有不同含義,一般是1B操作碼+2B數(shù)據(jù)字典+1Bsub-index+4B數(shù)據(jù)
2、數(shù)據(jù)字典
其實就是對一個整數(shù)賦予意義,主要用文檔體現(xiàn),比如
{
字典0x6040,
表示溫度,
值是整數(shù),
單位是0.01°,
有兩個sub-index(0存儲華氏攝氏度,1存儲通用攝氏度)。
}
那么想要獲取通用攝氏度需要發(fā)送 SDO(通過修改functionCode):讀操作碼1B+數(shù)據(jù)字典6040 4B+sub-index 1B+4B數(shù)據(jù)(讀操作碼時全為0,寫操作碼時為要寫入的數(shù)據(jù))。





