Просмотр полной версии : Цикл побитового опроса переменной
Добрый день уважаемые! Подскажите пожалуйста, как сделать цикл побитового опроса переменной? Где у меня ошибка?
44051
44052
Евгений Кислов
13.08.2019, 11:15
Добрый день.
Побитовый доступ (через точку) возможен только через константы.
Посмотрите библиотеку Util - в ней есть ФБ Extract и Putbit - они помогут в вашем случае.
Добрый день.
Побитовый доступ (через точку) возможен только через константы.
Посмотрите библиотеку Util - в ней есть ФБ Extract и Putbit - они помогут в вашем случае.
Спасибо большое
вместо IF crash1.i = TRUE THEN используйте IF (SHR(crash1,i) AND 16#1) > 0 THEN
Я обычно делаю вот таким образом:
44053
Переменная Cr_string будет иметь значение самого нижнего по программе Crash.xx=TRUE. Сброс происходит автоматически в начале каждого цикла.
Я обычно делаю вот таким образом:
44053
Переменная Cr_string будет иметь значение самого нижнего по программе Crash.xx=TRUE. Сброс происходит автоматически в начале каждого цикла.
Насколько я понимаю это язык FBD? А на ST можно перевести?)
вместо IF crash1.i = TRUE THEN используйте IF (SHR(crash1,i) AND 16#1) > 0 THEN
Спасибо, правда я не разобрался еще что такое SHR() и 16#1, но я догадываюсь как это работает. Хороший способ, интересный, буду изучать.
Подскажите тогда еще такой вопрос, возможно ли с помощью одной переменной STRING поочередно выводить разные данные в окно? как у меня в примере переменная cr_string может принимать несколько значений подряд, и хотелось бы что бы они выводились поочередно
Спасибо, правда я не разобрался еще что такое SHR() и 16#1, но я догадываюсь как это работает. Хороший способ, интересный, буду изучать.
Подскажите тогда еще такой вопрос, возможно ли с помощью одной переменной STRING поочередно выводить разные данные в окно? как у меня в примере переменная cr_string может принимать несколько значений подряд, и хотелось бы что бы они выводились поочередно
можно, только код нужно менять, на что то типа этого
IF t_TON.Q THEN
IF (SHR(crash1,COUNT) AND 16#1) > 0 THEN
// TODO
END_IF;
COUNT := (COUNT + 1) MOD 16;
END_IF;
t_TON(IN:=NOT t_TON.Q, PT:=T#5s);
не проверял, все по памяти, возможны ошибки
Avdey
Насколько я понимаю это язык FBD? А на ST можно перевести?)
1. Это язык LD.
2. Перевести можно, только смысл? Букав больше, наглядности меньше.
Cr_string:="Отсутствуют";
IF Crash.0 THEN Cr_string:="Потеря основного питания"; END_IF;
IF Crash.3 THEN Cr_string:="Авария вентилятора притока"; END_IF;
IF Crash.4 THEN Cr_string:="Авария вентилятора вытяжки"; END_IF;
Кроме того, в LD проще строить какую-нибудь глушилку аварии\события в случае надобности.
возможно ли с помощью одной переменной STRING поочередно выводить разные данные в окно? как у меня в примере переменная cr_string может принимать несколько значений подряд, и хотелось бы что бы они выводились поочередно
В принципе для данной задачи надо копать в сторону Ararm Manager.
Avdey
1. Это язык LD.
2. Перевести можно, только смысл? Букав больше, наглядности меньше.
Cr_string:="Отсутствуют";
IF Crash.0 THEN Cr_string:="Потеря основного питания"; END_IF;
IF Crash.3 THEN Cr_string:="Авария вентилятора притока"; END_IF;
IF Crash.4 THEN Cr_string:="Авария вентилятора вытяжки"; END_IF;
Наглядность LD разбивается о мое видение языка программирования, т.к. начинал я с самоизучения Паскаля лет 17-18 назад, потом был Ардуино ИДЕ года 4 назад, а вот теперь CodeSys. Никогда не программировал на блоках и разбираться честно говоря не охота, может и зря
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot