見出し画像

WAGO Compact Controller(751-9301/ ファームウェアバージョン21)にDockerとNode-Redをインストールしてみた

はじめまして!

みなさんはじめまして。わたるんと申します。
今回はTwitterでWAGO Compact Controller100 にDockerとNode-Redのインストール方法をまとるよ~と呟いてみたら結構皆さんご興味を頂けているようですので初めてのnoteですがこちらにまとめていこうかと思います!

WAGO Compact ControllerはドイツWAGO社が開発した産業用の小型PLCで、PLCのプログラミング環境としてはIEC61131-3に準拠しているCoDeSys V3をエンジニアリング環境として選択しており、PLCプログラミング環境としては無償で構築することができます。
またOSにEmbedded Linuxを採用しており、Dockerコンテナを実行できる環境を構築することができ、新しい世代のオープンソースコントローラとして使うことができます。
今回はあえてCoDeSys環境は使用せず、DockerとNode-Red環境を構築して遊んでみよう!というnoteです。

※2023年11月16日追記 
本記事はファームウェアバージョン21においての手法となります。ご使用のファームウェアバージョンによっては使用方法が変わる場合がありますのであらかじめご了承ください。

1.今回の使用機材

今回、DockerとNode-Redで遊ぶにあたり用意した物は以下の製品です。

  1.  WAGO Compact Controller100 (751-9301): ファームウェア21

  2. DC24V出力パワーサプライ (787-1102)※旧製品。現行製品は787-1202

  3. 設定用PC

  4. インターネット回線

  5. PuTTYなどのターミナルソフトウェア

2.ハードウェアの初期設定

まずはWAGO Compact Controller100(以下、CC100)の初期設定を行います。
CC100は工場出荷状態ではIPアドレスの取得方法がDHCPとなっています。別途DHCPサーバを立ててそこからアドレスを割り振っても良いのですが、DHCPサーバがない場合は筐体のRSTボタンをRUN/STOPスイッチが”STOP”の状態で7秒以上押すことで『192.168.1.17』というアドレスを強制的に割り振ることが出来るようになっています。

筐体のRSTスイッチの場所。ペン先などで軽く7秒以上押す

上記手順でIPアドレスを割り振ることが出来たら、PCのIPアドレスを『192.168.1.252』などの同じセグメントに割り当てたうえでMicrosoft Edgeなどでhttps://192.168.1.17にアクセスを行います。

正しくIPアドレスの設定ができていれば、以下のような管理画面(以下、WBM)が現れます。

WBMのログイン画面

ユーザ名とパスワードを求められるので、工場出荷状態の場合は
Username : admin
Password: wago
を入力します。

ログインが成功すると「パスワードを変えてね」って言われるので、Change nowをクリックの上初期パスワードを変更することを強くお勧めします。

パスワード変えてね画面

無事ログインができるとまずはCC100の各種情報が確認できる画面が表示されます。

WBM - Device Status  ファームウェア情報や各種異常情報などが確認可能

この画面では現状のエラー情報などのほか、Firmware Revisionの項目で動作ファームウェアバージョンの確認が可能です。特に( )の中、上記例だと21の数字が動作中のファームウェアバージョンを示します。

■WBMの中で特に重要な設定

今回、DockerとNode-Redをこのコントローラで試すうえで特に重要な設定は以下の設定となります。

  1. Ethernetポートのブリッジ設定とIPアドレス設定

  2. NTPクライアント(時刻同期)の設定

  3. IP Forwardingの設定

  4. ファイアウォールの設定

1.Ethernetポートのブリッジ設定とIPアドレス設定

現在は仮のIPアドレスを指定してWBM画面に入っていますが、この仮IPアドレスは電源を切ると削除されてしまうアドレスです。
また、CC100コントローラはEthernetポートを2ポート備えており、それぞれ別のIPアドレスを割り振ることが出来るようになっています。
今回は
ETH1ポートを『192.168.1.100』に固定(メンテナンスポート)
ETH2ポートを『DHCP』でインターネットへのアクセスポートとします。
具体的に設定は以下の画面の個所を設定します。
それぞれ、一度パラメータを変更したら"Submit"をクリックして設定を確定します。

