Beckhoff#TwinCAT CFC Basic-2

前回はBeckhoff TwinCAT3のCFC言語基本操作を説明しました。今回はCompressor・Selecor・Jump・Label Mark・Return・Function BlockのMethod/Property操作を紹介しようと思います。よろしくお願いします。

Refernce Link

Beckhoff#TwinCAT CFC Basic-1

Insert Data Type

ではまずDUTを追加します。

CFC部品を説明するためのものなので、中身はあまり気にする必要がありません。

Compressor

最初に説明したいのはcomposer です。composer は構造体を処理するための部品で、複数の入手から、一つの構造体変数にまとめて転送します。default 追加されたときは???で、まとめたい構造体の名前に変更する必要があります。

Toolbox からComposer を選び、CFC Sheetを追加します。

先に書いた通りに、???のComposerを追加しました。???のところに構造体の名前を入れます。

このようです。

該当するDUTのelement は全部表示されます。

ではいくつのinput を追加します。

DIT_Event と紐つけてるCompressor と繋がります。

そのあとはoutput を追加します。

DUT_Event Compressorの出力はDUT_Eventと宣言した変数と繋がります。

プログラムをダウンロードします。

Record 変数に全部転送してくれました。

Selector

Selector はCompressor と同じく構造体を処理するための部品で、構造体だと宣言された変数を全部分解し出力します。

Default でSelector が追加されたときは???で、分解したい構造体の名前を入力する必要があります。

Toolbox からSelectorを追加します。

先に書いたように、???のselectorが追加されました。

???のところから分解したい構造体の名前を入力します。

さきとおなしのDUT_Eventを使用します。

このようてす。

Selector が自動的に構造体を分解し、すべての要素を出力します。

まずinput ではDUT_Eventを定義した変数と繋がります。

出力も全部内部変数とつながってきます。

プログラムをダウンロードするとRecord のデータが全部分解されます。

すべて転送されますね。

Jump

Jump 部品では条件がTrue になるとCFC Sheet に特定健の場所に飛びます。その特定場所はlabel 部品から定義されます。

Default でJump から追加されたとき???で飛ぶ先の指定する必要があります。

ではjump 部品を追加します。

三角形の元にinput をいれて、True 条件を定義します。この例では簡単なbool だけです。

でもCFC Sheet にエラーが出ました。

No such label ‘JumpPoint1’ within the scope of the JMP statement.

つまり、飛ぶ先が見付かりません。でも大丈夫です。これから必要な部品を紹介します。

Label Mark

Label MarkはJump部品と一緒に使用し、プログラムのJUMP先を決めることができます。

ToolboxからLabelを選び、CFC Sheetに追加します。

Jump Labelが追加されました。

Execute Order?

みなさんはCFCプログラムを作成するとき、部品の右上にある番号が気になりますか?

実はCFC Sheetで右クリック>Execution Order>Order byData Flowをクリックしますと。

前のLabelの右上にある番号が2から5になりました。

実はこの番号はプログラムの実行順番を決めます。

下図のように、最初にはJump条件を確認する>AND Logicを確認する>Timer>Jump Labelのプログラム>Compressor プログラム>出力のような流れです。

でも、私はJump条件成立するとTimerを実行したくないので、Jump LabelをTimerの下におき、もう一度Execution Order>Order By Data Flowします。

今度Jump Labelの実行順番は10になります。Timerのほうが先に実行します。

なので、いまのFlowはTimer実行>Compressorプログラム>Selectorプログラム>Jump Labelになります。

このJump Labelの下にプログラムを追加します。でも実行番号はあっていませんね。

もう一度右クリック>Execution Order>Order by Data Flowします。

先ほど追加したプログラムの番号もJump Labelのあとになりますね!

Add More Label

Label一つだけでは今回のJumpプログラムではつまらないので、もうひとつのJump Labelを作成します。追加場所は先のLabel下です。

