class QCanBusDevice#

类的QCanBusDevice是 CAN 总线的接口类。了解更多…

Inheritance diagram of PySide6.QtSerialBus.QCanBusDevice

摘要

方法

虚方法#

信号#

静态函数#

注意

此文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译问题,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来让我们知道。

详细描述#

QCanBusDevice 与一个 CAN 插件通信,为用户提供便捷的 API。在创建对象期间必须指定 CAN 插件。

CanBusError#

此枚举描述了所有可能的错误条件。

常量

描述

QCanBusDevice.NoError

没有发生错误。

QCanBusDevice.ReadError

读操作期间发生错误。

QCanBusDevice.WriteError

写操作期间发生错误。

QCanBusDevice.ConnectionError

尝试打开插件时发生错误。

QCanBusDevice.ConfigurationError

尝试设置配置参数时发生错误。

QCanBusDevice.UnknownError

发生了未知错误。

QCanBusDevice.OperationError

尝试了一个在设备状态不允许时进行的操作。此枚举是在 Qt 5.14 中引入的。

QCanBusDevice.TimeoutError

等待写入或接收帧时发生超时。此枚举是在 Qt 5.14 中引入的。

CanBusDeviceState#

此枚举描述了所有可能的设备状态。

常量

描述

QCanBusDevice.UnconnectedState

设备已断开连接。

QCanBusDevice.ConnectingState

设备正在连接。

QCanBusDevice.ConnectedState

设备已连接到CAN总线。

QCanBusDevice.ClosingState

设备正在关闭。

class CanBusStatus#

此枚举表示可能的CAN总线状态值。

常量

描述

QCanBusDevice.CanBusStatus.Unknown

CAN总线状态未知(例如,不被CAN插件支持)。

QCanBusDevice.CanBusStatus.Good

CAN控制器完全正常运作。

QCanBusDevice.CanBusStatus.Warning

CAN控制器处于警告状态。

QCanBusDevice.CanBusStatus.Error

CAN控制器处于错误状态(不再发送CAN帧)。

QCanBusDevice.CanBusStatus.BusOff

CAN控制器处于总线关闭状态(未连接到CAN总线)。

class ConfigurationKey#

此枚举描述了CAN总线连接的可能配置选项。

常量

描述

QCanBusDevice.RawFilterKey

此配置确定当前设备接受的CAN总线帧类型。期望的值是 QList<QCanBusDevice::Filter>。传递空列表将清除以前设置的所有筛选器,包括默认筛选器。有关更多详细信息,请参阅 Filter

QCanBusDevice.ErrorFilterKey

此密钥定义应通过当前连接转发哪种类型的错误。关联的值应具有类型 FrameErrors

QCanBusDevice.LoopbackKey

此密钥定义CAN总线设备是否应处于回环模式。回环意味着,只要在CAN总线上发送CAN帧,就会将此帧的本地回声发送到所有连接到此CAN设备的应用程序。此密钥的期望值是 bool

QCanBusDevice.ReceiveOwnKey

此密钥定义此CAN设备是否接收其发送的帧。可以用来检查传输是否成功。此密钥的期望值是 bool

QCanBusDevice.BitRateKey

此密钥定义CAN比特率,以每秒比特数计。使用CAN FD时,如果设置了 hasBitrateSwitch(),则可以在更高速的数据比特率下发送有效载荷。在这种情况下,QCanBusDevice::BitRateKey 仅用于CAN ID仲裁阶段。另请参阅 QCanBusDevice::DataBitRateKey

QCanBusDevice.CanFdKey

此密钥定义是否启用发送和接收CAN FD帧。此密钥的期望值是 bool

QCanBusDevice.DataBitRateKey

此密钥定义CAN FD有效载荷比特率,以每秒比特数计。CAN FD允许在 hasBitrateSwitch() 标志下以更高的数据比特率传输帧的有效载荷。在完成在规范比特率下的仲裁阶段的仲裁之后。此枚举值在Qt 5.9中引入。另请参阅 QCanBusDevice::BitRateKey

QCanBusDevice.ProtocolKey

此密钥允许指定另一个协议。目前,此参数只能用于SocketCAN插件。此枚举值在Qt 5.14中引入。

QCanBusDevice.UserKey

此密钥定义自定义密钥的起始范围。其最常见的目的是允许提供平台特定的配置选项。

class Direction#

(继承自 enum.Flag) 该枚举描述了可能的数据传输方向。

常量

描述

QCanBusDevice.Input

输入方向。

QCanBusDevice.Output

输出方向。

QCanBusDevice.AllDirections

双向,输入和输出。

__init__([parent=None])#
参数::

parentQObject

使用指定的 parent 构造一个串行总线设备。

busStatus()#
返回类型::

CanBusStatus

返回当前的CAN总线状态。如果无法请求状态,则返回 QCanBusDevice::UnknownStatus。

注意

