iec61131 について
IEC 61131-3 に基づく PLC プログラミングの開発者向けリファレンスです。各言語、プログラム構成単位、データ型、交換形式に加え、PLCopen 標準とベンダーごとの形式対応をまとめています。
主な機能
- 01IEC 61131-3 の五つの言語の概要
- 02プログラム構成単位と変数スコープ
- 03データ型のリファレンス
- 04PLCopen 標準と交換形式
- 05言語構造の例
活用シーン
- 01PLC のタスクに合う言語の選択
- 02ファンクションブロックや変数定義の確認
- 03PLC プログラム交換形式の対応状況の把握
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill iec61131インストール後、Claude Code で/iec61131を入力して読み込まれたか確認します。
詳細
IEC 61131-3 プログラミング言語リファレンス
概要
IEC 61131-3 では、PLC 向けに 5 つの相互に置き換え可能なプログラミング言語が定義されています。
| 言語 | 種類 | 最適な用途 | 状態 |
|---|---|---|---|
| LD(ラダー図) | グラフィカル | ディスクリートロジック、モーターのインターロック | 使用中 |
| FBD(ファンクションブロック図) | グラフィカル | 連続制御、PID、アナログ制御 | 使用中(DCS の主言語) |
| ST(ストラクチャードテキスト) | テキスト | 複雑な計算、アルゴリズム | 使用中(最も表現力が高い) |
| IL(インストラクションリスト) | テキスト | 低レベル、アセンブリー風 | 非推奨(第 3 版、2013 年) |
| SFC(シーケンシャルファンクションチャート) | グラフィカル | シーケンス、バッチ、ステートマシン | 使用中 |
プログラム構成単位(POU)
PROGRAM
タスク(スキャンサイクル)に関連付けられた、最上位の実行単位です。
FUNCTION_BLOCK(FB)
内部状態を保持する再利用可能なブロックです(呼び出し間でメモリを保持します)。モーター、PID、タイマー、カウンターに使用します。
FUNCTION_BLOCK MotorControl
VAR_INPUT
StartCmd : BOOL;
StopCmd : BOOL;
FbkRun : BOOL;
Interlock: BOOL;
END_VAR
VAR_OUTPUT
StartOut : BOOL;
Running : BOOL;
Fault : BOOL;
END_VAR
VAR
MonTimer : TON;
State : INT;
END_VAR
FUNCTION(FC)
ステートレスで、メモリを持ちません。同じ入力には常に同じ出力を返します。
データ型
基本型
BOOL、BYTE、WORD、DWORD、LWORD、SINT、INT、DINT、LINT、USINT、UINT、UDINT、ULINT、REAL、LREAL、TIME、DATE、TIME_OF_DAY、DATE_AND_TIME、STRING、WSTRING
派生型(ユーザー定義)
TYPE MotorData :
STRUCT
Running : BOOL;
Fault : BOOL;
Speed : REAL;
Runtime : TIME;
END_STRUCT
END_TYPE
変数のスコープ
| スコープ | キーワード | 説明 |
|---|---|---|
| ローカル | VAR | POU 内部 |
| 入力 | VAR_INPUT | 読み取り専用の入力パラメーター |
| 出力 | VAR_OUTPUT | 出力パラメーター |
| 入出力 | VAR_IN_OUT | 双方向パラメーター |
| グローバル | VAR_GLOBAL | すべての POU からアクセス可能 |
| 外部 | VAR_EXTERNAL | グローバル変数への参照 |
| 一時 | VAR_TEMP | 永続性なし |
| コンフィグ | VAR_CONFIG | ダウンロード時に設定 |
| 定数 | CONSTANT | 名前付き定数 |
言語の詳細
ST(ストラクチャードテキスト)- コード生成で最も重要
IF Motor.FbkRunning AND NOT Motor.Fault THEN
Motor.Status := RUNNING;
Motor.Runtime := Motor.Runtime + T#1s;
ELSIF Motor.Fault THEN
Motor.Status := FAULTED;
Motor.AlarmActive := TRUE;
END_IF;
CASE State OF
0: (* IDLE *)
IF StartCmd AND NOT Interlock THEN State := 1; END_IF;
1: (* STARTING *)
StartOut := TRUE;
MonTimer(IN:=TRUE, PT:=T#10s);
IF FbkRun THEN State := 2; END_IF;
IF MonTimer.Q THEN State := 99; END_IF;
2: (* RUNNING *)
IF StopCmd THEN State := 3; END_IF;
3: (* STOPPING *)
StartOut := FALSE;
99: (* FAULT *)
StartOut := FALSE;
Fault := TRUE;
END_CASE;
SFC(シーケンシャルファンクションチャート)
要素:ステップ、トランジション、アクション
- ステップにはアクションが含まれます(任意の言語で記述)
- トランジションはブール条件です
- アクション修飾子:N(非保持)、S(セット)、R(リセット)、L(時間制限付き)、D(遅延)、P(パルス)
- 並列分岐(同時実行)、代替分岐(選択実行)
FBD(ファンクションブロック図)
信号は左から右へ流れます。ブロックは関数を表します。ワイヤーで出力と入力を接続します。DCS の主言語です(PCS 7 CFC、DeltaV Control Studio、ABB Freelance)。
LD(ラダー図)
リレー論理に基づいています。接点(NO/NC)、コイル、タイマー、カウンターを使用します。左右に電源レールがあります。ラングは上から下へ並びます。
PLCopen 規格
| TC | トピック | 説明 |
|---|---|---|
| TC1 | 規格 | IEC 61131-3 準拠試験 |
| TC2 | モーション制御 | MC_MoveAbsolute、MC_Stop、MC_Home など |
| TC3 | ソフトウェアエンジニアリング | コーディングガイドライン |
| TC4 | 通信 | OPC UA マッピング |
| TC5 | 安全 | IEC 61508 拡張 |
| TC6 | XML 交換 | ベンダー中立のプログラム交換形式 |
PLCopen XML 形式(TC6)
<project xmlns="http://www.plcopen.org/xml/tc6_0201">
<types>
<pous>
<pou name="MotorControl" pouType="functionBlock">
<interface>
<inputVars>
<variable name="Start"><type><BOOL/></type></variable>
</inputVars>
<outputVars>
<variable name="Running"><type><BOOL/></type></variable>
</outputVars>
</interface>
<body>
<ST><xhtml></xhtml></ST>
</body>
</pou>
</pous>
</types>
</project>
対応製品:CODESYS、ABB AC500、Schneider、Beckhoff、B&R。 非対応製品:ABB Freelance(PRT を使用)、Emerson DeltaV(FHX を使用)、Siemens(SimaticML を使用)。
その他の交換形式
| 形式 | 規格 | 使用製品 |
|---|---|---|
| PLCopen XML | IEC 61131-10 | CODESYS、Schneider、Beckhoff |
| SimaticML | Siemens 独自仕様 | TIA Portal |
| AutomationML | IEC 62714 | Siemens PCS 7 V9 以降、マルチベンダー |
| FHX | Emerson 独自仕様 | DeltaV |
| PRT/CSV | ABB 独自仕様 | Freelance |
| DEXPI | ISO 15926 | P&ID 交換 |