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