CAN测试软件与接口函数使用手册(致远电子 ControlCAN)

广州致远电子(ZLG)CAN 接口卡通用测试软件 CANTest + ControlCAN 接口函数库官方手册 V3.12(2017-08),58 页文本型 PDF。液相芯片项目数据采集卡(USBCAN 类)二次开发的核心参考。

一、CANTest 通用测试软件

适用于 ZLGCAN 系列全部板卡的收发/查询测试工具。

设备操作流程:选设备类型(型号+索引号+通道)→ 滤波设置(可选)→ 启动 CAN → 收发数据。

关键功能点:

  • 发送:支持自发自收模式(仅测试用,实际应用中用正常发送);高级操作可一次设最多 100 帧、帧间隔/批间隔可设。
  • 接收时间标识:原始值 = 板卡上电计时,0.1ms 单位,仅智能卡有;另一显示为电脑实际时间。
  • DBC 解码:导入 DBC 文件解码(默认自带 J1939),支持按 ID 分类显示、数据变化标红。
  • 实时保存:长时间记录报文时缓冲区满自动转存 CSV;不能保存到 C 盘。
  • 总线利用率与错误信息(TEC/REC 计数器+错误时间)实时监测。
  • 帧 ID 显示:二/十/十六进制;真实 ID(右对齐)或兼容 SJA1000 格式(左对齐)。

二、ControlCAN 接口函数库

设计特点(驱动工作原理)

  1. 接收免丢帧:驱动层自动中断压入缓冲区(13 万帧,OpenDevice 后即开辟),用户只需调 VCI_Receive 集中提取,可设阻塞超时避免死等;用户不直接操作中断,避免丢帧/死机。
  2. 多帧发送:一次调用发多帧,返回实际成功帧数;发送重试阻塞超时默认 1.5–4 秒。
  3. 统一动态库跨设备移植:全套致远 CAN 卡同一套 DLL,改设备类型号即可移植(如设备类型 4→16 即从 USBCAN-II 移植到 PCI-9820I)。
  4. 支持 Windows 32/64 全版本、Linux(含 libcontrolcan.so)、VxWorks。

设备类型号(常用)

USBCAN-I/I+=3,USBCAN-II/II+=4,PCI-9820=5,CANET-UDP=12,CANET-TCP=17,PCI-5010-U=19,USBCAN-E-U=20,USBCAN-2E-U=21,PCI-5020-U=22,USBCAN-4E-U=31,CANDTU=32,USBCAN-8E-U=34。

核心数据结构

  • VCI_CAN_OBJ(CAN 帧):ID、TimeStamp(0.1ms 板卡计时)、TimeFlag、SendType(0 正常自动重发 / 1 单次发送 / 2 自发自收 / 3 单次自发自收)、RemoteFlag(远程帧)、ExternFlag(扩展帧 29 位 ID)、DataLen(≤8)、Data[8]。
  • VCI_INIT_CONFIG:AccCode/AccMask(SJA1000 验收码/屏蔽码,屏蔽码位 0=有关位;全收推荐 AccMask=0xFFFFFFFF)、Filter(1 单滤波/0 双滤波)、Timing0/Timing1(波特率 BTR0/BTR1)、Mode(0 正常/1 只听)。
    • 常见波特率(采样点 87.5%):500Kbps→0x00/0x1C;250K→0x01/0x1C;125K→0x03/0x1C;1M→0x00/0x14。
    • 注意:PCI-50xx-U / USBCAN-x-E-U / CANDTU 类新卡波特率与滤波不在 InitCAN 里设,必须走 VCI_SetReference。
  • VCI_ERR_INFO:ErrCode + Passive_ErrData[3](消极错误捕获码+REC+TEC)+ ArLost_ErrData(仲裁丢失位)。
  • VCI_CAN_STATUS:SJA1000 寄存器组。RE/TE 错误计数器 0–127 错误主动、128–254 错误被动、255 总线关闭。

函数集(14 个 VCI_* 函数)

标准流程:VCI_OpenDevice → [VCI_SetReference] → VCI_InitCAN → VCI_StartCAN → VCI_Transmit / VCI_GetReceiveNum + VCI_Receive → VCI_ResetCAN → VCI_CloseDevice

  • VCI_GetReceiveNum 先查缓冲区帧数再收,节约资源。
  • VCI_Receive 的 WaitTime 参数:毫秒阻塞,-1 一直等;返回 0xFFFFFFFF 表示失败需 ReadErrInfo。
  • VCI_ResetCAN 用于总线关闭(Bus-Off)恢复,无需重新初始化;CANET-TCP 下会断网需重新 StartCAN;CANDTU 关设备前必须对每个已启动通道 ResetCAN。
  • VCI_SetReference/GetReference 是”万能特殊设置口”,RefType 含义随设备类型变:波特率(-U 系为 BTR 值或 Hz 值)、滤波表格(VCI_FILTER_RECORD:ExtFrame+Start+End ID 区间)、硬件自动定时发送列表(VCI_AUTO_SEND_OBJ,最多 32 帧,0.5ms 单位周期,无需上位机干预)、CANET 的 IP/端口/客户端模式、报文通道转发(USBCAN-4E-U/8E-U)、指示灯。
    • 新 -U 卡波特率编码示例:0x060003=1M、0x060007=500K、0x1C0008=250K、0x160023=100K、0x1C002C=50K、0x1C00E0=10K。
    • 发送重发超时 RefType=4 设置,默认 4000ms,建议 ≥1500ms 否则 Transmit 可能总失败。

CANDTU 文本配置(Ini 格式)

[GEN] CfgType/NChan + [CAN0]/[CAN1] 节:BpsBRP/SWJ/Seg1/Seg2/Smp 位时序参数(f_CANCLK=24MHz,BitRate = f_Tq/(1+0+Seg1+2+Seg2+1));滤波 FltM/FltT 各 8 组 32 位屏蔽码+验收码(位 29=EXT、位 30…REM/ID 布局,标准帧 ID 占 bit29-19,扩展帧占 bit29-1)。坑:滤波规则不足 8 条时必须用已有规则重复填充剩余条目。Mode 配 128=正常模式、0=只听。

错误码速查

CAN 控制器类 0x01–0x20(FIFO 溢出/错误报警/消极错误/仲裁丢失/总线错误/Bus-Off);通用类 0x100–0x8000(设备已打开/未打开/不存在/缓冲区溢出/装载 DLL 失败/内存不足);CANET 类 0x10000+(端口占用/Socket 失败/发送过快)。

工程集成

  • 文件:ControlCAN.h / .lib / .dll + kerneldlls 文件夹。
  • VC:include + 附加依赖项加 lib;VB:Declare Function Lib “ControlCAN”。
  • Linux:libcontrolcan.so + kerneldlls 拷 /lib 后 ldconfig;gcc 加 -lcontrolcan。

工程关联

  • 液相芯片项目 CY7C6013A 采集卡走 USB 而非 CAN,本手册对应 ControlCAN 二次开发库目录下的上位机联调工具链。
  • 自发自收(SendType=2)是判断 CAN 卡硬件好坏的标准手段;Bus-Off 用 ResetCAN 快速恢复——仪器运动控制总线调试常用套路。

微流控化学发光中位机通信协议-20190429版 · 流式细胞仪通讯协议与液流系统设计