当前位置: 首页 > news >正文

CANalyst—Ⅱ 连通与手动收发测试、python收发测试

目录

一、设备连通步骤 

二、手动测试步骤

三、python收发测试


一、设备连通步骤 

1. 将CANalyst—Ⅱ按照如下方式接线方式连接

实物图

2. USB一端连电脑,另一端连CANalyst—Ⅱ

 3.安装USB-CAN Tool 调试软件

除了不想安装到C盘外,其它步骤一直点下一步就行 

下载链接:

        https://pan.baidu.com/s/1-_OvIwui0VXQS46-12sa6Q?pwd=o67h 

提取码:o67h

安装完毕后:

4.运行USB-CAN Tool

4.1 USB-CAN Tool 界面菜单中,点击“设备操作-》USBCAN 测试工具”:

 4.2 接好线,插入设备,点击左上角的“打开并测试”按钮,软件会自动测试(依次打开设备->初始化 CAN1/CAN2 两个通道->CAN1 发送一个序列、CAN2 接收并校验->CAN2发送一个序列、CAN1 接收并校验->关闭设备->结果显示):

 点击后:

 此时CANalyst—Ⅱ会有灯光闪烁:

 如果出现以下结果,请按提示检查接线、终端电阻配置,插拔 USB 重新测试:

二、手动测试步骤

1.在弹出的 USB-CAN Tool 界面菜单中,点击“设备操作-》启动设备”:

 2.在接下来弹出的初始化参数对话框中,将 CAN1 通道和 CAN2 通道参数设置为相同波特率,这里将 CAN1 CAN2 的波特率配置为 500K,单击“确定”即可:

 

 3.打开成功后,在界面上选择 CAN1 通道,点击“发送”按钮发送一帧数据,此时 CAN2 通道将接收一帧相同的数据,说明 CAN1 通道发送正常,CAN2 通道接收正常。

然后切换发送通道为CAN2 通道,点击“发送”按钮发送一帧数据,此时 CAN1 通道将接收一帧相同的数据,说明 CAN2 通道发送正常,CAN1 通道接收正常。

注:如果点击发送后,没有接收到数据,请检查端子接线是否牢固!

三、python收发测试

在执行完  一、设备连通步骤  后,运行如下代码:


#python3.8.0 64位(python 32位要用32位的DLL)
#
from ctypes import *
 
VCI_USBCAN2 = 4
STATUS_OK = 1
class VCI_INIT_CONFIG(Structure):  
    _fields_ = [("AccCode", c_uint),
                ("AccMask", c_uint),
                ("Reserved", c_uint),
                ("Filter", c_ubyte),
                ("Timing0", c_ubyte),
                ("Timing1", c_ubyte),
                ("Mode", c_ubyte)
                ]  
class VCI_CAN_OBJ(Structure):  
    _fields_ = [("ID", c_uint),
                ("TimeStamp", c_uint),
                ("TimeFlag", c_ubyte),
                ("SendType", c_ubyte),
                ("RemoteFlag", c_ubyte),
                ("ExternFlag", c_ubyte),
                ("DataLen", c_ubyte),
                ("Data", c_ubyte*8),
                ("Reserved", c_ubyte*3)
                ] 
 
CanDLLName = './ControlCAN.dll' #把DLL放到对应的目录下
canDLL = windll.LoadLibrary(CanDLLName)
#Linux系统下使用下面语句,编译命令:python3 python3.8.0.py
#canDLL = cdll.LoadLibrary('./libcontrolcan.so')
 
ret = canDLL.VCI_OpenDevice(VCI_USBCAN2, 0, 0)
if ret == STATUS_OK:
    print('调用 VCI_OpenDevice成功\r\n')
if ret != STATUS_OK:
    print('调用 VCI_OpenDevice出错\r\n')
 
#初始0通道
vci_initconfig = VCI_INIT_CONFIG(0x80000008, 0xFFFFFFFF, 0, 0, 0x03, 0x1C, 0) #波特率125k,正常模式
ret = canDLL.VCI_InitCAN(VCI_USBCAN2, 0, 0, byref(vci_initconfig))
if ret == STATUS_OK:
    print('调用 VCI_InitCAN1成功\r\n')
if ret != STATUS_OK:
    print('调用 VCI_InitCAN1出错\r\n')
 
ret = canDLL.VCI_StartCAN(VCI_USBCAN2, 0, 0)
if ret == STATUS_OK:
    print('调用 VCI_StartCAN1成功\r\n')
if ret != STATUS_OK:
    print('调用 VCI_StartCAN1出错\r\n')
 
