QCanSignalDescription Class
QCanSignalDescriptionクラスは、CANフレームから1つの値を抽出し、アプリケーション定義のフォーマットで表現するルールを記述します。詳細...
ヘッダー | #include <QCanSignalDescription> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake: | QT += serialbus |
以来: | Qt 6.5 |
ステータス | 予備 |
このクラスは開発中であり、変更される可能性があります。
パブリックな型
(since 6.5) struct | MultiplexValueRange |
MultiplexSignalValues | |
MultiplexValues |
パブリック関数
QCanSignalDescription() | |
QCanSignalDescription(const QCanSignalDescription &other) | |
QCanSignalDescription(QCanSignalDescription &&other) | |
~QCanSignalDescription() | |
void | addMultiplexSignal(const QString &name, const QCanSignalDescription::MultiplexValues &ranges) |
void | addMultiplexSignal(const QString &name, const QVariant &value) |
quint16 | bitLength() const |
void | clearMultiplexSignals() |
QString | comment() const |
QSysInfo::Endian | dataEndian() const |
QtCanBus::DataFormat | dataFormat() const |
QtCanBus::DataSource | dataSource() const |
double | factor() const |
bool | isValid() const |
double | maximum() const |
double | minimum() const |
QCanSignalDescription::MultiplexSignalValues | multiplexSignals() const |
QtCanBus::MultiplexState | multiplexState() const |
QString | name() const |
double | offset() const |
QString | physicalUnit() const |
QString | receiver() const |
double | scaling() const |
void | setBitLength(quint16 length) |
void | setComment(const QString &text) |
void | setDataEndian(QSysInfo::Endian endian) |
void | setDataFormat(QtCanBus::DataFormat format) |
void | setDataSource(QtCanBus::DataSource source) |
void | setFactor(double factor) |
void | setMultiplexSignals(const QCanSignalDescription::MultiplexSignalValues &multiplexorSignals) |
void | setMultiplexState(QtCanBus::MultiplexState state) |
void | setName(const QString &name) |
void | setOffset(double offset) |
void | setPhysicalUnit(const QString &unit) |
void | setRange(double minimum, double maximum) |
void | setReceiver(const QString &receiver) |
void | setScaling(double scaling) |
void | setStartBit(quint16 bit) |
quint16 | startBit() const |
QCanSignalDescription & | operator=(QCanSignalDescription &&other) |
QCanSignalDescription & | operator=(const QCanSignalDescription &other) |
詳細説明
QCanSignalDescription クラスは、信号の説明を提供し、後で受信したQCanBusFrame をデコードしたり、入力データをQCanBusFrame にエンコードして受信機に送信したりするために使用できます。
一般的な説明
各CANフレームは複数の値を含むことができます。CANフレームから値を抽出するルールは以下の通りです:
- データソース(フレームIDまたはペイロード)。
- データのエンディアン詳細はData Endianness Processing のセクションを参照。
- データフォーマット
- 開始ビットの位置。
- ビット単位のデータ長
- 多重化オプション。
開始ビット位置は、選択されたデータ・ソースからの相対位置で指定する。ビットはLSBからカウントされる。
データを抽出したら、アプリケーション定義のフォーマットに変換する必要があるかもしれません。その際には以下のパラメータを使用できます:
- 抽出された値を物理的な値に変換するための各種パラメータ(係数、オフセット、スケール)。
- 期待されるデータ範囲。
- データ単位。
QCanSignalDescriptionクラスは、これらすべてのパラメータを制御するメソッドを提供します。
データのエンディアン処理
リトル・エンディアンとビッグ・エンディアンのデータはエンコードが異なります。ビッグ・エンディアン値では、最上位ビットの開始ビット位置が指定されます。リトルエンディアンの場合、開始ビットの位置は最下位ビットになります。
2つの例を考えてみよう。どちらの例でも、3バイトのペイロードに2つの12ビット値をエンコードします。
リトルエンディアン
リトルエンディアンの場合、データレイアウトは以下の図のようになります:
LSB
、値の先頭(最下位)ビットを示し、MSB
、値の最後(最上位)ビットを示す。青色は最初の値を示し、オレンジ色は2番目の値を示す。
これらの値に関する情報は、QCanSignalDescriptionで以下のようにエンコードされる:
QCanSignalDescription signal1; signal1.setDataEndian(QSysInfo::Endian::LittleEndian); signal1.setStartBit(0); signal1.setBitLength(12); // other parameters for signal1 QCanSignalDescription signal2; signal2.setDataEndian(QSysInfo::Endian::LittleEndian); signal2.setStartBit(12); signal2.setBitLength(12); // other parameters for signal2
ビッグ・エンディアン
次の図は、ビッグ・エンディアンの場合の値のレイアウトを表しています:
値は、QCanSignalDescriptionで以下のように表現できます:
QCanSignalDescription signal1; signal1.setDataEndian(QSysInfo::Endian::BigEndian); signal1.setStartBit(7); signal1.setBitLength(12); // other parameters for signal1 QCanSignalDescription signal2; signal2.setDataEndian(QSysInfo::Endian::BigEndian); signal2.setStartBit(11); signal2.setBitLength(12); // other parameters for signal2
リトルエンディアンの場合とスタートビットが異なることに注意してください。また、値のアラインメントも異なります。
多重化信号の説明
CANペイロードのデータをエンコードする一般的な方法は2つあります:
- 各ビットの範囲は常に同じ信号を表します。例えば、ペイロードの
Bytes 0-1
はエンジン回転数(rpm)を表し、Bytes 2-3
は車速(km/h)を表します。 - 同じ範囲のビットでも、ペイロード内の他のビットの値によって、異なるデータを表すことができます。例えば、
Byte 0
が値0
を持つ場合、Bytes 1-2
はエンジン速度(rpm)を表し、Byte 0
が値1
を持つ場合、同じBytes 1-2
は車速(km/h)を表す。
2つ目のケースは、信号の多重化を使用しています。この例では3つの信号がある。最初の信号はByte 0
の値を表し、マルチプレクサ信号のように動作します。他の2つの信号は、それぞれエンジン速度と車速を表しますが、CANペイロードから一度に抽出できるのは1つだけです。どの信号を抽出するかは、マルチプレクサ信号の値によって決まります。
より複雑なケースでは、ペイロードは複数のマルチプレクサ信号を持つことができます。このような場合、すべてのマルチプレクサに期待される値が含まれているときのみ、ペイロードから信号を抽出することができます。
値の変換
多くの場合、CANバスを介して転送される信号は、それらが表す物理的な値の全範囲を保持することはできません。このような制限を克服するために、物理的な値は送信前に小さな範囲に変換され、受信側で復元することができます。
物理値と信号値の変換には、以下の式が使用されます:
physicalValue = scaling * (signalValue * factor + offset); signalValue = (physicalValue / scaling - offset) / factor;
係数およびスケーリング・パラメータは、0
と等しくすることはできない。
パラメータのいずれかがqQNaN() に等しい場合、変換時にそのパラメータは使用されない。すべてのパラメータがqQNaN() と等しい場合(デフォルト)、変換は行われません。
メンバ型ドキュメント
[alias]
QCanSignalDescription::MultiplexSignalValues
[alias]
QCanSignalDescription::MultiplexValues
メンバー関数ドキュメント
QCanSignalDescription::QCanSignalDescription()
空のシグナル記述を作成する。
QCanSignalDescription::QCanSignalDescription(const QCanSignalDescription &other)
other からコピーした値でシグナル記述を作成する。
[noexcept]
QCanSignalDescription::QCanSignalDescription(QCanSignalDescription &&other)
other から移動してシグナル記述を作成します。
注意: 移動元の QCanSignalDescription オブジェクトは、破棄または代入のみが可能です。デストラクタや代入演算子以外の関数を呼び出した場合の効果は未定義です。
[noexcept]
QCanSignalDescription::~QCanSignalDescription()
この信号の説明を破壊する。
void QCanSignalDescription::addMultiplexSignal(const QString &name, const QCanSignalDescription::MultiplexValues &ranges)
このシグナルの新しいmultiplexor signal を追加する。name パラメータにはマルチプレクサ信号の名前が入り、ranges パラメータには希望する値の範囲が入る。
このシグナルが、マルチプレクサ・シグナルname の希望する値域を既に持っている場合、その値域は上書きされます。
multiplexState()、multiplexSignals()、clearMultiplexSignals()、setMultiplexSignals()も参照 。
void QCanSignalDescription::addMultiplexSignal(const QString &name, const QVariant &value)
これはオーバーロードされた関数である。
これは、マルチプレクサ信号が、値の範囲ではなく、特定の1つの値のみを持つことが期待される場合のための便宜的なオーバーロードです。
name パラメータにはマルチプレクサ信号の名前が入り、value パラメータには希望する値が入ります。
このシグナルが、マルチプレクサ・シグナルname の希望する値の範囲を既に持っている場合、その範囲は上書きされる。
multiplexState()、multiplexSignals()、clearMultiplexSignals()、setMultiplexSignals()も参照 。
quint16 QCanSignalDescription::bitLength() const
シグナルの値のビット長を返す。
setBitLength(),startBit(),setStartBit()も参照 。
void QCanSignalDescription::clearMultiplexSignals()
このシグナルのすべてのmultiplexor signals を削除する。
multiplexSignals()、setMultiplexSignals()、addMultiplexSignal()も参照 。
QString QCanSignalDescription::comment() const
シグナルのコメントを返します。
このパラメータは、補足説明のためだけに導入されています。シグナル処理中には使用されません。
setComment()も参照 。
QSysInfo::Endian QCanSignalDescription::dataEndian() const
シグナルの値のデータエンディアンを返す。
デフォルトでは、BigEndian が使用される。
注意: dataFormat() がAsciiString に設定されている場合、データ・エンディアンは無視される。
setDataEndian() およびQSysInfo::Endianも参照のこと 。
QtCanBus::DataFormat QCanSignalDescription::dataFormat() const
シグナルの値のデータフォーマットを返します。
デフォルトではSignedInteger が使用される。
setDataFormat() およびQtCanBus::DataFormatも参照のこと 。
QtCanBus::DataSource QCanSignalDescription::dataSource() const
シグナルの値のデータソースを返します。
デフォルトでは、Payload が使用される。
setDataSource() およびQtCanBus::DataSourceも参照のこと 。
double QCanSignalDescription::factor() const
信号の値を物理的な値に変換するために使用される係数を返します。
デフォルトでは、この関数はqQNaN() を返し、これは係数が使用されないことを意味する。
このパラメータがどのように使用されるかは、Value Conversions のセクションで説明します。
setFactor()、offset()、scaling()も参照 。
bool QCanSignalDescription::isValid() const
シグナルの記述が有効な場合はtrue
を、そうでない場合はfalse
を返す。
有効なシグナル記述は、以下の条件を満たす必要があります:
- name() が空でない。
- dataFormat() が
== 32
の場合、bitLength() を持つ。Float - dataFormat() が
== 64
の場合、bitLength() がある。Double - dataFormat() が
8
の場合、bitLength() は の倍数でなければならない。AsciiString - bitLength() は、
0
より大きく、64
以下でなければならない。
bitLength()、dataFormat()、name()も参照の こと。
double QCanSignalDescription::maximum() const
シグナルのサポートされる最大値を返す。
デフォルトでは、この関数はqQNaN() を返す。
double QCanSignalDescription::minimum() const
シグナルのサポートされる最小値を返します。
デフォルトでは、この関数はqQNaN() を返し、これは最小値がないことを意味する。
QCanSignalDescription::MultiplexSignalValues QCanSignalDescription::multiplexSignals() const
このシグナルを正しく識別するために使用されるmultiplexor signals とその値を返します。
返されるハッシュには、キーとしてシグナル名、値としてそれぞれの望ましい値の範囲が含まれます。
このシグナルの値は、ハッシュのすべてのシグナルが期待される値を持つ場合にのみ、ペイロードから抽出することができます。
multiplexState()、clearMultiplexSignals()、setMultiplexSignals()、addMultiplexSignal()も参照のこと 。
QtCanBus::MultiplexState QCanSignalDescription::multiplexState() const
シグナルの多重状態を返す。
多重化されたシグナルの詳細については、Multiplexed Signals Explained のセクションを参照。
デフォルトでは、このメソッドはNone を返す。
setMultiplexState() およびQtCanBus::MultiplexStateも参照してください 。
QString QCanSignalDescription::name() const
シグナルの名前を返す。
double QCanSignalDescription::offset() const
シグナルの値を物理的な値に変換するために使用されるオフセットを返します。
デフォルトでは、この関数はqQNaN() を返します。これはオフセットが使用されないことを意味します。
このパラメータの使用方法については、Value Conversions のセクションを参照してください。
setOffset()、factor()、scaling()も参照して ください。
QString QCanSignalDescription::physicalUnit() const
信号の値の物理単位(km/hなど)、または単位が設定されていない場合は空文字列を返します。
このパラメータは補足説明のためだけに導入されています。信号処理中には使用されません。
setPhysicalUnit()も参照 。
QString QCanSignalDescription::receiver() const
この信号の受信ノードを返す。
このパラメータは補足説明のためだけに導入されている。シグナル処理中には使用されません。
setReceiver()も参照 。
double QCanSignalDescription::scaling() const
信号の値を物理的な値に変換するために使用されるスケーリングを返します。
デフォルトでは、この関数はqQNaN() を返し、これはスケーリングが使用されないことを意味します。
このパラメータがどのように使用されるかは、Value Conversions のセクションで説明します。
setScaling()、offset()、factor()も参照 。
void QCanSignalDescription::setBitLength(quint16 length)
シグナルの値のビット長をlength に設定する。
bitLength(),startBit(),setStartBit()も参照のこと 。
void QCanSignalDescription::setComment(const QString &text)
シグナルのコメントをtext に設定する。
このパラメータは、補足説明のためだけに導入されています。シグナル処理中には使用されません。
comment()も参照のこと 。
void QCanSignalDescription::setDataEndian(QSysInfo::Endian endian)
シグナルの値のデータ・エンディアンをendian に設定する。
dataEndian() およびQSysInfo::Endianも参照のこと 。
void QCanSignalDescription::setDataFormat(QtCanBus::DataFormat format)
シグナルの値のデータフォーマットをformat に設定する。
dataFormat() およびQtCanBus::DataFormatも参照のこと 。
void QCanSignalDescription::setDataSource(QtCanBus::DataSource source)
シグナルの値のデータソースをsource に設定する。
dataSource() およびQtCanBus::DataSourceも参照のこと 。
void QCanSignalDescription::setFactor(double factor)
信号の値を物理的な値に変換し、factor に戻すために使用される係数を設定します。
変換中にこのパラメータをスキップするには、このメソッドにqQNaN() を渡します。
係数を 0 にすることはできません。係数を 0 に設定しようとすると、qQNaN() に設定したのと同じことになります。
Value Conversions セクションで、このパラメータの使用方法を説明しています。
factor()、setOffset()、およびsetScaling()も参照してください 。
void QCanSignalDescription::setMultiplexSignals(const QCanSignalDescription::MultiplexSignalValues &multiplexorSignals)
このシグナルのmultiplexor signals をmultiplexorSignals に設定する。
multiplexorSignals ハッシュには、キーとしてシグナル名、値として希望する値の範囲を指定する。
multiplexState()、multiplexSignals()、clearMultiplexSignals()、addMultiplexSignal()も参照 。
void QCanSignalDescription::setMultiplexState(QtCanBus::MultiplexState state)
信号の多重状態をstate に設定する。
多重化信号の詳細については、Multiplexed Signals Explained のセクションを参照。
multiplexState() およびQtCanBus::MultiplexStateも参照 。
void QCanSignalDescription::setName(const QString &name)
シグナルの名前をname に設定する。
シグナルの名前は、CANメッセージ内で一意でなければならない。
name()も参照 。
void QCanSignalDescription::setOffset(double offset)
信号の値を物理的な値に変換し、offset に戻すために使用されるオフセットを設定します。
変換中にこのパラメータをスキップするには、このメソッドにqQNaN() を渡します。
Value Conversions のセクションでは、このパラメータの使用方法を説明します。
offset()、setFactor()、およびsetScaling()も参照して ください。
void QCanSignalDescription::setPhysicalUnit(const QString &unit)
信号値の物理的なunit (km/hなど)を設定する。
このパラメータは補足説明のためだけに導入されています。信号処理中には使用されない。
physicalUnit()も参照 。
void QCanSignalDescription::setRange(double minimum, double maximum)
信号値のminimum とmaximum を設定する。
パラメータの一方または両方をqQNaN() に設定すると、対応する制限値は使用されない。
void QCanSignalDescription::setReceiver(const QString &receiver)
このシグナルのreceiver ノードを設定する。
このパラメータは、補足説明のためだけに導入されている。シグナル処理中には使用されない。
receiver()も参照 。
void QCanSignalDescription::setScaling(double scaling)
信号の値を物理的な値に変換し、scaling に戻すために使用されるスケーリングを設定します。
変換中にこのパラメータをスキップするには、このメソッドにqQNaN() を渡します。
スケーリングを 0 に設定しようとすると、qQNaN() に設定したのと同じことになります。
Value Conversions セクションで、このパラメータの使用方法を説明しています。
scaling()、setOffset()、およびsetFactor()も参照してください 。
void QCanSignalDescription::setStartBit(quint16 bit)
dataSource() の信号値の開始ビットをbit に設定する。
startBit()、bitLength()、setBitLength()も参照のこと 。
quint16 QCanSignalDescription::startBit() const
dataSource() のシグナル値の開始ビットを返す。
setStartBit()、bitLength()、setBitLength()も参照 。
[noexcept]
QCanSignalDescription &QCanSignalDescription::operator=(QCanSignalDescription &&other)
移動-このシグナル記述にother の値を割り当てる。
注意: 移動されたQCanSignalDescription オブジェクトは、破棄または代入しかできない。デストラクタや代入演算子以外の関数を呼び出した場合の効果は未定義です。
QCanSignalDescription &QCanSignalDescription::operator=(const QCanSignalDescription &other)
この信号記述にother の値を割り当てる。
© 2025 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.