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::NoError | 0 | エラーは発生していません。 |
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::AnyError | 0x1FFFFFFFU | その他のすべてのエラータイプに一致します。 |
FrameErrors 型は、QFlags<FrameError> の typedef です。これは、FrameError 値の論理和 (OR) 組み合わせを格納します。
error() およびsetError()も参照してください 。
[alias] QCanBusFrame::FrameId
11ビットまたは29ビットのCANバスフレーム識別子用の専用の型。
frameId() およびsetFrameId()も参照してください 。
enum QCanBusFrame::FrameType
この列挙型は、CANフレームのタイプを表します。
| 定数 | 値 | 説明 |
|---|---|---|
QCanBusFrame::UnknownFrame | 0x0 | フレームのタイプが不明です。 |
QCanBusFrame::DataFrame | 0x1 | この値はデータフレームを表します。 |
QCanBusFrame::ErrorFrame | 0x2 | この値は、エラー・フレームを表します。 |
QCanBusFrame::RemoteRequestFrame | 0x3 | この値は、リモートリクエストを表します。 |
QCanBusFrame::InvalidFrame | 0x4 | この値は、無効なフレームを表します。この型は、エラー報告に使用されます。 |
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.