一、参考文档
https://github.com/CANopenNode/CANopenSocket //下载 CANopenSocket 的源码
http://elinux.org/Can-utils //解决 Unable to locate package can-utils问题
https://www.raspberrypi.org/forums/viewtopic.php?t=138390&p=963200//解决 Unable to locate package can-utils问题
http://www.cnblogs.com/zhouhq/archive/2013/03/17/2964381.html //解决make编译出现undefined reference to clock_gettime
二、模拟can设备通讯
1、下载开源CANopenSocket源码
git clone https://github.com/CANopenNode/CANopenSocket.git // 从github 上边下载CANopenSocket源代码
cd CANopenSocket // 进入CANopenSocket文件夹 cd为进入文件夹命令
git submodule init // 初始化子模块
git submodule update // 更新子模块
2、虚拟Can接口
建立Can设备之间通讯,在打开第一个First terminal
进行准备虚拟can设备:
sudo modprobe vcan //挂载vcan 模块
sudo ip link add dev vcan0 type vcan //Create a virtual CAN network interface called 'vcan0'
sudo ip link set up vcan0 //启动vcan0设备
sudo apt-get install can-utils //安装can-utils工具来分析CAN traffic
candump vcan0 //对于vcan0:display, filter and log CAN data to files
安装can-utils
可能出现以下安装不了Unable to locate package can-utils
,解决办法请见参考文档注释:
candump vcan0
是可以在vcan0上显示所有模拟CAN设备之间通讯的数据流。模拟的CAN设备和工具都准备好,接下来就打开第二个Second terminal
在CAN设备上进行编译和开始运行CANSocket:
cd CANopenSocket/canopend //进入canopend源代码文件夹下
make //进行编译
app/canopend --help //Displays a summary of the main command-line options
app/canopend vcan0 -i 4 -s od4_storage -a od4_storage_auto //配置can设备的Node ID=4,并且初始化Node ID4的对象字典,然后开始运行Node ID4
对于执行上边make
编译命令,编译出来可能出现以下错误undefined reference to 'clock_gettime'
如下图所示
解决办法,需要增加在Makefile
中 -lrt
,具体请见参考文档注释,增加位置如下图所示,再Make
就没有问题。
3、监控数据并分析数据
以下的开始运行Node ID=4设备发送出来的数据,从candump vcan0
显示的,数据的解析请见注释:
yang@yang-virtual-machine:~$ candump vcan0
vcan0 704 [1] 00 //Node id=4处于Bootup状态 NMT state:0=Boot-up,4=stopped,5=Operational,127(7F)=Pre-operational
vcan0 084 [8] 00 50 01 2F F3 FF FF FF //Emergency communication message:Byte 0.1 00xx--Error Reset or NO Error,Byte 2--error resgiter at[1001h,00h]
//Byte3..7---Up to Up to 5 bytes for manufacturer specific error codes
vcan0 704 [1] 7F //发Heartbeat包, Node id=4处于Pre-operational状态
vcan0 704 [1] 7F //one per second
上边模拟的只是一个CAN设备发送的数据,接下来会加入其它节点的can设备进行通讯。
by 羊羊得亿
2017-05-23 ShenZhen