Stateflowとは?
Matlabのページによりますと、
Stateflow® では、状態遷移図、フローチャート、状態遷移表、真理値表などのグラフィカル言語を提供します。Stateflow を使用して、MATLAB® アルゴリズムと Simulink® モデルが入力信号、イベント、および時間ベースの条件にどのように反応するかを記述できます。
そしてコード生成、検証、テストなど様々な機能もあるのようです。
詳しくはHPへ:
https://jp.mathworks.com/products/stateflow.html
Example
今回はStateFlowから簡単なFlowを作成しようと思います。
Sine waveのInputがあり、もし>0ならDeviceをONし、<=0ならDeviceをOffします。
まずMatlabを起動し、Simulink を立ち上げます。
Library Browserをクリックします。ここでSimulinkで使われるBlockを一覧できます。
ずっと下のScrollすると、Stateflowが見えます。
Chartダブルクリックします。
よし、いまモデルにStateflow一つ追加されました。
このStateflowのICONをダブルクリックします。
StateflowのEditorが開きました。
左にあるStateをクリックします。
そして右の空の場所に引っ貼ります。
Stateが1つ追加されました。
Stateもう1つ追加し、DeviceOFFとDeviceONの名前をつけます。
下に、entry:device_on=falseとentry:device_on=trueを入力します。
そのentryは以下のLink説明があります。簡単といいますと、
チャートがはじめてアクティブになる場合。これは、チャートの初期化と呼ばれます。
entryが設定完了したらStateの縁側のところから他のStateの縁側にひっばりますとStateの繋がりができます。
つまりこんな感じですね。
では先がDeviceOffからDeviceOnに流れるState接続しましたので、今度は逆方向もやります。
よし、Stateの流れ接続も完了しました。
線のところをクリックしますと、?が出てきますね。
ここで条件・動作などを入力できます。
[ ]はCondition、つまり条件ですね。
{ }はAction、つまり動作です。
そしてこちらはEventです。
今回はConditionだけ使うことになりますので、
[u>0.0]を設定します。つまりuが0.0より大きなら、DeviceOFFのStateから>DeviceONのStateへ変わることになります。
反対側には、もしu<=0.0ならDeviceONのStateからDeviceOffのStateへ流れることになりますね。
設定終わったら、Runしてみます。
うん?エラーが出てきますね…
unresolved symbolsのようなメッセージですね。
なので、Symbolsを設定します。
View>Symbolsを。
先のuとdevice_onが問題出てますね。
では、まずuのほうをInput Dataに定義します。
次はdevice_onをOutput Dataに定義します。
よし、これで完了ですね。
もう一回Runしてみますと、Errorなくなりましたね。
ここで一回StateflowのChartから一回Modelのほうに戻りましょう。
先のStateflowのChartからうす~~い絵が出てましたね!
あの絵は先私たち作ったのStateFlowです。
次はSine wave、2PortのScope、Out1を追加します。
それぞれ繋がりましょう。
Sine wave>>u とScope port1接続します。
device_on>>out1とScope接続します。
結果
うん、それはちゃんとON/OFFになっていますね。
PLC Code生成
最後はおまけに、PLC Codeの自動生成も紹介しましょう。
Simulink PLCCoderという別Packageが必要になります。
詳しくはこちらへ:
https://jp.mathworks.com/products/simulink-plc-coder.html
Code>PLC Code>Optionsをクリックします。
PLC Code Generation>Target IDEで自動生成したいPLCメーカーが選べます。
注意するのは、この変換はST言語ですね。
Ladderは…今度時間あればやってみますね。
では、Siemens TIA Portalを選択します。
先作ったStateFlowを右クリック>PLC Code>Generate Code for Subsystem。
しばらく待ちますと、もしエラーがなければ、SCL Filesが生成されますね。
おお、よくできていますね。
TIAからExternal source files>Add new external file。
先自動作成されたものを追加し、右クリック>Generate blocks from source。
お、ちゃんとFunction Blockに変換されますね。
はーい、お疲れ様です。