QCanBusDevice Class
QCanBusDevice クラスは、CAN バス用のインターフェースクラスです。詳細...
| ヘッダー: | #include <QCanBusDevice> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| 継承元: | QObject |
パブリック型
| struct | Filter |
| enum | CanBusDeviceState { UnconnectedState, ConnectingState, ConnectedState, ClosingState } |
| enum | CanBusError { NoError, ReadError, WriteError, ConnectionError, ConfigurationError, …, TimeoutError } |
| enum class | CanBusStatus { Unknown, Good, Warning, Error, BusOff } |
| enum | ConfigurationKey { RawFilterKey, ErrorFilterKey, LoopbackKey, ReceiveOwnKey, BitRateKey, …, UserKey } |
| enum | Direction { Input, Output, AllDirections } |
| flags | Directions |
パブリック関数
| QCanBusDevice(QObject *parent = nullptr) | |
| virtual QCanBusDevice::CanBusStatus | busStatus() |
| void | clear(QCanBusDevice::Directions direction = Direction::AllDirections) |
| QList<QCanBusDevice::ConfigurationKey> | configurationKeys() const |
| QVariant | configurationParameter(QCanBusDevice::ConfigurationKey key) const |
| bool | connectDevice() |
(since 6.2) virtual QCanBusDeviceInfo | deviceInfo() const |
| void | disconnectDevice() |
| QCanBusDevice::CanBusError | error() const |
| QString | errorString() const |
| qint64 | framesAvailable() const |
| qint64 | framesToWrite() const |
| virtual bool | hasBusStatus() const |
| virtual QString | interpretErrorFrame(const QCanBusFrame &frame) = 0 |
| QList<QCanBusFrame> | readAllFrames() |
| QCanBusFrame | readFrame() |
| virtual void | resetController() |
| virtual void | setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value) |
| QCanBusDevice::CanBusDeviceState | state() const |
| virtual bool | waitForFramesReceived(int msecs) |
| virtual bool | waitForFramesWritten(int msecs) |
| virtual bool | writeFrame(const QCanBusFrame &frame) = 0 |
シグナル
| void | errorOccurred(QCanBusDevice::CanBusError) |
| void | framesReceived() |
| void | framesWritten(qint64 framesCount) |
| void | stateChanged(QCanBusDevice::CanBusDeviceState state) |
保護された関数
| void | clearError() |
| virtual void | close() = 0 |
| QCanBusFrame | dequeueOutgoingFrame() |
| void | enqueueOutgoingFrame(const QCanBusFrame &newFrame) |
| void | enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames) |
| bool | hasOutgoingFrames() const |
| virtual bool | open() = 0 |
| void | setError(const QString &errorText, QCanBusDevice::CanBusError errorId) |
| void | setState(QCanBusDevice::CanBusDeviceState newState) |
メンバ型のドキュメント
enum QCanBusDevice::CanBusDeviceState
この列挙型は、デバイスのすべての可能な状態を表しています。
| 定数 | 値 | 説明 |
|---|---|---|
QCanBusDevice::UnconnectedState | 0 | デバイスが切断されています。 |
QCanBusDevice::ConnectingState | 1 | デバイスが接続中です。 |
QCanBusDevice::ConnectedState | 2 | デバイスが CAN バスに接続されています。 |
QCanBusDevice::ClosingState | 3 | デバイスが閉じられています。 |
enum QCanBusDevice::CanBusError
この列挙型は、発生しうるすべてのエラー状態を表しています。
| 定数 | 値 | 説明 |
|---|---|---|
QCanBusDevice::NoError | 0 | エラーは発生していません。 |
QCanBusDevice::ReadError | 1 | 読み取り操作中にエラーが発生しました。 |
QCanBusDevice::WriteError | 2 | 書き込み操作中にエラーが発生しました。 |
QCanBusDevice::ConnectionError | 3 | プラグインを開こうとした際にエラーが発生しました。 |
QCanBusDevice::ConfigurationError | 4 | 設定パラメータを設定しようとした際にエラーが発生しました。 |
QCanBusDevice::UnknownError | 5 | 不明なエラーが発生しました。 |
QCanBusDevice::OperationError | 6 | デバイスが操作を許可しない状態にある間に操作が試行されました。この列挙型は Qt 5.14 で導入されました。 |
QCanBusDevice::TimeoutError | 7 | フレームの書き込みまたは受信を待機中にタイムアウトが発生しました。この列挙型は Qt 5.14 で導入されました。 |
enum class QCanBusDevice::CanBusStatus
この列挙型は、CANバスのステータス値としてあり得る値を定義しています。
| 定数 | 値 | 説明 |
|---|---|---|
QCanBusDevice::CanBusStatus::Unknown | 0 | CAN バスのステータスが不明です(例:CAN プラグインでサポートされていない)。 |
QCanBusDevice::CanBusStatus::Good | 1 | CAN コントローラは完全に動作しています |
QCanBusDevice::CanBusStatus::Warning | 2 | CANコントローラが警告状態にある |
QCanBusDevice::CanBusStatus::Error | 3 | CAN コントローラがエラー状態にある(CAN フレームを送信しなくなった) |
QCanBusDevice::CanBusStatus::BusOff | 4 | CAN コントローラはバスオフ状態です(CAN バスから切断されています)。 |
enum QCanBusDevice::ConfigurationKey
この列挙型は、CANバス接続で利用可能な設定オプションを表しています。
| 定数 | 値 | 説明 |
|---|---|---|
QCanBusDevice::RawFilterKey | 0 | この設定は、現在のデバイスが受け入れる CAN バスフレームのタイプを決定します。期待される値は `QList<QCanBusDevice::Filter>` です。空のリストを渡すと、デフォルトのフィルタを含め、以前に設定されたすべてのフィルタがクリアされます。詳細については、QCanBusDevice::Filter を参照してください。 |
QCanBusDevice::ErrorFilterKey | 1 | このキーは、現在の接続を介して転送されるべきエラーの種類を定義します。関連する値は、QCanBusFrame::FrameErrors 型である必要があります。 |
QCanBusDevice::LoopbackKey | 2 | このキーは、CANバスデバイスがループバックモードで動作するかどうかを定義します。ループバックとは、CANバス上でCANフレームが送信されるたびに、そのフレームのローカルエコーが、このCANデバイスに接続されているすべてのアプリケーションに送信されることを意味します。このキーの期待される値はbool です。 |
QCanBusDevice::ReceiveOwnKey | 3 | このキーは、このCANデバイスが自身の送信フレームを受信するかどうかを定義します。これは、送信が成功したかどうかを確認するために使用できます。このキーの期待される値はbool です。 |
QCanBusDevice::BitRateKey | 4 | このキーは、CANのビットレートをビット/秒単位で定義します。CAN FDでは、QCanBusFrame::hasBitrateSwitch()が設定されている場合、ペイロードをより高いデータビットレートで送信できます。この場合、QCanBusDevice::BitRateKey はCAN IDアービトレーションフェーズでのみ使用されます。関連項目も参照してくださいQCanBusDevice::DataBitRateKey |
QCanBusDevice::CanFdKey | 5 | このキーは、CAN FD フレームの送受信を有効にするかどうかを定義します。このキーの期待される値はbool です。 |
QCanBusDevice::DataBitRateKey | 6 | このキーは、CAN FDのペイロードビットレートをビット/秒単位で定義します。CAN FDでは、公称ビットレートでのアービトレーションフェーズが終了した後、QCanBusFrame::hasBitrateSwitch()フラグが設定されたフレームのペイロードをより高いデータビットレートで送信することが可能です。この列挙型値はQt 5.9で導入されました。関連項目QCanBusDevice::BitRateKey |
QCanBusDevice::ProtocolKey | 7 | このキーを使用すると、別のプロトコルを指定できます。現時点では、このパラメータは SocketCAN プラグイン内でのみ設定および使用可能です。この列挙値は Qt 5.14 で導入されました。 |
QCanBusDevice::UserKey | 30 | このキーは、カスタムキーの開始範囲を定義します。最も一般的な用途は、プラットフォーム固有の設定オプションを許可することです。 |
configurationParameter()も参照してください 。
enum QCanBusDevice::Direction
flags QCanBusDevice::Directions
この列挙型は、データ送信の方向を表します。
| 定数 | 値 | 説明 |
|---|---|---|
QCanBusDevice::Input | 1 | 入力方向。 |
QCanBusDevice::Output | 2 | 出力方向。 |
QCanBusDevice::AllDirections | Input | Output | 入力と出力の両方の方向。 |
Directions 型は、QFlags<Direction> の typedef です。これは、Direction 値の論理和(OR)の組み合わせを格納します。
メンバ関数のドキュメント
[explicit] QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)
指定されたparent を使用して、シリアルバスデバイスを構築します。
[virtual] 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
現在のQCanBusDevice に対する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()
この信号は、1つ以上のフレームが受信されたときに発信されます。フレームは、readFrame() およびframesAvailable() を使用して読み取る必要があります。
qint64 QCanBusDevice::framesToWrite() const
バッファ付きデバイスの場合、この関数は書き込み待ちのフレーム数を返します。バッファなしデバイスの場合、この関数は常にゼロを返します。
注: CANドライバおよびCANハードウェア層において、追加のバッファリングが行われている場合があります 。したがって、この関数がゼロを返したとしても、すべてのCANフレームがすでにCANバスに書き込まれていることを意味するわけではありません。
関連項目: clear() およびwriteFrame()。
[signal] void QCanBusDevice::framesWritten(qint64 framesCount)
この信号は、フレームのペイロードがCANバスに書き込まれるたびに発信されます。framesCount 引数には、このペイロードに書き込まれたフレーム数が設定されます。
[virtual] bool QCanBusDevice::hasBusStatus() const
CANプラグインがCANバスのステータス照会をサポートしている場合、trueを返します。
busStatus()も参照してください 。
[protected] bool QCanBusDevice::hasOutgoingFrames() const
送信フレームの内部リストが空でない場合は `true ` を返し、そうでない場合は `false` を返します。
[pure virtual] QString QCanBusDevice::interpretErrorFrame(const QCanBusFrame &frame)
frame をエラーフレームとして解釈し、そのエラーについて人間が理解できる説明を返します。
frame がエラーフレームでない場合、返される文字列は空になります。
[pure virtual protected] bool QCanBusDevice::open()
この関数は、connectDevice() によって呼び出されます。サブクラスは、CANバス接続が確立できた場合はtrue を返し、そうでない場合はfalse を返す実装を提供しなければなりません。QCanBusDevice の実装では、この関数の呼び出し時に、デバイスのstate() がすでに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コントローラ のリセットは、実行中の通信に支障をきたす可能性があり、完了までに最大1秒かかる場合があります。この関数は、バスエラーからの復旧時のみ呼び出してください。
注:この関数は 、すべての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)
直近のデバイスエラーに関する人間が読み取れる説明を「errorText 」に設定します。「errorId 」はエラーの種類を分類します。
CANバス実装では、デバイスのエラー状態を更新するためにこの関数を使用する必要があります。
error()、errorOccurred()、およびclearError()も参照してください 。
[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()も参照してください 。
[virtual] bool QCanBusDevice::waitForFramesWritten(int msecs)
バッファ付きデバイスの場合、この関数は、バッファに格納されたすべてのフレームがデバイスに書き込まれ、「framesWritten()」シグナルが発信されるまで、あるいはmsecs ミリ秒が経過するまで待機します。msecs が-1の場合、この関数はタイムアウトしません。バッファなしデバイスの場合、「writeFrame()」は書き込みバッファを必要としないため、false を返して直ちに終了します。
framesWritten() シグナルが発信された場合は `true ` を返し、それ以外の場合は `false ` を返します(つまり、操作がタイムアウトした場合、またはエラーが発生した場合)。
注:この関数はローカルイベントループ を開始します。これにより、この関数のスコープの実行がブロックされている間に、他のアプリケーションスロットが呼び出されるような状況が生じる可能性があります。問題を回避するため、このクラスのシグナルをスロットに接続してはなりません。同様に、framesWritten() またはerrorOccurred() シグナルに応答して、この関数を呼び出してはなりません。
waitForFramesReceived()も参照してください 。
[pure virtual] bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)
frame をCANバスに書き込み、成功した場合はtrue を返し、失敗した場合はfalse を返します。
一部のプラットフォームでは、フレームがキューに入れられ、戻り値はキューへの挿入が成功したことを示すだけの場合があります。実際のフレームは後で送信されます。したがって、framesWritten() シグナルは、フレームがトランスポート層に渡されたことを示す最終的な確認となります。エラーが発生した場合は、errorOccurred() が発行されます。
CANバス仕様に従い、remote transfer request (RTR) タイプのフレームにはペイロードはなく、0 から 8(両端を含む)までの長さが指定されます。この長さは、遠隔側からの応答ペイロードの予想長を示します。 したがって、この関数を使用して RTR フレームを送信する場合でも、frame に任意のペイロードを設定する必要がある場合があります。この任意のペイロードの長さが、RTR フレームのサイズ期待値として設定されるものです。
QCanBusFrame::setPayload()も参照してください 。
© 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.