QCanBusDevice 类

QCanBusDevice 类是 CAN 总线的接口类。更多...

头文件 #include <QCanBusDevice>
CMakefind_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmakeQT += serialbus
继承 QObject

公共类型

structFilter
enumCanBusDeviceState { UnconnectedState, ConnectingState, ConnectedState, ClosingState }
enumCanBusError { NoError, ReadError, WriteError, ConnectionError, ConfigurationError, …, TimeoutError }
enum classCanBusStatus { Unknown, Good, Warning, Error, BusOff }
enumConfigurationKey { RawFilterKey, ErrorFilterKey, LoopbackKey, ReceiveOwnKey, BitRateKey, …, UserKey }
enumDirection { Input, Output, AllDirections }
flagsDirections

公共函数

QCanBusDevice(QObject *parent = nullptr)
virtual QCanBusDevice::CanBusStatusbusStatus()
voidclear(QCanBusDevice::Directions direction = Direction::AllDirections)
QList<QCanBusDevice::ConfigurationKey>configurationKeys() const
QVariantconfigurationParameter(QCanBusDevice::ConfigurationKey key) const
boolconnectDevice()
(since 6.2) virtual QCanBusDeviceInfodeviceInfo() const
voiddisconnectDevice()
QCanBusDevice::CanBusErrorerror() const
QStringerrorString() const
qint64framesAvailable() const
qint64framesToWrite() const
virtual boolhasBusStatus() const
virtual QStringinterpretErrorFrame(const QCanBusFrame &frame) = 0
QList<QCanBusFrame>readAllFrames()
QCanBusFramereadFrame()
virtual voidresetController()
virtual voidsetConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)
QCanBusDevice::CanBusDeviceStatestate() const
virtual boolwaitForFramesReceived(int msecs)
virtual boolwaitForFramesWritten(int msecs)
virtual boolwriteFrame(const QCanBusFrame &frame) = 0

信号

voiderrorOccurred(QCanBusDevice::CanBusError)
voidframesReceived()
voidframesWritten(qint64 framesCount)
voidstateChanged(QCanBusDevice::CanBusDeviceState state)

受保护的函数

voidclearError()
virtual voidclose() = 0
QCanBusFramedequeueOutgoingFrame()
voidenqueueOutgoingFrame(const QCanBusFrame &newFrame)
voidenqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)
boolhasOutgoingFrames() const
virtual boolopen() = 0
voidsetError(const QString &errorText, QCanBusDevice::CanBusError errorId)
voidsetState(QCanBusDevice::CanBusDeviceState newState)

详细信息

QCanBusDevice与CAN插件通信,为用户提供方便的API。在创建对象时必须指定CAN插件。

成员类型文档

enum QCanBusDevice::CanBusDeviceState

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

常量描述
QCanBusDevice::UnconnectedState0设备已断开连接。
QCanBusDevice::ConnectingState1设备正在连接。
QCanBusDevice::ConnectedState2设备连接到CAN总线。
QCanBusDevice::ClosingState3设备正在关闭。

enum QCanBusDevice::CanBusError

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

常量描述
QCanBusDevice::NoError0未发生错误。
QCanBusDevice::ReadError1在读取操作期间发生错误。
QCanBusDevice::WriteError2在写入操作期间发生错误。
QCanBusDevice::ConnectionError3尝试打开插件时发生错误。
QCanBusDevice::ConfigurationError4尝试设置配置参数时发生错误。
QCanBusDevice::UnknownError5发生未知错误。
QCanBusDevice::OperationError6在设备处于不允许执行操作的状态时尝试操作。此枚举自Qt 5.14引入。
QCanBusDevice::TimeoutError7等待写入或接收帧时发生超时。此枚举自Qt 5.14引入。

enum class QCanBusDevice::CanBusStatus

此枚举描述了可能的CAN总线状态值。

常量描述
QCanBusDevice::CanBusStatus::Unknown0CAN总线状态未知(例如,不受CAN插件支持)。
QCanBusDevice::CanBusStatus::Good1CAN控制器完全正常运行。
QCanBusDevice::CanBusStatus::Warning2CAN控制器处于警告状态。
QCanBusDevice::CanBusStatus::Error3CAN控制器处于错误状态(不再发送CAN帧)。
QCanBusDevice::CanBusStatus::BusOff4CAN控制器处于总线离线状态(已从CAN总线断开)。

enum QCanBusDevice::ConfigurationKey

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

