みんなさん、お早うございます。この2週間はずっと三菱PLCの仕事をされGXWORKSを色々いじってみたり余計な発見が結構ありました。うちはいまシーメンスがメインなのでどうしてもなにもBlock化したくてできるだけアドレスを入力するのは避けたくて…(私はアドレス入力凄く苦手で間違ってるときが多くてね。)ではでは、これからGXWorksのGlobal VARとLocal Varについてちょっとメモしますね。
言葉の意味通り、
Global Varはプログラムの中に他のBlockでもアクセスできるの変数です。例えばAIモジュールの変換結果、PIDの数字などはGlobal Varのほうが便利でしょう。
Local Varはつまり自分自身のBlockでしかアクセスできないの変数です。例えば途中の演算結果などは外のBlockでアクセス必要がないからLocal Varで充分…と思ったら!ここで、GXWorksがFunction Blockというものもあります!
Function Blockはつまりプログラムをカプセル化するものです。中身を気にせず必要なINPUTを入れれば演算し結果をOUTPUTしれくれます。そうすると同じな演算(例えばアナログからデジタルに変換する)のは50回があって、単なるBlockをCtrl+CとCtrl+Vで、INPUTとOUTPUTデバイスを変えれば終わります。ここでFunction Blockが一番気になるのはMemoryが必要です。Blockの中に演算結果なども保存する場所が必要でここで”呼びされるProgramのMemomry”を使うか、それども”Global変数として保存するか”の選択肢が出てきます。
プロジェクト新規作成します。
プロジェクト種別はシンプルプロジェクトを選択したら、ラベルを使用をCheck入れてください。じゃないとラベルさえ使えません。一番古いのアドレスかつかつ入力の方法しかできなくなります。
ここでプログラム部品→FB管理の中にFunc_Block1を作りました。
これはFunc_Block1のInterfaceです。
VAR_INPUT-IN1、Bool。
VAR_OUTPUT-OUT1、Bool。
VAR-Contructor、いまは無視しておきましょう。
VAR-Ins1-Func_Block1の中の変数。Func_Block1が定義されるときGlobalかLocalかによってアクセスできるかどうかに変わります。
今回はあくまでもTEST用なので簡単なプログラムで実験します。
そのあとにプログラム部品→ブログラム→MAIN1を新規作成します。
パラメータ→PCパラメータ→プログラム設定でMAIN1もスキャンサイクル入れます。
MAINのところにFBを引っ張って呼び出しましょう。ここでは大事なポイントです。ローカルラベルかグローバルかに設定できます。ここで1個つつ追加します。
コンパイルとCPUへダウンロードし、RUNします。
ここで見えるのはM3がONになりますと、Func_Local.IN1、Func_Local.OUT1、Func_Local.Ins1、もONに見えます。
BlockName.VarName
これがFunction Blockの変数のアクセス方です。ですが、Func_LocalはLocalなので、つまりMAINの中だけで使えます。MAIN1はアクセスできません。
今度はM4をONします。Func_Global.IN1、Func_Global.OUT1、Func_Global.Ins1、もONに見えます。うん?なにが違うですか?
これはMAIN1のプログラムです。つまり、別のプログラムでもMAINで定義されたFunc_Global変数使うことできます。アクセス方は同じ:
BlockName.VarName
注意するのは三菱のFBは構造体、配列をVAR_INPUT、VAR_OUTに定義するとコンパイルできますか、実際プログラムの中に呼び出してみるとエラーになります。ここだけですね!