プログラムによる Requirements Table ブロックの作成
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 ブロックのグラフィカル インターフェイスを使用します。
データの定義
データは前提条件と事後条件に追加するだけでなく、定義して解決する必要があります。現在のところ、input1
、input2
、および output
を定義していません。データをプログラムで定義するには、RequirementsTable
オブジェクトに対して関数 addSymbol
を使用します。addSymbol
では、データの名前、スコープ、データ型、サイズなど、データの一部のプロパティを調整できます。その他のプロパティを設定する場合は、グラフィカル インターフェイスで [シンボル] ペインとプロパティ インスペクターを使用します。詳細については、Requirements Table ブロックのデータの定義を参照してください。
input1
、input2
、および 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 ブロックが表示されます。
データを変更するには、関数 findSymbol
で Symbol
オブジェクトの配列を取得してドット表記を使用します。データの取得と変更を参照してください。
要件の追加と変更
ブロックに要件を追加するには、関数 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'});
上記のコマンドを入力すると、[要件] タブに新しい要件がリストされます。
ブロックを閉じた場合は、関数 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
を入力します。
要件の階層はグラフィカル インターフェイスでのみ調整できます。要件を追加または削除するには、addRequirementRow
と removeRow
を使用します。
参考
RequirementsTable
| Requirements Table