ラベルのところを右クリック>Negate すると反転信号になります。

このようなnot 信号になりました。

そして、CFC Sheet の一番したにJumpEnd の飛ぶ先に追加すれば終わります。ロジックではArrayBIns がfalse であれば、その下にあるcompressor を実行せず一番したに飛び、そしてFunction block から離れます。

ではそのArrayBIns をFalse にします。そのときには赤枠のブログラムが実行され、そしてCFC Sheet から離れることになります。

Record 変数の与えは赤枠のブログラムから書き込むの値になってます。

では次に、ArrayBIns をTrue します。

先程のcompressor selector ブログラムは実行せず、代わりに別の赤枠のブログラムが実行されます。

Record 変数の与えは赤枠のブログラムから書き込むの値になってます。

Return

Return

Return はfunction block の実行中で離れる機能をもってます。注意するのはCFC Sheet にdefault で一番最後にreturn が入っていることです。

Toolbox からreturnをCFC Sheet に追加します

このように、return 部品が追加されました。

そして、return 動作をtrigger するロジックを組めばOKです。今回はbool だけになります。

そしてまた右クリック>Execution Order >Order By Data Flowて実行順番を並び直します。

これでOKです。CFC Sheet の最初にもしArrayBIns[5]がTrue になったらReturn 以下のプログラムが一切実行せずCFC プログラムから離れます。

もしReturn の条件がFalse ならその下にあるcompressor やselector が実行するようになります。

いまはReturn 条件がFalse になってる状態です。常にcompressor 部品から与えが書き込まれてます。

なので手動で与えを変えても反映できません 

ではArrayBIns をTrue にし、Return 部品をTrue にします。

つまりいま、Return 部品以下のブログラムが一切実行せず、そのままCFC Sheet から離れます。

では、手動から与えを変更します。

ブログラム一切実行されてないので変わった与えがそのまま反映できます。

Function Block Operation

最後はCFC Sheet でfunction block 操作について簡単に説明します。

今回はのようなtwincat library によくあるproperty method がかるあるfunction block です。

中にはValue のproperty とAddOne というmethod があります。

Call FB

ではまずはfunction block を呼び出すことから始めます。box を追加し、??? はfunction block の名前に入力します。box の上にそのfunction block のinstanceを入力します。今回のinstance 名はmyTestFBです。

Call FB Method

AddOne method を呼び出します。boxを追加し、???はfunctionblock名.method すればOKです。今回はFB_Test.AddOneになります。box の上に該当するfunction block のinstance を入力します。

ブログラムをダウンロードすると、myValueがずっと加算されてるのはわかります。

Call FB Properity-Get

次はValue のproperty をget します。その前にまずbox を追加し、MOVE 部品だと定義します。

アクセスする方法はST言語と同じく直接yourinstance.property になります。

なので今回はmyTestFB.Valueで、そしてCFC Sheet の内部変数 myImt に転送します。

プログラムダウンロードすると、Value変数の値がmyInt に転送してます。

Call FB Prosperity-Set

次はProperty のSet を試してます。やり方めST言語と同じくyourinstance.property で、今回はmyTestFB.Valueになります。

でもそれだけはmyValue が加算されなくずっとmySetInt に上書きされてます。国産plc にあまり慣れてないEN/ENOを追加します。

MOVE 分右クリック>EN/ENO。

そうするとMOVE の上にEN/ENOが追加されます。

ENはTrue になるとBox を実行します。

ENOはTrue になるとBox がエラーなく実行されましたと示してます。

ENとBool 変数と繋がります。いまbest がTrue にならないとMove box が実行しません。

プログラムをダウンロードします。いまbset はfalse なのでmove 実行されなく、myTestFB.Value がずっと加算されますね。

もしbset がTrue になると、myTestFB.Value は確かに加算されましたが、最後はset property により0が上書きされます。

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

シェアする

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

フォローする