このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
CAN Unpack
CANメッセージから個々の信号をアンパックする

ライブラリ:
Vehicle Network Toolbox /
CAN Communication
C2000 Microcontroller Blockset /
Target Communication
Embedded Coder /
Embedded Targets /
Host Communication
Simulink Real-Time /
CAN /
CAN MSG blocks
説明
CAN Unpack ブロックは、指定された出力パラメータを使用して、各タイム ステップで CAN メッセージを信号データにアンパックします。データは個別の信号として出力されます。
このブロックを使用するには、Simulink® ソフトウェアのライセンスも必要です。
CAN Unpack ブロックは次をサポートします。
ヒント
チャネルを介して送信されるすべてのメッセージを処理するには、関数トリガー サブシステムで CAN Unpack ブロックを使用することをお勧めします。Triggered Subsystem の使用 (Simulink)を参照してください。
このブロックは、最大 8 バイトの J1939 パラメータ グループの信号を復号化するために使用できます。ただし、J1939 メッセージを使用する場合は、このブロックではなく、J1939 Communication ブロック ライブラリ内のブロックを使用することをお勧めします。 J1939通信 を参照してください。
例
Simulinkにおける定期的なCANメッセージ送信動作
この例では、MathWorks ® 仮想 CAN チャネルを使用して、Simulink ® で CAN メッセージの定期的な送受信を設定する方法を示します。仮想チャネルはループバック構成で接続されます。
CAN メッセージのロギングと再生
この例では、Simulink ® の MathWorks ® 仮想 CAN チャネルを使用して CAN メッセージをログに記録および再生する方法を示します。このモデルを更新して、システムでサポートされているハードウェアに接続できます。
ホストモデルとターゲットモデル間の通信を設定する
この例では、ホスト側の CAN Vector ブロックとターゲット モデル間の CAN 通信を設定する方法を示します。この例では、次を使用します。
Simulink でロボットアーム用の CAN ネットワークを実装する
Vehicle Network Toolbox™ と Simulink を使用して、リモート マニピュレータ アームに Controller Area Network (CAN) を実装します。
端子
入力
このブロックには 1 つの入力ポート CAN Msg があります。このブロックは指定された入力 CAN メッセージを受け取り、その信号データを個別の出力にアンパックします。
このブロックは、single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64、boolean の信号データ型をサポートします。ブロックは固定小数点データ型をサポートしていません。
出力
ブロックにはデフォルトで 1 つの出力ポートがあります。出力ポートの数は動的であり、ブロックが出力するために指定した信号の数によって異なります。たとえば、メッセージに 4 つの信号がある場合、ブロックには 4 つの出力ポートを設定できます。
手動またはデータベースによって指定された信号の場合、CAN 信号のデフォルトの出力データ型は double です。他のタイプを指定するには、Signal Specification (Simulink) ブロックを使用します。これにより、ブロックは次の出力信号データ型をサポートできるようになります: single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64、および boolean。ブロックは固定小数点型をサポートしていません。
追加の出力ポートは、パラメータ 出力端子 ペインでオプションを選択することで追加できます。詳細については、パラメータ Output identifier
、Output timestamp
、Output error
、Output remote
、Output length
、および Output status
を参照してください。
パラメーター
raw data
:データを uint8 ベクトル配列として出力します。このオプションを選択した場合は、メッセージ フィールドのみを指定します。その他の信号パラメータ フィールドは使用できません。このオプションは、ブロック上の出力ポートを 1 つだけ開きます。変換式は次のとおりです。
ここで、physical_value = raw_value * Factor + Offset
raw_value
はアンパックされた信号値であり、physical_value
はスケーリングされた信号値です。manually specified signals
:データ信号を指定できます。このオプションを選択した場合は、Signals
テーブルを使用して信号メッセージを手動で作成します。ブロック上の出力ポートの数は、指定する信号の数によって異なります。たとえば、4 つの信号を指定すると、ブロックには 4 つの出力ポートがあります。CANdb specified signals
:データ信号を含む CAN データベース ファイルを指定できます。このオプションを選択した場合は、CANdb ファイルを選択します。ブロック上の出力ポートの数は、CANdb ファイルで指定された信号の数によって異なります。たとえば、CANdb ファイルで選択したメッセージに 4 つの信号がある場合、ブロックには 4 つの出力ポートがあります。ARXML specified signals
:信号定義用の ARXML ファイルを指定できます。これにより、一部のリモート オプションが無効になります。ARXML ファイルからデータを読み取った後、manually specified signals
に切り替えてテーブルをさらに変更できます。詳細については、Simulink における CAN の ARXML ファイル サポートを参照してください。
プログラムでの使用
ブロック パラメーター: DataFormat |
型: string | character vector |
値: 'raw data' | 'manually specified signals' | 'CANdb specified signals' | 'ARXML specified signals' |
既定の設定: 'raw data' |
このオプションは、データの出力形式 パラメータを CANdb specified signals
または ARXML specified signals
として指定した場合に使用できます。システム上のデータベース ファイルを見つけるには、参照 をクリックします。データベース ファイルで指定されたメッセージと信号定義は、ダイアログ ボックスの メッセージ セクションに表示されます。データベース ファイルで指定された信号は 信号 テーブルに入力されます。等号、アンパサンドなどの英数字以外の文字を含むファイル名は、有効なデータベース ファイル名ではありません。データベース名にピリオドを使用できます。データベース ファイルを使用する前に、英数字以外の文字を使用して名前を変更します。
プログラムでの使用
ブロック パラメーター: CANdbFile
|
型: string | character vector
|
このオプションは、データの入力形式 フィールドにデータベースを指定し、データベース ファイル フィールドにデータベース ファイルを指定する場合に使用できます。表示するメッセージを選択できます。信号 テーブルには、選択したメッセージの詳細が表示されます。
プログラムでの使用
ブロック パラメーター: MsgList
|
型: string | character vector
|
CAN メッセージの名前を指定します。既定値は CAN Msg
です。このオプションは、生データを出力するか、信号を手動で指定する場合に使用できます。
プログラムでの使用
ブロック パラメーター: MsgName
|
型: string | character vector
|
CAN メッセージ識別子が Standard
タイプか Extended
タイプかを指定します。既定値は Standard
です。標準識別子は 11 ビットの識別子であり、拡張識別子は 29 ビットの識別子です。このオプションは、生データを出力するか、信号を手動で指定する場合に使用できます。データベースで指定された信号の場合、識別子タイプ はデータベースからタイプを継承します。
プログラムでの使用
ブロック パラメーター: MsgIDType |
型: string | character vector |
値: 'Standard (11-bit identifier)' | 'Extended (29-bit identifier)' |
既定の設定: 'Standard (11-bit identifier)'
|
CAN メッセージ ID を指定します。この番号は、標準識別子の場合は 0 ~ 2047 の整数、拡張識別子の場合は 0 ~ 536870911 の整数である必要があります。-1
を指定すると、ブロックはメッセージに指定された長さに一致するメッセージをアンパックします。hex2dec
関数を使用して 16 進数値を指定することもできます。このオプションは、生データを出力するか、信号を手動で指定する場合に使用できます。
プログラムでの使用
ブロック パラメーター: MsgIdentifier |
型: string | character vector |
値: '0' から '536870911' |
CAN メッセージの長さを 0 ~ 8 バイトの範囲で指定します。出力データにデータベース指定の信号を使用している場合、データベース ファイルによってメッセージの長さが定義されます。それ以外の場合、このフィールドはデフォルトで 8
になります。このオプションは、生データを出力するか、信号を手動で指定する場合に使用できます。
メモ: マスクまたはネットワーク記述ファイルで指定された値と異なる長さのフレームを受信すると、そのフレームは破棄されます。
プログラムでの使用
ブロック パラメーター: MsgLength |
型: string | character vector |
値: '0' から '8' |
既定の設定: '8'
|
信号テーブルに信号を追加します。
プログラムでの使用
なし
選択した信号を信号テーブルから削除します。
プログラムでの使用
なし
信号を手動で指定するか、データベース ファイルを使用して信号を定義する場合、このテーブルが表示されます。
データベース ファイルを使用している場合は、ファイル内のデータがこのテーブルに入力され、フィールドを編集することはできません。信号情報を編集するには、指定した信号に切り替えます。
信号を手動で指定することを選択した場合は、このテーブルで信号を手動で作成します。作成する各信号には次の値があります。
- 名前
信号のわかりやすい名前を指定します。モデル内の Simulink ブロックにこの名前が表示されます。既定値は
Signal [row number]
です。- Start bit
データの開始ビットを指定します。スタート ビットは、メッセージの先頭から数えて最下位ビットです。スタートビットは 0 から 63 までの整数である必要があります。
- Length (bits)
メッセージ内で信号が占めるビット数を指定します。長さは 1 から 64 までの整数である必要があります。
- バイト順
次のいずれかのオプションを選択します。
LE
:バイト順序はリトルエンディアン形式 (Intel®) です。この形式では、最下位ビットから最上位ビットまでのビットをカウントします。たとえば、スタート ビットを 20 にして 1 バイトのデータをリトルエンディアン形式でパックすると、データ ビット テーブルは次の図のようになります。最下位ビットから最上位アドレスまでカウントされるリトルエンディアンバイトオーダー
BE
:バイト順序はビッグエンディアン形式 (Motorola®) です。この形式では、最下位ビットから最上位ビットまでのビットをカウントします。たとえば、開始ビットを 20 にして 1 バイトのデータをビッグ エンディアン形式でパックすると、データ ビット テーブルは次の図のようになります。ビッグエンディアンバイトオーダーは最下位ビットから最下位アドレスまでカウントされます
詳細については、CANフレーム構造、バイト順序、ビットカウントを参照してください。
- Data type
信号が割り当てられたビット内のデータをどのように解釈するかを指定します。次の中から選択してください:
signed
(既定)unsigned
single
double
- Multiplex type
ブロックが各タイム ステップで CAN メッセージから信号をアンパックする方法を指定します。
Standard
:信号は各タイムステップでアンパックされます。Multiplexor
:Multiplexor
信号またはモード信号がアンパックされます。メッセージごとに 1 つのMultiplexor
信号のみ指定できます。Multiplexed
:実行時のMultiplexor
信号 (モード信号) の値が、この信号に設定された Multiplex value と一致する場合、信号はアンパックされます。
たとえば、メッセージには次の値を持つ 4 つの信号があります。
信号名 マルチプレックスタイプ マルチプレックス値 Signal-A 標準 適用不可 Signal-B 多重化 1 Signal-C 多重化 0 Signal-D マルチプレクサ 適用不可 この例では以下のようになります。
ブロックは、すべてのタイム ステップで Signal-A (標準信号) と Signal-D (マルチプレクサ信号) をアンパックします。
特定のタイム ステップで Signal-D の値が 1 の場合、ブロックはそのタイム ステップで Signal-A と Signal-D とともに Signal-B をアンパックします。
特定のタイム ステップで Signal-D の値が 0 の場合、ブロックはそのタイム ステップで Signal-A と Signal-D とともに Signal-C をアンパックします。
Signal-D の値が 1 または 0 でない場合、ブロックはその時間ステップで多重化された信号のいずれもアンパックしません。
- Multiplex value
このオプションは、Multiplex type を
Multiplexed
として選択した場合にのみ使用できます。ブロックがMultiplexed
信号をアンパックするには、指定した値が実行時のMultiplexor
信号値と一致する必要があります。Multiplex value は正の整数またはゼロでなければなりません。- 要素
アンパックされた生の値を物理値 (信号値) に変換するために適用される Factor 値を指定します。詳細については、Data input as パラメータ変換式を参照してください。
- オフセット
物理値 (信号値) をアンパックされた生の値に変換するために適用される オフセット 値を指定します。詳細については、Data input as パラメータ変換式を参照してください。
- Min、Max
生の信号値の範囲を定義します。デフォルト設定はそれぞれ
-Inf
(負の無限大) とInf
です。データベースで指定された信号の場合、これらの設定はデータベースから読み取られます。manually specified signals の場合、信号の最小および最大の物理値を指定できます。デフォルトでは、これらの設定を超える信号値はクリップされません。
プログラムでの使用
ブロック パラメーター: SignalInfo
|
型: string | character vector |
CAN メッセージ識別子を出力するには、このオプションを選択します。このポートのデータ型は uint32
です。
プログラムでの使用
ブロック パラメーター: IDPort
|
型: string | character vector |
値: 'off' | 'on' |
既定の設定: 'off'
|
メッセージのタイムスタンプを出力するには、このオプションを選択します。この値は、メッセージが受信された時刻を示し、モデル シミュレーションの開始から経過した秒数として測定されます。このオプションは、ブロックに新しい出力ポートを追加します。このポートのデータ型は double
です。
プログラムでの使用
ブロック パラメーター: TimestampPort
|
型: string | character vector |
値: 'off' | 'on' |
既定の設定: 'off'
|
メッセージのエラーステータスを出力するには、このオプションを選択します。このオプションは、ブロックに新しい出力ポートを追加します。このポートの出力値 1
は、着信メッセージがエラー フレームであることを示します。出力値が 0
の場合、エラーはありません。このポートのデータ型は uint8
です。
プログラムでの使用
ブロック パラメーター: ErrorPort
|
型: string | character vector |
値: 'off' | 'on' |
既定の設定: 'off'
|
リモート フレームのステータス メッセージを出力するには、このオプションを選択します。このオプションは、ブロックに新しい出力ポートを追加します。このポートのデータ型は uint8
です。
プログラムでの使用
ブロック パラメーター: RemotePort
|
型: string | character vector |
値: 'off' | 'on' |
既定の設定: 'off'
|
メッセージの長さをバイト単位で出力するには、このオプションを選択します。このオプションは、ブロックに新しい出力ポートを追加します。このポートのデータ型は uint8
です。
プログラムでの使用
ブロック パラメーター: LengthPort
|
型: string | character vector |
値: 'off' | 'on' |
既定の設定: 'off'
|
メッセージの受信ステータスを出力するには、このオプションを選択します。ブロックが新しいメッセージを受信した場合のステータスは 1
で、受信しなかった場合は 0
になります。このオプションは、ブロックに新しい出力ポートを追加します。このポートのデータ型は uint8
です。
プログラムでの使用
ブロック パラメーター: StatusPort
|
型: string | character vector |
値: 'off' | 'on' |
既定の設定: 'off'
|
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
バージョン履歴
R2009a で導入ARXML ファイル定義をサポートするために、次のパラメータが更新されます。
データの出力形式 — 新しいオプション
ARXML specified signals
が追加されました。
CANdb file — ブロックマスクで データベース ファイル に名前が変更されました。プログラム名は
CANdbFile
のままです。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)