方法 1 ( DIV, MOD )
第一個方式是「取餘數」:把被除數不斷除 2 ,直到商數是 0,過程中的餘數就是二進制的數值。
要注意的是,如果被除數是有號數的整數,會出現負值的話,就要先換算成無號數的整數。以 WORD 來說就是把 (-32768 到 32767) 的範圍,換算成 (0 到 65535)。
十進制是 35 換算成二進制是 2#0010 0011。
變數
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 狀態。
變數
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。