Добрый день, уважаемые профессионалы и любители, подскажите пример объединения например: 4-ех 8-ми битовых масок в одну переменную 4 байта, на языке ST. Или где об этом можно почитать. Быстрый поиск не увенчался успехом. Заранее благодарю за помощь.
Вид для печати
Добрый день, уважаемые профессионалы и любители, подскажите пример объединения например: 4-ех 8-ми битовых масок в одну переменную 4 байта, на языке ST. Или где об этом можно почитать. Быстрый поиск не увенчался успехом. Заранее благодарю за помощь.
Можно, если сильно постараться, но зачем это надо? Не просматривается необходимости при работе с овеном..
или как вариантКод:VAR
mask1, mask2, mask3, mask4: BYTE;
mask: DWORD;
END_VAR
mask :=
SHL(mask1 + DWORD#0, 24) OR
SHL(mask2 + DWORD#0, 16) OR
SHL(mask3 + DWORD#0, 8) OR
mask4;
или такКод:mask := 0;
mask :=
SHL(mask1 + mask, 24) OR
SHL(mask2 + mask, 16) OR
SHL(mask3 + mask, 8) OR
mask4;
Код:mask :=
mask1 * 16#1000000 +
mask2 * 16#10000 +
mask3 * 16#100 +
mask4;
или такКод:VAR
b AT %MB0 : ARRAY[0..3] OF BYTE;
mask AT %MD0 : DWORD;
END_VAR
;
Всем спасибо, буду пробовать. А необходимость, это передавать с плк в скаду сразу 32 булевых значений одной переменной.
Для меня так нагляднее. Оперируем последним битом в 32-х битном слове.
Код:VAR
DWORD_tmp:DWORD;
b1:BOOL;
END_VAR
IF b1 THEN DWORD_tmp:=DWORD_tmp OR 2147483648; ELSE DWORD_tmp:=DWORD_tmp AND NOT 2147483648; END_IF;
krollcbas а для операции со всеми битами делать простыню кода ?
Уж лучше FB сделать со сдвигом регистров, тогда из параметров только номер бита и запись значения
Сплю с утра, не ругайтесь. В Oscat много чего есть, возможно и необходимое TC.
Столько примеров) столько споров. Вообще в идеале я хотел передавать из скады 2 2-ух байтовых маски для 2-ух 16Р, а из плк хотел передавать в скаду 4 байтовую переменную в которой склеены 2 модуля 8ДФ и +16 переменных из программ плк. Плохая затея?