Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Здраствуйте. Прошу помощи: по дискретному сигналу(0 в 1) необходимо произвести вычитание двух чисел (А и В) с плавающей запятой. Далее по следующему дискретномому сигналу из разницы (А-В) вычесть В и т.д.
Если каждую операцию надо делать разово, то дискреты заводить на р триггеры и операцию присваивания от выражения выполнять по выходу этого триггера...ов
Наверное, так
Безымянный.png
Проблема в том, что А и В это переменные. Решил сделать ФБ на ST:
function_block Freq_Proxy
var_input
stp:bool;
ENA:bool;
START:real;
RAZN:real;
end_var
var_output
Q:real;
end_var
if ENA = true then
Q := START;
else
if stp= true then
Q := Q - RAZN;
else
end_if
end_if
end_function_block
Работает как надо, но за время имульса по входу stp разность производится несколько раз.
Вход на вход ENA однократно подается импульс в начале цикла.
Если честно, какая то шляпа... Сказали А и В, а сами что-то замудрили. Переведите то что вам предложили с ФБР на СТ тогда. А тут у вас не триггер, а условие, которое вы ещё и не сбрасываете потом. Да и первое условие тоже не сбросится если, то что будет? Мне ваш код непонятно, вы в условии не так писали.
Зуб болит, поэтому от нечего делать напишу код по вашему из... В голове это выглядит так:
Но тут разные дискретные сигналы... Первоначально подумал что это не один сигнал...Код:If firstbit then firstbit:=false; nextoper:=true; Result:=A-B; end if If nextoper and secondbit then nextoper:=false; secondbit:=false; Result:=Result-B end if
Для одного:
Код:If bit then bit:=false; Result:=Result-B end if
Последний раз редактировалось МихаилГл; 18.04.2024 в 23:30.