Copyright: ISaGRAF V3.4


 LD階梯圖語言

階梯圖 (Ladder Diagram，LD) 是布林式子的圖形表示法，它將接點 (contact，輸入參數) 和線圈 (coil，輸出結果) 結合在一起使用。LD語言藉著將圖形符號放入程式圖中做測試敘述和布林資料的修改。就像畫一張電力接點圖 (electric contact diagram) 一樣，階梯圖是由LD圖形符號組織起來的。LD階梯圖的左邊和右邊都與垂直電力軌 (power rail) 連接。

電力軌和連接線

多連接

基本的LD接點和線圈

跳回 (RETURN) 敘述

跳躍 (Jumps) 和標籤 (labels)

在LD中使用方塊

LD階梯圖的基本圖形元件如：


電力軌和連接線

LD階梯圖的左右邊界是垂直線，名稱分別是左電力軌和右電力軌。

LD階梯圖的圖形符號是以連接線與電力軌或其他符號連接起來。連接線有水平和垂直兩種。

每一線段都具有布林狀態，值為真 (TRUE) 或假 (FALSE)。直接連結在一起的所有線段的布林狀態是一樣的。連接至左垂直電力軌的任何水平線的狀態是真 (TRUE)。


多連接

水平連接線的左端和右端有相同的布林狀態。將水平和垂直連接線結合在一起使用就可以製造出多連接。多連接端點的布林狀態遵循邏輯規則。

左多連接是一條垂直線的左邊連接了不止一條的水平線，而且右邊連接了一條水平線。則此多連接右端的布林狀態是左端所有布林狀態的邏輯或 (LOGICAL OR) 運算值。

(* 左多連接範例 *)

(* 右端狀態是 (v1 OR v2 OR v3) *)

右多連接是一條垂直線的左邊連接了一條水平線，而且右邊連接了不止一條的水平線。則此多連接左端的布林狀態會傳送給每一個右端。

(* 右多連接範例 *)

(* ST相等式：*)

output1 := input1;

output2 := input1;

左右多連接是一條垂直線的左邊連接了不止一條的水平線，而且右邊也連接了不止一條的水平線。則此多連接的每一個右端的布林狀態是左端所有布林狀態的邏輯或 (LOGICAL OR) 運算值。

(* 左右多連接範例 *)

(* ST相等式：*)

output1 := input1 OR input2;

output2 := input1 OR input2;

output3 := input1 OR input2;


基本的LD接點和線圈

對於輸入接點，可以使用下列的符號：

直接接點 (Direct contact)

反相接點 (Inverted contact)

上升邊緣偵測接點 (Contacts with rising edge detection)

下降邊緣偵測接點 (Contacts with falling edge detection)

對於輸出線圈，可以使用下列的符號：

直接線圈 (Direct coil)

反相線圈 (Inverted coil)

設定線圈 (SET coil)

重置線圈 (RESET coil)

上升邊緣偵測線圈 (Coils with rising edge detection)

下降邊緣偵測線圈 (Coils with falling edge detection)

變數名稱會標示在任何圖形符號的上面：


直接接點

直接接點可以將連接線的狀態與布林變數值做布林運算。

接點的右連接線狀態是左連接線狀態與接點上布林變數值的邏輯且 (LOGICAL AND)。

(* 使用直接接點的範例 *)

(* ST相等式：*)

output1 := input1 AND input2;


反相接點

反相接點可以將連接線的狀態與布林變數值的布林反相做布林運算。

接點的右連接線狀態是左連接線狀態與接點上布林變數值的布林反相的邏輯且 (LOGICAL AND)。

(* 使用反相接點的範例 *)

(* ST相等式：*)

output1 := NOT (input1) AND NOT (input2);


上升邊緣偵測接點

此接點 (正的) 可以將連接線的狀態與布林變數的上升邊緣值做布林運算。

