一、参考文档

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