〜実践的なPLCプログラミングを学ぼう〜 第4回: HMIとの連携とデータ可視化
1. はじめに
前回の第3回 エラーハンドリングとデータロギングでは、エラーハンドリングの実装方法や、データロギングによるエラー管理の手法について学びました。
今回は、HMI(ヒューマン・マシン・インターフェース) を活用し、PLCと連携したデータの可視化と操作パネルの構築について解説します。
2. HMIとは?
HMI(Human Machine Interface)は、PLCと接続してシステムの状態を監視したり、操作を行ったりするためのインターフェース です。HMIは、タッチパネルやPC画面を使って、オペレーターが直感的にPLCとやり取りできるように設計されます。
(1) HMIの役割
✅ システム状態の可視化(温度、圧力、モーターの動作状態などを表示)
✅ 操作パネルの提供(スタート・ストップボタン、パラメータ設定)
✅ アラームの通知(異常時に警告を表示)
✅ データログの表示(エラー履歴や生産数を記録・表示)
(2) 代表的なHMIシステム
HMIソフトウェア | 特徴 |
---|---|
WinCC (Siemens) | Siemens製PLCとの親和性が高い |
FactoryTalk (Rockwell) | Allen-BradleyのPLC向け |
CODESYS Visualization | IEC 61131-3準拠のHMI開発が可能 |
Ignition (Inductive Automation) | WebベースのHMI開発に対応 |
3. HMIとPLCの接続方法
PLCとHMIを接続するには、一般的に通信プロトコル を使用します。
(1) 主要な通信プロトコル
プロトコル | 説明 |
---|---|
Modbus TCP | Ethernet経由でPLCとHMIを接続 |
OPC UA | 標準化された産業用通信プロトコル |
Profibus | Siemens系PLCで使用される高速通信規格 |
Ethernet/IP | Rockwell AutomationのPLCで一般的 |
4. シンプルなHMIの設計
ここでは、CODESYSのVisualization機能 を使用して、基本的なHMI画面を作成します。
(1) HMIの要件
- モーターの状態表示(ON / OFF)
- スタート / ストップボタン
- エラーアラーム表示
- 現在のカウント値を表示
(2) PLCプログラム(ST言語)
HMIと連携するPLCプログラムを作成します。
PROGRAM HMI_Example VAR StartButton : BOOL; StopButton : BOOL; MotorStatus : BOOL := FALSE; ErrorFlag : BOOL := FALSE; ProductCount : INT := 0; END_VAR BEGIN IF StartButton THEN MotorStatus := TRUE; ELSIF StopButton THEN MotorStatus := FALSE; END_IF; (* 製品が流れるとカウントアップ *) IF MotorStatus THEN ProductCount := ProductCount + 1; END_IF; (* 異常検知 *) IF ProductCount > 100 THEN ErrorFlag := TRUE; END_IF; END_PROGRAM
このプログラムでは、HMIのボタン入力を受けてモーターのON/OFFを制御し、製品カウントやエラーフラグをHMIに送信します。
5. HMIの設計(CODESYS Visualization)
CODESYSのHMIエディタを使用して、以下の要素を配置します。
(1) HMIのUI構成
✅ モーターの状態表示(ランプ表示)
✅ スタート / ストップボタン(PLCへ信号送信)
✅ エラーメッセージ表示
✅ カウント数の表示
(2) HMIの作成手順
- CODESYSのVisualizationエディタを開く
- ボタンウィジェットを追加し、PLCのStartButton/StopButton変数に接続
- ラベルを配置し、MotorStatusの状態を表示
- エラーメッセージ用のテキストを追加し、ErrorFlagがTRUEなら"エラー発生"と表示
- カウンター値(ProductCount)を数値表示
(3) HMIのSTコード
HMI側のコードは不要ですが、CODESYSの変数マッピング設定で以下のように定義します。
(* ボタン入力の変数 *) HMI_StartButton AT %IX0.0 : BOOL; HMI_StopButton AT %IX0.1 : BOOL; (* 出力の変数 *) HMI_MotorStatus AT %QX0.0 : BOOL; HMI_ProductCount AT %MW100 : INT; HMI_ErrorFlag AT %MW101 : BOOL;
これにより、HMIとPLCの変数が紐付けられ、タッチパネルから直接制御が可能になります。
6. データログのHMI表示
HMIでは、過去のエラーや生産データの履歴を表示 することも重要です。
(1) 過去10件のエラーをHMIに表示
PROGRAM ErrorLoggingHMI VAR ErrorLog : ARRAY[1..10] OF STRING; ErrorIndex : INT := 1; HMI_ErrorList : ARRAY[1..10] OF STRING; END_VAR BEGIN (* 新しいエラーが発生したらログに追加 *) IF ErrorFlag THEN ErrorLog[ErrorIndex] := 'Error at ' + STRING_TO_TIME(T#NOW); ErrorIndex := (ErrorIndex MOD 10) + 1; END_IF; (* HMIに最新のエラーリストを渡す *) HMI_ErrorList := ErrorLog; END_PROGRAM
このコードでは、エラー発生時にログを保存し、HMI上で最新の10件のエラーを確認できるようにします。
7. 実践課題:HMIを活用した生産監視システム
(1) 要件
- 生産ラインの運転状況を表示
- エラーが発生したら警告を表示
- 生産数のリアルタイム表示
- 異常が発生した場合にオペレーターが確認できるように履歴を保存
(2) HMI画面の構成
✅ モーターON/OFF状態を示すアイコン
✅ エラーが発生すると警告メッセージを点滅
✅ 過去のエラーリストを表示
✅ 累積生産数を表示
8. まとめ
今回は、HMIとPLCの連携について学びました。
HMIを活用することで、システムの操作性が向上し、オペレーターが直感的に生産ラインを監視・管理できるようになります。
9. 次回予告
次回は、IoTとPLCの連携 をテーマに、クラウドとのデータ連携やリモート監視の方法を学びます!
参考文献
次回もお楽しみに!