FUXA で SCADA 監視デモを構築する
最終更新:
このチュートリアルでは、模擬タンク液位を使って RK3576 上に小規模な SCADA 監視画面を構築します。Mosquitto が MQTT メッセージを受信し、FUXA が数値とトレンドを表示します。最後に低液位アラームを設定します。
これはソフトウェアのみのデモです。 PLC の接続、ポンプの操作、実機の制御検証は行いません。先にこのカテゴリの FUXA インストールガイドを完了してください。
必要なもの
- インストールガイドに従い、
fuxa-rk3576コンテナーで FUXA を実行している RK3576。 - RK3576 への SSH アクセスと、同じ信頼できるネットワーク上のブラウザー。
- RK3576 上の Mosquitto Broker と
mosquitto_pub/mosquitto_sub。未導入なら次の手順でインストールします。
FUXA がホスト上の 127.0.0.1:1883 に接続できるよう、コンテナーが実行中でネットワークモードが host であることを確認します。
sudo docker ps --filter name=fuxa-rk3576
sudo docker inspect -f '{{.HostConfig.NetworkMode}}' fuxa-rk35762 つ目のコマンドが host を返さない場合は、使用中の構成に合わせてネットワークと Broker アドレスを調整してから続行してください。
ステップ 1:ローカル MQTT Broker を準備する
RK3576 で実行します。
sudo apt update
sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable --now mosquitto
systemctl is-active mosquitto
sudo ss -ltnp | grep ':1883'systemctl is-active は active を返すはずです。このデモでは Broker をローカルに限定し、認証のない MQTT ポートをインターネットに公開しないでください。認証済みの Broker を使う場合は、その接続設定を使用します。
ステップ 2:サンプルデータを発行して確認する
1 つの MQTT トピックで 3 つのタンク液位を送ります。後から購読しても取得できるよう、保持メッセージとして JSON を発行します。
mosquitto_pub -h 127.0.0.1 -p 1883 \
-t rk3576/fuxa/demo/tanks -r \
-m '{"tank1":7500,"tank2":1500,"tank3":3000}'
mosquitto_sub -h 127.0.0.1 -p 1883 \
-t rk3576/fuxa/demo/tanks -C 1 -v購読コマンドはトピックと JSON を表示します。以降も tank1、tank2、tank3 の表記を変えないでください。
ステップ 3:FUXA を MQTT に接続する
http://<RK3576_IP>:1881/editor を開き、左上の歯車アイコンから Connections を開きます。MQTT 接続を 1 つ追加します。
| 項目 | 値 |
|---|---|
| Name | RK3576 MQTT |
| Type | MQTTclient |
| Address (mqtt://[server]:[port]) | mqtt://127.0.0.1:1883 |
| Enable | オン |
Polling は未設定のまま OK をクリックし、緑色の接続表示を確認します。3 つの液位は同じトピックのフィールドなので、接続を 3 つ作る必要はありません。
接続のリンクアイコンからタグ/購読ページを開きます。Browser Topics on broker に rk3576/fuxa/demo/tanks を入力して検索し、トピックを選択します。Topic path が空なら同じパスを入力します。raw ではなく json を選び、Subscribe をクリックします。tank1、tank2、tank3 の数値フィールドを確認します。
ステップ 4:監視画面を作成する
エディターの Views で MainView を開き、RK3576 Tank Monitor などの見出しを追加します。
- Controls の ## アイコンから数値表示を配置し、JSON 全体ではなく
tank1数値タグにバインドします。同様に 2 つ追加してtank2、tank3にバインドします。初期値は7500、1500、3000です。 - Controls の折れ線グラフアイコンから Chart を配置します。Chart settings → Chart to show → New Chart を選び、チャート設定の + から
Tank Levelsを作成します。 - チャートの ⋮ メニューで Add Line を選び、
tank1をバインドします。必要ならtank2とtank3の線も追加します。Chart to show でTank Levelsを選択します。 - ディスクアイコンで保存し、再生/プレビューで 3 つの数値とチャートを確認します。
タグ選択画面の実際の名前を使用してください。接続名や MQTT トピックがパスに含まれる場合があります。
ステップ 5:値の変化を確認する
RK3576 の別のターミナルで次のシミュレーターをフォアグラウンドで実行します。停止するには Ctrl+C を押します。
tank1=7500
tank2=1500
tank3=3000
while true; do
mosquitto_pub -h 127.0.0.1 -p 1883 \
-t rk3576/fuxa/demo/tanks -r \
-m "{\"tank1\":$tank1,\"tank2\":$tank2,\"tank3\":$tank3}"
tank1=$((tank1 - 100))
tank2=$((tank2 + 60))
tank3=$((tank3 + 40))
if [ "$tank1" -le 0 ]; then
tank1=7500
tank2=1500
tank3=3000
fi
sleep 2
done数値とチャートが更新されることを確認します。次のアラームテスト前にシミュレーターを停止してください。実行中だとテスト値が上書きされます。
ステップ 6:低液位アラームを追加してテストする
エディター左上の歯車アイコンから Alarms を開き、アラームを追加します。
| 項目 | 値 |
|---|---|
| Name | Tank 1 low level |
| Tag | RK3576 MQTT の数値タグ tank1 |
| Low → Enabled | オン |
| Low → Check interval (seconds) | 1 |
| Low → Min / Max | 0 / 1000 |
| Low → Time in Min-Max range (seconds) | 1 |
| Low → Text | Tank 1 low level |
OK をクリックしてプロジェクトを保存します。間隔と継続時間は秒単位です。1000 ではなく 1 を入力します。High や High High の条件は不要です。
シミュレーターを停止してから低い値を発行します。
mosquitto_pub -h 127.0.0.1 -p 1883 \
-t rk3576/fuxa/demo/tanks -r \
-m '{"tank1":800,"tank2":1500,"tank3":3000}'http://<RK3576_IP>:1881/ を開き、最初の数値が 800、右上のベルに赤いバッジが付き、Alarms に Tank 1 low level が優先度 Low、状態 Active で表示されることを確認します。パネルが閉じている場合はベルをクリックします。
テスト後、通常値に戻します。
mosquitto_pub -h 127.0.0.1 -p 1883 \
-t rk3576/fuxa/demo/tanks -r \
-m '{"tank1":7500,"tank2":1500,"tank3":3000}'結果と制限事項
MQTT 購読が接続され、数値とチャートが更新され、tank1 が 800 のときアラームが表示されればデモは完了です。発行プログラムは本番用データソースではありません。停止後も MQTT の保持メッセージにより最後の値が残るため、静止した表示だけでは更新の継続を確認できません。
実運用では認証済みのデータソースを使用し、FUXA と Broker へのアクセスを制限し、実機でアラームと制御動作を検証してください。安全上重要な装置にこの例をそのまま接続しないでください。