♂️我是纯良思安,爱技术、爱分享,更爱生活♂️
喜欢的朋友可以关注一下,下次更新不迷路
目录
支持的硬件接口
Vector CAN使用
Configuration
VectorBus
目前Python-can库支持一下硬件接口:
其他接口类型可以通过Plugin Interface,添加,也可以通过安装使用Plugin Interface的第三方软件包添加
这里以最常用的vector为例作为介绍:
Vector接口增加了Vector对CAN控制器的支持,但是目前仅支持在Windows中使用
默认情况下,该接口库使用CANalyzer的通道配置。要使用不同的应用程序,可以参考之前的配置文章Python-can库的使用(2)——配置在Vector Hardware Configuration应用程序中进行配置
需要注意的是:channel是从0开始的
[default] interface = vector channel = 0, 1 app_name = python-can
class can.interfaces.vector.VectorBus(channel, can_filters=None, poll_interval=0.01, receive_own_messages=False, timing=None, bitrate=None, rx_queue_size=16384, app_name='CANalyzer', serial=None, fd=False, data_bitrate=None, sjw_abr=2, tseg1_abr=6, tseg2_abr=3, sjw_dbr=2, tseg1_dbr=6, tseg2_dbr=3, **kwargs)
参数:
- channel(int|Sequence[int]|str)–用于创建此总线的通道索引。也可以是单个整数或逗号分隔的字符串
- can_filters(Sequence[CanFilter|CanFilterExtended]|None)–参考can.BusABC
- receive_own_messages(bool)–请参阅can。BusABC
- timing(BitTiming|BitTimingFd|None)–用于指定VectorBus接口的位定时参数的BitTiming或BitTiming Fd实例。对于CAN 2.0,时序实例的f_clocker值必须设置为8_000_0000(8MHz)或16_000_000(16MHz),对于CAN FD,则必须设置为80_000_00000(80MHz)。如果提供了此参数,则它优先于所有其他与定时相关的参数。否则,可以使用以下参数指定比特定时:标准can或fd的比特率、data_bitrate、sjw_abr、tseg1_abr、tseg2_abr、sjw _dbr、tseg1_dbr和can fd的tseg2_dbr
- poll_interval(float)–轮询间隔(以秒为单位)
- bitrate(int|None)–比特率,单位为bits/s
- rx_queue_size(int)–接收队列中的消息数(2的幂)。CAN:范围16…32768 CAN-FD:范围8192…524288
- app_name(str|None)–Vector Hardware Config中的应用程序名称。如果设置为“无”,则通道应为全局通道索引
- serial(int|None)–要使用的硬件的序列号。如果设置,通道参数指的是指定硬件上的通道。如果设置了app_name,则不必在Vector Hardware Config中预先定义
- fd(bool)–是否CAN-FD
- data_bitrate(int|None)–CAN FD中数据阶段使用的比特率。默认为仲裁比特率。
- sjw_abr(int)–总线定时值样本跳跃宽度(仲裁)
- tseg1_abr(int)–总线定时值tseg1(仲裁)
- tseg2_br(int)–总线定时值tseg2(仲裁)
- sjw_dbr(int)–总线定时值样本跳跃宽度(数据)
- tseg1_dbr(int)–总线定时值tseg1(数据)
- tseg2_dbr(int)–总线定时值tseg2(数据)
- kwargs(Any)-
RAISES:
- CanInterfaceNotImplementedError–如果当前操作系统不受支持或无法加载驱动程序。
- CanInitializationError–如果无法设置总线。这可能是也可能不是VectorInitializationError
send(msg, timeout=None)
将信息传输到CAN总线。
参数:
- msg (Message) – 一个message对象
- timeout (float | None) – 如果>0,根据驱动程序的实现,等待消息被确认或传输队列准备就绪的时间最多为几秒钟。如果超过超时,将引发异常。可能不是所有接口都支持。没有一个会无限期阻塞
RAISES:
- CanOperationError–如果发送时发生错误
RETURN TYPE:
- None
flush_tx_buffer()
刷新总线的TX缓冲区
实现不使用XL驱动程序的函数xlCanFlushTransmitQueue,因为它只适用于XL系列设备
RETURN TYPE:
- None
shutdown()
调用以执行关闭总线所需的任何特定接口的清理
可以安全地多次调用此方法
RETURN TYPE:
- None
static popup_vector_hw_configuration(wait_for_finish=0)
打开 vector hardware configuration窗口
参数:
- wait_for_filish(int)–等待用户输入的时间(以毫秒为单位)
RETURN TYPE:
- None
static get_application_config(app_name, app_channel)
在Vector Hardware Configuration中检索app信息
参数:
app_name(str)–应用程序的名称。
app_channel(int)–应用程序的通道。
RETURNS:
- 返回硬件类型、硬件索引和硬件通道的元组
RAISES:
- can.interfaces.vector.VectorInitializationError–如果vector硬件配置中不存在应用程序名称。
RETURN TYPE:
- Tuple[int | XL_HardwareType,int,int]
static set_application_config(app_name, app_channel, hw_type, hw_index, hw_channel, **kwargs)
修改Vector Hardware Configuration中的app配置
import can from can.interfaces.vector import VectorBus configs = can.detect_available_configs(interfaces=['vector']) cfg = configs[0] VectorBus.set_application_config(app_name="MyApplication", app_channel=0, **cfg)
参数:
- app_name(str)–应用程序的名称。如果新app尚不存在,则创建该app
- app_channel(int)–app的通道
- hw_type(int|XL_HardwareType)–接口的硬件类型。例如XL_硬件类型XL_HWTYPE_VIRTUAL
- hw_index(int)–如果存在多个具有相同硬件类型的接口,则接口的索引
- hw_channel(int)–接口的通道索引
- kwargs(any)-
RAISES:
- can.interfaces.vector.VectorInitializationError–如果vector硬件配置中不存在应用程序名称
RETURN TYPE:
- None
set_filters(filters=None)
- 对该总线接收的所有消息应用筛选。
- 将返回与至少一个筛选器匹配的所有消息。如果过滤器为“无”或长度为零的序列,则匹配所有消息。
- 在不传递任何筛选器的情况下调用会将应用的筛选器重置为“无”。
参数:
- filters (Sequence[CanFilter | CanFilterExtended] | None) –
可迭代字典,每个字典包含一个“can_id”、一个“can_mask”和一个可选的“扩展”键:
[{"can_id": 0x11, "can_mask": 0x21, "extended": False}]
当
&can_mask==can_id&can_mask时,过滤器匹配。如果也设置了 extended,则它只匹配
==extended的消息。否则,它仅根据仲 裁ID和掩码匹配每条消息。
RETURN TYPE:
- None
recv(timeout=None)
接收等待来自总线的消息。
参数:
- timeout(float|None)–等待message的秒数,或None无限期等待
RETURNS:
- 超时则无,或者Message对象
RAISES:
- CanOperationError–如果在读取时发生错误
RETURN TYPE:
- Message | None
send_periodic(msgs, period, duration=None, store_task=True, modifier_callback=None)
在给定的时间段开始在此总线上发送消息。
该任务将处于活动状态,直到满足以下条件之一:
- (可选)持续时间过期
- 总线实例超出范围
- 总线实例已关闭
- 调用stop_all_periodic_tasks()
- 调用任务的stop()方法
参数:
- msgs(Message | Sequence[Message)–要传输的报文
- period(float)–每条报文之间的周期(以秒为单位)
- duration(float|None)–继续发送报文的大约持续时间(以秒为单位)。如果没有提供持续时间,任务将无限期地继续
- store_task(bool)–如果为True(默认值),则任务将附加到此总线实例。禁用可改为手动管理任务
- modifier_callback(Callable[[Message],None]|None)–在发送之前应用于修改每条消息的数据的函数。回调将修改消息的数据并返回None
RETURNS:
- 已启动的任务实例。要注意的是:可以通过调用任务的stop()方法来停止任务(并且取决于修改的后端)
RETURN TYPE:
CyclicSendTaskABC
此外,需要注意:
- 消息停止发送之前的持续时间可能与用户指定的持续时间不完全相同。通常,消息将以给定的速率发送,直到至少持续秒。
- 对于具有许多短期任务的极长时间运行的总线实例,store_task==True的默认api可能不合适,因为停止的任务在与总线实例关联时仍在占用内存。
stop_all_periodic_tasks(remove_tasks=True)
停止发送使用send_periodic()启动的任何报文(如果单个任务在停止时引发异常,则结果是未定义的)
参数:
- remove_tasks(bool)–停止跟踪已停止的任务。
RETURN TYPE:
- None
Exceptions:
- exception can.interfaces.vector.VectorError(error_code, error_string, function)
Bases: CanError
- exception can.interfaces.vector.VectorInitializationError(error_code, error_string, function)
Bases: VectorError, CanInitializationError
- exception can.interfaces.vector.VectorOperationError(error_code, error_string, function)
Bases: VectorError, CanOperationError
如果文章对您有帮助,您可以“点赞、收藏、关注”,这也是我创作动力的源泉
感谢支持