zoukankan      html  css  js  c++  java
  • 在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,解决办法请见参考文档注释:

    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

  • 相关阅读:
    C++11模板类使用心得
    Linux下MakeFile初探
    Leetcode 35 Search Insert Position 二分查找(二分下标)
    Leetcode 4 Median of Two Sorted Arrays 二分查找(二分答案+二分下标)
    数据库分库分表的应用场景及方法分析
    DB主从一致性的几种解决方法
    Redis主从复制和集群配置
    RPC vs RESTful
    Mysql锁详解
    BIO与NIO、AIO的区别
  • 原文地址:https://www.cnblogs.com/yangxuli/p/6875321.html
Copyright © 2011-2022 走看看