一、参考文档

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

在Linux下用CANopenSocket协议模拟CAN总线通讯的更多相关文章

  1. [Linux]Linux下修改snmp协议的默认161端口

    一.Linux SNMP的配置 SNMP的简介和Linux下IPV4,IPV6地址的snmp协议开启可以参考上一个随笔:[Linux]CentOS6.9开启snmp支持IPV4和IPV6 二.修改默认 ...

  2. Linux下基于HTTP协议带用户认证的GIT开发环境设置

    Git 的访问可以采用 HTTP 或 SSH 协议安全的访问,通常我们使用 gitlib 进行 Web 管理,但是在 Linux 命令行开发环境下,基本都是使用 SSH 协议,只需要在 gitlib ...

  3. 如何在Linux下关闭ARP协议

    方法一:临时关闭ARP协议 echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf ...

  4. Linux下使用http协议下载文件

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...

  5. Windows和Linux环境,网络异常模拟测试方法【转载自光荣之路微信公众号】

    1.网络异常的分类 在系统的运行过程中,可能会遇到各种各样的网络问题,其中主要可能出现的问题有 网络延迟:当网络信息流过大时,可能导致设备反应缓慢,造成数据传输延迟: 网路掉包:网路掉包是在数据传输的 ...

  6. Linux 下的dd命令使用详解(摘录)

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  7. Linux下搭建BT服务器

    P2P(Peer to Peer 即对等网络)就是在这种背景下提出的一种网络技术,P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能.在这种网络中所有的节 ...

  8. Linux 下的dd命令使用详解(摘录)【转】

    转自:https://www.cnblogs.com/jikexianfeng/p/6103500.html 一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意 ...

  9. Linux下分割、合并文件——dd和cat

    功能说明:读取,转换并输出数据. 语 法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=& ...

随机推荐

  1. 使用ssh过程中对数据库进行update时报错

    报错信息:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in ...

  2. 轻松python专题--文本

    基础篇:(取材于零基础学python) 7.1 python中的字符串简单介绍与经常使用函数 7.2 字符串常量 7.3 字符串的一般使用 7.4 改动字符串实例 7.5 文本解析 7.6 字符串格式 ...

  3. BZOJ5204: [CodePlus 2018 3 月赛]投票统计

    [传送门:BZOJ5204] 简要题意: 有n个选手,每个选手会选择一道题投票,求出投票最多的题目个数和这些题目的编号,如果所有题目的投票数相同,则输出-1 题解: 直接搞 离散化,然后判断就可以了 ...

  4. Snort企业部署实战

    Snort企业部署实战 1 背景       我们知道企业网络目前威胁来自两个位置:一个是内部,一个是外部.来自外部的威胁都能被防火墙所阻止,但内部攻击都不好防范.因为公司内部人员对系统了解很深且有合 ...

  5. DataTable中Compute计算函数

    DataTable dt = new DataTable(); //嵌套的三元运算 牛叉到五体投地 object obj = dt.Compute("iif(1000=5,1000,iif( ...

  6. Callback<> and Bind()

    Callback<> and Bind() Introduction The templated base::Callback<> class is a generalized ...

  7. CentOS6.x操作系统自带的 DM Multipath(DMMP)多路径软件配置说明。

    CentOS系统下的多路径软件是操作系统自带的 DM Multipath(DMMP)工具.------------------------------------------------------- ...

  8. 目标决定人生——没有目标就失去一切 (没有目标的奋斗是浪费青春,比如交了钱却不去参加考试、让时间白白溜走。根据目标与定位来选择最合适的企业。人生要算总账)good

    没有目标就失去一切 刚毕业那会儿,幼稚得可笑,老跟同学打电话,明面上聊聊近况,暗地里比较.你要比我工资多一百块,心里特不平衡,凭什么呀,在学校那会儿公认的我比你强.你要带个头衔,而我啥也不是,普通员工 ...

  9. vim基础学习之搜索功能

    当我们使用vim看源码的时候,我们可能会碰到一个方法或者变量,我们想要知道这个变量在其他地方的使用情况.这时候我们经常的做法就是退出当前的文件,或者是重新切换一个终端,然后使用grep或者find等s ...

  10. dfs算法中求数列的组合

    /* 从13个书中挑选5个值,他们的组合可能是 什么, 如下代码 dfs深度遍历, 和全排列是一种方法,但是思路不同 */ public class Main { static int count = ...