INT 轉 BIT — 以台達 DVP PLC 為例 (LD)

Yu
4 min readApr 23, 2022

--

WORD 拆分 BIT

有時候會遇到要把 1 個 INT 轉成 16 個 BIT 的狀況。以下介紹二種 LD 的寫法。

方法 1 ( DIV, MOD )

第一個方式是「取餘數」:把被除數不斷除 2 ,直到商數是 0,過程中的餘數就是二進制的數值。

要注意的是,如果被除數是有號數的整數,會出現負值的話,就要先換算成無號數的整數。以 WORD 來說就是把 (-32768 到 32767) 的範圍,換算成 (0 到 65535)。

十進制是 35 換算成二進制是 2#0010 0011。

10 進制 轉 2 進制

變數

START : BOOL,啟動旗標。
INTEGER : WORD,輸入的 INT。
NUM : WORD,被除數。
Q : ARRAY [2] OF WORD,整數型的陣列變數。[0] 是商數,[1] 是餘數。
R : ARRAY [16] OF WORD,整數型的陣列變數。
BIT : ARRAY [16] OF BOOL,布林型的陣列變數,輸出的 BOOL。

變數表

程式說明

啟動旗標 ON 時,把 INT 寫到 NUM。

寫入數值

用 DIV (除法) 指令。NUM 除 2,把餘數和商放到 Q ,重複 16 次。

取餘數,記錄商數

轉換資料類型 Mapping 16 個 WORD & BIT

轉換資料類型

方法 2 ( AND )

第二個方式是「AND」:這裡的 AND 不是算術運算子的加法,是布林邏輯運算子的 AND。AND 不只可以用在 BOOL 變數上,也可以用在 BYTE 和 WORD 變數上。

對小型 PLC 來說,1 個 INT 等同是 1 個 WORD。不管是十進制、十六進制、有號數整數、無號數整數,差別只是在顯示/閱讀上的不同,本質上都是由二進制的 0 和 1 組成,所以可以透過 2 個 WORD 做 AND 的運算後的結果來拆分 BIT。

優點是程式簡潔,除了可以不受正負數的限制,不用轉成正整數就能直接運算之外,也可以用在只想知道某個特定的 BIT 狀態。

布林邏輯運算子 AND

變數

REQ : BOOL,啟動旗標。
I_INT : WORD,輸入的 INT。
REM : ARRAY [16] OF WORD,整數型的陣列變數。
Q_BIT : ARRAY [16] OF BOOL,布林型的陣列變數,輸出的 BOOL。

程式說明

在 DVP PLC 裡 WORD 型的 AND 運算是 WAND 指令。
例如想知道 I_INT 的 BIT10 是 ON 或是 OFF,可以寫 : WAND( I_INT, 2#0000010000000000, REM[10] )
運算後的結果放在 REM[10],如果 (REM[10]等於 0) 的話,BIT10 是 OFF。如果 (REM[10] 不等於 0) 的話,BIT10 是 ON。

WAND 布林運算

--

--

No responses yet