直接上代码

class Pcan_com():def __init__(self):#设置canbus,用来收发数据, 设置通道和波特率.self.bus = PcanBus(channel='PCAN_USBBUS1', bitrate=500000) #消息,用来发数据,arbitration_id=0x202:CAN ID#data 为发送的数据,is_extended_id:是否为扩展帧,默认Ture(是)self.msg = can.Message(arbitration_id=0x202, data= self.link_data,is_extended_id=False)#设置过滤器,过滤ID,是否为扩展帧self.bus.set_filters([{"can_id": 0x203, "can_mask": 0xFFFF, "extended": False}])#记录初始时间self.start_time = time.time()#日志,如果想停掉就:logging.shutdown()self.fmt = "%(levelname)s: %(message)s"self.log_name = "logs.txt"logging.basicConfig(level=logging.DEBUG,format=self.fmt,filename=self.log_name,filemode="w",datefmt="%a, %d %b %Y %H:%M:%S")
    #发送函数def send_data(self,data):#清除接收缓存self.bus.flush_tx_buffer()#组装报文self.msg = can.Message(arbitration_id=0x202, data=data,is_extended_id=False)  self.msg.timestamp = time.time() - self.start_time #发送报文self.bus.send(self.msg)logging.info(f"tx: {self.msg}") #打印日志return True#接收函数def receive_data(self):rx_msg = self.bus.recv(1)if rx_msg is not None:logging.info(f"rx: {rx_msg}")return rx_msgelse:logging.error("无数据")return False

没找到清空接收缓存的方法,因为交互为主从式(此代码为主),为了确保时序,我在每次发送前都会做一次循环读取,避免缓存区的消息影响到交互节奏,代码如下:

    def send_data(self,data):#清除接收缓存self.bus.flush_tx_buffer()#循环收取,清除缓存for i in range(10):tmp_msg=self.bus.recv(0.001)  #这里接收超时设置的比较短,为了不影响正常交互节奏if tmp_msg is None:breakelse:logging.warning(f"rx: {tmp_msg}")self.msg = can.Message(arbitration_id=0x202, data=data,is_extended_id=False)self.msg.timestamp = time.time() - self.start_timeself.bus.send(self.msg)logging.info(f"tx: {self.msg}")return True

大致就是这样的,具体收发逻辑还有根据运用场景决定

本人在调试的时候出现了报错(can.interfaces.pcan.pcan.PcanCanOperationError: The receive queue was read too late),所以我在每次循环收发的开始都重置Can bus,代码如下:

self.bus.reset()

不知道有没有从根本上解决问题,但至少不报错了。

Python Pcan USB通信(基于PcanBus)相关推荐

  1. 基于AOA协议的android USB通信

    摘 要:AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议.该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设 ...

  2. C#基于LibUsbDotNet实现USB通信(一)

    网上C#USB通信的资料比较少, 基本上都是基于LibUsbDotNet 和 CyUsb, 关于打印机设备的还有一个OPOS. 本篇文章基于LibUsbDotNet. 1. 下载并安装 LibUsbD ...

  3. 基于USB通信的开关量输入输出板

    难点在于usb通信.以及上位机程序 两个方案: 1.基于stm32的,自带usb口,tqfp100封装,可以保证16输 入,16输出的i/o. 2.基于cy68013+fpga的方案,有现成的开发板, ...

  4. 多通路fpga 通信_基于USB通信的FPGA高速数据采集系统研究

    摘要:现阶段,在经济高速发展以及科学技术不断进步的大背景下,我国各行各业都得到了快速发展的良机,对数据采集系统的实际需求也越来越多,也对高速数据采集系统的实用性和精度等都提出了更高的要求.基于此,本文 ...

  5. python 蓝牙开发_基于python实现蓝牙通信代码实例

    这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装和示例 linux下安装 sudo apt ...

  6. python写安卓app控制蓝牙_基于python实现蓝牙通信代码实例

    这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装和示例 linux下安装 sudo apt ...

  7. python中串口通信的步骤及实现

    python内置的库函数确实很强大,serial库中包含了串口通信所用到的一些函数.本文用python实现了串口的一种简单通信. 代码实现: import serial#导入串口通信库 from ti ...

  8. python mpi开销_基于Python的MPI

    基于 Python 的 MPI 马亚蕾 [期刊名称] <电子制作> [年 ( 卷 ), 期] 2013(000)021 [摘要] 基于 Python 的 MPI 为 Python 程序设计 ...

  9. 【LabVIEW FPGA图形化】IP集成节点:USB通信

    目录 一.前情提要 二.FPGA蔡氏定律 三.USB外围电路 四.LabVIEW FPGA IP集成节点网表文件的编写 五.FPGA图形化程序编写 总结 一.前情提要 上一节内容介绍了图形化FPGA测 ...

最新文章

  1. 用Python进行时间序列分解和预测
  2. 团队项目第一阶段冲刺站立会议08
  3. linux中用户的权限是什么,linux中用户权限设置与更改相关介绍(上)
  4. 离散数学实验题目-关系
  5. python报错:TypeError: 'str' object is not callable
  6. [pytorch、学习] - 3.11 模型选择、欠拟合和过拟合
  7. Autofac 依赖注入框架
  8. python单元测试mock_Python单元测试的Mock是怎么回事
  9. python 类特殊方法_Python 定制类的特殊方法与授权
  10. Excel字符串截取(leftrightmid)
  11. Objective-C 中 NULL、nil、Nil、NSNull 的定义及不同
  12. 我跳槽是因为他们的显示器更大
  13. html 输入类型,HTML 输入类型(示例代码)
  14. MongoDB save()方法和insert()方法的区别
  15. 拉文大学计算机科学,美国研究生语言双录取,这些大学有你中意的吗?
  16. 逆水寒服务器维护能进游戏吗,逆水寒7月12日几点可以进游戏 逆水寒更新维护公告...
  17. 2018年9月计算机二级考试《MS Office高级应用》基础自测卷
  18. Unity Shader 简单地挖一个洞
  19. JVM--Java虚拟机
  20. 深度理解GRUU-Net

热门文章

  1. 天猫精灵智能设备对接—前篇(1)
  2. 为什么只能取出购票信息单_如何换取购票信息单 取票取出的是购票信息单
  3. Json简介与基本使用
  4. 【阅读笔记】《CFUN: Combining Faster R-CNN and U-net Network for Efficient Whole Heart Segmentation》
  5. 对象、继承、封装、多态、抽象类的组合应用:编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将在该雇员的工资上增加100元发给他。
  6. 第十八章 ESP32的WebSocket服务器
  7. 计算机毕业设计ssm图书馆自习室占座选座zg09h系统+程序+源码+lw+远程部署
  8. SDN软件定义网络 学习笔记(4)--数据平面
  9. elementary OS 5 Juno (Pantheon) 安装后配置总结(干货很多)
  10. Python批量复制文件夹及其内容、并按Excel表格遍历重命名文件夹