此函数可能不是所有的CAN插件都实现。请参阅插件帮助页面以获取更多信息。可以使用 hasBusStatus() 函数在运行时检查所使用的CAN插件是否支持请求CAN总线状态。

clear([direction=QCanBusDevice.Direction.AllDirections])#
参数::

directionDirection 的组合

根据 direction 清除设备的输入或输出缓冲区。

此函数仅操作于 QCanBusDevice 缓冲区。已经写入CAN驱动程序或CAN硬件层的帧,或尚未从这些层中读取的帧,不会被此函数清除。

注意

仅对缓冲设备可以清除输出缓冲区。

clearError()#

清除最后一个设备错误的ID和可读描述。

CAN总线实现必须使用此函数来更新设备的状态。

abstract close()#

该函数负责关闭CAN总线连接。实现必须确保实例的state()设置为UnconnectedState

该函数最重要的任务是关闭与CAN设备的套接字并调用setState()

另请参阅

disconnectDevice()

configurationKeys()#
返回类型::

列表QCanBusDevice.ConfigurationKey

返回CAN总线连接使用的键列表。

键的意义等同于ConfigurationKey。如果一个键没有明确提及,则使用平台对该相关键的默认设置。

configurationParameter(key)#
参数::

ConfigurationKey

返回类型::

对象

返回分配给ConfigurationKey键的当前值;否则返回无效QVariant。

connectDevice()#
返回类型::

布尔型

将设备连接到CAN总线。成功时返回true;否则返回false

该函数在其实现中调用open()

另请参阅

disconnectDevice()

static createDeviceInfo(plugin, name, isVirtual, isFlexibleDataRateCapable)#
参数::
  • plugin – 字符串

  • name – 字符串

  • isVirtual – 布尔值

  • isFlexibleDataRateCapable – 布尔值

返回类型::

QCanBusDeviceInfo

static createDeviceInfo(plugin, name, serialNumber, description, alias, channel, isVirtual, isFlexibleDataRateCapable)
参数::
  • plugin – 字符串

  • name – 字符串

  • serialNumber – 字符串

  • description – 字符串

  • alias – 字符串

  • channel – 整数

  • isVirtual – 布尔值

  • isFlexibleDataRateCapable – 布尔值

返回类型::

QCanBusDeviceInfo

dequeueOutgoingFrame()#
返回类型::

QCanBusFrame

返回内部待发送帧列表中的下一个 QCanBusFrame;否则返回一个无效的 QCanBusFrame。返回的帧将从内部列表中移除。

deviceInfo()#
返回类型::

QCanBusDeviceInfo

为当前的 QCanBusDevice 返回一个 QCanBusDeviceInfo。如果该函数没有由 QCanBusDevice 的子类实现,则返回一个默认构造的对象。

disconnectDevice()#

断开设备与CAN总线之间的连接。

此函数的实现部分调用了 close()

注意

只有当 connectDevice() 返回 true 时,才应调用此函数。

另请参阅

connectDevice()()

enqueueOutgoingFrame(newFrame)#
参数::

newFrameQCanBusFrame

newFrame 追加到内部 outgoing frames 列表,可以通过 writeFrame() 访问。

子类在写入新帧时必须调用此函数。

enqueueReceivedFrames(newFrames)#
参数::

newFrames – QCanBusFrame 列表

newFrames 追加到内部 frames 列表,可以使用 readFrame() 访问,并触发 framesReceived() 信号。

子类在接收到帧时必须调用此函数。

error()#
返回类型::

CanBusError

返回上次发生的错误。错误值始终设置为上次发生的最后一个错误,并且永远不会重置。

另请参阅

setError() errorString()

errorOccurred(arg__1)#
参数::

arg__1CanBusError

当发生错误时,会发出此信号。

errorString()#
返回类型::

str

返回上次发生的设备错误的可读描述。

另请参阅

error()

framesAvailable()#
返回类型::

int

返回可用帧的数量。如果没有可用帧,此函数返回 0。

framesReceived()#

当接收到一个或多个帧时,会发出此信号。应使用 readFrame()framesAvailable() 来读取帧。

framesToWrite()#
返回类型::

int

对于缓冲设备,此函数返回等待写入的帧数。对于非缓冲设备,此函数始终返回零。

注意

在CAN驱动程序和CAN硬件层中可能会有额外的缓冲。因此,如果此函数返回零,这并不意味着所有CAN帧都已写入CAN总线。

另请参阅

clear()writeFrame()

framesWritten(framesCount)#
参数::

framesCount – int

每次将帧的有效负载写入CAN总线时,都会发出此信号。在这次有效负载中写入的帧数由 framesCount 参数设置。

hasBusStatus()#
返回类型::

布尔型

如果CAN插件支持请求CAN总线状态,则返回true。

另请参阅

busStatus()

hasOutgoingFrames()#
返回类型::

布尔型

