2番目の部分では、ネストされた並列動作状態マシンを作成し、それらの間でデータを交換する方法を示します。
入れ子になった有限状態機械構造。 状態マシンとのデータ交換の実装
SimInTech有限状態マシンは、無制限の入れ子の深さをサポートする標準サブモデルに基づいて形成されています。有限状態マシン内の回路に1つ以上の状態マップを配置し、並列動作する状態マシンのセットを取得できます。 「ヒーターコントローラー」モデル内の図に新しいブロック「ステートマシン状態マップ」を配置します。これは、ヒーターディスプレイの色と点滅周波数を決定するマシンになります。 ブロックの内部構造は、オンとオフの2つの状態で構成されます。
図に示すように回路を組み立てます。 30
図30.インディケーターオートマトンの内部構造。
アクティブ状態として、オン状態を選択します。 ブロックを選択して右クリックします。 ドロップダウンメニューで、[プロパティ]を選択します。 プロパティ編集ウィンドウが表示されます。このウィンドウでは、唯一のプロパティ「デフォルト」で「はい」を選択する必要がありますはい(図31を参照)
図31.初期アクティブ状態の設定。
オン状態での動作の論理の内部構造を図に示します。 32。
図32.オン状態での動作のロジック
状態がオンになると、タイマーは指定された時間の間信号0(偽)を生成します。 「operator NOT」ブロックを持つこの信号は1(true)に変わり、出力Onに送信されます。 「State Hold」ブロックで指定された時間が経過するまで、On stateブロックからの出力は1になります。時間がなくなると、「State Hold」ブロックの出力は1(true)になり、遷移がトリガーされ、出力信号がOnになります-0(偽)。状態が非アクティブの間は変更されません。 したがって、ステータスの表示がオンになっているときにこの出力を使用できます。
上記の回路の1レベル上に移動し、回路の「サブ構造」タブから「出力ポート」ブロックを配置します。 このポートはインジケータ信号を送信します。 図に示すように回路を組み立てます。 33。
図33自動表示の図。
オフ状態に入り、図に示すように簡単な回路を入力します。 34
図34.オフ状態での作業スキーム。
状態がオンになると、タイマーが開始し、設定で指定された時間間隔が経過すると、状態が終了します。
図35に示すように、2レベル上に移動し、「Automatic Indicator」サブモデルから表示された出力をコントローラー回路の「Led」出力に接続します。
図35.自動インジケータが埋め込まれたヒーターコントローラーの図。
計算の一般的なスキームを実行すると、インジケーターオートマトンの状態のタイマーで指定された間隔でインジケーターが0と1の間で切り替わります(図32および34を参照)。 デフォルトでは、この時間は1秒であり、一般的なダイアグラム(図8を参照)の「表示」グラフは、図36のように1秒間隔で蛇行します。
図36.自動表示のスケジュール。
表示オートマトンの間隔がコントローラーの状態(加熱中に1秒、オフ状態で5秒)に依存するためには、パラレルステートマシンからそれにデータを転送する必要があります。 これを行うにはいくつかの方法があります。 ステートマシンは従来のサブモデルを使用して実装されるため、すべてのデータ転送方法を使用できます。 この例では、そのうちの1つ、モデル信号を使用します。
サブモデル「ヒーターコントローラー」内に移動します。 画面上の図は図のようになります。 35. SimInTechのメインウィンドウのメインメニューで、[Signals]サブメニューの[Service]項目を選択します(図37を参照)
図37.プロジェクト信号を構成する呼び出し。
信号リストを設定するためのウィンドウが呼び出されます。 このウィンドウでは、プロジェクトブロックで使用されるプロジェクト信号を設定できます。
新しい信号を作成し(ウィンドウの下部にあるボタンを追加)、flash_timeという名前を設定します。 モードを「無指向性」に設定すると、プロジェクト内の任意の場所でこの信号を読み書きできます(図38を参照)。
図38.プロジェクト信号の追加。
この信号は、プロジェクトのあらゆる目的に使用できます。 これを使用して、さまざまな状態で表示間隔を設定します。
指示マシンに移動し、デフォルト値の1ではなく、onおよびoff状態のステータスタイマーに信号名flash_timeを入力します。 (図39を参照)
図39.信号名による表示の露出状態の設定。
シグナルによって設定されたインジケーター状態の露出時間があるので、異なるコントローラー状態でこの値を変更して、表示間隔を変更できます。
ヒーターコントローラーのステータスマップに移動すると、ステータスはオフです。 図の「ソース」タブから「定数」ブロックを配置し、「動的」タブから「プログラミング言語」ブロックを配置します。 図のように接続します。 40。
図40.インジケーターの時間を設定すると、ステータス図がオフになります。
定数プロパティを5(オフ状態で5秒間隔)に設定します。 一般的なケースでは、定数の代わりに、複雑さやネストの深さの間隔を計算するスキームがあります。
ダブルクリックして「プログラミング言語」ブロックのエディターに移動し、図5に示すように、入力値(u)をflash_time変数に割り当てます。 41。
図41.プログラミング言語での表示間隔の設定。
このテキストは、flash_time信号を、「プログラミング言語」ブロックへの入力から受け取った値に設定します。 変更を受け入れるには、ウィンドウの上部にある[閉じると適用]ボタンをクリックします。 (図41を参照)。
ブロックを使用して、プログラムテキストでインジケーター間隔を直接設定することはできません。 状態がオンであるためにそれをしましょう。
on状態に移動して、回路の[動的]タブから[プログラミング言語]ブロックを配置します。 図42に示すように、ダブルクリックしてブロックエディターに入り、編集ウィンドウにテキストを入力します。
編集ウィンドウの上部にある「閉じると適用」ボタンをクリックして、ウィンドウを閉じます。
図42.ステータスの表示間隔の設定は、プログラミング言語に含まれています 。
ここで計算を開始すると、「表示」グラフは、自動指示装置がヒーターコントローラーの状態に応じてスイッチング間隔を変更することを示します。 オフ状態では、間隔は5秒、オン状態では1秒です。 (図43を参照)
図43.期間が異なるインジケーターのスケジュール。
すでに説明したように、SimInTechでは、有限状態マシンロジックは標準サブモデルに基づいて実装されているため、これらのブロックを含むスキームでは、モデル作成の標準ロジックを自由に使用できます。
たとえば、インジケーターの色の計算を変更するには、インジケーター(0,1)のオンとオフに加えて、出力がインジケーターの色の値(0-オフ、1-緑のオン、2-赤のオフ)も受け取るようにコントローラー回路を変更できます。 色の計算スキームを図44に示します。
図44.インジケーターの色を計算したヒーターコントローラーの操作図
このテキストで説明されているようにすべての回路を組み立てた場合、モデルのグラフは以下に示すものと同様になります(図45を参照)。
図45.ステートマシンに基づいたコントローラーでヒーターモデルをモデル化した結果。
ヒーター動作インジケーターのグラフ(図45の上のグラフ)で、5秒の期間のオフ状態では、インジケーターへの出力の値が0-1(オフグリーン)に変わり、オン状態では1秒の期間のこの出力で値0-が変わることがわかります2(赤色オフ)。 上記の例では、スキームは、制御アルゴリズムを作成するための2つのアプローチ、「有限状態マシン」のロジック、およびアルゴリズムの標準機能ブロック図を組み合わせており、すべてが完全に連携することに注意してください。
結論
SimInTechテクニカルシステムの動的モデリング環境には、ステートマシンに基づいた制御システムのモデルを作成するためのツールが含まれています。 このロジックは、機能ブロック回路(データフロー)の標準ロジックと一緒に使用できますが、回路の開発と作成は互いに完全に互換性があります。
この例は、SimInTechで「ステートマシン」のロジックを使用する場合の基本的な作業方法を示しています。 ステートマシンのブロックを含むSimInTechのバージョンをここからダウンロードします 。
3の最後の部分では、SimInTechの回路からCコードを生成する方法を示します。 パート3はここにあります..