B&R Automation StudioのTutorial第3話です。今回はB&RのAutomation Studioの変数Scope概念の説明・簡単な検証、そしてLogger機能について話します。
さ、始めよう!
Reference Link
Scope of variables
B&RのプログラムではScopeというコンセプトがあり、該当する部品(例えば変数・構造体・FBなど)をどこまで共有できるかを構築できます。ClassicのPLCではGlobal 変数だけでプログラムすることが多く、つまりプログラムのどこでもアクセスできるようになっていますが、プロジェクトが複雑になると、Global アクセスはBug発生する場合の温床になります。なので、自分の変数のScopeをしっかり考え、アクセスを制限していきましょう。
Task-local variables
Task-local variablesはグローバルには定義されず、プロジェクトの他の POU では使用できなく、なおかつローカル変数はグローバル変数と衝突がありません。 つまり、ローカル宣言された変数はプログラム内で有効だが、グローバル変数はプログラム外にも有効である。
注意するには、プログラムが 1 つの CPU に複数回割り当てられる場合、Taskのあるローカル変数に必要なメモリーは、割り当て回数を乗けることになります。
Package-local variables
Package-local variablesは該当するPackagesの POU でのみ共有、使用できます。
Package-local variablesは、同名のグローバル変数や他のパッケージの同名の変数と衝突します。
Global variables
Global variablesはプロジェクト全体で有効なスコープを持つ変数をグローバル変数と呼び、つまり各Packages・もしくはPackages内のPOUからでもアクセスできます。
プログラムが CPU に複数回割り当てられた場合、そのメモリすべてのオブジェクトのグローバル変数が割り当てられるのは 1 回だけです。つまり、グローバル変数に必要なメモリは、プログラムやTaskの割り当て数に依存しません。
Nested packages
Automation Studio 3.0 以降では、プログラムをNestedで分割できます。
この構造により、Packages内で宣言された変数、データ型、ライブラリのスコープも決定され、データのカプセル化が可能になります。Packagesで宣言された変数やデータ型は、そのPackagesとSub-Packagesの内部でのみ表示されます。(ただし、宣言ファイルが “global”(Public)として宣言されている場合に除く)
Managing global declarations
グローバル・スコープを持つデータ型、変数、FB、FCの名前は、システム全体で一意でなければなりません。これは、プロジェクトがビルドされるたびにチェックされます。
つまり、複数のGlobal variable Listには同じ名前の変数が存在できません。
プロジェクトがビルドしてるとき、名前衝突が存在するとシステムが判断した場合(例えば、複数のファイルで同じ名前のデータ型が宣言されている)、エラーメッセージが出力されます。
Implementation
これから実際に、変数Scopeの適用範囲を試してみましょう。
Test with Task-local variables
最初にTask-local 変数を試してみます。Packages>Program>Variablesを開きます。
このようにMain.stがアクセスできるのはiCounter・bInitedのみになります。
Test with Task-local variables In Other Program
今度は同じPackages内にもう1つのプログラムを追加します。
新しく追加されたProgram1にあるVariables.varを開きます。
Variables.varの中にいくつのTask-local変数を定義します。
次はProgram1>Main.stを開きます。
赤枠のAdd new variableのボタンをクリックします。
先程Variables.varに定義された3つの変数にアクセスできます。
ですが、先程定義されたのはTask-local Variablesなので、Program>Main.stからもProgram1>Variables.varの変数にアクセスできるかを検証します。
ですが、Program>Main.stは別のProgramのTask-local 変数にアクセスできません。
Test with Package-local variables
今度はPackage‐Local変数をプロジェクトにしてみます。Toolboxにある.varを選択します。
Packges FolderにVariables.varを追加します。
Package::Local.varにいくつのPackage-local変数を宣言します。
Packages>Program>Main.stには自分だけのTask-local変数だけではなく、先程定義したPackage-Local 変数にもアクセスできるようになります。
同じPackagesにあるProgram1>Main.stには自分だけのTask-local変数だけではなく、先程定義したPackage-Local 変数にもアクセスできるようになり、それはPackage-Local 変数の特徴です。つまり、同じPackagesのプログラムならどこでもそのPackagesのFolderの直下にあるVariables.varにアクセスできます。
Test with Different Packages
今度はPackagesがPackage1のPackages Local変数にアクセスできるかを検証してみます。
下図のように、Package1はPackage Local 変数にアクセスできません。それもPackages変数の特徴です。PackageのLocal変数をうまく使用することにより、Packages自分のプログラムをカプセル化できます。
Test with Global Variables
最後はGlobal 変数をテストしてみます。DefaultでProjectを作成したとき、Project>Global.varというGlobal変数Fileがすでに作られていました。
そのGlobal.varのFileにいくつかのGlobal変数を定義します。
Global.varに定義された変数はPackage>Program>Main.stからアクセスできます。
では、同じPackagesで別のプログラムはどうでしょう?Package>Program1>Main.stにも同じくGlobal.varの変数にアクセス可能です。
もちろん別のPackagesのProgramにもGlobal.varにアクセスできます。これがGlobal変数の特徴でどんなPackagesの中にあるどんなProgramにもGlobal変数にアクセスできます。
この機能は便利ですが、Global変数をたくさん使用するとDebugも困難になります。
Insert a new Global variable File
プロジェクトの中に複数のGlobal Variable Fileが存在できます。プロジェクトの直下に.var Fileを追加することにより、その.var File中に定義された変数はGlobal変数になります。
var Fileにわかりやすい名前を定義しましょう。
先程”グローバル・スコープを持つデータ型、変数、FB、FCの名前は、システム全体で一意でなければなりません”と言いました。この仕様を検証するためにGVL_Nodes.varをGlobal.varと同じ名前を持つ変数として定義します。
プログラムにはGlobal.varとGlobal_Nodes.var両方の変数もアクセスできるように見えます。
でも実際プロジェクトをビルドすると重複の変数名というエラーが表示されます。それは”プロジェクトがビルドしてるとき、名前衝突が存在するとシステムが判断した場合(例えば、複数のファイルで同じ名前のデータ型が宣言されている)、エラーメッセージが出力されます。”という仕様を検証できました。
Logger
最後はAutomation StudioのLoggder機能を紹介します。Logger機能を使用することによって、CPUがどのように操作されたか、いまのエラー情報などを確認できます。
Logger機能を使用するためOpen>Loggerを開きます。
Logger画面が表示され、現在CPUの状態を確認できます。
Visable
左のModules画面にVisableのCheckBoxがあり、Loggerにどんな種類のLogging Messageを表示するかを設定できます。
Display Severity
赤枠にあるError・Warnings・Information・Successもクリックすれば該当するSeverityを表示・非表示に切り替えることが可能です。
例えばInformationsの項目を外すと、LoggerにあるInformations Messageをすべて非表示にします。
Save the Data
あなたがMachine Builderであればお客様の装置を遠隔メンテナンスする場合が絶対あります。そのときCPUの情報を取得したい場合、Logger>右クリック>Save Dataで現在のLoggerデータを保存できます。
Logger Fileの保存先を設定します。
.logpkgの拡張子があるFileが出力されます。
中身はXML baseの文字Fileです。
Refresh
現在のLogger Fileを更新したい場合は赤枠にあるRefreshボタンをクリックすればOkです。
Delete the Data
Logger Fileを削除する場合、赤枠のDelete Dataをクリックしてください。
View the Info
最後はInfoのボタンで該当するLogger Messageの詳細情報を確認できます。