今回はCFC言語について紹介したいと思います。シーメンスで話してもよいですが、CFCを作るには少し面倒くさいく、Codesysでやりました。まずWIKIPEDIAからよりますと:
https://en.wikipedia.org/wiki/Continuous_Function_Chart
CFCがGraphでStep7 Softwareパッケージの1つとして使われています。これをソフトウェアの全体像を作成することがでます。注意するのは”Ready-made”という英語ですね。私の解釈だとテスト済み・ライブラリ化されたBlockだと思っています。CFCでプログラムを作るとき、Blockを貼り付け、パラメータを割り付け、Blockの間を線で接続します。英語だと”Interconnect”です。その”Interconnect”-接続の意味は、Blockの出力値をそのまま別のBlockの入力として使う、など。
CFC基本はプロセスコントロールで使われています。PLCがLogicをスキャン>運算し出力の処理などを行います。SFCのような一直線の処理とは少し違います。
A Continuous Function Chart (CFC) is a graphic editor that can be used in conjunction with the STEP 7 software package.[1] It is used to create the entire software structure of the CPU from ready-made blocks. When working with the editor, you place blocks on function charts, assign parameters to them, and interconnect them. Interconnecting means, for example, that values are transferred from one output to one or more inputs during communication between the blocks.
Continuous function charts are basically used for controlling continuous processes, where all the logic is executed and outputs are calculated in each PLC scan. Where as in SFC, execution will be sequential as done is batch processes.
操作
まず最初にCFCの基本操作を教えます。
Application>Add Object>POU。
Implementation languageのところにContinuous Function Chart(CFC)を選び、Addします。
そこで右のToolboxで色々なアイデムが出てくると思います。
ここひとまず、Boxを使います。
Boxを選んで、左の白いところに引っ貼ってください。
そうすると???の空Boxが出てきます。もしシーメンスのPLC使ったことある方ならこのBoxのこと見覚えがあるでしょう。つまり、???のところ、”命令”もしくは”Function”もしくは”Function block”の名前を入れてください、のことです。
では、ここで簡単なMOVE命令にします。
うん?ですが、MOVEの下赤がついていますね。つまりなにかエラーがあるってことかな。
下のMessage画面みたら、An expression is expected at hte Input 1 of the box ‘MOVE’
なるほど、MOVE命令を使うのにInputが抜けていますよ~と。
それもそうですよね。
先のToolboxから”Input”を画面に引っ貼ります。
次はMOVEの足とInputの足を引っ貼ります。
次は変数を割付すれば、r32[0]がMOVE命令のInputとして入れるとなります。
次はMoveの出力先です。割り付けなくてもよいですが、ここで一応練習して起きましょう。Toolboxから”Output”を引っ貼ります。
先と同じように、MOVEの出力の足とOutputの足を繋がるように引っ貼ります。
立派なプログラムになりました。
r32[0]の値をr32[1]に転送するようになった。
次はEN/ENOを使用したい場合は、Blockのところに右クリックし、EN/ENOをクリックします。
そうすると、MOVE命令にEN/ENOの足が追加されています。
…ですが、またMOVEが赤くなりましたね。
Messageをみたら、今度”An expression is expected at the input ‘EN’ of the ox ‘MOVE'”ですね。つまり、ENにもなにかしらの条件つける必要がありますね。
とりあえず、TRUEでいいです。
練習
基本なことわかったら、一気にいきますよ。
今度はr32[0]をr32[1]に転送します、そしてr32[1]を100.0足します。最後もし結果が300.0より大きなら、b[0]をTrueにします。成立しなかったら、もちろんFalseになります。
結果がTrueになるとき:
結果がFalseになるとき:
練習
今度はON/OFFの繰り返しTimerを作ります。
ちなみに、出力の反転は足を右クリックしNegateを押せばOKです。
そうすると、出力の足が丸いがついています。
Comment
ToolsboxからCommentを引っ貼り、そのままテキストを入力すればOKです。
実行順番
CFC言語を使うには一番気になるのはやっばり実行の順番になりますね。
Barのところにある”17”のボダンで表示させるか、どっかのBlockで右クリックしExecution Order>Display Execution Orderを押してもOKです。
それでわかるだと思いますが、上から下、左から右で実行するように順番になります。
番号が小さいすればするほど先に実行されます。
はーい、お疲れ様です。
なにがあったらコメントしてくださいね。