QCanSignalDescription Class
QCanSignalDescriptionクラスは、CANフレームから1つの値を抽出し、アプリケーション定義のフォーマットで表現するルールを記述します。詳細...
Header: | #include <QCanSignalDescription> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake: | QT += serialbus |
Since: | Qt 6.5 |
Status: | Preliminary |
このクラスは開発中であり、変更される可能性があります。
パブリック型
(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 を設定する。
パラメータの1つまたは両方を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)
move-このシグナル記述に、other からの値を割り当てる。
注意: 移動元のQCanSignalDescription オブジェクトは、破棄または代入のみ可能です。デストラクタや代入演算子以外の関数を呼び出した場合の効果は未定義です。
QCanSignalDescription &QCanSignalDescription::operator=(const QCanSignalDescription &other)
other の値をこのシグナル記述に代入します。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。