Main Content

getSignalIDsByName

信号名を使用して Simulink.sdi.Run オブジェクト内の信号の信号 ID を取得

R2020a 以降

説明

sigIDs = getSignalIDsByName(runObj,name) は、指定された名前 name をもつ Simulink.sdi.Run オブジェクト内の信号の 1 つ以上の信号 ID を返します。

すべて折りたたむ

信号 ID が必要である信号の名前を指定することで、Simulink.sdi.Run オブジェクト内の信号の信号 ID にアクセスできます。信号 ID を使用することで、関数 Simulink.sdi.compareSignals を使用して信号を比較したり、関数 Simulink.sdi.getSignal を使用して信号の Simulink.sdi.Signal オブジェクトにアクセスしたり、あるいは関数 Simulink.sdi.deleteSignal を使用してシミュレーション データ インスペクターから信号を削除することができます。

この例では、関数 getSignalIDsByName を使って名前またはブロック パスを使用して信号にアクセスする方法、およびバス内に含まれる信号の信号 ID にアクセスする方法を示します。

シミュレーション データ インスペクターでのデータの作成

この例では、パルス カウンターのモデルを使用して、シミュレーション データ インスペクターでシミュレーション データを作成します。モデルにはカウンターの上限と下限を定義する 2 つの入力信号と、カウントするパルスをもつ 1 つの入力パルス信号があります。モデルはバスを使用して Bus Counter サブシステムにデータを送信し、そこから Outport ブロックに送信します。モデルはパルス信号 input と、Outport ブロックに接続されている出力信号 OUT を記録するように設定されています。

モデルをシミュレートし、ログ データが含まれる実行をシミュレーション データ インスペクターで作成します。

out = sim('ex_pulse_counter');

信号 ID へのアクセス

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、ログ データにアクセスします。関数 Simulink.sdi.Run.getLatest は最後に作成された実行に対応する Simulink.sdi.Run オブジェクトを返します。Simulink.sdi.Run オブジェクトのログ信号の信号 ID にアクセスできます。

countRun = Simulink.sdi.Run.getLatest;

関数 getSignalIDsByName を使用して、input 信号の信号 ID にアクセスします。

inSigID = getSignalIDsByName(countRun,'input');

より複雑なモデルでは、複数の信号に同じ名前が付けられている場合があります。この場合、関数 getSignalIDsByName で信号名のみを使用することで、その名前を使用するモデル内のすべてのログ信号の信号 ID の配列になります。結果の重複を回避するために、プロック パスと信号名を一緒に指定できます。ブロック パスの要素を区切るにはスラッシュの代わりにドットを使用します。たとえば、input 信号の信号 ID にアクセスするには、名前を 'ex_pulse_counter.Pulse Generator.input' と指定することもできます。

inSigID = getSignalIDsByName(countRun,'ex_pulse_counter.Pulse Generator.input');

合成信号内の信号の信号 ID へのアクセス

ex_pulse_counter モデルに記録された出力はバス信号です。一番上のバス信号 OUT、入れ子にされたバス LIMITBUS、バス内の個々の信号 (outputupper_limit、および lower_limit) に対応する信号 ID にアクセスできます。

一番上のバスの信号 ID にアクセスするには、信号名 OUT を指定します。

OUTSigID = getSignalIDsByName(countRun,'OUT');

入れ子にされたバスの信号 ID にアクセスするには、バス階層内の信号へのパスを指定します。

LIMITBUSSigID = getSignalIDsByName(countRun,'OUT.LIMITBUS');

いずれかの個別の信号の信号 ID にアクセスするには、バス階層内の信号へのパスを指定します。信号名のみを使用して信号にアクセスすることはできません。Signal オブジェクトの Name プロパティにはバス階層が含まれます。

upper_limitSigID = getSignalIDsByName(countRun,'OUT.LIMITBUS.upper_limit');
upper_limitSig = Simulink.sdi.getSignal(upper_limitSigID);
upper_limitSig.Name
ans = 
'OUT.LIMITBUS.upper_limit'

入力引数

すべて折りたたむ

アクセスする必要がある信号 ID をもつ信号が含まれる実行。Simulink.sdi.Run オブジェクトとして指定します。

アクセスする必要がある信号 ID をもつ信号の名前。文字ベクトルまたは string として指定します。

モデルは、複数の信号に対して同じ信号名を使用できます。この場合、特定の信号の信号 ID にアクセスするときは、信号を生成するブロックのブロック パスを name 引数に含めることができます。たとえば、name'slexAircraftExample.Pilot.Stick' として指定して、slexAircraftExample モデルの Pilot ブロックの出力である Stick という名前の信号の信号 ID にアクセスします。

合成信号内の信号にアクセスするには、合成信号の階層構造を通じて信号へのパスを指定します。たとえば、name'COUNTERBUS.LIMITBUS.lower_limit' として指定して、バス COUNTERBUS に入れ子にされているバス LIMITBUS 内の lower_limit 信号の信号 ID にアクセスします。

データ型: char | string

出力引数

すべて折りたたむ

指定された名前をもつ信号の 1 つ以上の信号 ID。スカラーまたは配列として返されます。

バージョン履歴

R2020a で導入