このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
多重信号
多重化を使用して、CAN メッセージのデータ内の 1 つの信号の位置に複数の信号を表します。多重化されたメッセージには、次の 3 種類の信号が含まれます。
標準信号 — この信号は常にアクティブです。1 つ以上の標準信号を作成できます。
マルチプレクサ信号 — モード信号とも呼ばれ、常にアクティブであり、その値によってメッセージ データ内で現在アクティブな多重化信号が決まります。メッセージごとにマルチプレクサ信号を 1 つだけ作成できます。
多重化信号 — この信号は、多重化値がマルチプレクサ信号の値と一致する場合にアクティブになります。メッセージ内に 1 つ以上の多重化信号を作成できます。
多重化は、多重化信号情報がすでに含まれているメッセージ定義を持つ CAN データベースでのみ機能します。この例では、この目的のために特別に構築されたデータベースを使用して、さまざまな多重信号にアクセスする方法を示します。このデータベースには、次の信号を含む 1 つのメッセージがあります。
SigA
— 多重化値が0
である多重化信号。SigB
— 多重化値が1
である別の多重化信号。MuxSig
— マルチプレクサ信号。その値によって、メッセージ内で多重化された 2 つの信号のどちらがアクティブになるかが決まります。
以下に例を示します。
CAN データベースを作成します。
d = canDatabase('Mux.dbc')
メモ
これは、多重メッセージを作成するために構築されたサンプル データベースです。この例を試すには、独自のデータベースを使用します。
CAN メッセージを作成します。
m = canMessage(d,'Msg')
m = can.Message handle Package: can Properties: ID: 250 Extended: 0 Name: 'Msg' Database: [1x1 can.Database] Error: 0 Remote: 0 Timestamp: 0 Data: [0 0 0 0 0 0 0 0] Signals: [1x1 struct] Methods, Events, Superclasses
信号を表示するには、次のように入力します。
m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 0
MuxSig
はマルチプレクサ信号であり、その値によって 2 つの多重化信号のどちらがメッセージ内でアクティブになるかが決まります。SigA
とSigB
は、多重化値がMuxSig
と一致する場合にメッセージ内でアクティブになる多重化信号です。示されている例では、SigA
は、現在のマルチプレックス値0
がMuxSig
の値 (つまり0
) と一致するためアクティブです。SigB
をアクティブにしたい場合は、MuxSig
の値を1
に変更します。m.Signals.MuxSig = 1
信号を表示するには、次のように入力します。
m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 1
SigB
は、そのマルチプレックス値1
が現在のMuxSig
の値 (つまり1
) と一致するため、アクティブになりました。MuxSig
の値を2
に変更します。m.Signals.MuxSig = 2
ここで、
MuxSig
の現在の値がSigA
またはSigB
のどちらの多重化値とも一致しないため、多重化された信号のどちらもアクティブではありません。m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 2
多重化された信号値を使用する前に、必ずマルチプレクサ信号の値を確認してください。
if (m.Signals.MuxSig == 0) % Feel free to use the value of SigA however is required. end
これにより、ツールボックスは非アクティブな多重化信号の読み取りや書き込みを防止または保護しないため、無効な値を使用していないことが保証されます。
メモ
マルチプレクサ信号の値に関係なく、アクティブと非アクティブな両方の多重化信号にアクセスできます。ネストされた多重化はサポートされていません。