構造化テキスト(ST)|PLC標準で制御を簡潔に記述

構造化テキスト(ST)

構造化テキスト(ST)は、IEC 61131-3で規定されるPLC向け言語群のテキスト系言語であり、高水準の構文を用いて制御ロジックを記述する方式である。ラダー図に比べて抽象度が高く、分岐・反復・関数化といった構造化プログラミングに適し、大規模制御やアルゴリズム実装で威力を発揮する。演算・配列・構造体・ユーザー定義型を扱えるため、数値処理や状態遷移の表現が簡潔で、可読性と保守性を両立しやすい。近年はFBDやSFCとの混在設計が一般的で、既存設備の改造でも段階的にSTへ移行しやすい特徴をもつ。

規格上の位置付け

IEC 61131-3は、ラダー図、FBD、SFC、IL、そしてテキスト言語であるSTを定義する。STはProgram/Function/Function BlockといったPOUにより構成され、タスクへ割り当てて周期実行するのが基本である。各POUは入出力と内部変数を明示し、再利用性が高い。ベンダ間で方言はあるが、主要な制御構文や標準ライブラリはおおむね共通化が進む。混在プロジェクトでも、ラダーで入出力を整流し、演算や状態管理はSTで書くと分担しやすい。

文法の特徴

  • 予約語(IF、THEN、ELSE、CASE、FOR、WHILE等)を用いた構造化制御が可能である。
  • 式は中置記法で、算術・論理・比較演算子を備える。演算の優先順位と括弧で意図を明確化できる。
  • コメントは行末や範囲指定に対応し、仕様と意図を近接して残せる。
  • 可読性の高い代入・関数呼び出しが可能で、アルゴリズムの移植が容易である。

データ型と変数宣言

  • 基本型:BOOL、INT/DINT、REAL、TIME、STRINGなど。
  • 複合型:ARRAY、STRUCT、ENUM。物理量や状態を型で表現すると誤用を防げる。
  • 領域:VAR、VAR_INPUT、VAR_OUTPUT、VAR_IN_OUT、VAR_TEMPを使い分ける。
  • 保持:RETAINやPERSISTENTを使えば停止後も値を維持できる(用途と安全性に留意)。

制御構造と典型パターン

  1. IF/ELSIF:境界値・フェイルセーフ分岐を網羅し、デフォルト処理を最後に置く。
  2. CASE:状態機械を列挙型で表し、OTHERSで抜け漏れを防止する。
  3. FOR/WHILE/REPEAT:上限回数・脱出条件・タイムアウトを明示して暴走を防ぐ。
  4. 早期returnやEXITは可読性を損なわない範囲で使用し、例外経路を簡潔化する。

関数・関数ブロック(FB)

関数はステートレス計算、FBは内部状態を持つ部品化単位である。PID、フィルタ、デバウンス、アラーム管理、通信ハンドラ等をFB化すると再利用が容易になる。インターフェース(入力・出力・パラメータ)を安定化し、実装を差し替えられるようにすることで、機能拡張や異なる装置間の転用がしやすくなる。ユニットテストやシミュレータを活用すれば、現場停止を最小化して品質を高められる。

タスクと実行モデル

PLCは周期タスクでPOUを実行するのが基本で、周期・優先度・ウォッチドッグ設定が応答と安全性を左右する。重い演算は長周期またはイベント駆動に分離し、I/O処理は短周期で確実に実行する。スキャン時間の上限を監視し、過負荷時の縮退動作(非本質機能の間引き)を用意しておくと頑健である。

タイマ・カウンタの活用

TON/TOF/TPといったタイマFBや、CTU/CTDカウンタはSTでも多用される。立上り検出→TONで安定化→状態遷移といった定石や、アラーム遅延・自己保持解除などをFBで標準化すると、ロジックの一貫性が保てる。時間型(TIME、TOD、DATE_AND_TIME)を正しく扱い、単位変換ミスを避けることが重要である。

他言語との相互運用

HMI連携やI/Oの直感的把握にはラダーやFBDが有利な場合があり、演算や状態機械はSTに寄せると全体が整理される。SFCで上位の工程フローを表現し、各ステップの実装をSTで詳細化する構成は保守しやすい。既存設備の一部だけをSTへ置換する段階移行も取りやすい。

設計・保守のベストプラクティス

  • 命名規約:物理量、単位、信号方向(In/Out)を名前に反映し、誤配線を減らす。
  • インターフェース優先:FBはI/Fを先に固定し、実装は後から差し替える。
  • 診断性:自己診断FB、エラーコード体系、ログ出力を共通化する。
  • レビュー:ペアレビューと静的チェックで分岐漏れ・型不一致を早期発見する。
  • 安全:フェイルセーフ、非常停止、初期化順位、リテンティブ変数の整合を設計書に明記する。

よくある落とし穴

  • 暗黙型変換や桁あふれ(INT↔REAL)の見落とし。
  • 周期遅延に起因する制御不安定(実行時間のばらつきと優先度設計不足)。
  • グローバル変数依存の増殖による結合度上昇。
  • RETAIN再初期化の勘違いと、起動時シーケンスの未整理。

産業分野での活用例

バッチ処理、搬送・選別、モーション制御、温調、トレーサビリティ、予兆保全などで構造化テキスト(ST)は有効である。演算集中部や状態機械をSTへ集約し、I/O周辺はラダーやFBDで見通しを確保する設計は定番である。フィールドバス(Modbus、EtherNet/IP、PROFINET)越しの装置連携でも、FB化と例外処理の共通化が保守性を高める。

学習と移行のコツ

既存ラダーを読み解き、条件式や状態遷移を列挙型・CASEへ写像する練習が効果的である。チーム内スタイルガイドとテンプレートFBを整え、コードレビューで規約順守を徹底する。試験ではシミュレータで境界値と異常系を先に潰し、現場試運転ではログとアラームを活用して差分確認を行う。こうした手順により、構造化テキスト(ST)の導入効果を短期間で引き出せる。