Вот сто лет тому назад выкладывал таймер с прямым и обратным отсчётом времени:
https://owen.ru/forum/showthread.php...l=1#post353353
Вы как будто только сегодня после обеда с луны упали, мне так кажется!
Вид для печати
Вот сто лет тому назад выкладывал таймер с прямым и обратным отсчётом времени:
https://owen.ru/forum/showthread.php...l=1#post353353
Вы как будто только сегодня после обеда с луны упали, мне так кажется!
Раз пошла такая пьянка то тоже выложу свое.
Принципиальным считаю имена. Одно имя - одно поведение для портаций туды-сюды
Лишних полей не люблю
Запись без уступов терпеть не могу
Код:function_block TP
//полный эквивалент Кодесис/Standart/TP с ТЕМ ЖЕ дебильным мерцанием при PT = 0 IN = TRUE
var_input //описание полей - см справка Кодесис
IN: bool;
PT: udint; //мс
end_var
var_output
Q : bool;
ET: udint; //мс
//++ к Кодесис/Standart/TP
REM: udint; //мс, оставшееся время работы
end_var
var
StartTime: time;
end_var
if Q then
ET := time_to_udint(get_time() - StartTime);
if ET >= PT then
ET := PT;
end_if
Q := ET < PT;
REM := PT - ET;
elsif not IN then
ET := 0;
REM := PT;
elsif ET = 0 then
StartTime := get_time();
Q := true;
end_if
end_function_block
Добрый день! Подскажите пожалуста, вот на ST выражениеЖ
if LE_PR AND PUSK OR PUSK_F_RIGT AND NOT L_KONC AND NOT STOP then
MOTOR :=TRUE;
PUSK_F_RIGT:=true;
ELSE
MOTOR :=false;
PUSK_F_RIGT:=false;
А это скрин сииммуляцциии его в лоджике
end_ifВложение 85485. вопрос _почему когда входные переменные:
LE_PR=1 PUSK=1 и L_KONC=1 выходная переменная MOTOR тоже равна 1 хотя условие and not L_KONC должно запрещать выходной переменной MOTOR true? Наверное я чегото с синтаксисом не так написал?
Влияет
OR PUSK_F_RIGT
Если написать например так
if (LE_PR AND PUSK OR PUSK_F_RIGT) AND NOT L_KONC AND NOT STOP then
то будет работать
спасибо, сейчас попробую. Только сейчас заметил что задал вопрос не втой ветке и продублировал его в ,,правильной,,
Да все верно, работает.БЛАГОДАРЮ
Операция and - это логическое умножение, or - сложение. И приоритеты у ниж такие же как в обычной математике. Т.е., в вашем случае получилось:
1 * 1 + 1 * 0 * 1 = 1 + 0 = 1. Так что выделяйте нужный порядок скобками
А еще, так, для справки, выражение not A and not B можно записать как not (A or B), ну и, также not A or not B = not (A and B)
Я б ещё добавил, что если юзается чисто бинарное выражение (if else) да ещё и и с присвоением по сути результата if, то сам if не нужен, можно просто присвоить
Мотор := логическое выражение //выше норм сказали
А второй переменной (здесь) присвоить Мотор
В кодесис можно было бы сделать сквозное присвоение
Мотор := вторая переменная := логическое выражение
Теперь,наверное, в правильной ветке задам вопрос. Напмсал ФБ на ST_проверил его в симуляторе все работает ошибок нетВложение 85487
Перенес его на основной ,,холст,, лоджика_плдключил необходимые переменные_ включаю симуляцию и две из четырех переменных привязаных к физичиским входам не активны в симуляторе (на скрине их отметил красными стрелками)
Вложение 85488. Если одну из этих ,, мертвых,, перееемеых ,,отвязываю,, от ФБ и соединяю с любым из не используемых выходов на ,,холсте,, она,,оживает,,.. Прикручиваю оббраатно - вхоод нова становиться не доступным . Может кто подскажет что с ними не так?
В качестве эксперимента отсоеденил от ФБ ,,мертвый,, *Пуск_П* и к нему прикрутил используемый в другом участке схемы физичиский вход *З_право* - вс нормально вход доступен в симуляции, значит дело не в написаном мною ФБ.Вложение 85489