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

このクラスは開発中であり、変更される可能性があります。

パブリック型

パブリック関数

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 を返す。

有効なシグナル記述は、以下の条件を満たす必要があります:

bitLength()、dataFormat()、name()も参照の こと。

double QCanSignalDescription::maximum() const

シグナルのサポートされる最大値を返す。

デフォルトでは、この関数はqQNaN() を返す。

setRange() およびminimum()も参照

double QCanSignalDescription::minimum() const

対応するシグナルの最小値を返す。

デフォルトでは、この関数はqQNaN() を返し、これは最小値がないことを意味する。

setRange() およびmaximum() も参照

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

シグナルの名前を返します。

setName() およびisValid()も参照

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 signalsmultiplexorSignals に設定する。

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)

信号値のminimummaximum を設定する。

パラメータの1つまたは両方をqQNaN() に設定すると、対応する制限値は使用されない。

minimum() およびmaximum()も参照

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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。