большое спасибо
большое спасибо
Добрый день!
Уважаемые программисты, нет реле под рукой, такая конструкция жизнеспособна?
function_block R_c //Реверсивный счётчик.
var_input //объявление входных переменных
U : bool; //входная переменная с типом данных bool
D : bool; //входная переменная с типом данных bool
Res : bool; //входная переменная с типом данных bool
N : udint; //входная переменная для значения счетчика после сброса
end_var
var_output //объявление выходных переменных
Q : udint; //выходная переменная с типом данных udint
end_var
var //объявление локальных переменных
CounterValue : udint; //переменная для текущего значения счетчика
RTrig : bool; //переменная для определения переднего фронта на входе «U»
RTrig1 : bool; //переменная для определения переднего фронта на входе «D»
end_var
if Res then
CounterValue := N;
end_if
while U and not RTrig and not Res and CounterValue <100 do
CounterValue := (CounterValue + 1);
RTrig := U;
end_while
if not U and RTrig then
RTrig := false;
end_if
while D and not RTrig1 and not Res and CounterValue > 0 do
CounterValue := (CounterValue - 1);
RTrig1 := D;
end_while
if not D and RTrig1 then
RTrig1 := false;
end_if
Q := CounterValue ;
end_function_block
Добрый!
А чем Вас не устраивает стандартный?
Owen.jpg
А так, в принципе, - да!
Но я бы сделал так:
Код:function_block CTN var_input U, D, R : bool; N : udint; end_var var_output Q : udint; end_var var UTrig, DTrig : SYS.RTRIG; init : bool; end_var UTrig(I := U); DTrig(I := D); if UTrig.Q and Q < 100 then Q := Q + 1; end_if if DTrig.Q and Q > 0 then Q := Q - 1; end_if if R or not init then Q := N; end_if init := true; end_function_block
Последний раз редактировалось EFrol; 04.12.2024 в 12:55.
Спасибо! оператор WHILE интересовал. Как факт того, что в блоке счётчика два цикла, а переменная CounterValue одна.
Это очень здорово. Все "задышало" по-лучше. Скажите, логические операторы для целых типов в дальнейшем возможно cделать в ST? Пока только для типа bool. Иногда просто необходимо разные маски выделить, в FBD это без проблем, а в ST такое невозможно. Или ошибаюсь? Поправьте
Борьба за отечественного производителя - борьба за страну!
Логические операторы пока только для BOOL, обещали сделать для целых, но никто не запрещал написать функцию самому. Тут есть пример Валенка,
Переключение бит_3++.https://owen.ru/forum/showthread.php...&page=382#3814
Распаковка и упаковка бит в маску через точку, поддержаны уже сейчас.
Последний раз редактировалось kondor3000; 22.12.2024 в 10:31.
Вот, Валенок в свое время вдохновил