Сообщение от
Валенок
А можно вот такой анонимный блок ?
IF TON(IN := NOT TON.Q, PT := T#0s, ET => et).Q and TON(IN := NOT TON.Q, PT := T#0s, ET => et).Q then
Жесть какая.
На самом деле, нельзя.
Синтаксически у меня IF TON(...) это обращение к блоку TON. И TON это не название переменной, а именно ссылка на функциональный блок TON.
Т.е. конструкцию "NOT TON.Q" просто физически не получится ввести в том смысле, что TON это не переменная.
Если хочется "пощупать", могу либо сборку среды выложить, либо давайте примеров -- ещё примеров/картинок запишу.
Возможно, у таких "анонимных" FB блоков стоит сделать возможность "указать имя".
Но я специально делать не стал, чтобы анонимные FB использовались только для простых случаев, и чтобы не возникало разночтений "в каком порядке будет вызываться".
Другое дело, что можно сделать такую конструкцию. Т.е. когда вводим "второй" TON, то автоматически появляются скобки после TON и убрать их невозможно. Либо убирать второй TON целиком, либо указывать параметры.
Код:
IF TON(IN := NOT(TON(IN := v1, PT := T#4s).Q), PT := T#3s, ET => et).Q THEN
complex.cstm.bingo := TRUE;
END_IF;
И сейчас она раскрылась в такое:
Код:
tmpTON_0 : TON;
tmpTON_1 : TON;
END_VAR
tmpTON_1(IN := v1, PT := T#4s);
tmpTON_0(IN := NOT tmpTON_1.Q, PT := T#3s, ET => et);
IF tmpTON_0.Q THEN
complex.cstm.bingo := TRUE;
END_IF;
С точки зрения ST, вложенные FB выглядят, конечно, стрёмно.
Но если сделать "IF тут небольшая CFC диаграмма", то анонимные блоки могут заиграть новыми красками