周立功CANFD200U二次开发(基于Python)

周立功CANFD200U二次开发(基于Python)

1 Python环境搭建

Python我用的版本是3.13,建议使用3.8以上版本,具体环境搭建我这里就不多说了,网上的教程很多。

2 下载二次开发所需资料

官网地址:https://manual.zlg.cn/web/#/55
在这里插入图片描述

在这里插入图片描述

具体下载链接

3 demo测试

3.1 示例代码

打开上面下载的二次开发资料,找到USBCANFD系列_文件夹,这个示例是匹配CANFD200U的。

在这里插入图片描述

注:kerneldllszlgcan.dll是CAN盒运行的基本环境,不能脱离这个单独运行py文件,zlgcan.py是官方示例代码。

若是其他型号的CAN盒,可以查看里面有个型号的说明文档。

在这里插入图片描述

CANFD200U官方示例代码如下:
zlgcan.py:

# -*- coding:utf-8 -*-
#  zlgcan.py
#
#  ~~~~~~~~~~~~
#
#  ZLGCAN API
#
#  ~~~~~~~~~~~~
#
#  ------------------------------------------------------------------
#  Language: Python 2.7, 3.6
#  ------------------------------------------------------------------
#
from ctypes import *
import platform
import threading

import time

ZCAN_DEVICE_TYPE = c_uint

INVALID_DEVICE_HANDLE  = 0
INVALID_CHANNEL_HANDLE = 0