#初始1通道
ret = canDLL.VCI_InitCAN(VCI_USBCAN2, 0, 1, byref(vci_initconfig))
if ret == STATUS_OK:
    print('调用 VCI_InitCAN2 成功\r\n')
if ret != STATUS_OK:
    print('调用 VCI_InitCAN2 出错\r\n')
 
ret = canDLL.VCI_StartCAN(VCI_USBCAN2, 0, 1)
if ret == STATUS_OK:
    print('调用 VCI_StartCAN2 成功\r\n')
if ret != STATUS_OK:
    print('调用 VCI_StartCAN2 出错\r\n')
 
#通道1发送数据
ubyte_array = c_ubyte*8
a = ubyte_array(1, 2, 3, 4, 5, 6, 7, 8)
ubyte_3array = c_ubyte*3
b = ubyte_3array(0, 0, 0)
vci_can_obj = VCI_CAN_OBJ(0x1, 0, 0, 1, 0, 0,  8, a, b)#单次发送
 
ret = canDLL.VCI_Transmit(VCI_USBCAN2, 0, 0, byref(vci_can_obj), 1)
if ret == STATUS_OK:
    print('CAN1通道发送成功\r\n')
if ret != STATUS_OK:
    print('CAN1通道发送失败\r\n')
 
#通道2接收数据

#结构体数组类
import ctypes
class VCI_CAN_OBJ_ARRAY(Structure):
    _fields_ = [('SIZE', ctypes.c_uint16), ('STRUCT_ARRAY', ctypes.POINTER(VCI_CAN_OBJ))]

    def __init__(self,num_of_structs):
                                                                 #这个括号不能少
        self.STRUCT_ARRAY = ctypes.cast((VCI_CAN_OBJ * num_of_structs)(),ctypes.POINTER(VCI_CAN_OBJ))#结构体数组
        self.SIZE = num_of_structs#结构体长度
        self.ADDR = self.STRUCT_ARRAY[0]#结构体数组地址  byref()转c地址
    
rx_vci_can_obj = VCI_CAN_OBJ_ARRAY(2500)#结构体数组

ret = canDLL.VCI_Receive(VCI_USBCAN2, 0, 1, byref(rx_vci_can_obj.ADDR), 2500, 0)
#print(ret)
while ret <= 0:#如果没有接收到数据,一直循环查询接收。
        ret = canDLL.VCI_Receive(VCI_USBCAN2, 0, 1, byref(rx_vci_can_obj.ADDR), 2500, 0)
if ret > 0:#接收到一帧数据
    print('CAN2通道接收成功\r\n')
    print('ID:')
    print(vci_can_obj.ID)
    print('DataLen:')
    print(vci_can_obj.DataLen)
    print('Data:')
    print(list(vci_can_obj.Data))
 
#关闭
canDLL.VCI_CloseDevice(VCI_USBCAN2, 0) 

 

ControlCAN.dll文件下载地址:

ControlCAN.dll(64位)-Python文档类资源-CSDN下载 

 

运行结果:

相关文章:

  • 实习面试之算法准备:数学题
  • 【C++STL】String类的常用函数用法总结
  • 零基础自学前端到达到什么水平才能找工作?
  • 日本软文发稿:成功的关键与应注意之事项
  • 【机器学习】视觉基础模型的三维意识:前沿探索与局限
  • Java面试题:什么是Java中的CompletableFuture及其优势?有哪些性能提升
  • 一加手机线刷2024版,param预载失败/MSM刷机工具报错
  • 【C++进阶】哈希(万字详解)—— 学习篇(上)
  • Vue/React 前端高频面试
  • HDL FPGA 学习 - IP 模块收集,推荐书目,参考
  • 【高德地图】Android高德地图控件交互详细介绍
  • Promise 介绍与基本使用 - 学习笔记
  • 类和对象基础(C++)
  • Maven简介、安装、使用、依赖传递
  • 11.MongoDB系列之连接副本集
  • 电子与电路复习题重点大题(附答案)
  • 【精品】seata综合示例:订单-库存-扣款
  • Spring常用注解的详细介绍(包你学明白)
  • Torchtext快速入门(一)——Vocab
  • 34461A数字万用表参数
  • AI加速(四)| 衣柜般的分层存储设计
  • Linux格式化输出当前时间
  • c++类和对象中
  • ATT汇编总结_9_静态库与动态库
  • VS Code For Web 深入浅出 -- 导读篇
  • 设计模式(一)前言
  • MyBatis
  • CAD机械零件平面绘制练习六
  • 相比Vue和React,Svelte可能更适合你
  • HTTP/HTTPS/TCP原理
  • 基于TCP的socket API,让你拥有另一套自己的服务器~
  • 关于IO的探究:BIO、NIO、AIO(未完待续)