В функциях ST не инициализируются значения по умолчанию во входных переменных, в функциональных блоках все нормально
Вид для печати
В функциях ST не инициализируются значения по умолчанию во входных переменных, в функциональных блоках все нормально
Функции не имеют памяти, это азы программирования. На входы, каждый цикл, надо подавать значения, для её работы.
Инициализировать входы внутри невозможно, они перезапишутся значениями на входе.
Вы не баг нашли, а расписались в незнании теории.
У вас ещё много открытий впереди, в вашем примере на выходе функции всегда будет 0, даже если на вход подать True.
AllXXX Держи тебе подробное (моё) чтиво: https://cs-cs.net/funkciya-fun-i-fun...esys-owenlogic
Если потратишь чуток времени - дофига вопросов отпадёт про функции и FB
kondor3000 правильно пишет всё!
Спасибо обязательно почитаю на досуге
Нет. Желательно первым делом почитать, чтобы закрыть 90% всех вопросов
Ура! Я писал сам, когда разбирался!
Ещё добавлю комментарий вот какой: В ДРУГИХ средах разработки параметры по умолчанию для функций могут работать!
То есть, это в OwenLogic не реализовано (или сделано криво).
Например, в CodeSys последних версий (SP17) можно объявить функцию как
И вызывать так:Код:FUNCTION MyFun
VAR_INPUT
wParam1 : WORD;
wParam2 : WORD := 10;
END_VAR
Код:MyFun(10, 30);
MyFun(200);
Типа это в ST только-только добавили, в то время как в других языках это давно было?
Или это было, но никто не придавал значению?
Развитие ST тогда радует :)
kondor3000 Не понял! Ни разу она не бестолковая! Это опциональные аргументы. Как во всех других языках.
Ты чего? Ни разу этим не пользовался вообще нигде? Я удивлён: ты же прям гуру и спец форума.
Опциональные аргументы используют тогда, когда не надо их менять на свои, и когда стандартные значения устраивают
Например, у меня есть функция, которая делает из WORD тип TIME, и имеет такие аргументы:
wValue : WORD;
bTimeInMunitues : BOOL := FALSE;
Соответственно если я вызываю её так:
CSWordToTime(132) - то знаю, что второй аргумент подставится как FALSE
А если
CSWordToTime(132, TRUE) - то явно подставляю аргумент как мне надо
Это даже в WinAPI так было ещё с WIn 3.11