今回の記事ではBeckhoff TwinCAT3でCFC言語を使用したプログラムを作成する方法を紹介します。まずは簡単な部品から話しましょう。
CFCとは?
CFCは”Continuous Function Chart”という名前で、IEC61131-3の拡張です。
Userが簡単な線繋がり、部品追加、パラメータ振り分けの操作でプログラムを作成できます。もちろんCFC SHEET内Function Block・Functionも使用できます。
SiemensではS7-400でCFC言語を使用し複雑なプロセス処理を簡単に分別・まとめます。(最近はTIAV17にも使用できるらしいが、ライセンスが必要)
CFC Editorでは部品の位置が自由配置でき、処理の順番も自由設定が可能です。部品の追加はMouseでDrop and Play、InputとOutputのPinsは線繋がりの感覚で完結します。
今回説明するのはBox・Input・Output・Connection Mark・Commentになります。
Activate Tools Bars
View>Toosbars>TwinCAT PLC CFCをクリックします。
Options
CFC Editorに設定を変更したいなら、Tools>Optionsをクリックします。
TwinCAT>PLC Environment>CFC Editorで設定を変えてください。
Activate Toolbox
View>Toolboxをクリックします。
そうすると、右側にToolboxが表示され、CFC プログラムするに必要な部品が表示されます。
Add New Porgram
では新しいPOUを作成し、CFCプログラムしてみましょう。
Implementation LanguageをCFCとCFC Page-orientedのどちらかを選択しましょう。今回の記事は一番基本のCFCだけにします。
CFC Editorも自動で開きました。
Box (Function Block)
Box 部品はFunction・Function Block・Operatorを定義できます。DefaultではBoxをCFC Sheetに挿入すると???の名前になります。そのあとに直接入力するかinput assistant経由で入力できます。このExmapleではIEC Timer TONを作成します。
Toolbox>Boxを選び>左にひっばります。
先ほど説明した通り、Defaultが???になっています。
Method1-input assistant
???をクリックすると、右に白いボタンがあります。
そのボタンからinput assistantが表示され、該当するBoxにFunction Blockを振り分けます。
Method2-Directory Input
???直接Function Blockなど入力もOKです。ここにTONを入れます。
そうするとBoxがTONになり、InstanceはTON_0です。
Input
Boxでは左側がInputで、右側がOutputになります。先ほどTONのBoxが追加されましたが、IN/PT/Q/ETもまだ振り分けてません。これからINPUT部品を入れBoxのInput側と繋がります。Input部品がDefault追加されたときは???です。
Toolbox>Inputを選び、CFC Sheetにひっばります。
先に説明した通り、InputのDefaultは???です。
そのInput部品の線をそのままTON BoxのINにつながればOkです。
下記のGIFのように!
それでINPUT部品はTON_0 BOXのIN Pinと繋がりました。
次は???のところをクリックします。
変数を入れて完成です。
簡単明瞭ですが、いまTON_0はbInとINが繋がってて、PTはT#3s設定されています。
Output
Boxでは左側がInputで、右側がOutputになります。先ほどTONのBoxが追加されましたが、IN/PT/Q/ETもまだ振り分けてません。これからINPUT部品を入れBoxのInput側と繋がります。Input部品がDefault追加されたときは???です。
次はOutput 部品を追加します。先も書いたがBoxでは左側がInputで、右側がOutputになります。いまからこれからOUTPUT部品を入れ、BoxのOutput側と繋がります。Output部品がDefault追加されたときは???です。
Toolbox>Outputを選び>CFC Sheetにひっばります。
前にも書いてたが、Default???のOutput部品がSheetに追加されました。
先Input部品と同じように線と線をつながればよいのです。
でもいまはすべてのInput/Ouput部品も揃えました。
RuntimeにDownloadします。FBDやSTやSFCと同じように現在値をMonitorできます。
Result
True/Falseに切り替えるにはFBDやSTなどと同じくダブルクリックすればOKです。
bInをTrueになると、TONが3s後にONなります。
Add More Box
もう少し複雑なプログラムを作成しよう。ToolboxからさらにBoxをもう1つCFC Sheetに追加します。
AND Logic Blockを追加します。???のところにANDをそのまま入力すればAND LOGIC Blockに変換します。
AND Blockが追加されました。
AND Logicは比較するLogicは常に2つとは言えません。例えば3つ目の条件や4つ目の条件を追加したいときはLogic Blockを右クリック>Pins>Add Input PinすればOKです。
このように、いまAND Logic BlockはInput pinsが4つになりました。
少しロジックを変更し4つのBool デバイスをAND Logic BlockのInput Binに割り当てます。つまりいまbInをTrueするにはArrayBIns[0]から[3]まではTrueする必要があります。
Result
結果はAND Logicの動作そのまま通りになります。
Source/Target
次はConnect MarkのSourceとTargetについて説明します。その部品を使用することにより、複雑なロジックを簡単にまとめてUserにみやすくすることができます。
Connect Markというのは部品間で直接Lineで接続する代わりにために使われています。
Connect Markが追加されたときDefaultは ”C-<nr>”です。そのnrは番号だと思ってください。1からCountします。もちろんUserが自由にそのConnection Mark名を変更でき、TwinCATが便利なところはSource のConnection Mark名を変更すると、該当するTarget Connection Markを自動的に反映します。(でもTarget Connection Markの名前を変更してもSource Connection Markが自動反映しませんので)
Source
Sourceは英語の名前通り、他の部品のOutputとして繋がります。
Toolbox>Connection Mark-Sourceを選び>CFC Sheetに貼り付けます。
先に書いてた通り、DefaultはC-<nr>になります。
AND Logicの出力にそのSource Connection Markと接続し、名前をArrayBins0_4ONに変更します。
Sink
Sinkは英語の名前通り、他の部品のInputとして繋がります。
Toolbox>Connection Mark-Sinkを選び>CFC Sheetに貼り付けます。
???のConnection Mark-Sinkが追加されました。
そのように入力すれば自動補完ができます。
では先追加したArrayBins0_4ONと接続します。
いまの状態ではAND Logicの出力はArrayBins0_4ONのSource Connection Markに接続し、TON_0のINに再利用します。
Result
結果はまったくおなじです。
Comment
今回の記事では、最後にComment部品を説明します。Comment部品はプログラムの説明に役に立ち、改行するときはCtrl+Enterです。
Toolbox>Commentを選び、CFC Sheetに貼り付けます。
このようにComment部品が追加されました。
Comment部品を選択すると文字入力できます。
簡単なCommentを入れましょう。