本系列文章主要是來學習CANopen的理論知識以及相關實踐,使用開源軟件CANopenSocket進行學習,不需要使用實際的CAN設備,比較方便。
軟件地址是https://github.com/CANopenNode/CANopenSocket,運行環境是Debian10,Ubuntu也是一樣的。
一 下載源碼及編譯使用
本小節主要是參照CANopenSocket的readme
1)首先使用下面的命令獲取源碼,並下載相關子模塊
$ git clone https://github.com/CANopenNode/CANopenSocket.git
$ cd CANopenSocket
$ git submodule init
$ git submodule update
2)使用下面命令生成一個虛擬can設備,叫vcan0,
$ sudo modprobe vcan
$ sudo ip link add dev vcan0 type vcan
$ sudo ip link set up vcan0
3)使用下面命令去安裝can-utils,然後使用candump去監控vcan0
$ sudo apt-get install can-utils
$ candump -t d vcan0
4)新開一個terminal,使用下面命令編譯並使用canopend,
$ cd CANopenSocket/canopend
$ make
$ app/canopend --help
$ echo - > od4_storage
$ echo - > od4_storage_auto
$ app/canopend vcan0 -i 4 -s od4_storage -a od4_storage_auto -c ""
此時在candump的那個terminal下就可以看到can報文了,
第一條是bootup報文,第二條是PDO報文,後面都是心跳報文,1秒鐘發一次心跳報文,現在節點處於operational state (0x05) ,最左側是相鄰2條報文的時間間隔,大約是1s
5) 新開一個terminal,使用下面命令編譯並使用canopencomm
$ cd CANopenSocket/canopencomm
$ make
$ app/canopencomm --help
$ ./canopencomm [1] 4 read 0x1017 0 i16
$ ./canopencomm [1] 4 write 0x1017 0 i16 5000
第3條命令是去讀取NodeId是4的CANopen設備的心跳報文時間間隔值,其對象字典的index是0x1017,subindex是0,數據類型是int16
第4條命令是把該設備的心跳報文時間間隔改爲5s,改完後,我們在canopend那個terminal下可以明顯看到心跳報文的時間間隔變長了,左側的時間間隔也變成了大約5s
二 總結
本文主要講述如何簡單使用CANopenSocket,可以有一個初步印象,這個方法最大的好處就是不需要實際的物理設備,一個虛擬機就可以了。
如果有寫的不對的地方,希望能留言指正,謝謝閱讀。