Main Content

プログラムによる Requirements Table ブロックの作成

R2022a 以降

Requirements Table ブロックの作成と管理をプログラムで行うことができます。この例では、プログラムを使用して Requirements Table ブロックを新しいモデルに作成し、ブロックのデータを定義し、要件を追加し、要件のプロパティにアクセスします。Requirements Table ブロックの作成と管理をグラフィカル インターフェイスで行う方法の詳細については、Requirements Table ブロックを使用した形式的要件の作成を参照してください。

Requirements Table ブロックの作成

追加する Requirements Table ブロックには、それぞれ RequirementsTable オブジェクトが関連付けられます。関数 slreq.modeling.create を使用して、myNewModel という名前の新しいモデルに Requirements Table ブロックを作成し、そのブロックを table という名前の RequirementsTable オブジェクトに割り当てます。

table = slreq.modeling.create("myNewModel");

Requirements Table ブロックを既存のモデルに追加する場合は、関数 add_block (Simulink) を使用し、slreq.modeling.find でブロックの名前を使用して RequirementsTable オブジェクトを取得します。

add_block("reqmanage/Requirements Table",...
strcat(gcs,"/Requirements Table"));
table = slreq.modeling.find(gcs);

Requirements Table ブロックの名前と列ヘッダーの指定

Requirements Table ブロックをモデルに追加したら、ドット表記を使用して Name プロパティと RequirementHeader プロパティを変更します。Requirements Table ブロックを新規に作成した場合は既定の名前が使用されます。Name プロパティを My Requirements に変更してブロック名を変更します。

table.Name = "My Requirements";

RequirementHeader プロパティを調整して、[前提条件][事後条件]、および [アクション] の各列をブロックに追加できます。この例では、2 つの前提条件の列と 1 つの事後条件の列をブロックに含めるように指定します。

table.RequirementHeaders.Preconditions = ["input1","input2"];
table.RequirementHeaders.Postconditions = "output";

[要件] タブおよび [仮定] タブで使用しない列のタイプを関数 hideRequirementColumn および hideAssumptionColumn を使用して非表示にできます。この例では、アクションや持続時間は使用しません。関数 hideRequirementColumn を使用して [アクション] 列と [持続時間] 列を非表示にします。

hideRequirementColumn(table,"Actions");
hideRequirementColumn(table,"Duration");

メモ

列を削除するには、Requirements Table ブロックのグラフィカル インターフェイスを使用します。

データの定義

データは前提条件と事後条件に追加するだけでなく、定義して解決する必要があります。現在のところ、input1input2、および output を定義していません。データをプログラムで定義するには、RequirementsTable オブジェクトに対して関数 addSymbol を使用します。addSymbol では、データの名前、スコープ、データ型、サイズなど、データの一部のプロパティを調整できます。その他のプロパティを設定する場合は、グラフィカル インターフェイスで [シンボル] ペインとプロパティ インスペクターを使用します。詳細については、Requirements Table ブロックのデータの定義を参照してください。

input1input2、および output という名前のデータを定義し、それらを入力データとして指定します。output は事後条件で使用する唯一のデータであるため、このデータに対しては isDesignOutput プロパティを有効にする必要があります。isDesignOutput解析用の設計モデル出力として扱うを参照してください。output を設計モデル出力として指定します。

addSymbol(table,Name="input1",Scope="Input");
addSymbol(table,Name="input2",Scope="Input");
addSymbol(table,Name="output",Scope="Input",isDesignOutput=1);

1 つの要件と 3 つの列をもち、列ヘッダーにデータが表示された Requirements Table ブロックが表示されます。

This image shows the Requirements Table block after entering the commands described up until this point. The table has one requirement, three columns, and the data are in each of the headers.

データを変更するには、関数 findSymbolSymbol オブジェクトの配列を取得してドット表記を使用します。データの取得と変更を参照してください。

要件の追加と変更

ブロックに要件を追加するには、関数 addRequirementRow を使用します。仮定を追加するには、関数 addAssumptionRow を使用します。各関数で 1 行ずつ追加されます。複数の行を追加する場合は、エントリを繰り返すか for ループを使用して追加し、追加後にプロパティを調整します。

ブロックに要件を追加し、概要、前提条件、および事後条件を指定します。

addRequirementRow(table,Summary="Requirement 2",...
Preconditions={'> 0',''});

1 つ目の要件は空です。既存の要件のプロパティを指定するにはドット表記を使用します。要件をテーブルから RequirementRow オブジェクトとして取得し、1 つ目の要件を変更します。

rrow = getRequirementRows(table);
rrow(1).Summary = "Requirement 1";
rrow(1).Preconditions = {'0',''};
rrow(1).Postconditions = {'> 2'};

関数 addChild を使用して要件や仮定に子を追加することもできます。2 つ目の要件に前提条件と事後条件を指定する 2 つの子を追加します。

addChild(rrow(2),Preconditions={'','> 0'},...
Postconditions={'> 5'});
addChild(rrow(2),Preconditions={'','<= 0'},...
Postconditions={'<= -1'});

要件セットを完了するには、関数 addRequirementRow を使用して rowType"default" と指定し、既定の行を追加します。

addRequirementRow(table,rowType="default",...
Postconditions={'< 1'});

上記のコマンドを入力すると、[要件] タブに新しい要件がリストされます。

This image shows the Requirements Table block after executing the programmatic commands shown above. It includes the two top-level requirements, two children requirements of the second requirement, and a default requirement.

ブロックを閉じた場合は、関数 open_system を使用して再度開くことができます。

open_system("myNewModel/My Requirements");

要件を slreq.Requirement オブジェクトとして管理

Requirements Table ブロックをモデルに追加するとブロックごとに slreq.ReqSet オブジェクトが作成され、要件を作成すると対応する slreq.Requirement オブジェクトが作成されます。この例で説明しているテーブルからオブジェクトを取得するには、要件セットを Requirements Toolbox™ に読み込み、関数 slreq.load を使用して slreq.ReqSet オブジェクトを取得します。

[~,reqSet] = slreq.load("myNewModel.slx");
モデルに対して slreq.open を使用することもできます。要件セットが読み込まれ、要件エディターで要件セットが開きます。

slreq.ReqSet オブジェクトを取得した後、他の要件セットなどのプロパティを取得できます。find を使用して slreq.Requirement オブジェクトを取得します。

requirements = find(reqSet,"Type","Requirement");

最上位の階層レベルの要件だけを取得する場合は、slreq.ReqSet オブジェクトに対して関数 children を使用します。その後、それぞれの slreq.Requirement オブジェクトに対して関数 children を使用して各要件の子要件にアクセスできます。

Requirements Table ブロックが開いている場合は、関数 slreq.getCurrentObject を使用して slreq.Requirement オブジェクトを取得できます。インターフェイスから slreq.Requirement オブジェクトを取得するには、ブロックまたは要件エディターで要件を選択し、slreq.getCurrentObject を入力します。

要件の階層はグラフィカル インターフェイスでのみ調整できます。要件を追加または削除するには、addRequirementRowremoveRow を使用します。

参考

|

関連するトピック