このページでは

QCanBusFrame Class

QCanBusFrame は、単一の CAN フレームを表すコンテナクラスです。詳細...

ヘッダー: #include <QCanBusFrame>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus

パブリック型

class TimeStamp
enum FrameError { NoError, TransmissionTimeoutError, LostArbitrationError, ControllerError, ProtocolViolationError, …, AnyError }
flags FrameErrors
FrameId
enum FrameType { UnknownFrame, DataFrame, ErrorFrame, RemoteRequestFrame, InvalidFrame }

パブリック関数

QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)
QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)
QCanBusFrame::FrameErrors error() const
QCanBusFrame::FrameId frameId() const
QCanBusFrame::FrameType frameType() const
bool hasBitrateSwitch() const
bool hasErrorStateIndicator() const
bool hasExtendedFrameFormat() const
bool hasFlexibleDataRateFormat() const
bool hasLocalEcho() const
bool isValid() const
QByteArray payload() const
void setBitrateSwitch(bool bitrateSwitch)
void setError(QCanBusFrame::FrameErrors error)
void setErrorStateIndicator(bool errorStateIndicator)
void setExtendedFrameFormat(bool isExtended)
void setFlexibleDataRateFormat(bool isFlexibleData)
void setFrameId(QCanBusFrame::FrameId newFrameId)
void setFrameType(QCanBusFrame::FrameType newType)
void setLocalEcho(bool echo)
void setPayload(const QByteArray &data)
void setTimeStamp(QCanBusFrame::TimeStamp ts)
QCanBusFrame::TimeStamp timeStamp() const
QString toString() const
QDataStream &operator<<(QDataStream &out, const QCanBusFrame &frame)
QDataStream &operator>>(QDataStream &in, QCanBusFrame &frame)

詳細な説明

QCanBusDevice QCanBusFrame を使用して読み取りおよび書き込み操作を行うことができます。これには、フレーム識別子とデータペイロードが含まれています。QCanBusFrame には、読み取られた時点のタイムスタンプが含まれています。

QCanBusFrame::FrameId 、QCanBusFrame::TimeStamp 、およびpayload()も参照してください 。

メンバ型のドキュメント

enum QCanBusFrame::FrameError
flags QCanBusFrame::FrameErrors

この列挙型は、発生しうるエラーの種類を表します。

定数値説明
QCanBusFrame::NoError0エラーは発生していません。
QCanBusFrame::TransmissionTimeoutError(1 << 0)送信のタイムアウトが発生しました。
QCanBusFrame::LostArbitrationError(1 << 1)バス上のアービトレーションを失ったため、フレームを送信できませんでした。
QCanBusFrame::ControllerError(1 << 2)コントローラでエラーが発生しました。
QCanBusFrame::ProtocolViolationError(1 << 3)プロトコル違反が発生しました。
QCanBusFrame::TransceiverError(1 << 4)トランシーバーエラーが発生しました。
QCanBusFrame::MissingAcknowledgmentError(1 << 5)送信に対して確認応答が受信されませんでした。
QCanBusFrame::BusOffError(1 << 6)CAN バスがオフラインです。
QCanBusFrame::BusError(1 << 7)CAN バスでエラーが発生しました。
QCanBusFrame::ControllerRestartError(1 << 8)コントローラが再起動しました。
QCanBusFrame::UnknownError(1 << 9)不明なエラーが発生しました。
QCanBusFrame::AnyError0x1FFFFFFFUその他のすべてのエラータイプに一致します。

FrameErrors 型は、QFlags<FrameError> の typedef です。これは、FrameError 値の論理和 (OR) 組み合わせを格納します。

error() およびsetError()も参照してください 。

[alias] QCanBusFrame::FrameId

11ビットまたは29ビットのCANバスフレーム識別子用の専用の型。

frameId() およびsetFrameId()も参照してください 。

enum QCanBusFrame::FrameType

この列挙型は、CANフレームのタイプを表します。

定数値説明
QCanBusFrame::UnknownFrame0x0フレームのタイプが不明です。
QCanBusFrame::DataFrame0x1この値はデータフレームを表します。
QCanBusFrame::ErrorFrame0x2この値は、エラー・フレームを表します。
QCanBusFrame::RemoteRequestFrame0x3この値は、リモートリクエストを表します。
QCanBusFrame::InvalidFrame0x4この値は、無効なフレームを表します。この型は、エラー報告に使用されます。

frameType() およびsetFrameType()も参照してください 。

メンバ関数のドキュメント

[explicit noexcept] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)

指定されたtype のCANフレームを生成します。

QCanBusFrame::FrameType およびsetFrameType()も参照してください 。

[explicit] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)

identifier をフレーム識別子として、data をペイロードとして、CANフレームを構築します。

「QCanBusFrame::FrameId」も参照してください 。

