一、参考文档

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. vue2.0-transition动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. BZOJ3511: 土地划分

    [传送门:BZOJ3511] 简要题意: 给出n个点,m条边,每个点有A和B两种形态,一开始1为A,n为B 给出VA[i]和VB[i],表示第i个点选择A和B形态的价值 每条边给出x,y,EA,EB, ...

  3. Visual Code的调试

    Run 'Debug: Download .NET Core Debugger' in the Command Palette or open a .NET project directory to ...

  4. Unity(IoC)

    一.什么是IoC? IoC(Inversion of Control,控制反转)又称“依赖注入”(Dependence Injection,DI). 控制反转就是创建对象的权利由开发人员控制,转为由容 ...

  5. jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?

    1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自 ...

  6. POJ2411 状态压缩dp

    POJ2411 http://poj.org/problem?id=2411

  7. SQL Server 2005高可用性模式下创建数据库镜像

    SQL Server 2005高可用性模式下创建数据库镜像   高可用性模式下创建数据库镜像 第一步: --创建镜像用数据库-在主服务器上操作 create database db_mirror on ...

  8. OpenCV中InputArray和OutputArray使用方法

    原文链接:http://blog.csdn.net/yang_xian521/article/details/7755101 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArr ...

  9. VC++中的延时函数

    原文链接:http://www.educity.cn/develop/478947.html VC中提供了很多关于时间操作的函数,编写程序时我们可以跟据定时的不同精度要求选择不同的时间函数来完成定时和 ...

  10. 动态调用web服务 --WSHelper.cs

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Net;us ...