TechCraft – エンジニアのためのスキルアップメモ

エンジニアのスキルアップを少しでも加速する技術ブログ

第四回 ST言語

〜実践的な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の作成手順

  1. CODESYSのVisualizationエディタを開く
  2. ボタンウィジェットを追加し、PLCのStartButton/StopButton変数に接続
  3. ラベルを配置し、MotorStatusの状態を表示
  4. エラーメッセージ用のテキストを追加し、ErrorFlagがTRUEなら"エラー発生"と表示
  5. カウンター値(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の役割と接続方法
  • PLCとHMIの通信
  • HMIを使ったデータ可視化
  • エラーロギングの表示
  • リアルタイムの生産数管理

HMIを活用することで、システムの操作性が向上し、オペレーターが直感的に生産ラインを監視・管理できるようになります。


9. 次回予告

次回は、IoTとPLCの連携 をテーマに、クラウドとのデータ連携やリモート監視の方法を学びます!


参考文献

次回もお楽しみに!