在Linux下用CANopenSocket协议模拟CAN总线通讯

一、参考文档

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,解决办法请见参考文档注释:
1100486-20170522220759007-1050732058.png
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'如下图所示
1100486-20170523135050788-167596902.png
解决办法,需要增加在Makefile-lrt,具体请见参考文档注释,增加位置如下图所示,再Make就没有问题。
1100486-20170523135552992-1351611577.png
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

转载于:https://www.cnblogs.com/yangxuli/p/6875321.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值