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
ステータス予備

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

パブリックな型

パブリック関数

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

パラメータの一方または両方を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)

移動-このシグナル記述に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.