メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

多重信号

多重化を使用して、CAN メッセージのデータ内の 1 つの信号の位置に複数の信号を表します。多重化されたメッセージには、次の 3 種類の信号が含まれます。

  • 標準信号 — この信号は常にアクティブです。1 つ以上の標準信号を作成できます。

  • マルチプレクサ信号 — モード信号とも呼ばれ、常にアクティブであり、その値によってメッセージ データ内で現在アクティブな多重化信号が決まります。メッセージごとにマルチプレクサ信号を 1 つだけ作成できます。

  • 多重化信号 — この信号は、多重化値がマルチプレクサ信号の値と一致する場合にアクティブになります。メッセージ内に 1 つ以上の多重化信号を作成できます。

多重化は、多重化信号情報がすでに含まれているメッセージ定義を持つ CAN データベースでのみ機能します。この例では、この目的のために特別に構築されたデータベースを使用して、さまざまな多重信号にアクセスする方法を示します。このデータベースには、次の信号を含む 1 つのメッセージがあります。

  • SigA — 多重化値が 0 である多重化信号。

  • SigB — 多重化値が 1 である別の多重化信号。

  • MuxSig — マルチプレクサ信号。その値によって、メッセージ内で多重化された 2 つの信号のどちらがアクティブになるかが決まります。

以下に例を示します。

  1. CAN データベースを作成します。

    d = canDatabase('Mux.dbc')

    メモ

    これは、多重メッセージを作成するために構築されたサンプル データベースです。この例を試すには、独自のデータベースを使用します。

  2. 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
  3. 信号を表示するには、次のように入力します。

    m.Signals
    ans = 
    
          SigB: 0
          SigA: 0
        MuxSig: 0

    MuxSig はマルチプレクサ信号であり、その値によって 2 つの多重化信号のどちらがメッセージ内でアクティブになるかが決まります。SigASigB は、多重化値が MuxSig と一致する場合にメッセージ内でアクティブになる多重化信号です。示されている例では、SigA は、現在のマルチプレックス値 0MuxSig の値 (つまり 0) と一致するためアクティブです。

  4. SigB をアクティブにしたい場合は、MuxSig の値を 1 に変更します。

    m.Signals.MuxSig = 1

    信号を表示するには、次のように入力します。

    m.Signals
    ans = 
    
          SigB: 0
          SigA: 0
        MuxSig: 1

    SigB は、そのマルチプレックス値 1 が現在の MuxSig の値 (つまり 1) と一致するため、アクティブになりました。

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

    これにより、ツールボックスは非アクティブな多重化信号の読み取りや書き込みを防止または保護しないため、無効な値を使用していないことが保証されます。

メモ

マルチプレクサ信号の値に関係なく、アクティブと非アクティブな両方の多重化信号にアクセスできます。ネストされた多重化はサポートされていません。

参考

関数

トピック