WAGO CloudはPFC Controllerを使用し複数の装置からデータを収集・分析できるCloud Platformで、なおかつPFC ControllerをリモートMonitor・管理も可能です。自分も少し使いましたが、画面はすごくUser に優しい、接続もそこまで難しくない。ですが、ドキュメントは少ないので、この記事シリーズから色々を補完していきたいと考えています。
ちなみに、30日のTrial期間でWAGO Cloudを試すことが可能です。
Thanks!
この記事が出来上がるのはワゴジャパン株式会社さまから機材を貸してくださったおかけです。誠にありがとうございます。
ワゴジャパン株式会社
PFC Controller750-8215はワゴジャパン株式会社さまが貸してくださったものです。WAGO は 1951 年に設立され、いままで端子台の技術で世界中の産業にずっと貢献してるドイツ企業、PUSH WIREやCAGE CLAMPの技術などで現場を支えてきました。他にWAGOさまにもPLC LINEUPがあり、オープン性と柔軟性に重点を置いた自動化ソリューションを提供しています。
ワゴジャパン株式会社は 東京都江東区に本社があります。
Reference Link
WAGO Cloudを使用するにはE!COCKPITの操作も必要です。
以下は参考記事です。
Big Concept
こちらはWAGO CloudだけではなくPFC ControllerがIOT Servicesを使用するときの大まかなコンセプトになります。
- E!COCKPITから専用のIEC 61131-3 ライブラリが提供されており、PLC RuntimeでCloud Platformに送信するデータなどを直接Programmingできます。
- Linux ApplicationがPFC Controllerの裏に走り、PLC RuntimeのデータをCloud Platfromに送信や受信します。
- Linux Applicationから各Cloud PlatformにMQTTを使用します。
- 最後はCloud Platformからデータ監視・アラームなどのことをやります。
Data Protocol
Cloud接続ではPFCのPLCプログラム(今回使用するのは750-8215)から複数のProtocolでCloudを転送できます。つまり、PFC CPUがPLC プログラムでIEC ライブラリを使用し、Linuxアプリケーション経由>MQTTで各Cloudアプリケーションにデータを送信します。
注意するのは1つのConnectionで複数のData Protocolに同時にアクセスできないことです。
WAGO Protocol
Wago ProtocolはPLCプログラムからデータを簡単にCloudアプリケーションに送信することができます。そのWago ProtocolはWago Cloudだけではなく様々なCloud Platfromにも対応可能です。例えば、
- WAGO Cloud
- Azure
- AWS
- IBM Cloud
- MQTT For AnyCloud
Native MQTT
PFC CPUにもMQTT Clientを立ち上げMQTT BrokerにデータをPublish/Subscribleすることできます。例えば、
- AWS
- SAP IoT Services
- IBM Cloud
- MQTT For AnyCloud
Sparkplug
Sparkplug(Sparkplug Payload B)がSupportできることになり、PFC CPUがlgnitionのようなSCADAシステムにデータを送信することできます。
IEC Libraries
WagoAppCloudはICE 61131ライブラリでE!COCKPITからPLCプログラムを作成しデータをCloud Platfromに送信できます。
- FbCollectionLogger
- FbCollectionLogger_2
- FbCommandConfigurator
- FbCommandConfigurator_2
- FbCommandListener
- FbCommandListener_2
- FbStatus_WagoProtocol
- FbStatus_WagoProtocol_2
Linux Application
PFCの裏でLinux アプリケーションが動いており、PLCとCloudアプリケーション間のデータやりとりの処理を行い、そしてPLCプログラムでIECライブラリ(WagoAppCloud)で実装します。PFCとCloudアプリケーション間はMQTT Protocolを使用し、TLS(Transport Layer Security)で暗号化します。Linux Applicationでは以下の情報を提供します。
- Device Information
Linux ApplicationはCloud Applicationに接続するときのPFC指定情報。 - Device Status
Linux ApplicationはCloud ApplicationにおけるPFCの状態遷移。
そしてWago Protocl CachingはWBM(Web Based Management)からRAMか、SD Cardに設定することできます。
IEC Application
Telemetryはデータを収集し、監視と分析のためにそれを他のアプリケーションに送信するプロセスで、E!COCKPITはFunction Block ”FbCollectionLogger”で実装します。そのFunction Blockは2つの方法からCloudにデータを送信できます。
- Cyclicallyで送信
データをサイクル的にCloudアプリケーションに送信する。
Sample IntervalはCyclicallyデータ送信するときに使用するパラメータ。 - Event Base
データをなにかの状態Triggerによりデータを送信する
Sampling Data Mode・Collection Trigger・Variable TriggerはEvent Baseでデータ送信するときに使用するパラメータです。
Be Careful!
PLCプログラム内でデータを収集するとき、変数の構造や変数名やデータをPublishする周期を明確する必要があります。特にPublish周期は各データの収集周期はしっかり考えましょう。そして収集とPublish周期の時間はRETAINで定義してください。
Limit
RAMの場合、最速100msでSample収集できます。
SD-CARDの場合、最速1sでSample収集できます。
Publish周期は最速1sです。
Ports
前も書きましたが、PFC ControllerはMQTTを使用しデータをCloudアプリケーションに送信しますので、Port1883(暗号化されてないデータ)と8883・443(暗号化されたデータ)を使います。PFC ControllerをCloudアプリケーションと接続する前にFirewallの設定でData TrafficeがBlockされてないかを再確認しましょう。
Cache Mode?
先程データ収集やCloudアプリケーションにデータ送信するときCache Modeにより制限が異なると書きましたが、Cache Modeはなにかを少し説明します。Linux ApplicationはPLCプログラムから受け取ったデータをCacheに書き込み、そしてCloudアプリケーションに送信するのが普通の流れです。
もしデータをCache からCloud正常に送信したらそのデータがCache内に削除されます。逆にネットワークの問題で送信に失敗したらデータがCacheにたまり、つまりデータがネットワーク障害発生しても失うことなく、ネットワークが復旧したらまた再送信する仕組みになっています。
ですが、ネットワーク障害が長くなり、CacheのMax Sizeに到達するとPFCのLinux ApplicationはFirst In First Outのルールで古いデータから順次データを削除します。それでデータがなくなります。
RAM Mode
RAM MOではDefaultでCache Modeで最大Sizeは3 MBで、電源が損失するとすべてのデータが失われます。WagoのManualによるとPLCプログラムはまだ開発の段階でCache ModeはRAM Modeを強く勧められます。
SD Card Mode
逆にCloudに送信すべきデータはネットワーク障害によりデータ損失にならないようにするのが大事で、SD Card Modeは電源供給を失ったとしてもデータがKeepされます。
Be Careful!
The Lifetime of SD Card
SD Cardは寿命があり、読み書きの回数によりその寿命が減ります。WAGOのManualからWago専用のSD CardやMico SD Cardを使用するのが勧められます。SD Cardを選定するときメーカーのData Sheetを確認しましょう。
Class
最低限はClass 10のSD Cardを使用しましょう。Cache データが溜まってるPFC CPUが起動するとき想定外の時間がかかります。
Speed
SD Cardの読み書き速度はRAMより遅いので、WAGOのManaulにより最低限1000msの収集周期が勧められ、周期が短すぎるとデータが損失することが発生します。
Requirements
Web Browser
Controller
- PFC100 Controller>Firmware v11
- PFC200 Controller>Firmware v11
- PFC XTR Controller>Firmware v11
Other
- Ethernet やWireless SIM CardのInternet Connection
- E!COCKPITツール
Function Block
FbCollectionLogger
このFunction Blockを利用することで変数の現在値をCloudに送信することできます。プログラムを作成するときCloudに送信したい変数を”Collection”の配列にまとめる必要があり、配列のMemory addressをFbCollectionLoggerに渡します。
注意するのは、FbCollectionLoggerはBackgroud TaskをCyclicallyに呼び出す必要があります。 (task priority 15).
gMAX_COLLECTIONSで最大Collections数を10個でリミットされ、parameter list ‘Param’から変更できます。
VAR_INPUT
Variable | Type | Description |
pCollections | POINTER TO ARRAY [0..(gMAX_COLLECTIONS – 1)] OF typCollection | collection list変数のPointer・Memory Address |
dwCollectionsCount | DWORD | collectionの数 |
VAR_OUTPUT
Variable | Type | Description |
oStatus | WagoSysErrorBase.FbResult | FBの実行結果 |
typCollection (STRUCT)
Variable | Type | Description |
dwCollectionId | DWORD | Collection独自のID |
sName | STRING(80) | Collection名 |
pVariableDescriptions | POINTER TO ARRAY [0..(gMAX_VARIABLES – 1)] OF typVariableDescription | typVariableDescriptionの配列アドレス、変数の情報が格納されています。 |
dwVariablesCount | DWORD | pVariableDescriptionsに含まれている変数の数 |
eSamplingDataMode | eSamplingMode Default=eSamplingMode.LIBRARY_DEFAULT_AUTOMATIC | |
pPublishInterval | POINTER TO TIME | DataをPublishする時間間隔<1sに設定されても1sになります。(Sampling Mode = LIBRARY_DEFAULT_AUTOMATICの場合) |
pSampleInterval | POINTER TO TIME | Dataを収集する時間間隔RAM Mode=最小100msSD Card Mode=最小1000ms |
xCollectionTrigger | BOOL | Event Base使用するとき、すべでの変数をCollectionに送信するTrigger |
ltTimeStampUTC | LTIME LTIME#0ns | オプションで、UTC Timestampになります。SetされてないならRuntimeが自動生成されます。 |
typState | typLoggingState | 内部変数・Collectionの状態を示す |
typContext | typInternalContext | 内部変数 |
typVariableDescription (STRUCT)
Variable | Type | Description |
dwTypeId | DWORD | 変数のカタログ |
eValueType | eVariableValueType | 変数のData Typeとサイズ |
pAddress | POINTER TO DWORD | 変数のアドレス |
sTag | STRING(80) | Iot Plaformに表示するTag 名 |
sUnit | STRING(5) | Iot Plaformに表示する単位 |
xVariableTrigger | BOOL | Event Baseで使用する、True=データを送信 |
.
Create An Account!
まずWagoのHPからWago Cloudアカウントを作成します。
https://www.wago.com/global/open-automation/cloud-automation/automation-wago-cloud
初めての方はRegister nowをクリックしWago Cloudアカウントを申し込みましょう。
メールアドレスを入力し、”Send Verification Code”ボタンで認証コードをもらいます。
そうするとVerification Codeの待ち画面になります。
メールをCheckし、WagoのメールからCodeをCopyし貼り付けましょう。
Verify Codeで進みます。
User 情報を入力、規約に同意してRegisterボタンでUser登録します。
Done!アカウントが登録成功しWago CloudのHome Pageに変わりました。
Configure WorkSpace
WorkspaceはWago Cloudに接続するデバイスを管理するエアリアで、他のWago Cloud Userと共有できます。注意するのは1つのデバイスは1つだけのWorkspaceにしか紐付けられません。そしてWorkspaceに2つの権限Levelがあります。
- Workspace Administrator
Workspaceの管理や設定などができます。 - Workspace User
Default Userで、Workspaceに設定変更なども権限がありません。
Workspaceを見るしかできない
最初にアカウント作成されたとき、すでに”My workspace”があります。
Add Devices
Device Managmentをクリックします。
Device Managment画面が表示されます。
Workspaceが新規作成されました。
New>Devicesで新しいデバイスを追加します。
OKで進みます。
Device名を入力>Createします。
Done!次はそのDeviceの情報をPFC Controllerに合わせて設定する必要があります。
Controller Side
Configure Wago Controller
Check IP
もしWago ControllerのIPがわからないならAdvnced IP ScannerやWiresharkなどのSoftwareでIPを確認しましょう。
Cloud Connectivity Setup
PFC ControllerのWBMをアクセスし(Https://yourPFCControllerIP)からCloud Connectivityの項目があります。StatusではいまPFC ControllerとCloud Applicationの接続状態を一覧できます。
Connection1をクリックし、PFC ControllerとCloudの接続設定を行います。
Enabled
まずはEnabledのCheckboxを入れます。
HostName
Device ID
Activiation Key
Reboot
最後はSubmitボタンで設定を適用し、PFC ControllerをRebootすればOKです。
NTP Client
次はNTP Clientの設定です。PFCの時刻情報は大事で、もし時刻情報が正しくなければCloud Applicationと接続するときCertificate認証エラーになります。PFCの時刻を設定するか、NTP Clientを有効にしましょう。
Ports and Services>NTP Clientをクリックします。
Service enabledのCheckboxを入れ、Time server1を216.239.35.8に設定します。
216.239.35.8はGoogleのNTP Serverです。
Interface Setup
PCF ControllerはInternetと接続することによりCloud Servicesの連携やTime server同期ができます。今回使用する750-8215はX11,X12はProfinet InterfaceなのでPN Controllerから設定を上書きされる可能性があり、X11,X12をIOT Portとして使用するのは控えましょう。
Configuration>Networking>TCP/IP Configurationをクリックします。
今回私はX1を使用しますので、X1をDHCP Modeに設定変え、家のRounterとつなげばOKです。
Check
WAGO Cloudから先に追加されたControllerのStateはConnectedに変わりましたね。
PFC Controller>Cloud Connectiveity>StatusでConnection1のCloud connectionもConnectedに変わりました。それでOK!
E!COCKPIT
Add WagoCloudApp
E!COCKPITからLibrary Manager>Add Libraryします。
WagoAppCloudを検索し追加しましょう。
PROGRAM
変数の初期化とデータのCollectionにGroupする簡単なプログラムです。
PROGRAM PLC_PRG VAR Counter :INT; Var1:WagoAppCloud.typVariableDescription; Trigger:BOOL; Logger :WagoAppCloud.FbCollectionLogger; Status:WagoSysErrorBase.FbResult; END_VAR VAR RETAIN tSampleInvTime :TIME:=T#1S; tPublishInvTime :TIME:=T#5S; END_VAR VAR MyCollections:WagoAppCloud.typCollection; END_VAR Counter:=Counter+1; Var1.sUnit:=’mm’; Var1.pAddress:=ADR(Counter); Var1.eValueType:=WagoAppCloud.VVT_INT; Var1.sTag:=’Counter’; Var1.dwTypeId:=1; MyCollections.dwCollectionId:=1; MyCollections.dwVariablesCount:=1; MyCollections.sName:=’MyCollections’; MyCollections.pPublishInterval:=ADR(tPublishInvTime); MyCollections.pSampleInterval:=ADR(tSampleInvTime); MyCollections.pVariableDescriptions:=ADR(Var1); Logger( pCollections:=ADR(MyCollections) ,dwCollectionsCount:=1 ,oStatus=>Status ); |
Download
DownloadするときはBoot Application Downlaodも忘れずに。
Update Firmware
もしLibraryがImportエラーになったり、CPUにDownloadできなかったら、PFC ControllerのFimwareやCodesys Compilerを最新にUpdateしましょう。
Result
From Workspace
まずWAGO CloudからConnectionsがOnlineになりました。
Workspaceからも先程プログラムで追加された”MyCollections”、そして変数の”Counter”がありました。
Counter変数の最後の更新値も確認できました。
Dashboard
Add New Dashbaord
今度はDashboardを作成してみます。
Dashboard画面に変わり、+ボタン>Addします。
TypeをDashboardを選び>Okします。
Dashboardが作成されました!
Add new Panel
Add new Panelで進みます。
Panelの作成画面に変わります。
Change Title
まず右側にでTPanelのTitleとDescriptionを変更します。
Add Query
DefaultでPanelはもうすでにQuery一つが作成され、一番下にScrollしてください。
Data TypeをTelemetry選択し、MyCollectionsを展開すればCounter変数があり、CheckBoxに入れ、Run QueryボタンでRequestを送ります。
もちろんTime seriesだけではなく、Bar Chartなど様々な表示を変更もできます。
例えばTable表示を選んでみます。
そうすると時間の列とCounter値がTable Formatで一覧できます。
>のところをクリックするとQueryを収めます。
鉛筆ICONでQuery 名の変更も可能です。
先程”A”のQueryはCounter に変わりました。
Add more Query
+QueryでもうひとつのQueryを追加します。
今回はPFC Controllerの状態を取りたいので、Data TypeをDevice dataにします。
中にFirmware Versionなどを含む複数の項目を選びます。
Table Viewに切り替えます。
いまデータがTable表示になりました。
下のDrop listをCounterから先程追加したQueryに変わります。
Done!
Check it!
最後、Panelを保存しDashboardからも確認しましょう。
問題ありませんね!