Добрый день.
Литературы не слишком много, из общеизвестных книг можно порекомендовать Игорь Петров: Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования
Еще, возможно, подойдет Сергей Романов. Изучаем Structured Text МЭК 61131-3
И, естественно, есть справка: https://help.codesys.com/webapp/_cds...rsion=3.5.14.0
Во вопросам:
1. Вижу примеры с объявлением структур TYPE. Но в какой файл его добавлять? В PRG_PLC или какой-то другой?
ПКМ на узел Application - Добавление объекта - DUT
2. Какой жизненный цикл работы с переменными Modbus?
Вы "жизненным циклом" называете время жизни объекта (object lifetime)?
В CODESYS в большинстве случаев используется только статическое выделение памяти, так что этот вопрос не имеет смысла.
Или я вас неправильно понял?
Как сделать так, чтобы я вызывал FB только при изменении переменной?
Для этого надо написать ФБ, который будет детектировать изменение переменной, и передавать сигнал другому ФБ.
3. Как на языке ST передать в FUN значения входов, и изменить в FUN значения нескольких выходов? Можно ли внутри FUN менять внешние переменные?
https://help.codesys.com/webapp/_cds...rsion=3.5.14.0
Внутри функции можно менять глобальные переменные - но это плохой подход, который нарушает инкапсуляцию данных.
Как мне сделать так, чтобы я раз в 10 секунд дергал функцию (FUN)? Делать ли это через счетчик циклов или есть более изящные способы?
Классический вариант:
Код:
PROGRAM PLC_PRG
VAR
fbTon: TON;
END_VAR
fbTon(IN := NOT(fbTon.Q), PT := T#10M);
IF fbTon.Q THEN
// код, размещенный здесь, будет выполняться раз в 10 минут
END_IF
5. Везде показано, как использовать MQTT визуально. А можно как-то работать с такими объектами в ST-формате?
Да, безусловно, ФБ можно вызывать на любом языке - в том числе, и на ST.
https://help.codesys.com/webapp/_cds...function-block
Как настроить MQTT-клиент централизовано. Допустим, мне надо в множестве FUN передавать данные в MQTT-сервер. Не делать же вызов этого клиента в каждой функции? Иначе потом смена пароля будет в десятке мест. Или сделать функцию, куда поместить клиент и уже дергать функцию? Или нужно где-то настроить клиента, получить его инстанс, и уже дергать инстанс?
Это вопрос не к CODESYS, а к архитектуре приложения. Про проектирование ПО написано уже достаточно книг.