SFCとは?
SFCはGraph感覚でプログラムを作成するIEC61131-3手法でUserが早く・簡単にシーケンサー制御プログラムを作成することができます。
そのSFCプログラムはプロセスをStepことにわけ、各Stepが活かすFunctionも明確です。
StepにActionがという部品あり該当するStepが実行するロジックをプログラムできます(実装するはLAD/FBD/IL/STでも可能)
Step間移行するにTransitionsという部品があり、TransitionsがTrueになると次のStepに移行することできます。
Basic
SFCプログラムを処理するにはいくつかのBasic Elementがありますが、今回はまずTutorialで使用する部品を紹介します。
Active Step
それはいま実行している”Step”になります。TwinCATはOnline modeのときそのStepが青い色になります。
Initial Step
SFC POUが最初にCycle中で呼び出されたとき自動的に有効になるStepです。
Transitions
StepとStep移行する条件。
Resetting of the IEC Action
TwinCATのAction部品には N/R/S/L/D/P/SD/DS/SLのようなAction qualifiersがあり、それらのQualifiersが該当するActionの実行状態を決めます。
その中にStoredというFlagがあり、一回実行するとリセットしない限り、そのActionはずっと実行になります(例えばStepが移行したとしても)
Executing exit actions
TwinCATがは毎CycleにすべてのStepがExit 動作の条件を満たすかをCheckします。Checkする順番は上から下左から右で、Stepが無効の状態に移行するとExit Actionが実行される。
Executing entry actions
TwinCATがは毎CycleにすべてのStepがEntry 動作の条件を満たすかをCheckします。Checkする順番は上から下左から右で、Stepが有効の状態に移行するとExit Actionが実行される。
Time Check, Executing step actions
- TwinCATは有効になってるときStepが実行してる時間CountをStep変数 Step名.tに転送します。
- SFCプログラムがイベントやTimeoutが発生すると、TwinCATは該当するエラーFlagを出力します。
Transition Check
TransitionがStep移行するために制御する部品でTrueになると次のStepに移行します。
Add SFC As Implement Language
では、Beckhoff TwinCAT3にSFC言語のPOUを追加してみましょう。
Implementation languageにStructured Text(ST)を選び、OKで追加します。
そしてSFC Editorが開き、中にDefault Init StepとTrueの横線が作成されています。TwinCATではその正方形のボックスを”Step”と呼び、横線は”Transitions”と呼び1セットになっています。もしStepだけTransitionsなしもしくはTransitionsがあってもStepなしどっちでもコンパイルエラーになります。
正方形のStepをクリックすると名前変更でき、注意するにはSFC プログラム内でStep名重
複してはいけません。
下図のInit StepでMustではないが、作成するとSFCプログラムが最初に呼び出しされたときアプリケーションにより内部変数に適切な値を与えることができます。
StepではIEC ActionとStep Actionが分かれており、今回のTutorialではその違いはまだ触れないようにします。情報量が多すぎると混乱しますので。
TwinCAT PLC SFC Toolbars
SFCプログラムを作成するには作業用のToolbarsが必要ですよね。View>Toolbars>TwinCAT PLC SFCをクリックします。
そのようなToolbarsが追加されます。
Your First SFC Program!
では早速プログラムを作ってみましょう!
うん…?そのままコンパイルするとエラーが出てきます。Identifier ‘Init_entry’ not definedのエラーメッセージですね。
InitのStepに”E”という文字がついてます。それはEntry ActionつまりStepが有効の立ち上げで実行する動作です。Eボタンをクリックします。
Duplication Modeを設定してくださいと言われます
今回のTutorialはとりあえず全部Copy Referenceにします。
次はAction名・実装言語を設定し、Addします。
SFCプログラム内でInit_entryのActionが追加されました。
Init_entryをクリックし、中の整数の変数を999にする簡単プログラムです。
プログラムをDownloadするとiCounter値は999になっています。
Opearate A Step
では実際にStepの細かい操作をしましょう。Step Boxを選び、Toolbarsに上矢印と下矢印のIconがあります。
Insert step-transition
上矢印のIconはInsert step-transition動作です。つまりいま選んでるStepの上にさらにStep+Transitionのセットを追加します。
このようにStepの上にさらにStep追加しました。
Insert step-transition after
下矢印のIconはInsert step-transition After動作です。つまりいま選んでるStepの下にさらにStep+Transitionのセットを追加します。
このようにStepの下にさらにStep追加しました。
Configure a Transitions
ではInit Stepの下にStepとTransitionsを1セットを追加します。次はTransitionsを設定します。
Trans0をクリックするとDuplication Modeの設定があります。
同じくCopy Referenceを選び、OKします。
Transitions名を追加し、Implementation languageをFBD作成してみましょう。
Trans0が追加されました。
Activate the TwinCAT PLC FBD/LD/IL Toolbars
TwinCATでFBD/LD/IL言語でプログラム作成するとき、Toolbarsを有効にしましょう。
View>Toolbars>TwinCAT FBD/LD/ILをクリックします。
Insert Empty box with EN/ENO
Empty Boxを追加します。Insert Empty Box with EN/ENOをクリックします。
このようにEN/ENO付きのBoxが追加されます。
Configure the condition
AND条件で簡単なロジックを組みます。
Trans0の成立条件はBoolでTrueやFalseだけで、OutはTrans0(つまりTransitions名)です。
よし、これでOKです。
Result
Trans0がFalseになってる状態を見てみましょう。
そうすると、いまSFC FlowはInit Stepに止まってて、Trans0がTrue成立なるまでずっと待ちます。そしてInit StepにT#14s790ms表示していますね。その時間は現在STEPの有効時間です。
では実際にTrans0の条件を成立させましょう。そうするはStep0のBoxが青色になりつまり状態はいまInitからStep0に移行しましたね。
Get Trans condition outside
もちろんTransitionsの状態はプログラムの外でも取得できます。
このようにTransitionsはPropertyのように直接アクセスできます。
Add Trans in another way
Transitionsはまだ他の追加方法があります。
SFCプログラムのところに右クリック>Add>Transitionします。
Transitions名を追加Implementation languageを選びます。今度はラダーにしますね。
また簡単なロジックを追加します。
最後にTransitionsのところに先に追加したTrans1を入力すればOKです。
Result
いまはSFC プログラムStep1で止まっててTrans1の成立条件を待っています。
Trans1の成立条件を整理してみます。
そうするとTrans1の横線が青い色になり、つまり成立してる状態ですね。
そしてInit Stepに戻るループです。
Configure a Jump
Step1の次に小さな矢印が見えますか。これはFlowのJump処理です。つまり別のStepに飛ぶことができます。
その”Init”をクリックします。
Input Assisantが出てきて選択できる変数が表示されます。ここでStep0選択します。
つまり、いまはStep1が完了すると、またStep0に戻るようなループです。
Operate An Entry/Exit Action
次はEntry とExit Actionの操作を説明します。
このようなICONからクリックするとStepにEntryやExit Actionの追加はできます。
Add entry action
先にも書きましたが、Entry Actionというのは、TwinCATが常にSFCプログラム内のすべてStepが”Entry 動作”に満たされてるかどうかをCheckします。そのCheckの順は上から下、左から右です。もし該当するStepが条件を満たしていれば、TwinCATは該当するStepのEntry Actionを実行します。TwinCATはEntry Actionを実行するには次のStepに移行するTransitions条件が成立し、そして次のStepが有効になる前のタイミングです。
ToolbarsでAdd entry actionボタンをクリックします。
Copy Referenceを選択しOKします。
Entry Action名とImplementation languageを入力しAddします。
そうするとStepの隣に”E”のアルファベットが表示されます。それはStep0がEntry Actionであることを示しています。
そしてEntry Actionをアプリケーションに合わせてプログラム作成しましょう。今回は検証するために本来Step Initで999だと初期化したiCounter変数を1引きます。
Add exit action
重複になりますが、Exit Actionというのは、TwinCATが常にSFCプログラム内のすべてStepが”Exit 動作”に満たされてるかどうかをCheckします。そのCheckの順は上から下、左から右です。TwinCATがExit Action実行するにはいまのStepが有効から無効に移行するときです。ToolbarsからAdd exit Actionボタンをクリックします。
Copy Referenceを選択しOKします。
Copy Referenceを選択しOKします。
そうするとStepの隣に”X”のアルファベットが表示されます。それはStep0がExot Actionであることを示しています。
そしてExit Actionをアプリケーションに合わせてプログラム作成しましょう。今回は整数変数を+1にします。
Result
Trans0とTrans1の条件はずっと成立の状態で一つの変数はずっと引く1で、もうひとつの変数はずっと1を足すようになっています。
Operate An Action in Step
ActionというのはSFCプログラム内Stepの状態により実行するプログラムだと思ってください。例えばEntry ActionはStepが有効になった瞬間に実行するプログラムで、Exit ActionはStepが無効になってる瞬間に実行します。
Add a Action
ToolbarsからAction追加するボタンがあります。
上矢印はいまのActionの上にさらにAction挿入します。
下矢印はいまのActionの下にAction追加します。
このようにStepのとなりにActionが追加されました。
Add Action Block
もう一つはAction Blockを追加する方法を紹介します。Stepをダブルクリックします。
Action名とImplementation languageを設定しAddで追加します。
Step0 のActionプログラムが追加されました。
次はStep0_Active内にアプリケーションを合わせてプログラム追加しましょう。
Available qualifiers
各StepにQualifiersを定義することができます、そのQualifiersはStepがどんなActionを実行するかを設定します。それらのqualifiersはFunction Block SFCActionControl に実装され、SFC plug-insと組み込まれています。なので、Userのわたしたちは自分からプログラムを組む必要がありません。
Qualifiers | Stored? | Meaning | Description |
N | No | Stepが有効になっている限りActionを有効にします。 | |
R0 | No | Reset | Actionを無効にします。 |
S0 | Yes | Set(Stored) | Stepが有効になるとActionを有効にします。例え別のStepが移行してもそのActionリセットしない限りずっと有効のままになります。 |
L | No | Time Limited | Stepが有効になっている、なおかつ指定時間が超えない限りActionを有効にします。そのQualifiersはL T#1sのように、時間の定数と一緒に定義します。 |
D | No | Time Delay | Stepが有効になっていて、なおかつ指定の遅延時間を過ぎるとActionを有効にします。そのQualifiersはD T#1sのように、時間の定数と一緒に定義します。 |
P | No | Pulse | Stepが有効に移行するときと後続のサイクルの間に2回実行します。 |
SD | Yes | Stored and Time Delayed | Stepが有効に移行、なおかつ指定の遅延時間を過ぎるとActionを有効にします。そのQualifiersはSD T#1sのように、時間の定数と一緒に定義します。例え別のStepが移行してもそのActionリセットしない限りずっと有効のままになります。 |
DS | Yes | Delayed and Stored | Stepが有効に移行、なおかつ指定の遅延時間を過ぎたあとStepまだ有効してるとActionを有効にします。そのQualifiersはDS T#1sのように、時間の定数と一緒に定義します。例え別のStepが移行してもそのActionリセットしない限りずっと有効のままになります。 |
SL | Yes | Stored and time limited | Stepが有効になっている、なおかつ指定時間が超えない限りActionを有効にします。そのQualifiersはL T#1sのように、時間の定数と一緒に定義します。 |
N
Stepが有効になっている限りActionを有効にします。下図はStep0がOnしてるN Qualifiersがつけれます。
Step0が有効になってるとき、StepとActionも青色になり、bAction[0]がTrueになります。
そしてStep0からStep1に移行すると、bAction[0]がFalseになります。
L time Limited
Stepが有効になっている、なおかつ指定時間が超えない限りActionを有効にします。
そのQualifiersはL T#1sのように、時間の定数と一緒に定義します。
そのActionをクリックするとProperties画面が出ており、QualifierにValueを設定できます。
いまはL T#5s設定しています。つまりそのActionは5sまで実行します。
Step部品の隣にいま有効してる時間が表示されています。Step1が青になり、なおかつ有効時間が5s内なので、bActions[1]がTrueになります。
そしてStep1が青い色になって、有効時間が5sを超えるとbActions[1]がFalseになります。
R0 overriding Reset
Actionを無効にします。
SD Stored and time Delayed
Stepが有効に移行、なおかつ指定の遅延時間を過ぎるとActionを有効にします。
そのQualifiersはSD T#1sのように、時間の定数と一緒に定義します。例え別のStepが移行してもそのActionリセットしない限りずっと有効のままになります。
いまはStep1が青になり、でもStep1_ActiveというActionが有効になってません。それはSD T#5sのQualifierがつけられていますから。
そしてStep1が青い色になって、有効時間が5sを超えるとbActions[1]がTrueになります。
S0 Set(Stored)
Stepが有効になるとActionを有効にします。例え別のStepが移行してもそのActionリセットしない限りずっと有効のままになります。
いまStep1が有効になり、Step1_activeの動作がActiveされますね。
そして仮に次のStepに移行するとStep1_activeはまだ有効になったままです。それはR0 QualifierをStep1_active実行しないとStep1_activeがずっと有効になるということです。
D Delay
Stepが有効になっていて、なおかつ指定の遅延時間を過ぎるとActionを有効にします。
そのQualifiersはD T#1sのように、時間の定数と一緒に定義します。
いまStep1の経過時間はまだ設定の時間にすぎないのでStep1_activeが有効になっていません。
いまStepは設定してる時間が経過したので、Step1_activeが有効に変わります。
Summary
今回はSFCプログラムの基本操作を説明しました。次はIEC Actionと普通のAction・分岐制御・Step変数などを踏まえて行きたいと思います。
よろしくお願いします!