Configuration - Networking - Ethernet Configuration - Bridge Configuration
Configuration - Networking - TCP/IP Configuration - Network Details Bridge 1 & 2

2.NTPクライアント(時刻同期)の設定

こちらは設定を行わないと各種Dockerコンテナを取得するときに証明書関係のエラーが発生することになります。
設定はWBMの中の Configuration - Port and Services - NTP Clientの設定を行います。
具体的には以下スクリーンショットの例となりますが
Service enabledを有効に。
Time Server 1~4にNTPサーバのIPアドレスを入力。
(DNS名では入力できません。新しいFWで改修予定のようです)
上記が出来たら画面右下のSubmitを押すと確定されます。

Ports and Services - NTP Client - NTP Client Configuration

タイムゾーンの設定はConfigration - Clock項目で行う事が可能です。

WBM - Clock - タイムゾーンの設定

3.IP Forwardingの設定

Dockerコンテナとホスト、Dockerコンテナ間で通信が出来るようにIP Forwardingの設定を行います。設定はWBM - Networking - Routing内にあります。デフォルトでは IP Forwarding through multiple interfacesオプションは無効なのでこれを有効にします。

Configuration - Networking - Routing

4.ファイアウォールの設定


昨今のサイバーセキュリティを確保する意味でもファイアウォールの設定は非常に重要です。テスト段階でうまく通信しない?インターネットにつながってない?などの疑いがあるときには無効にすることも解決手段の一つですが、基本的には有効するようにしてください。特にインターネット側からのSSHへのアクセスは非常に危険です。
WBM - Security - Firewall - General Configurationから
Global Firewall ConfigurationのFirewall enabled entirelyを有効にし、

WBM - Security - Firewall - General Configuration


Interface Configurationにて各々のポートで許可するプロトコルを選択します。
以下の例ではETH1番ポート(Bridge 1)はメンテナンス用に緩めに(デフォルト)、ETH2ポート(Bridge 2)はインターネットと繋がるポートのためすべての外側からのアクセスをブロックする設定にしてあります。

Security - Firewall - interface Configulation - Bridge2 (Bridge1はデフォルト)

お疲れさまでした。ここまでの作業でCC100本体の初期設定は完了した形となります。


2.Docker、Node-Redのインストール(簡単コース)

いよいよ、ここからがCC100へのDocker及びNode-Redのインストールの手法となります。ほとんどの作業はPuTTYなどのターミナルソフトを使用し、CC100のLinuxコンソールへアクセスをして作業を進めていきます。
ターミナルソフトをお持ちでない方はPuTTYをインストールしてください。
今回は(簡単コース)という事で、Mr.Kurt Braun氏が作成されているpfc-provisioning-toolを使用してお手軽にDocker、そしてNode-Redコンテナのインストールを実行していきます。
マニュアルでのコンテナのインストールなどの方法はまた別の機会に解説をしていこうかと思います。
それではさっそく作業していきましょう!

1.PuTTYを使用してLinuxコンソールへアクセスをする


PuTTYをインストールしたらまずは接続先のIPアドレスをHost Name項目へ入力しLinuxコンソールにアクセスをします。

PuTTY開始画面

2.ログイン完了 - パスワード変更


Linuxコンソールにアクセスを試行するとLinuxのユーザ名とパスワードを確認されます。この場合、
login as: root
root@IPアドレス's password: wago (※文字を入力しても非表示です)
を入力することでログインができます。

ログインが完了すると”New password”と表示され新しいパスワードの決定を求められますので2回同じパスワードを入力しパスワードの変更を行ってください。
なお、Linuxにおいてユーザ名"root"は一番権限を持つアカウントになります。このパスワードが破られる=CC100のすべての機能が掌握されるという事にもなりますのでこのパスワードは強固なものを設定してください。

3.Provioning-toolの実行


無事、Linuxコンソールにアクセスすることが出来たら、以下のコマンドをコピーし、Linuxコンソール上に張り付けてEnterを押してください。

curl -L https://raw.githubusercontent.com/braunku/pfc-provisioning-tool/main/menu.sh -o menu.sh -s && sh menu.sh
Linuxコンソールにコマンドを張り付ける