如果内部要发送的帧列表不为空,则返回 true;否则返回 false

abstract interpretErrorFrame(errorFrame)#
参数::

errorFrameQCanBusFrame

返回类型::

str

frame 解释为错误帧,并返回错误的人读描述。

如果 frame 不是一个错误帧,则返回的字符串为空。

abstract open()#
返回类型::

布尔型

此函数通过 connectDevice() 调用。子类必须提供一个返回 true(如果CAN总线连接可以建立)或 false 的实现。在调用此函数时,QCanBusDevice 实现确保设备的状态显示为 ConnectingState

实现必须确保在成功的情况下,实例的 state() 设置为 ConnectedState;否则设置为 UnconnectedState 。必须使用 setState() 来设置新的设备状态。

自定义实现负责打开套接字、QSocketNotifier的实例化,以及应用自定义和默认的 configurationParameter()

另请参阅

connectDevice()()

readAllFrames()#
返回类型::

列表 QCanBusFrame

返回队列中的所有 QCanBusFrame;否则返回一个空的 QList。返回的帧将从队列中移除。

队列按照先进先出的原则运作。

readFrame()#
返回类型::

QCanBusFrame

从队列中返回下一个 QCanBusFrame;否则返回一个空的 QCanBusFrame 。返回的帧将从队列中移除。

队列按照先进先出的原则运作。

resetController()#

执行CAN控制器重置以将CAN控制器从离线状态释放,如果可能的话。

注意

CAN控制器重置可能会干扰运行中的通信,并且可能需要一秒钟的时间才能完成。只有在此函数以恢复总线错误时调用此函数。

注意

此功能可能并非所有CAN插件都有实现。请参阅插件的帮助页面以获取更多信息。

另请参阅

busStatus()

setConfigurationParameter(key, value)#
参数::

将CAN总线连接的配置参数key设置为value。可能的键表示为ConfigurationKey

通过设置无效的QVariant可以取消设置参数。取消设置参数表示配置将重置为其默认设置。

注意

在大多数情况下,配置更改仅在重新连接后生效。

setError(errorText, arg__2)#
参数::

将最后设备错误的可读描述设置为errorText。代码errorId将错误类型分类。

CAN总线实现必须使用此函数来更新设备的状态。

setState(newState)#
参数::

newStateCanBusDeviceState

将设备的设置为newState。CAN总线实现必须使用此函数来更新设备状态。

另请参阅

state()

状态()#
返回类型::

CanBusDeviceState

返回设备的当前状态。

另请参阅

setState() stateChanged()

stateChanged(状态)#
参数::

状态CanBusDeviceState

每当设备状态改变时,都会发出此信号。新的状态由 状态 表示。

另请参阅

setState() state()

waitForFramesReceived(msecs)#
参数::

msecs – int

返回类型::

布尔型

阻塞直读到有新的帧可用于读取,且 framesReceived() 信号已发出,或直到 msecs 毫秒已过。如果 msecs-1,则该函数不会超时。

如果有新的帧可供读取且 framesReceived() 信号已发出,则返回 true;否则返回 false(如果操作超时或发生错误)。

注意

此函数将启动本地事件循环。这可能导致在执行此函数作用域阻止的同时调用其他应用程序槽。为了避免问题,此类的信号不应连接到槽。类似地,此函数永远不应在响应 framesReceived()errorOccurred() 信号时使用。

另请参阅

waitForFramesWritten()

waitForFramesWritten(msecs)#
参数::

msecs – int

返回类型::

布尔型

对于缓冲设备,此函数将等待直到所有缓冲帧都写入到设备,并且已发射 framesWritten() 信号,或直到 msecs 毫秒已过。如果 msecs 是 -1,则此函数不会超时。对于非缓冲设备,它将立即返回 false,因为 writeFrame() 不需要写缓冲区。

如果已发射 framesWritten() 信号,则返回 true;否则返回 false(即如果操作超时或发生错误)。

注意

此函数将启动本地事件循环。这可能导致在执行此函数的作用域时调用其他应用程序槽。为了避免问题,此类的信号不应连接到槽。类似地,永不应在 framesWritten()errorOccurred() 信号响应中调用此函数。

抽象 writeFrame(frame)#
参数::

frameQCanBusFrame

返回类型::

布尔型

frame 写入 CAN 总线并成功时返回 true;否则返回 false

在某些平台上,帧可能被放入队列,返回值可能仅表示成功插入队列。实际的帧将在稍后发送。因此,framesWritten() 信号是帧已转交给传输层的最终确认。如果发生错误则发射 errorOccurred()

根据CAN总线规范,类型远程传输请求 (RTR)的帧没有负载,但长度从0到8(包括)。这个长度表示远程方期望的响应负载长度。因此,当使用此函数发送RTR帧时,仍然可能需要向frame设置任意负载。任意负载的长度就是作为RTR帧大小期望设置的。

另请参阅

setPayload()