同星硬件如何使用SocketCAN进行报文收发

一、前言

1.1 socketcan

SocketCAN是由Linux内核维护的CAN协议栈,可以使用Linux内核提供的Socket API进行CAN总线的读写操作,用户只需要使用C语言实现与Socket API通讯,就可以控制CAN总线上的节点,实现数据的发送与接收。

如果想要利用socketcan控制TSCAN的设备,有一个解决方法是利用linux自带的虚拟socketcan。我们利用同星提供的linux库libTSCANApiOnLinux.so,完成一个vcan在本机的server程序,用于把socketcan的报文和libTSCAN进行互转。这种方法虽然有很多弊端,比如无法查看到正确的统计数据,但是只进行收发是没有问题的。

这种方式配置同星硬件的波特率,以及查看信息都需要在sockettscan程序中。因为vcan本身不支持波特率配置,我们也无法把统计信息告知vcan。

逻辑图如下:

同星硬件如何使用SocketCAN进行报文收发

 

二、socketcan使用

2.1 系统环境配置

如果电脑本身的系统就是linux系统,则这个步骤可以忽略。

1、通过http://releases.ubuntu.com/18.04/可以下载Ubuntu系统镜像。

同星硬件如何使用SocketCAN进行报文收发

2、在虚拟机中导入映射文件:虚拟机 ->编辑虚拟机设置 -> CD/DVD ->使用ISO 映射文件。

同星硬件如何使用SocketCAN进行报文收发

 

2.2 库文件上传

1、在桌面新建一个文件夹vcan。

同星硬件如何使用SocketCAN进行报文收发

2、通过U盘将文件夹里的文件上传到当前文件夹。

同星硬件如何使用SocketCAN进行报文收发

3、将libTSCANApiOnLinux.so、libTSH.so、sockettscan、sockettscan.cpp、TSCANDef.hpp这5个文件的属性修改为:Permissions处的Access全部选择Read and write,Group选择sudo,勾选Execute。

同星硬件如何使用SocketCAN进行报文收发

同星硬件如何使用SocketCAN进行报文收发

4、在vcan文件夹下,将libTSCANApiOnLinux.so和libTSH.so这两个库文件复制到/usr/lib/路径下。

同星硬件如何使用SocketCAN进行报文收发

 

2.3 使能vcan

1、vcan指令安装步骤:

  sudo modprobe vcan  
  sudo ip link add dev vcan0 type vcan  
  sudo ip link set vcan0 up  

同星硬件如何使用SocketCAN进行报文收发

2、测试vcan是否安装成功,用指令ifconfig -a查看信息,看到带有vcan0的信息就代表安装成功。

同星硬件如何使用SocketCAN进行报文收发

3、安装can调试工具,sudo install can-utils 。

  1. 运行sockettscan程序。

绑定到设备0的1通道,波特率500k-2M,使能终端电阻。这样通过socketcan调用vcan0就可以把报文同步到TSCAN设备中了。-b表示仲裁波特率,-d表示数据波特率,-v表示硬件的下标(下标从0开始),-c表示通道的下标(下标从1开始)。

  sudo ./sockettscan vcan0 -b=500000 -d=2000000 -v=0 -c=1 -t

同星硬件如何使用SocketCAN进行报文收发

可以通过sudo ./sockettscan -h显示帮助信息

同星硬件如何使用SocketCAN进行报文收发

 

2.4 测试设备双通道互相通信

2.4.1 硬件TC1034

1、需要将TC1034的CAN1和CAN2通过杜邦线进行连接。

通过上述方法建立vcan0和vcan1两个通道。

  sudo ip link add dev vcan1 type vcan

sudo ip link set vcan1 up

利用sockettscan绑定两个通道:关于多通道使用需要注意,每一个sockettscan用来连接单个TSCAN硬件。多个通道可以写多次(vcan0名称需要在最前面),多个硬件设备,可以在多个终端调用sockettscan实现。

  sudo ./sockettscan vcan0 -b=500000 -d=2000000 -v=0 -c=1 -t vcan1 -b=500000 -d=2000000 -v=0 -c=2 -t

同星硬件如何使用SocketCAN进行报文收发

2、通过cansend和candump测试虚拟can数据收发。分别打开两个终端,分别负责数据接收和发送。

先启动接收指令candump,它会阻塞等待数据。然后cansend发送数据,效果如下:

同星硬件如何使用SocketCAN进行报文收发

 

2.4.2 硬件TC1034和TC1016P

1、需要将TC1034的CAN1和TC1016P的CAN1通过杜邦线进行连接。

利用sockettscan绑定两个通道。

绑定通道1。

  sudo ./sockettscan vcan0 -b=500000 -d=2000000 -v=0 -c=1 -t

同星硬件如何使用SocketCAN进行报文收发

绑定通道2。

  sudo ./sockettscan vcan1 -b=500000 -d=2000000 -v=1 -c=1 -t

同星硬件如何使用SocketCAN进行报文收发

2、通过cansend和candump测试虚拟can数据收发。分别打开两个终端,分别负责数据接收和发送。

同星硬件如何使用SocketCAN进行报文收发

 

三、问题Q&A

3.1 sudo: ./sockettscan: command not found

同星硬件如何使用SocketCAN进行报文收发

1、选择sockettscan文件,打开Properties窗口。

同星硬件如何使用SocketCAN进行报文收发

2、在Permissions处的Access全部选择Read and write,Group选择sudo,勾选Execute。

同星硬件如何使用SocketCAN进行报文收发

 

3.2 cannot open shared object file

同星硬件如何使用SocketCAN进行报文收发

在vcan文件夹下,将libTSCANApiOnLinux.so和libTSH.so这两个库文件复制到/usr/lib/路径下。

同星硬件如何使用SocketCAN进行报文收发

再次运行连接硬件的命令。

同星硬件如何使用SocketCAN进行报文收发

更多干货内容可以关注公众号了解更多:

同星硬件如何使用SocketCAN进行报文收发

声明:本站内容资源均来源于网友分享及网络公开合法渠道,但我们不对这些内容的观点、描述的准确性负责,也不保证所有信息的原创性、真实性、完整性及即时性。对于本站所含文章或资料的版权问题,如您发现有侵犯版权的情况,请联系我们进行处理。同时,我们提倡将本站内容用于个人学习交流,严禁未授权的商业用途,否则由此产生的法律后果由使用者自行承担。感谢支持!
技术分享

关于同星硬件接口卡及TSMaster软件常见问题Q&A指南

2024-6-3 17:16:11

三电系统技术分享

最新12款多合一电驱动产品盘点

2024-6-3 20:51:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索