〜実践的なPLCプログラミングを学ぼう〜 第3回: エラーハンドリングとデータロギング
1. はじめに
前回の[第2回 実践的なPLCプログラムの作成](
)では、ST言語を用いたモーター制御、タイマー、カウンター、関数ブロックの活用について学びました。
今回は、エラーハンドリング と データロギング に焦点を当て、PLCプログラムの信頼性とメンテナンス性を向上させる方法を解説します。
2. エラーハンドリングの重要性
PLCプログラムでは、予期しない異常(センサー故障、モーターの過負荷、通信エラーなど)が発生する可能性があります。適切なエラーハンドリングを実装することで、異常発生時の安全性とシステムの安定性を確保できます。
(1) 代表的なエラーの種類
| エラーの種類 | 説明 |
|---|---|
| センサー異常 | センサーの信号が一定時間変化しない |
| モーター過負荷 | モーターが一定時間以上動作し続けている |
| 通信エラー | PLCと外部機器間の通信が途絶えた |
3. エラーハンドリングの実装
エラー処理を実装する際、以下の3つのステップが重要です。
- エラーの検知
- エラーの記録
- エラーに応じた処理
(1) センサー異常の検知
PROGRAM SensorErrorDetection
VAR
SensorInput : BOOL;
SensorTimer : TON;
SensorError : BOOL := FALSE;
END_VAR
BEGIN
(* 10秒間センサーがOFFのままだとエラーと判定 *)
SensorTimer(IN := NOT SensorInput, PT := T#10s);
IF SensorTimer.Q THEN
SensorError := TRUE;
ELSE
SensorError := FALSE;
END_IF;
END_PROGRAM
このコードでは、センサーが10秒以上反応しない場合にエラーを検出します。
(2) モーター過負荷の監視
PROGRAM MotorOverload
VAR
MotorRunning : BOOL;
OverloadTimer : TON;
OverloadError : BOOL := FALSE;
END_VAR
BEGIN
(* 30秒以上モーターが動作している場合、過負荷と判定 *)
OverloadTimer(IN := MotorRunning, PT := T#30s);
IF OverloadTimer.Q THEN
OverloadError := TRUE;
ELSE
OverloadError := FALSE;
END_IF;
END_PROGRAM
30秒以上連続運転した場合に過負荷エラーを発生させます。
4. データロギングの実装
エラー発生時や運転状況を記録することで、後の解析やメンテナンスが容易になります。
(1) 基本的なロギング処理
PLCでは、データをアレイ や ファイル に記録する方法があります。
PROGRAM ErrorLogging
VAR
ErrorHistory : ARRAY[1..10] OF STRING;
CurrentError : STRING;
ErrorIndex : INT := 1;
END_VAR
BEGIN
IF SensorError THEN
CurrentError := 'Sensor Error Detected';
ELSIF OverloadError THEN
CurrentError := 'Motor Overload Detected';
ELSE
CurrentError := '';
END_IF;
IF CurrentError <> '' THEN
ErrorHistory[ErrorIndex] := CurrentError;
ErrorIndex := (ErrorIndex MOD 10) + 1;
END_IF;
END_PROGRAM
このコードでは、最新の10件のエラーをアレイに保存します。
(2) タイムスタンプ付きロギング
時間情報を記録すると、いつ異常が発生したのかが明確になります。
PROGRAM ErrorLoggingWithTimestamp
VAR
ErrorLog : ARRAY[1..10] OF STRING;
TimeStamp : ARRAY[1..10] OF TIME;
ErrorIndex : INT := 1;
END_VAR
BEGIN
IF SensorError THEN
ErrorLog[ErrorIndex] := 'Sensor Error';
TimeStamp[ErrorIndex] := T#NOW;
ErrorIndex := (ErrorIndex MOD 10) + 1;
END_IF;
END_PROGRAM
T#NOW で現在の時間を取得し、エラーと共に記録します。
5. 実践課題:PLCのエラーロギングシステム
(1) 要件
(2) プログラム例
PROGRAM ErrorManagementSystem
VAR
ErrorLog : ARRAY[1..10] OF STRING;
ErrorIndex : INT := 1;
EmergencyReset : BOOL;
END_VAR
BEGIN
IF SensorError THEN
ErrorLog[ErrorIndex] := 'Sensor Error';
ErrorIndex := (ErrorIndex MOD 10) + 1;
END_IF;
IF OverloadError THEN
ErrorLog[ErrorIndex] := 'Motor Overload';
ErrorIndex := (ErrorIndex MOD 10) + 1;
END_IF;
IF EmergencyReset THEN
FOR i := 1 TO 10 DO
ErrorLog[i] := '';
END_FOR;
ErrorIndex := 1;
END_IF;
END_PROGRAM
このプログラムでは、異常発生時にエラーメッセージを保存し、非常停止時にログをクリアします。
6. まとめ
今回は、PLCのエラーハンドリングとデータロギングの実装方法について解説しました。
- エラー検知 :センサー異常やモーター過負荷の検出
- エラーロギング :エラー履歴を保存し、後の解析を容易に
- タイムスタンプ を使ったエラー管理
- 非常停止時のエラーログクリア の実装
これらの技術を活用することで、より信頼性の高いPLCシステムを構築できます。
7. 次回予告
次回は、HMI(ヒューマン・マシン・インターフェース) との連携方法について学びます。PLCとタッチパネルを連携し、視覚的なインターフェース で制御やエラー監視を行う方法を解説します。
参考文献
次回もお楽しみに!