TIAV16.0のSIMATIC WinCC UnifiedからJavascriptに”Global modules”というコンセントが入っており、それは昔のComfort Panelなどがない考え方です。なぜこのような作りか方するかどういうと、
- いままでの紹介で、Scriptが直接Button、IO fieldなどの中に組み込んでるのですが、Global modulesならどこのHMI Objectにも依存することなく、つまり使え回しことができます。
- Task schedulerで周期的にScriptをトリガーすることも可能になります。
ではGlobal modulesとその中にある各部品について紹介します。
Global Module
Global modulesはProject-Treeの中にあるScripts Folderに保存されています。
そして各Global modulesには自分のFunctionsとGlobal definition areaがあります。
そのGlobal modulesは機能ことか、まぁ、自分が好きなようにFunctionsを切り分けることによって管理が簡単になります。
Global Definition area
次はGlobal Definition areaですね。このGlobal Definition areaがLocal tagsを定義することができます。そのLocal tagsが自分のGlobal module グループの中にあるFunctionsすべてアクセスすることができます。
もちろんExport・Import機能を使えば、他のモジュールの使用可能です。
この機能に対して後ほどで紹介します。
Global Function
最後はGlobal Functionです。Global moduleことにFunctionを多数を持つことができます。
- Functionを実行するとき引数を渡すこと可能。
- Functionは戻り値があり。
- Import・Exportを使うよって他のモジュールも利用OK。
Example
Project-TreeでScripts Folder>Add new global module。
そしてGlobal moduleが追加されます。
さらにその中Add new functionををクリック。
Functionが追加されます。名前も自由で変更できます。
Global moduleが追加終わったら次はGlobal definition areaでLocal tagを作成してみます。
注意するのはそのLocal tags達の値を変更できるのはFunction経由だけです。ButtonなどのHMI Objectはできるのは値を読むだけで、もしそれらのLocal tagsをHMI Objectなどにも変更できるようにしたいなら、1つのFunctionを作って、そして引数に変更したい値を渡し、最後Functionを実行するみたいな形になります。
次はFunctionです。Add new Functionをクリックし新しいFunction追加。名前はfAddValueにします。
中は単なる引数を受けて、その引数をLocal tags myValue1に与えます。
もちろんFunctionの下にあるPropertiesはParametersのところに<Add new>を押せば受ける引数を増やすこともできます。
次は画面上にボタンとIO fieldを作成します。
Buttonを選んで>Events>PressでScirpt画面に切り替えます。
Global definitionのところをクリックします。
そうするとFunction・変数をImportする画面に変わります。
import {myValue1} from ‘GM1’
つまり、GM1というGlobal Moduleの中にmyValue1というLocal tagsをImportします。
後はいつも通りSnippetsの中にWrite tagのTemplate入れて、Tagを書き込む値は先ImportしたmyValue1に変更します。
最後はFunction Importですね。例えば、このfAddValueをImportしたいとします。
Global definition areaで別々書くことも可能です。
ImportしたらScriptでFunctionを直接使うことが可能です。
個別書くことはめんどくさいのであれば、 *を使って一気にImportするも可能です。
import * as myGM1 from ‘GM1’;
つまりGM1からすべてのFunctionと変数をImportし、名前をmyGM1にします。
そのやり方だと少し書き方が分かります。
もしFunctionアクセスしたいであれば、myGM1.fAddValue()になり、変数をアクセスしたいのであれば、myGM1.myValue1になります。
それもあくまでも好みです。
はーい、お疲れ様です。
なにがあったらコメントしてね。