常量描述
QCanBusDevice::RawFilterKey0此配置确定当前设备接受的CAN总线帧的类型。预期值是QList。传递空列表会清除所有之前设置的过滤器,包括默认过滤器。有关更多详细信息,请参阅QCanBusDevice::Filter
QCanBusDevice::ErrorFilterKey1该键定义应通过当前连接转发哪种错误类型。关联的值应为QCanBusFrame::FrameErrors类型。
QCanBusDevice::LoopbackKey2该键定义CAN总线设备是否应在环回模式下运行。环回意味着,每当在CAN总线上传输CAN帧时,此帧的本地回声将发送到连接到此CAN设备的所有应用程序。此键的预期值为bool
QCanBusDevice::ReceiveOwnKey3该键定义此CAN设备是否接收其自己的发送帧。这可以用于检查传输是否成功。此键的预期值为bool
QCanBusDevice::BitRateKey4该键定义每秒的CAN比特率。使用CAN FD时,如果QCanBusFrame::hasBitrateSwitch()被设置,则可以以更高的数据比特率传输数据负载。在这种情况下,QCanBusDevice::BitRateKey仅用于CAN ID仲裁阶段。另请参阅QCanBusDevice::DataBitRateKey
QCanBusDevice::CanFdKey5该键定义是否启用发送和接收CAN FD帧。此键的预期值为bool
QCanBusDevice::DataBitRateKey6该键定义CAN FD数据负载比特率。CAN FD允许在以正常比特率完成仲裁阶段后,使用QCanBusFrame::hasBitrateSwitch()标记以更高数据比特率传输帧的数据负载。此枚举值自Qt 5.9引入。另请参阅QCanBusDevice::BitRateKey
QCanBusDevice::ProtocolKey7该键允许指定其他协议。目前,此参数只能在SocketCAN插件中设置和使用。此枚举值自Qt 5.14引入。
QCanBusDevice::UserKey30该键定义自定义键的起始范围。它的最常见用途是允许平台特定的配置选项。

另请参阅 configurationParameter

枚举 QCanBusDevice::Direction
标志 QCanBusDevice::Directions

此枚举描述可能的数据传输方向。

常量描述
QCanBusDevice::Input1输入方向。
QCanBusDevice::Output2输出方向。
QCanBusDevice::AllDirections输入 | 输出两个方向,输入和输出。

Directions类型是QFlags<Direction>的typedef。它存储Direction值的一个或操作。

成员函数文档

[显式] QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)

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

[虚拟] QCanBusDevice::CanBusStatus QCanBusDevice::busStatus()

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

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

另请参阅 hasBusStatus()和resetController

void QCanBusDevice::clear(QCanBusDevice::Directions direction = Direction::AllDirections)

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

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

注意:仅对缓冲设备而言,清除输出缓冲区是可能的。

另请参阅framesAvailable()、readFrame()、framesToWrite()和writeFrame()。

[protected] void QCanBusDevice::clearError()

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

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

另请参阅error()、errorOccurred()和setError()。

[pure virtual protected] void QCanBusDevice::close()

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

此函数最重要的任务是关闭到CAN设备的套接字并调用QCanBusDevice::setState()。

另请参阅disconnectDevice()。

QList<QCanBusDevice::ConfigurationKey> QCanBusDevice::configurationKeys() const

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

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

QVariant QCanBusDevice::configurationParameter(QCanBusDevice::ConfigurationKey key) const

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

另请参阅setConfigurationParameter()和configurationKeys()。

bool QCanBusDevice::connectDevice()

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

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

另请参阅disconnectDevice()。

[protected] QCanBusFrame QCanBusDevice::dequeueOutgoingFrame()

从内部出站帧列表返回下一个QCanBusFrame;否则返回无效的QCanBusFrame。返回的帧从内部列表中删除。

[virtual, since 6.2] QCanBusDeviceInfo QCanBusDevice::deviceInfo() const

返回当前 QCanBusDeviceInfo 对象。如果没有在 QCanBusDevice 的子类中实现该函数,将返回默认构造的对象。

此函数自 Qt 6.2 版本引入。

void QCanBusDevice::disconnectDevice()

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

此函数的实现部分包含调用 close

注意:仅当 connectDevice() 返回 true 时才应调用此函数。

另请参阅:connectDevice()。

[protected] void QCanBusDevice::enqueueOutgoingFrame(const QCanBusFrame &newFrame)

newFrame 添加到内部发送帧列表,该列表可以通过 writeFrame() 访问。

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

[protected] void QCanBusDevice::enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)

newFrames 添加到内部帧列表,该列表可以通过 readFrame() 访问,并触发 framesReceived() 信号。

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

QCanBusDevice::CanBusError QCanBusDevice::error() const

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

另请参阅:setError() 和 errorString()。

[signal] void QCanBusDevice::errorOccurred(QCanBusDevice::CanBusError)

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

QString QCanBusDevice::errorString() const

返回最后一次设备错误发生的人阅读描述。