'''
 Device Type
'''
ZCAN_PCI5121          = ZCAN_DEVICE_TYPE(1)
ZCAN_PCI9810          = ZCAN_DEVICE_TYPE(2)
ZCAN_USBCAN1          = ZCAN_DEVICE_TYPE(3)
ZCAN_USBCAN2          = ZCAN_DEVICE_TYPE(4)
ZCAN_PCI9820          = ZCAN_DEVICE_TYPE(5)
ZCAN_CAN232           = ZCAN_DEVICE_TYPE(6)
ZCAN_PCI5110          = ZCAN_DEVICE_TYPE(7)
ZCAN_CANLITE          = ZCAN_DEVICE_TYPE(8)
ZCAN_ISA9620          = ZCAN_DEVICE_TYPE(9)
ZCAN_ISA5420          = ZCAN_DEVICE_TYPE(10)
ZCAN_PC104CAN         = ZCAN_DEVICE_TYPE(11)
ZCAN_CANETUDP         = ZCAN_DEVICE_TYPE(12)
ZCAN_CANETE           = ZCAN_DEVICE_TYPE(12)
ZCAN_DNP9810          = ZCAN_DEVICE_TYPE(13)
ZCAN_PCI9840          = ZCAN_DEVICE_TYPE(14)
ZCAN_PC104CAN2        = ZCAN_DEVICE_TYPE(15)
ZCAN_PCI9820I         = ZCAN_DEVICE_TYPE(16)
ZCAN_CANETTCP         = ZCAN_DEVICE_TYPE(17)
ZCAN_PCIE_9220        = ZCAN_DEVICE_TYPE(18)
ZCAN_PCI5010U         = ZCAN_DEVICE_TYPE(19)
ZCAN_USBCAN_E_U       = ZCAN_DEVICE_TYPE(20)
ZCAN_USBCAN_2E_U      = ZCAN_DEVICE_TYPE(21)
ZCAN_PCI5020U         = ZCAN_DEVICE_TYPE(22)
ZCAN_EG20T_CAN        = ZCAN_DEVICE_TYPE(23)
ZCAN_PCIE9221         = ZCAN_DEVICE_TYPE(24)
ZCAN_WIFICAN_TCP      = ZCAN_DEVICE_TYPE(25)
ZCAN_WIFICAN_UDP      = ZCAN_DEVICE_TYPE(26)
ZCAN_PCIe9120         = ZCAN_DEVICE_TYPE(27)
ZCAN_PCIe9110         = ZCAN_DEVICE_TYPE(28)
ZCAN_PCIe9140         = ZCAN_DEVICE_TYPE(29)
ZCAN_USBCAN_4E_U      = ZCAN_DEVICE_TYPE(31)
ZCAN_CANDTU_200UR     = ZCAN_DEVICE_TYPE(32)
ZCAN_CANDTU_MINI      = ZCAN_DEVICE_TYPE(33)
ZCAN_USBCAN_8E_U      = ZCAN_DEVICE_TYPE(34)
ZCAN_CANREPLAY        = ZCAN_DEVICE_TYPE(35)
ZCAN_CANDTU_NET       = ZCAN_DEVICE_TYPE(36)
ZCAN_CANDTU_100UR     = ZCAN_DEVICE_TYPE(37)
ZCAN_PCIE_CANFD_100U  = ZCAN_DEVICE_TYPE(38)
ZCAN_PCIE_CANFD_200U  = ZCAN_DEVICE_TYPE(39)
ZCAN_PCIE_CANFD_400U  = ZCAN_DEVICE_TYPE(40)
ZCAN_USBCANFD_200U    = ZCAN_DEVICE_TYPE(41)
ZCAN_USBCANFD_100U    = ZCAN_DEVICE_TYPE(42)
ZCAN_USBCANFD_MINI    = ZCAN_DEVICE_TYPE(43)
ZCAN_CANFDCOM_100IE   = ZCAN_DEVICE_TYPE(44)
ZCAN_CANSCOPE         = ZCAN_DEVICE_TYPE(45)
ZCAN_CLOUD            = ZCAN_DEVICE_TYPE(46)
ZCAN_CANDTU_NET_400   = ZCAN_DEVICE_TYPE(47)
ZCAN_CANFDNET_200U_TCP     = ZCAN_DEVICE_TYPE(48)
ZCAN_CANFDNET_200U_UDP     = ZCAN_DEVICE_TYPE(49)
ZCAN_CANFDWIFI_100U_TCP    = ZCAN_DEVICE_TYPE(50)
ZCAN_CANFDWIFI_100U_UDP    = ZCAN_DEVICE_TYPE(51)
ZCAN_CANFDNET_400U_TCP     = ZCAN_DEVICE_TYPE(52)
ZCAN_CANFDNET_400U_UDP     = ZCAN_DEVICE_TYPE(53)
ZCAN_CANFDBLUE_200U        = ZCAN_DEVICE_TYPE(54)
ZCAN_CANFDNET_100U_TCP     = ZCAN_DEVICE_TYPE(55)
ZCAN_CANFDNET_100U_UDP     = ZCAN_DEVICE_TYPE(56)
ZCAN_CANFDNET_800U_TCP     = ZCAN_DEVICE_TYPE(57)
ZCAN_CANFDNET_800U_UDP     = ZCAN_DEVICE_TYPE(58)
ZCAN_USBCANFD_800U         = ZCAN_DEVICE_TYPE(59)
ZCAN_PCIE_CANFD_100U_EX     = ZCAN_DEVICE_TYPE(60)
ZCAN_PCIE_CANFD_400U_EX     = ZCAN_DEVICE_TYPE(61)
ZCAN_PCIE_CANFD_200U_MINI   = ZCAN_DEVICE_TYPE(62)
ZCAN_PCIE_CANFD_200U_M2     = ZCAN_DEVICE_TYPE(63)
ZCAN_PCIE_CANFD_200U_EX     = ZCAN_DEVICE_TYPE(62)
ZCAN_CANFDDTU_400_TCP       = ZCAN_DEVICE_TYPE(64)
ZCAN_CANFDDTU_400_UDP       = ZCAN_DEVICE_TYPE(65)
ZCAN_CANFDWIFI_200U_TCP     = ZCAN_DEVICE_TYPE(66)
ZCAN_CANFDWIFI_200U_UDP     = ZCAN_DEVICE_TYPE(67)
ZCAN_CANFDDTU_800ER_TCP     = ZCAN_DEVICE_TYPE(68)
ZCAN_CANFDDTU_800ER_UDP     = ZCAN_DEVICE_TYPE(69)
ZCAN_CANFDDTU_800EWGR_TCP   = ZCAN_DEVICE_TYPE(70)
ZCAN_CANFDDTU_800EWGR_UDP   = ZCAN_DEVICE_TYPE(71)
ZCAN_CANFDDTU_600EWGR_TCP   = ZCAN_DEVICE_TYPE(72)
ZCAN_CANFDDTU_600EWGR_UDP   = ZCAN_DEVICE_TYPE(73)
ZCAN_CANFDDTU_CASCADE_TCP   = ZCAN_DEVICE_TYPE(74)
ZCAN_CANFDDTU_CASCADE_UDP   = ZCAN_DEVICE_TYPE(75)
ZCAN_USBCANFD_400U          = ZCAN_DEVICE_TYPE(76)
ZCAN_CANFDDTU_200U          = ZCAN_DEVICE_TYPE(77)
ZCAN_CANFDBRIDGE_PLUS       = ZCAN_DEVICE_TYPE(80)
ZCAN_CANFDDTU_300U          = ZCAN_DEVICE_TYPE(81)
ZCAN_VIRTUAL_DEVICE         = ZCAN_DEVICE_TYPE(99)
'''
 Interface return status
'''
ZCAN_STATUS_ERR         = 0
ZCAN_STATUS_OK          = 1
ZCAN_STATUS_ONLINE      = 2
ZCAN_STATUS_OFFLINE     = 3
ZCAN_STATUS_UNSUPPORTED = 4

