Чтобы создать POU надо в левом окошке среды Кодесис, там где расположена главная программа PLC_PRG нажимаем правую кнопку мыши по пустому месту или по папке (в этом случае POU будет создан в папке) выбираем Add Object, пишем имя, выбираем язык, выбираем тип POU (чаще всего используется функциональный блок). Вот и все.
У функционального блока в разделе объявления по умолчанию три вида переменных:
VAR_INPUT
входы
END_VAR
VAR_OUTPUT
выходы
END_VAR
VAR
локальные переменные
END_VAR
Осталось разбить проект на несколько самостоятельных задач и использовать их точно так же как таймеры, триггеры, счетчики.
Чтобы касается использования своих ФБ в сторонних проектах.
Для удобства свои ФБ в проекте я разбиваю на группы и сохраняю каждую в свою папку. Создается так же как и POU правой кнопкой мыши выбираем New Folder, а дальше переименовываем новую папку также правой кнопкой мыши. Далее можно мышкой нужные ФБ перетащить в папку. Таким образом в каждой папке у меня хранятся ФБ для определенных задач. Далее экспортируем папку в файл. Если мне в новом проекте понадобятся ФБ из этой папки я просто импортирую ее в новый проект. При необходимости можно удалить ненужные блоки, чтобы не забивать без надобности память контроллера. Можно конечно сделать библиотеку, но мне показалось так удобней, тем более есть возможность подкорректировать блоки при необходимости без лишних телодвижений.
Про функции, программы и функциональные блоки можно почитать в документации CoDeSys_V23_RU стр.10.
Если кратко, то функция не имеет памяти и используется в основном для вычислений.
Функциональные блоки после своего выполнения сохраняют значения своих переменных, в том числе входов и выходов до следующего вызова. Функциональные блоки объявляются как обычные переменные каждый экземпляр со своим именем (точно так же как таймеры, триггеры, счетчики).
Программа это тот же функциональный блок, только в единственном экземпляре и является глобальным и объявлять ее как переменную не нужно.