當接點左邊連接線的狀態是真 (TRUE)，而且接點上的布林變數狀態正好由假 (FALSE) 變成真 (TRUE) 時，接點右邊連接線的狀態就設定成真 (TRUE)。在任何其他的情況下，接點右邊連接線的狀態會重新設定成假 (FALSE)。

(* 使用上升邊緣偵測接點的範例 *)

(* ST相等式：*)

output1 := input1 AND (input2 AND NOT (input2prev));

(* input2prev是input2在前一個週期時的值 *)


下降邊緣偵測接點

此接點 (負的) 可以將連接線的狀態與布林變數的下降邊緣值做布林運算。

當接點左邊連接線的狀態是真 (TRUE)，而且接點上的布林變數狀態正好由真 (TRUE) 變成假 (FALSE) 時，接點右邊連接線的狀態就設定成真 (TRUE)。在任何其他的情況下，接點右邊連接線的狀態會重新設定成假 (FALSE)。

(* 使用下降邊緣接點的範例 *)

(* ST相等式：*)

output1 := input1 AND (NOT (input2) AND input2prev);

(* input2prev is the value of input2 at the previous cycle *)


直接線圈

直接線圈可以將連接線的布林狀態做布林輸出。

線圈上的變數值是左連接線的布林狀態。左連接線的狀態會傳送給右連接線。右連接線可以連接至右垂直電力軌。

線圈上的變數必須是輸出變數或內部變數。

線圈上的變數名稱可以是程式的名稱 (只適用於副程式)。這就相當於將副程式的回傳值指定給變數。

(* 使用直接線圈的範例 *)

(* ST相等式：*)

output1 := input1;

output2 := input1;


反相線圈

反相線圈會根據連接線狀態的布林反相做布林輸出。

線圈上的變數值是左連接線狀態的布林反相。左連接線的狀態會傳送給右連接線。右連接線可以連接至右垂直電力軌。

線圈上的變數必須是輸出變數或內部變數。

線圈上的變數名稱可以是程式的名稱 (只適用於副程式)，這就相當於將副程式的回傳值指定給變數。

(* 使用反相線圈的範例 *)

(* ST相等式：*)

output1 := NOT (input1);

output2 := input1;


設定線圈

"設定" 線圈可以將連接線的布林狀態做布林輸出。

當左連接線的布林狀態變成真 (TRUE) 時，線圈上的變數值就設定成真 (TRUE)。在遇到 "重置" 線圈的反相規則之前，此輸出變數會一直維持這個數值。左連接線的狀態會傳送給右連接線。右連接線可以連接至右垂直電力軌。

線圈上的變數必須是輸出變數或內部變數。

(* 使用 "設定" 和 "重置" 線圈的範例 *)

(* ST相等式：*)

IF input1 THEN

   output1 := TRUE;

END_IF;

IF input2 THEN

   output1 := FALSE;

END_IF;


重置線圈

"重置" 線圈可以將連接線的布林狀態做布林輸出。

當左連接線的布林狀態變成真 (TRUE) 時，線圈上的變數值就重新設定成假 (FALSE)。在遇到 "設定" 線圈的反相規則之前，此輸出變數會一直維持這個數值。左連接線的狀態會傳送給右連接線。右連接線可以連接至右垂直電力軌。

線圈上的變數必須是輸出變數或內部變數。

(* 使用 "設定" 和 "重置" 線圈的範例 *)

(* ST相等式：*)

IF input1 THEN

   output1 := TRUE;

END_IF;

IF input2 THEN

   output1 := FALSE;

END_IF;


上升邊緣偵測線圈

"正" 線圈可以將連接線的布林狀態做布林輸出。這種型態的線圈只能在Quick LD編輯器中使用。

當左連接線的布林狀態由假 (FALSE) 變成真 (TRUE) 時，線圈上的變數值就設定成真 (TRUE)。在所有其他的情況時，線圈上的變數值會重新設定成假 (FALSE)。左連接線的狀態會傳送給右連接線。右連接線可以連接至右垂直電力軌。

線圈上的變數必須是輸出變數或內部變數。

(* 使用 "正" 線圈的範例 *)

