Beckhoff#TwinCAT SFC Basic-2 SFC Flags

前回はBeckhoff TwinCAT SFCの部品を説明しましたが、今回はSFC Flagsについて説明したいと思います。SFC flgasはTwinCATから事前生成される変数です。それらの変数を使用しSFCプログラムを制御したり現在状態を取得したりできます(例えばTimeoutエラー・リセット動作など)。

ですが、それらの変数を使用する前にVAR_INPUT内で先に定義する必要があります。

Reference Link

こちらはBeckhoff TwinCAT SFCの部品のTutorialです↓

Beckhoff#TwinCAT SFC Basic-1

Enable the SFC Flags

Project>Your Project Name Propertiesをクリックします。

SFCをクリックします。

そして必要なFlagsをCheck入れます。

最後はProjectを再コンパイルすれば、SFCプログラムにアクセスできる変数が増えるとわかります。

Flags

SFCInit:Bool

True=TwinCATがSFCシーケンスをInit StepとSFC Flags含めてリセットします。SFCInitがTrueに限り、Init Stepがずっと有効のままで”Action実行しない”になります。実行するにはSFCInitがTrue>Falseに戻ったときだけです。

SFCInitを使用するには、VAR_INPUTでSFCInit変数を定義する必要があります。

そしてMainプログラムでSFC.SFCInitにTrueやFalseを与えておけばよいです。

このように、いまSFC.SFCInitがTrueになると、シーケンスはずっとInitのStepのStepままになっています。

SFCReset:Bool

True=TwinCATがSFCシーケンスをInit StepとSFC Flags含めてリセットします。そしてInit Stepが有効になるだけではなく、”Actionも実行する”になります。User ProgramでそのSFCResetをリセットしたあとにFalseに戻す必要があります。

SFCResetを使用するには、VAR_INPUTにSFCReset変数を定義する必要があります。

そしてMainプログラムでSFC.SFCResetにTrueやFalseを与えておけばよいです。

このように、いまSFC.SFCResetがTrueになると、シーケンスはずっとInitのStepのStepままになっています。

Difference Between SFCInit/SFCReset?

ではSFCInitとSFCResetの違いを実際に説明します。わかりやすくするため、一つのN ActionをInit Stepに追加します。N Actionは前回の記事でも説明しましたが、Stepが有効な限りTrue、無効になったらFalseの動作です。

そこで、まずSFCInitをTrueにします。

そうすると、Init Stepが有効になっていますが、N ActionがTriggerされていません。

SFCInitをTrue>Falseに書き込みます。

Init StepのN ActionがTriggerされるとわかります。これはSFCInitの動作です。

次はSFCResetの動作をみてみましょう。

先のSFCInitと違って、SFCResetがTrueになるとN ActionもTriggerされます。

SFCEnableLimit

TRUE=StepのTimeoutエラーを検知するようにします。

FALSE=StepのTimeoutエラーを検知しないようにします。

SFCInitを使用するには、VAR_INPUTにSFCEnableLimit変数を定義する必要があります。

そしてMainプログラムでSFC.SFCEnableLimitにTrueやFalseを与えておけばよいです。

SFCError:Bool

TRUE=SFCプログラム内にTimeoutするStepがあります。そのSFCErrorは他のSFCErrorStep、 SFCErrorPOU, SFCQuitErrorの変数と一緒に詳しいエラー情報を取得できます。

SFCErrorStep:String

Timeoutエラーが発生してるStep名を出力します。SFCErrorも同時にTrueになります。

例えばいまStep2でTimeoutのエラーが発生してます。

文字列Step2がそのままSFC3.SFCErrorStepに出力します。

SFCErrorPOU:String

Timeout エラーが発生するときPOUの名前を出力します。

例えば以下の例だとSFCのStep2です。

そのときSFCErrorPOUは”SFC3″という文字列が出力されます。

SFCQuitError:Bool

TRUE=TwinCATがSFCシーケンスが止まり、Timeoutエラーがリセットされます。そしてTrue=>FalseになるとStepの時間もリセットされます。

SFCQuitErrorを使用するには、VAR_INPUTにSFCQuitError変数を定義する必要があります。

