Давайте разберем простую программу на языке ST (Structured Text) для ПЛК (программируемого логического контроллера) максимально подробно, как для начинающих.
Общая идея программы
Если говорить очень просто: эта программа включает мотор, когда нажата кнопка "Пуск". Это как самая простая электрическая цепь: провод от кнопки к мотору. Нажал кнопку — ток пошел — мотор заработал. Отпустил — ток прервался — мотор остановился.
---
Построчное объяснение
Строка 1: PROGRAM Main
· PROGRAM — это ключевое слово, которое сообщает компилятору, что здесь начинается описание программы.
· Main — это имя программы. Main (главная) — это стандартное имя для основной программы в проекте, которая выполняется снова и снова циклически.
· Аналог из мира Windows: Это как создать новый файл и назвать его "Главная программа.exe".
Строка 2: VAR
· VAR — это ключевое слово, которое начинает блок объявления переменных. Здесь мы сообщаем контроллеру: "Сейчас я буду перечислять все данные, с которыми буду работать: кнопки, моторы, датчики и т.д.".
· Аналог: Это как сказать "Список ингредиентов для рецепта:".
Строка 3: StartButton AT %IX0.0 : BOOL;
Это самая важная строка для понимания работы с "железом". Давайте разберем ее по частям:
· StartButton — это имя переменной, которое придумал программист. Мы могли бы назвать ее Кнопка, Кн1 или Button_Start. Имя должно быть понятным.
· AT — ключевое слово, которое означает, что эта переменная привязана (маппируется) к конкретному физическому входу или выходу контроллера.
· %IX0.0 — это адрес физического входа на ПЛК.
· % — символ, указывающий на физический адрес.
· I — означает Input (вход). Это сигнал, который ПЛК получает от внешнего устройства (например, кнопки, датчика).
· X — означает, что это дискретный (битовый) сигнал. Он может иметь только два значения: 1 (есть сигнал/включено) или 0 (нет сигнала/выключено).
· 0.0 — номер модуля и номер канала. Обычно 0.0 означает первый канал (клемму) на первом модуле ввода.
· Проще говоря: Мы говорим контроллеру: "Переменная StartButton — это то, что подключено к самой первой клемме на твоей плате входов".
· : BOOL — указывает тип данных переменной.
· BOOL (сокращение от Boolean — логический) — это тип, который может принимать только два значения: TRUE (истина/1) или FALSE (ложь/0).
· Это идеально подходит для кнопки (нажата/не нажата) и мотора (включен/выключен).
· ; — точка с запятой означает конец объявления этой переменной. Как точка в конце предложения.
Итог по строке: Мы создали переменную StartButton и сказали, что ее значение будет читаться с физического входа №0.0, и что это логический сигнал.
Строка 4: Motor AT %QX0.0 : BOOL;
Объявление переменной для мотора. Структура похожа, но есть ключевое отличие:
· Motor — имя переменной для управления мотором.
· AT %QX0.0 — ключевое отличие здесь в Q:
· Q — означает Output (выход). Это сигнал, который ПЛК подает на внешнее устройство (например, мотор, лампу, реле).
· X — снова означает дискретный сигнал.
· 0.0 — первый канал (клемма) на модуле выходов.
· : BOOL — тип также логический, так как мотор либо включен, либо выключен.
Итог по строке: Мы создали переменную Motor и сказали, что ее значение будет подаваться на физический выход №0.0.
Строка 5: END_VAR
· END_VAR — ключевое слово, которое завершает блок объявления переменных. Мы сообщаем контроллеру: "Список переменных окончен, можно приступать к логике программы".
· Аналог: "Конец списка ингредиентов. Теперь начинается сам рецепт."
Строка 6: Motor := StartButton;
Это тело программы, ее логика. Это команда, которая выполняется снова и снова в бесконечном цикле.
· := — это оператор присваивания. Он означает "взять значение справа и записать его в переменную слева". Читается как "становится равно".
· StartButton — это значение, которое мы читаем с входа %IX0.0 (нажата кнопка или нет).
· Motor — это переменная, значение которой мы подаем на выход %QX0.0 (включить мотор или выключить).
Проще говоря: Эта строка означает "Состояние мотора становится таким же, как состояние кнопки".
· Если на входе %IX0.0 появилось напряжение (кнопку нажали, StartButton = TRUE), то на выход %QX0.0 тоже подается напряжение (Motor := TRUE), и мотор включается.
· Если на входе %IX0.0 напряжения нет (кнопку отпустили, StartButton = FALSE), то и на выходе %QX0.0 напряжение пропадает (Motor := FALSE), и мотор выключается.
Строка 7: END_PROGRAM
· END_PROGRAM — ключевое слово, которое сообщает о завершении кода программы.
---
Как это все работает в ПЛК (цикл сканирования)
ПЛК работает по принципу бесконечного цикла, который называется "Цикл сканирования". Он состоит из трех основных этапов:
1. Считывание входов (READ INPUTS): ПЛК считывает состояния всех своих физических входов (например, %IX0.0, %IX0.1...) и записывает эти значения в соответствующие переменные в своей памяти (в нашем случае в переменную StartButton).
2. Выполнение программы (EXECUTE PROGRAM): ПЛК выполняет код вашей программы, строчку за строчкой. Он берет значение StartButton из своей памяти, присваивает его переменной Motor.
3. Запись выходов (WRITE OUTPUTS): После того как весь код выполнен, ПЛК берет новые значения всех переменных, привязанных к выходам (в нашем случае значение Motor), и подает соответствующие сигналы на физические выходы (%QX0.0, %QX0.1...).
Затем этот цикл повторяется снова и снова, миллионы раз в секунду.
Резюме для начинающего
· VAR...END_VAR — здесь ты "знакомишь" контроллер со всеми кнопками и моторами, указывая, к каким клеммам они подключены.
· %I — это вход (сигнал от устройства к контроллеру).
· %Q — это выход (сигнал от контроллера к устройству).
· := — это сердце логики. Это команда "сделать так, чтобы".
· Вся программа — это одно правило: "Включи мотор, когда нажата кнопка".
Это фундаментальный принцип, на котором строятся все более сложные программы для автоматизации.