PDA

Просмотр полной версии : Цикл побитового опроса переменной



Avdey
13.08.2019, 11:13
Добрый день уважаемые! Подскажите пожалуйста, как сделать цикл побитового опроса переменной? Где у меня ошибка?
44051
44052

Евгений Кислов
13.08.2019, 11:15
Добрый день.
Побитовый доступ (через точку) возможен только через константы.
Посмотрите библиотеку Util - в ней есть ФБ Extract и Putbit - они помогут в вашем случае.

Avdey
13.08.2019, 11:20
Добрый день.
Побитовый доступ (через точку) возможен только через константы.
Посмотрите библиотеку Util - в ней есть ФБ Extract и Putbit - они помогут в вашем случае.

Спасибо большое

capzap
13.08.2019, 11:20
вместо IF crash1.i = TRUE THEN используйте IF (SHR(crash1,i) AND 16#1) > 0 THEN

Sulfur
13.08.2019, 11:57
Я обычно делаю вот таким образом:

44053

Переменная Cr_string будет иметь значение самого нижнего по программе Crash.xx=TRUE. Сброс происходит автоматически в начале каждого цикла.

Avdey
13.08.2019, 12:12
Я обычно делаю вот таким образом:

44053

Переменная Cr_string будет иметь значение самого нижнего по программе Crash.xx=TRUE. Сброс происходит автоматически в начале каждого цикла.

Насколько я понимаю это язык FBD? А на ST можно перевести?)

Avdey
13.08.2019, 12:18
вместо IF crash1.i = TRUE THEN используйте IF (SHR(crash1,i) AND 16#1) > 0 THEN

Спасибо, правда я не разобрался еще что такое SHR() и 16#1, но я догадываюсь как это работает. Хороший способ, интересный, буду изучать.

Подскажите тогда еще такой вопрос, возможно ли с помощью одной переменной STRING поочередно выводить разные данные в окно? как у меня в примере переменная cr_string может принимать несколько значений подряд, и хотелось бы что бы они выводились поочередно

capzap
13.08.2019, 12:36
Спасибо, правда я не разобрался еще что такое 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);
не проверял, все по памяти, возможны ошибки

Sulfur
13.08.2019, 12:47
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
13.08.2019, 13:32
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. Никогда не программировал на блоках и разбираться честно говоря не охота, может и зря