Вход

Просмотр полной версии : Codesys 3.5 - FB или FUN? Что оптимальнее использовать???



Androidmatis
06.09.2024, 11:37
Добрый день.

Занимаюсь написанием программы на ПЛК210 и задался вопросом:
А как писать код более оптимизированно?

При написании в виде FB четко видна структура, более понятно разделение переменных на входные, выходные, внутренние.
При написание в виде структуры, которую потом обрабатывать функцией можно достичь более оптимального использования памяти, за счет возможности распределения переменных одного типа рядом в структуре.

Подскажите, какая разница, с точки зрения нагрузки на процессор, в использовании FB и FUN?

1exan
06.09.2024, 11:48
Вряд ли это непосредственно связанные вещи - нагрузка процессора и ваш выбор между FB и FUN.

А внутренние состояния при использовании функций вы тоже будете в структурах хранить?

Androidmatis
06.09.2024, 11:55
Если они требуют сохранения данных в течении нескольких циклов обработки то да. Если же есть переменные, которые необходимы только во время обработки (например какой-нибудь промежуточный буфер), то они будут расположены внутри функции, чтобы при выходе из функции они просто исчезали.

1exan
06.09.2024, 12:02
Если они требуют сохранения данных в течении нескольких циклов обработки то да. Если же есть переменные, которые необходимы только во время обработки (например какой-нибудь промежуточный буфер), то они будут расположены внутри функции, чтобы при выходе из функции они просто исчезали.

Можно использовать ФБ и INOUT для работы со структурой

Androidmatis
06.09.2024, 12:13
Можно использовать ФБ и INOUT для работы со структурой

Как вариант. При вызове функции, в оперативной памяти выделяется место под переменные функции, а после выхода они удаляются, итак происходит при каждом вызове. А при создании блока память выделяется один раз и до конца работы программы. И мне был интересен момент как раз таки того, на сколько сильно отличается нагрузка процессора при постоянном вызове функции и выделении памяти для функции от вызова блока, который уже жестко определен в памяти.

Cs-Cs
06.09.2024, 12:52
ПОЖАЛУЙСТА! Я написал для новичков отличную статью про разницу между FUN и FB!
Вот она: https://cs-cs.net/funkciya-fun-i-funkcionalniy-blok-fb-codesys-owenlogic
ПОЖАЛУЙСТА почитай её! Там прям как раз есть разные примеры применения и даже про VAR_IN_OUT рассказано.

Про память переживать не надо. CodeSys 3.5 - это НЕ микроконтроллер, и там выделение мелких объёмов памяти не так важно, как в микроконтроллерах.

1exan
06.09.2024, 16:03
Как вариант. При вызове функции, в оперативной памяти выделяется место под переменные функции, а после выхода они удаляются, итак происходит при каждом вызове. А при создании блока память выделяется один раз и до конца работы программы. И мне был интересен момент как раз таки того, на сколько сильно отличается нагрузка процессора при постоянном вызове функции и выделении памяти для функции от вызова блока, который уже жестко определен в памяти.

Я думаю, что в подавляющем большинстве задач ПЛК (тем более такого как ПЛК210) более важен понятный легко модифицируемый и поддерживаемый код, чем ловля микросекунд, получение низкой нагрузки на процессор и перетасовка данных в структурах для экономии памяти.
Конечно, если в программе производится много вызовов одного и того-же ФБ или функции, на его оптимизацию имеет смысл потратить время

Емельянов Кирилл
07.09.2024, 03:02
PRG и структуры в VAR IN OUT тоже прекрасно работают