Pilz#Part05_Resource Global Variables

Pilz PSS4000 紹介の第5話です。前回はSafety Pilz PSS4000のFunction Blcok FS_EmergencyStopを使用した、簡単なESTOP安全アプリケーションの組み方を紹介しました。ですが、そのESTOPの状態を自分のPOUS以外、つまり他のPOUs間にもシェアしたい場合はどうすればよいでしょうか。Pilz PSS4000ではResource global variablesの機能があり、CodesysやTwinCATのGVLと似てる機能ですが、少し特徴があります。今回の記事ではResource global variables・VAR_TEMP・Instruction listについて紹介します。

よろしくお願いします。

Thanks!

この記事で使用するRevPI ConnectはPILZ JAPANが貸してくださった機材です。

PILZ

PILZは安全およびオートメーション技術のソリューションでトータルソリューションサプライヤとしてのFA現場を支え、人の安全だけではなく、機械、および環境の安全を保証し、機械や設備をいかに安全に稼働させます。ピルツは全世界に42の現地法人や支社を設置し、包装、自動車産業、ロボットアプリケーション、さらに風力発電、鉄道技術など様々な分野で活躍しています。

Office:

ピルツジャパン株式会社

〒222-0033

横浜市港北区新横浜3-17-5

いちご新横浜ビル 4階

HP

https://www.pilz.com/ja-JP

Reterence Link

Pilz#Part01_Let’s start with PSS4000 PSSu PLC!
Pilz#Part02_Your First PSS4000 PLC Program
Pilz#Part03_Your First PSS4000 Safety PLC Program
Pilz#Part04_ESTOP Application With FS_EmergencyStop

Resource global Variables

Resource global variablesはPOUs間でシェア・よみかきできるGlobal変数です。POUs内使用したい場合は、各POUSにVAR_EXTERNAL内でResource global variablesと同じ変数を定義する必要があります。

ですが、IEC61131 programmingでもGlobal変数はできるだけ使わないようにすると言いましたが、特にPI 変数(いわゆるモジュールなどにMappingされるもの)はResource global variablesに定義すると、プログラムが変更すると面倒になります。

VAR_GLOBALでは以下のAttributeを定義できます。

  • CONSTANT
  • RETAIN PERSISTENT
  • PERSISTENT RETAIN 

VAR_EXTERNAL

Resource global variablesのVAR_GLOBALエリアに変数が宣言されたら、POU内にVAR_EXTERNALエリアに同じ変数を定義すればResource global variablesの変数を使用できます。

注意するのはVAR_EXTERNALとVAR_GLOBALに定義した変数は必ず変数名・データ・タイプも100%一致する(配列の長さも含めて))必要があります。

VAR_TEMP

VAR_TEMPエリア内に定義された変数はPOU・FB・FCなどに呼びされるたびに初期値に戻ります。VAR_TEMP内の変数はプログラムで使用する前に初期値を与えてあげましょう。

Instruction list?

今回の記事ではInstruction listを使用しました。Instruction listも一応IEC61131 に含まれているテキストベースのプログラム言語で、イメージ的にはアセンブリ言語に似ています。

Define Resource Global Variables

Resource global variablesを定義するため、ツールからResource global variablesをクリックします。

IDEが起動しました。

このようにいくつの変数を定義します。

Edit in POU2

前回の緊急停止を制御するFS_EmergencyStop Function BlockがあるPOU_2を開きます。

VAR_EXTERNALにResource global variablesと同じ変数を定義します。

次はFS_EmergencyStop Function Blockの出力状態をそのままVAR_EXTERNALの変数に転送します。つまり、別のプログラムにもDevice_0_ESTOP_Enable…などの変数を使用できるようになります!

New POU

IEC61131 programming>New>POUで新しいプログラムを作成します。

プログラム名を入力し、Programming LanguageをIL(Instruction List)で、TypeはProgramします。

Instruction list Editorが表示されました。

Define External

プログラムの宣言エリアにVAR_EXTERNALでResource Global Variablesと同じ変数名の変数を定義します。

実際のコンセプトは下図のようです。Resource Global Variablesからいくつの変数を定義し、そしてPOU_2(FS_EmergencyStop)にVAR_EXTERNALエリアからResource Global Variablesを同じ名前の変数を定義しました。なのでPOU_3で更新した、VAR_EXTERNAL内の変数群はResource Global Variablesとして更新します。

最後にPOU_2はまたVAR_EXTERNALエリアからResource Global Variablesを同じ名前の変数を定義し、Resource Global Variablesも現在値を読み取ります。

VAR_EXTERNALエリアでResource Global Variablesに定義されていない変数を入れたらエラーになります。

エラーメッセージでもResource Global Variables内に該当する変数が定義されていないとエラーになります。

Define VAR

次はVARエリアで必要な変数を定義します。

Define VAR_TEMP

VARとVAR_TEMPの違いを比べるためにVAR_TEMPにTempCounter変数を作成します。

Program

こちらはプログラムです。ILはいまあまり使わていないが、慣れたら結構便利です。

こちらのプログラムは単純なAND回路だけです。例えばDevice_0_ESTOP_Enableの現在値をそのままESTOP_Enableに転送する。

こちらは少々複雑に見えますが、実際はDevice_0_Reset_Button_LAMP_OUTPUTがTrueなら、LABEL_LAMPOUT Labelの場所までJUMPし、RESET_Button_LAMP_OUTPUT変数をTrueにセットしNEXT1 Label位置にJumpします。

Device_0_Reset_Button_LAMP_OUTPUTがFalseであれば、RESET_Button_LAMP_OUTPUT変数をFalseにリセットしNEXT1 Label位置にJumpします。

こちらのプログラムはVARCounterとTempCounterをINT#1をPlusし加算します。

Trips1 Auto Refill

プラスアルファですが、Ctrl+Spaceで自動補完できます。

Trips2 Show Line Numbers

IDEを右クリックしShow Line NumbersでLine数を表示できます。

このような操作です。

Resource Assignment 

次はCPUにPOU_3が実行されるようにResourceを調整します。

Hardware  Configuration>Your Device>ST Resourceをクリックします。

POU_3は安全プログラムでもないのでそのままST Resourceに追加してもよいではないかなと思ってたら…

エラーが出ました。つまり、Resource global variablesでFSのプログラムにも使用していますので、STも同じくFS resourceに呼び出す必要があります。

POU_3をFS_Resourceに追加します。

Done!

Build

Build>Build AllでProjectコンパイルしましょう。

Download

Target>Direct Project DownloaでプロジェクトをCPUにDownloadします。

Start Downloadで始まります。

I accept a change to the FS device projectsのCheckbox入れ、Confirmします。

しばらく待ちます…

Done!

Result

Dymaic program Displayで結果を確認しましょう。

問題なさそうですね。

最初にも書いた通り、VARCounterはPOU内で演算結果が記憶されるので、VARCounterの与えはずっと加算されます。逆にVAR_TEMPにあるTempCounterは不明値になっています。

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

シェアする

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

フォローする