'''
 CAN type
'''
ZCAN_TYPE_CAN    = c_uint(0)
ZCAN_TYPE_CANFD  = c_uint(1)

def input_thread():
   input()

'''
 Device information
'''
class ZCAN_DEVICE_INFO(Structure):
    _fields_ = [("hw_Version", c_ushort),
                ("fw_Version", c_ushort),
                ("dr_Version", c_ushort), 
                ("in_Version", c_ushort), 
                ("irq_Num", c_ushort),
                ("can_Num", c_ubyte),
                ("str_Serial_Num", c_ubyte * 20),
                ("str_hw_Type", c_ubyte * 40),
                ("reserved", c_ushort * 4)]

    def __str__(self):
        return "Hardware Version:%s\nFirmware Version:%s\nDriver Interface:%s\nInterface Interface:%s\nInterrupt Number:%d\nCAN Number:%d\nSerial:%s\nHardware Type:%s\n" %(
                self.hw_version, self.fw_version, self.dr_version, self.in_version, self.irq_num, self.can_num, self.serial, self.hw_type)
                
    def _version(self, version):
        return ("V%02x.%02x" if version // 0xFF >= 9 else "V%d.%02x") % (version // 0xFF, version & 0xFF)
    
    @property
    def hw_version(self):
        return self._version(self.hw_Version)

    @property
    def fw_version(self):
        return self._version(self.fw_Version)
    
    @property
    def dr_version(self):
        return self._version(self.dr_Version)
    
    @property
    def in_version(self):
        return self._version(self.in_Version)

    @property
    def irq_num(self):
        return self.irq_Num

    @property
    def can_num(self):
        return self.can_Num

    @property
    def serial(self):
        serial = ''
        for c in self.str_Serial_Num:
            if c > 0: 
               serial += chr(c)
            else:
                break 
        return serial

    @property
    def hw_type(self):
        hw_type = ''
        for c in self.str_hw_Type:
            if c > 0:
                hw_type += chr(c)
            else:
                break
        return hw_type

class _ZCAN_CHANNEL_CAN_INIT_CONFIG(Structure):
    _fields_ = [("acc_code", c_uint),
                ("acc_mask", c_uint),
                ("reserved", c_uint),
                ("filter",   c_ubyte),
                ("timing0",  c_ubyte),
                ("timing1",  c_ubyte),
                ("mode",     c_ubyte)]

class _ZCAN_CHANNEL_CANFD_INIT_CONFIG(Structure):
    _fields_ = [("acc_code",     c_uint),
                ("acc_mask",     c_uint),
                ("abit_timing",  c_uint),
                ("dbit_timing",  c_uint),
                ("brp",          c_uint
USBCANFD-U200是一款基于USB接口的高速CAN-FD转换器,支持ISO 11898-1/2/5、CAN2.0A/B和CAN FD协议。在进行USBCANFD-U200的脚本二次开发时,您可以按照以下步骤进行: 1. 安装USBCANFD-U200的驱动程序 在使用USBCANFD-U200之前,您需要先在计算机上安装USBCANFD-U200的驱动程序。驱动程序可以在周立功的官方网站上下载。 2. 安装Python SDK 在计算机上安装Python SDK,该SDK可以在周立功的官方网站上下载。请确保您下载并安装与您的操作系统和Python版本兼容的SDK。 3. 导入SDK 在Python脚本中导入USBCANFD-U200的SDK: ``` from zlgcan import * ``` 4. 初始化SDK 在程序开始时,需要初始化SDK,并打开USBCANFD-U200: ``` can = Can() can.open(0, 0) # 打开CAN0通道 ``` 5. 使用SDK提供的函数进行开发 根据您的需求,使用SDK提供的函数进行开发。例如,您可以使用以下代码发送CAN报文: ``` can.send(CAN_OBJ(id=0x12345678, data=[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08])) ``` 6. 关闭SDK 在程序结束时,需要关闭SDK和USBCANFD-U200: ``` can.close() ``` 注意,以上只是一个简单的例子,实际的开发可能需要更多的步骤和代码。请注意USBCANFD-U200的特性和限制,以确保您的代码可以正常运行。 另外,周立功还提供了详细的USBCANFD-U200开发文档,您可以在周立功的官方网站上找到它。该文档包含了USBCANFD-U200的详细说明和示例代码,可以帮助您更好地进行脚本二次开发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值