[constexpr noexcept] QCanBusFrame::FrameErrors QCanBusFrame::error() const

現在のエラーフレームのエラーを返します。フレームがErrorFrame でない場合、この関数はNoError を返します。

「 QCanBusFrame::FrameError 」および「setError()」も参照してください 。

[constexpr noexcept] QCanBusFrame::FrameId QCanBusFrame::frameId() const

CANフレームの識別子を返します。CANフレームが拡張フレーム形式を使用している場合、識別子の最大ビット数は29ビットとなります。それ以外の場合は11ビットです。

フレームがErrorFrame タイプの場合、このIDは常に0になります。

関連項目: QCanBusFrame::FrameId 、setFrameId()、およびhasExtendedFrameFormat()。

[constexpr noexcept] QCanBusFrame::FrameType QCanBusFrame::frameType() const

フレームの型を返します。

QCanBusFrame::FrameType およびsetFrameType()も参照してください 。

[constexpr noexcept] bool QCanBusFrame::hasBitrateSwitch() const

CANが「ビットレート切り替え機能付きフレキシブルデータレート」を使用して、ペイロードデータをより高いデータビットレートで転送する場合、true を返します。

setBitrateSwitch() およびQCanBusDevice::DataBitRateKeyも参照してください 。

[constexpr noexcept] bool QCanBusFrame::hasErrorStateIndicator() const

CANが「フレキシブルデータレート」を使用しており、かつ「エラー状態インジケータ」が設定されている場合、true を返します。

このフラグは、送信機の CAN FD ハードウェアによって設定され、送信機のエラー状態を示すものです。

setErrorStateIndicator()も参照してください 。

[constexpr noexcept] bool QCanBusFrame::hasExtendedFrameFormat() const

CANフレームが29ビットの識別子を使用している場合はtrue を返し、そうでない場合はfalse を返します。後者の場合は、11ビットの識別子であることを意味します。

setExtendedFrameFormat() およびframeId()も参照してください 。

[constexpr noexcept] bool QCanBusFrame::hasFlexibleDataRateFormat() const

CANフレームが、最大64データバイトまで許容する「フレキシブルデータレート」を使用している場合はtrue を返し、そうでない場合はfalse を返します。後者の場合、ペイロードは最大8バイトであることを意味します。

setFlexibleDataRateFormat() およびpayload()も参照してください 。

[constexpr noexcept] bool QCanBusFrame::hasLocalEcho() const

フレームがローカルエコーフレーム、すなわち、同じ内容のフレームがCANバスへ正常に送信された際にエコーとして受信されたフレームである場合、true を返します。このフラグは、アプリケーション自身が送信したフレームだけでなく、同じシステム上で実行されている他のアプリケーションによって送信されたフレームに対しても設定されます。

QCanBusDevice::ReceiveOwnKey エコーフレームを受信するには、このフラグを true に設定する必要があります。

setLocalEcho()、QCanBusDevice::ReceiveOwnKey 、およびQCanBusDevice::LoopbackKeyも参照してください 。

[noexcept] bool QCanBusFrame::isValid() const

frameType()がInvalidFrame の場合、hasExtendedFrameFormat()が設定されていないにもかかわらずframeId()が11ビットより長い場合、またはフレキシブルデータレートモードが有効な場合は64バイト、無効な場合は8バイトという最大許容ペイロード長を超えるペイロードがある場合、false を返します。frameType()がRemoteRequestFrame であり、かつフレキシブルデータレートモードが有効になっている場合、false も返される。

それ以外の場合は、この関数はtrue を返します。

QByteArray QCanBusFrame::payload() const

フレームのデータペイロードを返します。

setPayload()も参照してください 。

[constexpr noexcept] void QCanBusFrame::setBitrateSwitch(bool bitrateSwitch)

「可変データレート」フラグ(ビットレート切り替えフラグ)を「bitrateSwitch 」に設定します。このフラグが設定されたフレームのデータフィールドは、より高いデータビットレートで転送されます。

hasBitrateSwitch() およびQCanBusDevice::DataBitRateKeyも参照してください 。

[constexpr] void QCanBusFrame::setError(QCanBusFrame::FrameErrors error)

フレームのerror タイプを設定します。frameType()がErrorFrame でない場合、この関数は何も行いません。

「 QCanBusFrame::FrameError 」および「error()」も参照してください 。

[constexpr noexcept] void QCanBusFrame::setErrorStateIndicator(bool errorStateIndicator)

「可変データレート」フラグの「エラー状態インジケータ」フラグを「errorStateIndicator 」に設定します。

CAN FDフレームを送信する際、このフラグはCAN FDハードウェアによって自動的に設定されます。QCanBusFrame::setErrorStateIndicator() は、仮想CAN FDバス上でのアプリケーションテストなど、テスト目的でのみ使用してください。

「hasErrorStateIndicator()」も参照してください 。

