Курс 7 • Урок 2 из 2 • 4 акад. ч.

Structured Text, условия и экземпляры функциональных блоков

Цель: Читать простой ST-код и отличать вычисление функции от блока с памятью.

4 акад. ч. Лекция, работа с документацией, практическое задание на учебной модели или согласованном стенде и самопроверка.

Присваивание и ветвление

В ST оператор := присваивает значение; сравнение равенства обычно записывается =. Условие IF выбирает действия по логическому выражению. CASE удобно связывает разные целочисленные состояния с отдельными ветвями. Типы, границы массивов, правила преобразования и поддерживаемые расширения уточняют по среде.

IF Stop OR Fault THEN
    RunRequest := FALSE;
ELSIF Start AND Ready THEN
    RunRequest := TRUE;
END_IF;
RunCommand := RunRequest AND Ready AND NOT Fault;

В этом учебном фрагменте обычный Stop и Fault имеют приоритет над Start. Код не описывает аварийный останов и не является готовой программой безопасности. При недостающих ветвях переменная может сохранить старое значение; это бывает как намеренной памятью, так и ошибкой.

Функция и функциональный блок

Функция прежде всего вычисляет результат по аргументам в рамках определённых правил. Функциональный блок имеет экземпляр со своими внутренними данными. Для двух независимых таймеров нужны два экземпляра, иначе события начнут пользоваться общей историей. Создать экземпляр недостаточно: его нужно вызывать в нужной задаче с правильными входами.

Интерфейсы блока делают понятными: входное задание, измерение, разрешения, состояние, команда и диагностика. Не следует скрыто изменять удалённые глобальные переменные из каждого блока — так сложнее проследить причину воздействия и выполнить отдельное испытание.

Порядок выполнения

Последовательность строк имеет значение. Если переменная присваивается дважды за вызов, более поздняя операция может изменить результат предыдущей. Ветка IF с TRUE не останавливает всю задачу после END_IF. Поэтому выходной запрет, записанный раньше несогласованного пуска ниже, может быть перезаписан.

Разбор. Два клапана используют один экземпляр таймера по очереди. Когда второй вызов передаёт другой IN, внутренняя история уже не относится только к первому клапану. Исправление — отдельные экземпляры и прозрачная привязка к механизмам, а не увеличение PT наугад.

Практическое задание

В среде разработки создайте фрагмент с IF и таблицей из четырёх состояний CASE. Для каждого перехода запишите ожидаемый результат. Найдите две разные ошибки: пропущенное присваивание в требуемой ветви и перезапись выхода ниже по программе. Затем выделите логику двух механизмов в независимые экземпляры. Проверка компиляции и моделирование нужны до любых действий с реальным оборудованием.

Что нужно запомнить

  • Присваивание и сравнение — разные операции.
  • Экземпляр функционального блока хранит собственное состояние.
  • Последовательность операторов влияет на итоговые значения.

Документация и дополнительное чтение

Проверка знаний

Вопросы по уроку

Нужно 75%
Загрузка вопросов…