そしてMainプログラムでSFC.SFCQuitErrorにTrueやFalseを与えておけばよいです。

SFCQuitErrorがTrueになり、SFCErrorがリセットされ、SFCErrorStep・SFCErrorPOUもリセットするとよいでしょう。

そしてSFCシーケンスをMonitorすると、現在はStep2に止まっており、StepTimeの加算も止まっています。

SFCQuitErrorがFalseに戻ります。

SFCシーケンスがまた動き始め、StepのTime Countも再開します。


SFCPause:Bool

True=TwinCATがSFCシーケンスを一時停止します。

SFCQuitErrorを使用するには、VAR_INPUTにSFCPause変数を定義する必要があります。

そしてMainプログラムでSFC.SFCPauseにTrueやFalseを与えておけばよいです。

SFC3.SFCPauseがTrueになると、SFCシーケンスが一時停止になりますが、Stepの時間加算が止まってるがN Actionは動作します。

SFCTrans:String

TRUE立ち上げ=Transitionが成立した。

立ち上げは少し難しいので、足す1のCoutnerをつけます。

Trans4の成立条件をTrueにします。

StepがStep4に移行になりますが、iCoutnerが足す1されましたので、SFC3.SFCTransがTrueになったことがあるとわかります。

SFCCurrentStep:String

現在有効なStep名を出力します。もしParallel Branchだと一番右のStep名が出力になります。

たとえば現在 SFCシーケンスがInit Stepになっています。

SFC3.SFCCurrentStepが”Init”文字列が出力されます。

SFCTip SFCTipMode:Bool

Tip Modeを有効にするかのOptionです。

SFCTipMode=TRUEになるとStep移行するにはSFCTip がFalse>Trueする必要があります。

SFCTip SFCTipModeを使用するには、VAR_INPUTその2つの変数を定義する必要があります。

そしてMainプログラムでSFC.SFCTipMode、SFCTip にTrueやFalseを与えておけばよいです。

以下のExampleですが、SFCTipModeがTrueになりますとInit StepのTransition条件が成立しもSFCシーケンスがStep4に移行しないのです。そしてSFCTipがFalse->Trueの立ち上げをするInit Step>Step4に移行します。

SFCErrorAnalyzation

SFCErrorが発生するときにError情報を文字列として回答します。SFCErrorAnalyzationを呼び出すとき、TwinCATが暗黙のルール Tc2_SystemライブラリのAnaylzeExpression Function blockを使っています。

Tc2_System.AnaylzeExpression

Project>Referencesをクリックします。

TC2_System>>Tc3_module>Tc2_Systemを展開すると、SFC+AnalyzationのFolderがあります。

Folderを開くとAnalyzeExpressionのFunction Blockがあります。

Outputは文字列だけです。

Implementation

このように直接SFC3.SFCErrorAnalyzationを使えばよいです。

例えばおまStep2がTimeout エラーが発生します。

Error発生の原因はTrans4条件が成立してない原因なので、SFC3.SFCErrorAnalyzationがTrans4文字列出力されています。

SFCErrorAnalyzationTable

SFCErrorが発生するときにError情報配列で回答しますSFCErrorAnalyzationTableを呼び出すとき、TwinCATが暗黙のルール Tc2_SystemライブラリAnaylzeExpressionTable  Function blockを使っています。

Tc2_System.AnaylzeExpressionTable

Project>Referencesをクリックします。

TC2_System>>Tc3_module>Tc2_Systemを展開すると、SFC+AnalyzationのFolderがあります。

Folderを開くとAnalyzeExpressionTableのFunction Blockがあります。

OutputTableは配列のExpressionResultなので、VAR内でそのまま宣言すればよいです。

Implementation

VARでOutTableの変数を定義します。

このように直接SFC3.SFCErrorAnalyzationTableを使えばよいです。

例えばおまStep2がTimeout エラーが発生します。

Error発生の原因はTrans4条件が成立してない原因なので、SFC3.SFCErrorAnalyzationがTrans4文字列出力されています。

FailedがTrueになり、NameにはTrans4が格納されます。それはいまTrans4が成立してないのが原因でTimeoutエラー発生したので。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする