ラダーロジック

ラダーロジックダイアグラムについて

ラダーロジックは、プログラマブルロジックコントローラー(PLC)——工場自動化、HVACシステム、コンベアライン、プロセス機器を世界中で動かす産業用コンピューター——の制御プログラムを記述するためのグラフィカルプログラミング言語です。名前はダイアグラムの外観に由来します:2本の垂直な電力レール(レール)を横の段(ラング)が接続し、各ラングは1つの条件→動作ルールを表します。電気技師と制御エンジニアがすでに知っていたリレー接点回路図に似ているため採用されました。

Schematex は、PLCプログラミング言語の国際標準である IEC 61131-3:2013 に従い、北米の産業現場で一般的なAllen-Bradley(Rockwell)タグアドレス名の命名規則を使用します。このページでは現在のパーサーが受け入れる内容を説明します。

ladder·§ IEC 61131-3
↘ preview
100%
Motor Start/Stop PLC ladder logic diagram with 4 rungs Motor Start/Stop Rung 001 — Seal-in circuit — Rung 002 — Mode select with Set/Reset — Rung 003 — Run timer — Rung 004 — Alarm on cycle complete — Start Button START_PB IN 1.0 Aux Contact MOTOR_AUX BIT 3.0 Stop Button STOP_PB IN 1.1 Motor Command MOTOR_CMD OUT 2.0 Auto Mode Button AUTO_HMIPB BIT 5.10 System Fault SYS_FAULT BIT 3.0 S System Auto Mode SYS_AUTO BIT 3.1 R System Manual Mode SYS_MANUAL BIT 3.2 MOTOR_CMD TON PT=5000 RUN_TMR Cycle Done CYCLE_DONE BIT 4.0 / Alarm Output ALARM_OUT OUT 2.5
UTF-8 · LF · 23 lines · 734 chars✓ parsed·4.5 ms·10.6 KB SVG

1. 最初のラダーダイアグラム

最小限の有用なラダープログラム:ラング1つ、コンタクト2つ、コイル1つ。

ladder·§ IEC 61131-3
↘ preview
100%
First Rung PLC ladder logic diagram with 1 rung First Rung Rung 001 — Start when button pressed, stop on fault — START_PB FAULT MOTOR_RUN
UTF-8 · LF · 5 lines · 110 chars✓ parsed·0.5 ms·3.3 KB SVG

使用方法の80%をカバーする4つのルール:

  1. ladder で始め、オプションで引用符付きのタイトルを続けます。
  2. ラングは独立した行の rung N "オプションのコメント": で始まります。末尾のコロンはオプションです。
  3. エレメントはラングの下にインデントして1行に1つ記述します——左から右がシリーズ(AND論理)です。
  4. parallel: / branch: ブロックはOR論理を導入します。各ブランチは独自のエレメントリストを持ちます。

コメントは独立した行で #//、またはMermaidスタイルの %% で始めることができます。


2. コンタクト

コンタクトは入力条件を表します——関連するビットがコンタクトタイプに一致するとき電力を通過させます。

タイプ名前電力を通過させる条件
XICExamine If Closedタグビット = 1(ノーマルオープン)
XIOExamine If Openタグビット = 0(ノーマルクローズド)
ONSOne-Shot Risingタグが0→1に遷移(立ち上がりエッジ、1スキャン)
OSFOne-Shot Fallingタグが1→0に遷移(立ち下がりエッジ、1スキャン)

構文:

XIC(tag)
XIC(tag, "address")
XIC(tag, "address", name="Description")
XIC(tag, address="address", name="Description")
  • tag — 必須。PLCタグ名(コンタクトシンボルの下に表示)。
  • "address" — オプションの2番目の位置引数。I/Oアドレス(例:"IN 1.0""BIT 3.1")。
  • name="…" — オプションのキーバリュー。人間が読める説明(シンボルの上に表示)。
ladder·§ IEC 61131-3
↘ preview
100%
Contact types PLC ladder logic diagram with 1 rung Contact types Rung 001 — All four contact types — Start Button START_PB IN 1.0 Emergency Stop NC E_STOP IN 1.5 One-Shot Rising PULSE_IN BIT 5.0 One-Shot Falling RESET_SIG BIT 5.1 Output Relay OUT_RLY OUT 2.0
UTF-8 · LF · 7 lines · 293 chars✓ parsed·1.9 ms·5.7 KB SVG

3. コイル

コイルは出力アクションを表します——ラングに電力フローがあるときタグビットに作用します。

タイプ名前タグビットへの効果
OTEOutput Energizeラングがtrueの間ビット = 1に設定;ラングがfalseになると0にクリア
OTLOutput Latchビット = 1に設定;ラングがfalseになっても保持(ラッチ)
OTUOutput Unlatchビット = 0にクリア;ラングがfalseになっても保持
OTNOutput Negateラングがtrueの間ビット = 0に設定;ラングがfalseのとき1に設定
RESResetRockwell / Allen-Bradleyカウンターまたはタイマーリセットコイル

構文: コンタクトと同一——OTE(tag)OTE(tag, "address")OTE(tag, "address", name="…")

OTLOTU はSet/Resetフリップフロップを構築するためにペアで使用されます。最後に書き込んだラングが優先されます。

ladder·§ IEC 61131-3
↘ preview
100%
Set-Reset latch PLC ladder logic diagram with 2 rungs Set-Reset latch Rung 001 — Set on start — Rung 002 — Reset on stop or fault — Start START_PB IN 1.0 S Motor Latch MOTOR_ON BIT 3.0 Stop STOP_PB IN 1.1 E-Stop E_STOP IN 1.5 R Motor Latch MOTOR_ON BIT 3.0
UTF-8 · LF · 11 lines · 319 chars✓ parsed·0.7 ms·5.5 KB SVG

4. ファンクションブロック

ファンクションブロックはタイマー、カウンター、数学演算、比較演算を実行します。ラング内にインラインで表示され、必須のタグ引数の後にキーワードパラメーターを持ちます。

4.1 タイマー

タイプ名前主要パラメーター
TONTimer On-DelayPT= プリセット時間(ミリ秒)
TOFFTimer Off-DelayPT= プリセット時間(ミリ秒)
TPTimer PulsePT= プリセット時間(ミリ秒)
TON(timer_tag, PT=5000)

タイマータグは経過時間を格納します。タイマーの Q ビット(完了出力)はダウンストリームのコンタクトでタグ名によってアクセスされます。

4.2 カウンター

タイプ名前主要パラメーター
CTUCount UpPV= プリセット値(整数)
CTDCount DownPV= プリセット値
CTUDCount Up/DownPV= プリセット値
CTU(cycle_counter, PV=100)

4.3 数学演算

タイプ演算
ADD加算
SUB減算
MUL乗算
DIV除算
MOV移動(コピー)
ADD(result_tag, IN1=setpoint, IN2=offset)
MOV(dest_tag, IN1=source_tag)

4.4 比較演算

タイプ意味
EQU等しい
NEQ等しくない
GRTより大きい
LESより小さい
GEQ以上
LEQ以下
EQU(compare_tag, IN1=speed_actual, IN2=speed_setpoint)
ladder·§ IEC 61131-3
↘ preview
100%
Timer and counter PLC ladder logic diagram with 3 rungs Timer and counter Rung 001 — Start run timer — Rung 002 — Count completed cycles — Rung 003 — Alarm when batch complete — Motor Running MOTOR_CMD BIT 3.0 TON PT=10000 RUN_TIMER Cycle Sensor CYCLE_SENSOR IN 2.0 CTU PV=500 PART_COUNT Count Done PART_COUNT Batch Complete Alarm BATCH_ALARM OUT 3.0
UTF-8 · LF · 10 lines · 359 chars✓ parsed·0.9 ms·5.6 KB SVG

5. 並列ブランチ

parallel: ブロックはOR論理を導入します——いずれかのブランチが導通するとラングに電力があります。各ブランチはその下にインデントされたエレメントを持つ branch: サブブロックです。

parallel:
  branch:
    XIC(LOCAL_START)
  branch:
    XIC(REMOTE_START)

parallel: 内のブランチは同時に評価されます。ブロックは parallel: の前のレベルにインデントが戻ると閉じます。

ルール:

  • parallel: はラング内に出現する必要があります。
  • branch:parallel: 内に出現する必要があります——単独で使用すると LadderParseError が発生します。
  • 各ブランチは1つ以上のエレメントを持ちます。
  • parallel: ブロックの後のエレメントはそれとシリーズ接続(AND論理)になります。
ladder·§ IEC 61131-3
↘ preview
100%
Parallel OR logic PLC ladder logic diagram with 1 rung Parallel OR logic Rung 001 — Start from either local or remote — Local Start LOCAL_START IN 1.0 Remote Start REMOTE_START BIT 5.2 Stop All STOP_ALL IN 1.5 Conveyor Run CONVEYOR OUT 2.0
UTF-8 · LF · 9 lines · 292 chars✓ parsed·0.5 ms·4.5 KB SVG

6. ラベルとコメント

  • タイトル: ladder "Motor Control" — 最初の行のみ、引用符付き文字列。
  • ラング番号: rung の後に必須の整数。
  • ラングコメント: ラング番号の後、オプションのコロンの前にオプションの引用符付き文字列:rung 3 "Run indicator": または rung 3 "Run indicator"
  • タグ: 括弧内の最初の引数——シンボルの下に表示。
  • アドレス: 2番目の位置引数(引用符付き):XIC(START_PB, "IN 1.0")
  • 名前: name="…" キーワード引数——シンボルの上に表示される人間が読める説明。
  • 行コメント: 行頭(先頭の空白の後)に #//、または %%。これらのマーカーは末尾コメントも開始します。

7. 予約語とエスケープ

行頭で予約(大文字・小文字を区別しない): ladderrungparallel:branch:

エレメント名はすべて大文字ASCII:XICXIOONSOSFOTEOTLOTUOTNTONTOFFTPCTUCTDCTUDADDSUBMULDIVMOVEQUNEQGRTLESGEQLEQ

タグID[A-Z][A-Z0-9_]* に一致する必要があります(パーサーはエレメント名プレフィックスとして [A-Z][A-Z0-9_]* をマッチします)。括弧内では小文字のタグも受け入れられます。

アドレスまたは名前引数の引用符付き文字列はダブルクォート "…" を使用する必要があります。


8. よくある間違い

記述した内容パーサーのメッセージ修正方法
rung 1(コロンなし)正しくパース末尾のコロンはオプション
ONF(TAG)LadderParseError: unknown element type "ONF"立ち下がりエッジのコンタクトは OSFONF ではない)
branch: のない parallel:空の並列ブロック——ラングにエレメントなしparallel: 内に少なくとも1つの branch: を追加する
parallel: より前の branch:LadderParseError: branch: without parallel:常に最初に parallel: を開く
OTE()——タグなしLadderParseError: element missing tagタグは必須:OTE(MY_TAG)
var StartBtn: bool(変数宣言)LadderParseError: invalid element syntax変数宣言なし——タグは直接使用
空のラング(rung N: の後にエレメントなし)LadderParseError: Rung N: empty rung各ラングに少なくとも1つのエレメントを追加する
TON(T1, T#5s)LadderParseError: invalid element syntax(T#は有効な数字でない)ミリ秒整数を使用:TON(T1, PT=5000)

9. 文法(EBNF)

document      = header NEWLINE rung+

header        = "ladder" ( WS quoted-string )? NEWLINE
quoted-string = '"' any-char-but-quote* '"'

rung          = "rung" WS integer ( WS quoted-string )? ":"? NEWLINE
                  element+

element       = contact-line
              | coil-line
              | fb-line
              | parallel-block

contact-line  = contact-type "(" tag ( "," arg )* ")" NEWLINE
contact-type  = "XIC" | "XIO" | "ONS" | "OSF"

coil-line     = coil-type "(" tag ( "," arg )* ")" NEWLINE
coil-type     = "OTE" | "OTL" | "OTU" | "OTN" | "RES"

fb-line       = fb-type "(" tag ( "," arg )* ")" NEWLINE
fb-type       = "TON" | "TOFF" | "TP"
              | "CTU" | "CTD" | "CTUD"
              | "ADD" | "SUB" | "MUL" | "DIV" | "MOV"
              | "EQU" | "NEQ" | "GRT" | "LES" | "GEQ" | "LEQ"

arg           = quoted-string             // 位置引数(アドレス)
              | key "=" quoted-string     // キーワード(例:name="…")
              | key "=" number            // キーワード(例:PT=5000)

parallel-block = INDENT≥2 "parallel:" NEWLINE
                   ( INDENT branch-block )+

branch-block   = "branch:" NEWLINE
                   ( INDENT element )+

tag           = [A-Za-z][A-Za-z0-9_]*
key           = [A-Za-z][A-Za-z0-9_]*
integer       = [0-9]+
number        = [0-9]+ ( "." [0-9]+ )?
comment       = ( "#" | "//" | "%%" ) any NEWLINE

権威ある情報源:src/diagrams/ladder/parser.ts。これがパーサーと異なる場合はパーサーが優先されます——Issueを立ててください。


10. 標準への準拠

Schematex のラダーロジックは、ラダーダイアグラム言語について IEC 61131-3:2013 パート3に従い、北米のPLC実務で一般的な Allen-Bradley(Rockwell)タグアドレス名 規則を使用します。

現在実装されているもの:

  • ✅ 4種類のコンタクト:XIC(NO)、XIO(NC)、ONS(立ち上がりエッジ)、OSF(立ち下がりエッジ)
  • ✅ 5種類のコイル:OTE(出力)、OTL(ラッチ/セット)、OTU(アンラッチ/リセット)、OTN(ネゲート)、RES(カウンター/タイマーリセット)
  • ✅ 3種類のタイマーファンクションブロック:TON、TOFF、TP(ミリ秒 PT= パラメーター付き)
  • ✅ 3種類のカウンターファンクションブロック:CTU、CTD、CTUD(整数 PV= パラメーター付き)
  • ✅ 数学ファンクションブロック:ADD、SUB、MUL、DIV、MOV
  • ✅ 比較ファンクションブロック:EQU、NEQ、GRT、LES、GEQ、LEQ
  • ✅ OR論理のための並列 / ブランチブロック
  • ✅ Allen-Bradley Studio 5000 規則に従ったタグ、アドレス、名前のアノテーション
  • ⏳ リテンティブタイマー(RTO)——標準に含まれるが、まだパーサーにない
  • ⏳ ジャンプ(JMP)/ ラベル(LBL)命令
  • ⏳ マスターコントロールリセット(MCR)ゾーン
  • ⏳ 即時I/O命令(IIN、IOT)
  • ⏳ ラング内に埋め込まれたStructured TextまたはFunction Block Diagramエレメント

参考文献:

  • IEC 61131-3:2013 — Programmable controllers, Part 3: Programming languages
  • NEMA ICS 1-2009 — General Standards for Industrial Control and Systems
  • Rockwell Automation Studio 5000 Logix Designer — Ladder Diagram Programming Manual

11. 関連するサンプル

ladder·§ IEC 61131-3
Motor Start/Stop PLC ladder logic diagram with 1 rung Motor Start/Stop Rung 001 — Seal-in circuit — Start Button START_PB IN 1.0 Aux Contact MOTOR_AUX BIT 3.0 Stop Button STOP_PB IN 1.1 Motor Command MOTOR_CMD OUT 2.0
Motor start/stop seal-in circuit
Classic three-wire motor start/stop seal-in circuit in IEC 61131-3 ladder logic — the foundational pattern taught in every PLC certification course.
industrial & process
ladder·§ IEC 61131-3
System Mode Selection PLC ladder logic diagram with 2 rungs System Mode Selection Rung 001 — Set system Auto mode, reset Manual — Rung 002 — Set Manual, reset Auto (with Home seal-in) — Auto Mode HMI Pushbutton AUTO_HMIPB BIT 5.10 Manual Mode HMI Pushbutton MANL_HMIPB BIT 5.11 System Fault SYS_FAULT BIT 3.0 S System Auto Mode SYS_AUTO BIT 3.1 R System Manual Mode SYS_MANUAL BIT 3.2 Manual Mode HMI Pushbutton MANL_HMIPB BIT 5.11 System Home Command SYS_HOMECMD BIT 3.5 Auto Mode HMI Pushbutton AUTO_HMIPB BIT 5.10 System Fault SYS_FAULT BIT 3.0 S System Manual Mode SYS_MANUAL BIT 3.2 R System Auto Mode SYS_AUTO BIT 3.1
System mode selection (Set/Reset)
IEC 61131-3 ladder logic for HMI-driven Auto/Manual mode selection using Set/Reset (OTL/OTU) coils with system fault interlocks.
industrial & process

12. ロードマップ

計画中——まだパース不可。 今日生成された DSL ではこれらを使用しないでください。パーサーが拒否または無視します。

  • リテンティブタイマーオン(RTO) — 電源損失後も経過時間を保持するタイマー。別個のリセットコンタクトが必要。
  • ジャンプ(JMP)/ ラベル(LBL) — 条件付きでロジックをスキップするためにラベル付きラングへ分岐;大規模プログラムのパフォーマンスに使用。
  • マスターコントロールリセット(MCR)ゾーン — MCR入力がfalseのとき非リテンティブ出力をすべてオフにするブラケットゾーン。
  • ラング内ストラクチャードテキスト — インライン式評価(例:CALC(result = a * b + c))。
  • 即時I/O(IIN / IOT) — 時間クリティカルな制御のためにプログラムの途中でI/Oスキャンを強制。

これらが早期に必要な場合はGitHubのIssueでトラックしてください。

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.