另请参阅:error()。

qint64 QCanBusDevice::framesAvailable() const

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

另请参阅:clear(),readFrame() 和 readAllFrames()。

[signal] void QCanBusDevice::framesReceived()

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

qint64 QCanBusDevice::framesToWrite() const

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

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

另请参阅:clear() 和 writeFrame()。

[信号] void QCanBusDevice::framesWritten(qint64 framesCount)

每当帧负载被写入到CAN总线上时,就会发出此信号。将framesCount参数设置为在此负载中写入的帧数。

[虚函数] bool QCanBusDevice::hasBusStatus() const

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

另请参阅:busStatus()。

[保护] bool QCanBusDevice::hasOutgoingFrames() const

如果内部传出帧列表不为空,则返回true;否则返回false

[纯虚函数] QString QCanBusDevice::interpretErrorFrame(const QCanBusFrame &frame)

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

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

[纯虚保护] bool QCanBusDevice::open()

connectDevice 调用此函数。子类必须提供一个实现,如果CAN总线连接已建立,则返回true;否则返回false。在进入此函数之前,QCanBusDevice 实现确保设备的状态设置为QCanBusDevice::ConnectingState

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

自定义实现负责打开套接字,实例化可能需要的QSocketNotifier,并应用自定义和默认的QCanBusDevice::configurationParameter

另请参阅:connectDevice()。

QList<QCanBusFrame> QCanBusDevice::readAllFrames()

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

队列按照FIFO原则操作。

另请参阅:clear(),framesAvailable(),和 readFrame()。

QCanBusFrame QCanBusDevice::readFrame()

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

队列按照FIFO原则操作。

另请参阅clear()、framesAvailable()和readAllFrames

[virtual] void QCanBusDevice::resetController()

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

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

注意:此功能可能不是所有CAN插件都实现。请参阅插件帮助页面以获取更多信息。

另请参阅:busStatus()。

[virtual] void QCanBusDevice::setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)

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

可以通过设置无效的QVariant来取消设置参数。取消设置参数意味着将配置重置为其默认设置。

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

另请参阅 configurationParameter

[protected] void QCanBusDevice::setError(const QString &errorText, QCanBusDevice::CanBusError errorId)

将最后设备错误的可读描述设置为errorTexterrorId对错误类型进行了分类。

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

另请参阅errorerrorOccurredclearError

[protected] void QCanBusDevice::setState(QCanBusDevice::CanBusDeviceState newState)

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

另请参阅state

QCanBusDevice::CanBusDeviceState QCanBusDevice::state() const

返回设备的当前状态。

另请参阅setState()和stateChanged

[signal] void QCanBusDevice::stateChanged(QCanBusDevice::CanBusDeviceState state)

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

另请参阅setState()和state

[virtual] bool QCanBusDevice::waitForFramesReceived(int msecs)

该函数将挂起,直到有新的帧可供读取并且已发出framesReceived() 信号,或者直到 msecs 毫秒已经过去。如果 msecs-1,则此函数将不会超时。

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

注意:此函数将启动本地事件循环。这可能导致在执行此函数作用域时其他应用槽被调用。为了避免问题,此类的信号不应连接到槽。同样,此函数绝不应在响应 framesReceived() 或 errorOccurred() 信号时调用。

另请参阅:waitForFramesWritten()。

[虚拟] bool QCanBusDevice::waitForFramesWritten(int msecs)

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

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

注意:此函数将启动本地事件循环。这可能导致在执行此函数作用域时其他应用槽被调用。为了避免问题,此类的信号不应连接到槽。同样,此函数绝不应在响应 framesWritten() 或 errorOccurred() 信号时调用。

另请参阅:waitForFramesReceived()。

[纯虚] bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)

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

在某些平台上,帧可能会放入队列中,且返回值可能只表示成功插入队列中。实际的帧将在之后发送。因此,framesWritten() 信号是帧已传递到传输层的确凿证据。如果发生错误,则发出 errorOccurred()。

根据 CAN 总线规范,远程传输请求 (RTR) 类型的帧没有有效载荷,但长度在 0 到 8(包括)之间。此长度表示远程方期望的有效载荷长度。因此,在发送 RTR 帧时,可能仍然需要在 frame 上设置任意有效载荷。任意有效载荷的长度是设置 RTR 帧大小的期望值。

另请参阅:QCanBusFrame::setPayload()。

© 2024 Qt公司有限公司。本文件中包含的文档贡献归各自所有者所有。提供的文档根据自由软件基金会发布的GNU自由文档许可证1.3版条款进行许可。Qt及其各自的标志是芬兰及/或全球其他国家的The Qt Company Ltd的商标。所有其他商标均归各自所有者所有。