このページでは

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ビット値をエンコードします。

リトルエンディアン

リトルエンディアンの場合、データのレイアウトは次の図のように表すことができます。

リトルエンディアン CAN 信号のビット配置:青とオレンジのブロックは、バイト 0~2 にわたる 2 つの値を示しており、LSB および MSB の位置が示されています

ここで、列はビット番号を表し、行はバイト番号を表しています。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
ビッグエンディアン

次の図は、ビッグエンディアンの場合の値のレイアウトを示しています:

ビッグエンディアン方式のCAN信号のビット配置:青とオレンジのブロックは、バイト0~2にわたる2つの値を示しており、MSBおよびLSBの位置が示されている

これらの値は、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 からコピーされた値を用いて、シグナルの記述を作成します。

[constexpr noexcept default] QCanSignalDescription::QCanSignalDescription(QCanSignalDescription &&other)

other から移動して、シグナル記述を作成します。

注: 移動元の QCanSignalDescriptionオブジェクトは 、破棄するか、代入を行うことしかできません。デストラクタや代入演算子以外の関数を呼び出した場合の結果は未定義です。

[constexpr noexcept default] 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)

これは、マルチプレクサ信号が値の範囲ではなく、特定の値のみをとることが予想される場合のための便利なオーバーロードです。

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 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()に設定すると、対応する制限は適用されなくなります。

minimum() およびmaximum()も参照してください 。

void QCanSignalDescription::setReceiver(const QString &receiver)

この信号の「receiver 」ノードを設定します。

このパラメータは、説明を補足するためにのみ導入されたものです。信号処理の際には使用されません。

receiver()も参照してください 。

void QCanSignalDescription::setScaling(double scaling)

信号の値を物理値に変換し、再びscaling に戻す際に使用されるスケーリングを設定します。

変換時にこのパラメータをスキップするには、qQNaN() をこのメソッドに渡ししてください。

スケーリングは 0 に設定できません。スケーリングを 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 の値をこの信号記述に割り当てます。

© 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.