Beckhoff#VAR_INST

TwinCATはVAR_INST宣言を使ったことありますか?VAR_INST内の変数はVARと同じですがFunction BlockのStack内だけに格納されます。つまり、VAR_INSTはFunction BlockのVAR変数と同じく使用できるし、Method Callされるたびに初期化しなくても済みます。

注意するのはVAR_INSTはMethod内だけ宣言とアクセスできます。

これはVAR_INSTの宣言方法です。先に書きましたがVAR_INSTは一般的なInstance内の変数と違います。その変数はFunction BlockのStack内で格納しMethodから定義するんです。

では、このVAR_INSTはどう使うでしょうか。たとえば、Method内のPulse検知Function Block P_TRIGやIEC_TIMER TONなどを定義するとしよう。本来はFunction BlockのVAR内で定義する必要があり、でも実際その P_TRIGやIEC_TIMERが使われているのはMETHOD内だけなので、わざわざ該当する変数をFunction BlockのGlobalに宣言しなくてもよいでしょう。

変数のScopesをできれば小さくしましょう。そうすることによりコードのメンテナンスもよくなります。

VAR_INST
    Variable : Type;
END_VAR

Example

では、実際Exampleを作成してみましょう。

POUs>Add>POUします。

Function Blockに名前を入れ、Openします。

次はMethodを追加します。

Add>Methodします。

Methodの名前を決め、Openします。

最初はVAR内で_iCounterという変数を追加し、bAddがTrueになるとずっと足す1のようなプログラムです。

次はMainのプログラムでMethodを呼び出します。

ですが、Methodから出力された変数はずっと1ですね。

それはMethodのVAR変数がサイクル完了したら変数値がリセットされたからです。

次はVAR_INSTを定義したMethodを作成しましょう。

やってることはVAR_INST内で同じのINT変数を定義し、Methodが呼び出すされるたびに足す1します。

では実際そのMethodもCallしてみましょう。

VAR_INSTが宣言されたMethodが、その結果はずっと加算されています。

それはVAR_INST内の変数がStack内でずっと保存されてるからです。

Sample Code

以下のLinkからSample Codeをダウンロードしてください。

TwinCAT3/TwinCAT Project_Example_VAR_INST.tnzip at main · soup01Threes/TwinCAT3 (github.com)

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

シェアする

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

フォローする