(* ST相等式：*)

IF (input1 and NOT(input1prev)) THEN

   output1 := TRUE;

ELSE

   output1 := FALSE;

END_IF;

(* input1prev是input1在前一個週期時的值 *)


下降邊緣偵測線圈

"負" 線圈可以將連接線的布林狀態做布林輸出。這種型態的線圈只能在Quick LD編輯器中使用。

當左連接線的布林狀態由真 (TRUE) 變成假 (FALSE) 時，線圈上的變數值就設定成真 (TRUE)。在所有其他的情況時，線圈上的變數值會重新設定成假 (FALSE)。左連接線的狀態會傳送給右連接線。右連接線可以連接至右垂直電力軌。

線圈上的布林變數必須是輸出變數或內部變數。

(* 使用 "負" 線圈的範例 *)

(* ST相等式：*)

IF (NOT(input1) and input1prev) THEN

   output1 := TRUE;

ELSE

   output1 := FALSE;

END_IF;

(* input1prev是input1在前一個週期時的值 *)


跳回 (RETURN) 敘述

RETURN標籤可以做為程式有條件終止時的輸出。RETURN符號的右邊不可以連接任何東西。

假如RETURN符號的左連接線布林狀態為真 (TRUE) 時，程式就會直接結束，不會再執行程式其他未執行的部分。

注意：當LD程式是一個副程式時，必須有一個輸出線圈的變數名稱與副程式名稱相同，以作為此副程式的回傳值 (傳給呼叫程式)。

(* 使用RETURN符號的範例 *)

(* ST相等式：*)

If Not (manual_mode) Then RETURN; End_if;

result := (input1 OR input3) AND input2;


跳躍 (Jumps) 和標籤 (labels)

標籤、條件和非條件跳躍符號，可以用來控制階梯圖的執行。標籤和跳躍符號的的右側不可以連接任何東西。使用下面的符號：

>>LAB	跳躍至標籤為 "LAB" 的地方

LAB:	名稱為 "LAB" 的標籤的定義

假如跳躍符號左連接線的布林狀態為真 (TRUE) 時，程式就會跳躍至相對應的標籤程式去執行。

(* 使用跳躍和標籤符號的範例 *)

(* IL相等式：*)

ldn	manual_mode

jmpc	other

ld	input1

st	result

jmp	END

OTHER:	ld	input2

st	result

END:	(* 程式結束 *)


在LD中使用方塊

使用Quick LD編輯器時，使用者必須將函式方塊連接在布林狀態的連接線上。事實上，函式方塊中可以是運算、功能方塊或函式。假如在階梯圖中插入沒有布林輸入和 (或) 布林輸出的方塊時，編輯器會自動為方塊加上EN、ENO參數。假如使用者使用的是FBD或LD編輯器，而且連接至方塊的變數是方塊所需的型態，那麼編輯器就不會在方塊上加上EN和ENO參數。

"EN" 輸入

"ENO" 輸出

"EN" 和 "ENO" 參數


"EN" 輸入

在運算、函式或功能方塊中，它的第一筆輸入不具有布林資料型態。因為第一筆輸入總是必須連接在階梯圖的導軌上，所以編輯器就會自動將另一個輸入插在方塊輸入的第一個位置，名稱為 "EN"。只有當輸入值EN是真 (TRUE) 時，方塊中的運算才會執行。下面是一個比較大小的運算和等價的ST程式例子：


"ENO" 輸出

在一些運算、函式或功能方塊中，它的第一筆輸出不具有布林資料型態。因為第一筆輸出總是必須連接在階梯圖的導軌上，所以編輯器會自動將另一個輸出插在方塊輸出的第一個位置，名稱為 "ENO"。輸出值ENO總是與方塊的第一筆輸入值有相同狀態。下面是使用平均值功能方塊的範例，和等價的ST程式：


"EN" 和 "ENO" 參數

在某些情形，同時需要使用EN和ENO。下面是一個算數運算的範例，和等價的ST程式：