PDA

Просмотр полной версии : как упаковать 16 bool в один word



Yerabdi
26.10.2020, 05:10
Здравствуйте всем, как упаковать 16 bool в один word. Я хочу передать scad-у одним word все 16 bool

жекон
26.10.2020, 05:35
word.0:=bool0;word.1:=bool1 и т.д и т.п

Sulfur
26.10.2020, 11:40
Yerabdi
Импортируйте в свой проект этот ФБ:

Yerabdi
26.10.2020, 12:39
Yerabdi
Импортируйте в свой проект этот ФБ:
Спасибо большое, не думал что на LD можно такое написать. Всю голову ломал на ST как сдвиг регистрами сделать

petera
26.10.2020, 13:55
...Всю голову ломал на ST как сдвиг регистрами сделать


FUNCTION PACK_W2 : WORD
VAR_INPUT
B0: BOOL;
B1: BOOL;
B2: BOOL;
B3: BOOL;
B4: BOOL;
B5: BOOL;
B6: BOOL;
B7: BOOL;
B8: BOOL;
B9: BOOL;
B10: BOOL;
B11: BOOL;
B12: BOOL;
B13: BOOL;
B14: BOOL;
B15: BOOL;
END_VAR
VAR
BYTE_0: BYTE;
BYTE_1: BYTE;
END_VAR
(*Тело функции*)
BYTE_0:=SHL(SHL(SHL(SHL(SHL(SHL(SHL(BOOL_TO_BYTE(B 7),1) OR BOOL_TO_BYTE(B6),1) OR BOOL_TO_BYTE(B5),1) OR BOOL_TO_BYTE(B4),1)
OR BOOL_TO_BYTE(B3),1) OR BOOL_TO_BYTE(B2),1) OR BOOL_TO_BYTE(B1),1) OR BOOL_TO_BYTE(B0);
BYTE_1:=SHL(SHL(SHL(SHL(SHL(SHL(SHL(BOOL_TO_BYTE(B 15),1) OR BOOL_TO_BYTE(B14),1) OR BOOL_TO_BYTE(B13),1) OR BOOL_TO_BYTE(B12),1)
OR BOOL_TO_BYTE(B11),1) OR BOOL_TO_BYTE(B10),1) OR BOOL_TO_BYTE(B9),1) OR BOOL_TO_BYTE(B8);
PACK_W2:=SHL(BYTE_TO_WORD(BYTE_1),8) OR BYTE_TO_WORD(BYTE_0);

Sulfur
26.10.2020, 13:56
LD вообще занятная штука. Некоторые вещи в нем делаются легче, элегантнее и прочем чем в ST. Особенно логические зависимости. А вот разную математику мне писать удобнее на ST.