PuTTYの場合、貼り付けはコンソール上でマウスの右クリックを行うと貼り付けができると思います。もし実行した結果、うまく動作しない場合はCC100が正しくインターネットにつながっていることを確認してください。Linuxコンソール上で IP: 8.8.8.8にPingを送信し、正しく返答がない場合はインターネットアクセスがない可能性があります。

ping 8.8.8.8 -c 3
Ping送信の結果、うまくいっていない例
インターネットに正しくつながっていると Pingの返答がある。

4.Docker、Node-Redコンテナのインストール


Provisioning Toolが正しく実行されると以下の画面になります。

Provisioning Toolでは画面左側の英数字を入力してEnterを押すことでメニューを変移させる

Provisioning Toolではキーボードで対応するキーを入力することでメニューが変移します。
まずはDockerをインストールしたいので ”1”を入力してEnter。
自動でDockerのインストーラファイルのダウンロードとインストールが実行されます。

Dockerのインストールが進んでいる様子

インストールが終わると再びProvisioning Toolメニューが表示されます。

Docker v20.10.5がインストールされ、Provisioning Toolメニューに戻ってきた様子

続いてCC100用のNode-Redコンテナをインストールします。
”6”を入力しEnter

Install CC100 Containers メニュー

続いて"p"を入力してEnterを押すことでNode-Redのインストールが実行されます。
ここでCertificate関係のエラーが発生した場合には、NTPが正しく動作しているかを確認して下さい。

Node-Redコンテナインストール中

このインストールには多少時間がかかるので、コーヒーでも飲みながら一息ついていただくことをお勧めします。笑

以下の画面のようにProvisioning Toolメニューに戻ってきたらインストール完了です。

Node-Redコンテナインストール完了

”x”を入力後EnterでProvisioning Toolを終了させます。
Dockerも含め正しく動作しているかを確認する場合はLinuxコンソール上で

docker ps

を入力することで現在稼働中のコンテナの一覧の表示が可能です。

るNode-Redコンテナが実行中であることが確認できる。

3.Node-Redの操作

ここまでの操作が完了するとCC100上でNode-Redが稼働しています。
Microsoft Edgeなどでアドレスバーに”http://IPアドレス:1880"を入力するとNode-Red開発環境が表示されます。※httpsではないので注意!

Node-Redが表示された

Node-Redが表示されたらCC100の入出力を制御するためのノードを追加します。
画面右上のメニューボタンからパレットの管理

ノードのインストールはパレットの管理メニューから

ノードを追加タブを選んで検索ウィンドウに”cc100”を入力するとnode-red-contrib-wago-cc100ノードが現れるので”ノードを追加”でインストールを行います。

検索ウインドウに"CC100"を入れると候補をサジェストしてくれる

追加が完了すると画面左側のノード一覧にWAGO CC100ノードが追加されます。

CC100の入出力をコントロールするノードが追加された

あとはInjectノードを置いてpayloadを真偽にしてTRUEノード、同じ要領でFALSEを発行するノードを配置

injectノードを配置し、オプションで真偽を選択
これがNode-Red上のソフトスイッチになる

WAGO CC100からSet-DO1を配置してつなぐ

CC100の出力(DO1)をコントロールするノードに接続

画面右上のデプロイを実行することでNode-Red上からCC100のDOを制御できちゃいます!

画面右上のデプロイを実行でプログラムが走り出す
trueノードの左側の■箇所をクリックするとCC100のDO1LEDが点灯。(実際にDOが出力される)
Node-Redで出力命令を出した結果が実機に反映された

ここまでできるとあとはNode-Redの世界で実際の機器を動かすことも、MQTTでデータを送信することも、OPC-UAを使う事も。。。
SQLを使ってInfluxDBコンテナなどにデータをためて表示するなどもできちゃいます!

■おわりに

長々と書きましたが、簡単コースのやり方はわかると本当に簡単です!
まずはお試しで触ってみたい、ラズパイじゃなくて産業用機器でやってみたい!という方はWAGO Compact Controller100、いかがでしょうか。

次回は別のコンテナをインストールするときなどに役に立つ、マニュアルでコンテナを扱う方法に触れていきたいと思います。

それでは今回はこのへんで。またお会いしましょう!


この記事が気に入ったらサポートをしてみませんか?