[constexpr noexcept] void QCanBusFrame::setExtendedFrameFormat(bool isExtended)

拡張フレーム形式フラグをisExtended に設定します。

hasExtendedFrameFormat()も参照してください 。

[constexpr noexcept] void QCanBusFrame::setFlexibleDataRateFormat(bool isFlexibleData)

「Flexible Data-Rate」フラグをisFlexibleData に設定します。これにより、対応するコントローラでは、これらのフレームをより高速で送信できるようになります。さらに、ペイロードの長さの制限が64バイトに引き上げられます。

hasFlexibleDataRateFormat()も参照してください 。

[constexpr] void QCanBusFrame::setFrameId(QCanBusFrame::FrameId newFrameId)

CANフレームの識別子を「newFrameId 」に設定します。

CANフレーム識別子の最大サイズは11ビットですが、CAN拡張フレーム形式をサポートすることで、最大29ビットまで拡張可能です。11ビットを超えるサイズのnewFrameId が指定された場合、CAN拡張フレーム形式の設定は自動的に行われます。

フォーマットが拡張されており、11 ビット以下のnewFrameId が渡された場合、CAN 拡張フレームフォーマットの設定は変更されません。

QCanBusFrame::FrameId 、frameId()、およびhasExtendedFrameFormat()も参照してください 。

[constexpr noexcept] void QCanBusFrame::setFrameType(QCanBusFrame::FrameType newType)

フレームのタイプをnewType に設定します。

「 QCanBusFrame::FrameType 」および「frameType()」も参照してください 。

[constexpr noexcept] void QCanBusFrame::setLocalEcho(bool echo)

「Local Echo」フラグを「echo 」に設定します。

QCanBusDevice::ReceiveOwnKey を有効にして CAN バスフレームを送信する場合、正常に送信されたすべてのフレームは受信キューにエコーされ、ローカルエコーフレームとしてマークされます。したがって、QCanBusFrame::setLocalEcho は、仮想 CAN バス上でのアプリケーションテストなどにのみ使用してください。

hasLocalEcho()も参照してください 。

void QCanBusFrame::setPayload(const QByteArray &data)

data をCANフレームのペイロードとして設定します。ペイロードの最大サイズは8バイトですが、「フレキシブルデータレート」に対応することで、最大64バイトまで拡張可能です。data のサイズが8バイトを超える場合、フレキシブルデータレートフラグが自動的に設定されます。QCanBusDevice では、QCanBusDevice::CanFdKey を設定することで、フレキシブル・データ・レートを有効にする必要があります。

RemoteRequestFrame (RTR)タイプのフレームにはペイロードが含まれません。ただし、応答で予想されるペイロードの長さを示す必要があります。予想される長さを設定するには、応答の予想ペイロード長と一致する長さの偽のペイロードを設定する必要があります。その方法の一例は以下の通りです:

QCanBusFrame frame(QCanBusFrame::RemoteRequestFrame);
int expectedResponseLength = ...;
frame.setPayload(QByteArray(expectedResponseLength, 0));

payload() およびhasFlexibleDataRateFormat()も参照してください 。

[constexpr noexcept] void QCanBusFrame::setTimeStamp(QCanBusFrame::TimeStamp ts)

ts を CAN フレームのタイムスタンプとして設定します。通常、この関数は必要ありません。タイムスタンプは読み取り操作中に生成され、書き込み操作中には必要とされないためです。

timeStamp() およびQCanBusFrame::TimeStampも参照してください 。

[constexpr noexcept] QCanBusFrame::TimeStamp QCanBusFrame::timeStamp() const

そのフレームのタイムスタンプを返します。

QCanBusFrame::TimeStamp およびQCanBusFrame::setTimeStamp()も参照してください 。

QString QCanBusFrame::toString() const

CANフレームをフォーマット済みの文字列として返します。

出力には、32 ビットに右詰めされた 16 進形式の CAN 識別子、その後に角括弧で囲まれたデータ長、そして 16 進形式のペイロードが含まれます。

標準識別子にはスペースが、拡張識別子にはゼロが埋められます。

典型的な出力例は以下の通りです:

(Error)                                  - error frame
     7FF   [1]  01                       - data frame with standard identifier
1FFFFFFF   [8]  01 23 45 67 89 AB CD EF  - data frame with extended identifier
     400  [10]  01 23 45 67 ... EF 01 23 - CAN FD frame
     123   [5]  Remote Request           - remote frame with standard identifier
00000234   [0]  Remote Request           - remote frame with extended identifier

関連する非会員

QDataStream &operator<<(QDataStream &out, const QCanBusFrame &frame)

frame をストリーム(out )に書き込み、その参照を返します。

QDataStream &operator>>(QDataStream &in, QCanBusFrame &frame)

ストリーム(in )からframe を読み取り、その参照を返します。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.