構造化テキスト(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を使えば停止後も値を維持できる(用途と安全性に留意)。
制御構造と典型パターン
- IF/ELSIF:境界値・フェイルセーフ分岐を網羅し、デフォルト処理を最後に置く。
- CASE:状態機械を列挙型で表し、OTHERSで抜け漏れを防止する。
- FOR/WHILE/REPEAT:上限回数・脱出条件・タイムアウトを明示して暴走を防ぐ。
- 早期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)の導入効果を短期間で引き出せる。