命令リスト(IL)
命令リスト(IL)は、PLC制御向け国際規格IEC 61131-3で定義されたテキストベースのプログラミング言語である。ニーモニック(略号)命令を順次実行し、アキュムレータの論理値や数値を更新しながら入出力・内部変数を操作する。ラダー図やFBDに比べて低水準であるが、処理が明確で実行効率に優れるため、限られたリソースの装置や微細なタイミング制御で活用されてきた。第3版では非推奨とされたが、既存設備の保守・改造では依然として重要である。
位置づけと規格
命令リスト(IL)は、LD(ラダー)、FBD、ST(Structured Text)、SFC(順序制御)と並ぶ言語群の一つである。IEC 61131-3はデータ型、POU(Program/Function/Function Block)の枠組み、変数スコープ、実行モデルを共通化しつつ、ILでは命令列による逐次実行を採用する。2013年改訂(第3版)でILは非推奨となり、新規開発はST等への移行が推奨されるが、互換性のため多くの開発環境が読込・表示・ビルドを継続支援している。
基本構成と実行モデル
ILは上から下へ順次実行され、命令はアキュムレータ(現在値)とオペランド(変数・定数)に作用する。LDで読み込んだ値にANDやORを重ね、STでブール結果を出力変数へ格納する、という流れが基本である。算術や比較も同様にアキュムレータ中心に行い、ジャンプ命令でフローを分岐させる。
代表的な命令と意味
LD X0,LDN X0:変数の読込/否定読込。AND X1,OR X2,XOR X3:ブール演算をアキュムレータへ適用。ST Y0:現在のブール値を出力や内部ビットに格納。ADD D0,SUB D1,MUL D2,DIV D3:数値演算。GT,GE,EQ,NE,LT,LE:比較によりアキュムレータへ真偽を設定。JMP L1,JMPC L2:無条件/条件付きジャンプ。CAL TON_1,RET:FB呼出/リターン。タイマ・カウンタ等のFBと併用する。
データ型とアドレッシング
IECではBOOL、INT、DINT、REAL、TIMEなどを標準化している。I/Oは%I(入力)、%Q(出力)、%M(メモリ)などの表記がある一方、ベンダ独自のX0、Y10、D100等も多い。移植性を確保するにはシンボリック変数(タグ名)を用い、ハード依存の絶対番地を最小化するのが望ましい。
制御フローと構造化
ILはJMP/JMPCによりフロー制御を行う。過度なラベル分岐は可読性を損なうため、短い直列分岐に留め、反復はSFCやST、FBDといった上位表現に委ねるのが保守性に優れる。大きな機能はFunctionやFunction Blockとして分割し、ILは局所的・性能重視の部分へ適用する設計が実務的である。
タイマ・カウンタの扱い
IECのタイマ(TON、TOF、TP)やカウンタ(CTU、CTD)はFBとして提供され、ILからCALや引数設定で呼び出す。開始条件やプリセット値、経過時間ET、完了ビットQ等を変数に結び、スキャン毎に評価させる。
開発・デバッグ上の要点
- 命令列を論理塊ごとに空行やコメントで区切り、ラベル名は機能を表す短語にする。
- オンラインモニタでアキュムレータと主要変数の変化を追跡し、境界値・チャタリング時の挙動を確認する。
- クロスリファレンスで参照関係を洗い出し、影響範囲を明確化する。
保守性とコーディング規約
命令リスト(IL)は簡潔な一方、人の読み解きに負荷がかかる。命名規約、コメント方針、禁止事項(多段ジャンプ、自己修正的な代入など)をチームで定め、レビューで遵守する。I/Oのデバウンスや非常停止系は標準FBで統一し、IL記述のばらつきを抑えるとトラブルシュートが迅速になる。
相互運用と再利用
同一プロジェクトでLDやFBD、SFCと混在させ、共通FB・関数を言語非依存の資産として整備する。計算集中部のみをILで最適化し、状態遷移はSFC、論理合成はFBD、と役割分担することで、見通しと性能を両立できる。
歴史と現状
ニーモニックは初期PLC時代からの伝統で、メモリ節約と実装容易性が背景にあった。規格の成熟とツール進化により高水準言語化が進み、第3版以降はILの新規採用が減少している。ただし既設ラインの寿命は長く、命令リスト(IL)の読解力は保守や改造見積に不可欠である。
移行と互換運用の指針
- 現行ILの機能単位を棚卸しし、試験ケースを作る。
- 算術・比較・分岐はSTへ移し、I/OマッピングはFBで抽象化する。
- ツールの自動変換を用いる場合も、境界値とタイミングの再検証を必ず行う。
- 移行後もILを読める体制を維持し、緊急時の解析力を確保する。
コメント(β版)