Переменные в ST: как объявлять и называть правильно
В основе любой программы для ПЛК на языке Structured Text (ST) лежит переменная — именованная ячейка памяти контроллера, хранящая значение определённого типа. Казалось бы, что тут сложного? Однако неправильное использование переменных — одна из главных причин трудноуловимых ошибок, проблем с чтением кода и его модификацией.
Что такое переменная?
Представьте склад на заводе: каждый товар хранится в определённом месте с этикеткой. Переменная работает точно так же — это именованное место в памяти. Вместо того чтобы запоминать адрес 0x1A32, вы пишете temperatureSensor — и сразу ясно, о чём речь.
Объявление переменных
В ST переменные объявляются в блоке VAR в начале программы:
PROGRAM MyProgram
VAR
counterValue: INT;
temperature: REAL;
isActive: BOOL;
statusMessage: STRING;
END_VAR
(* основной код *)
END_PROGRAM
Каждая переменная указывается с именем, двоеточием и типом данных.
Именование — ключ к читаемому коду
Плохие имена:
VAR x: REAL; y: INT; z: BOOL; END_VAR
IF y > 100 THEN z := TRUE; END_IF;
Совершенно непонятно, что делает программа.
Хорошие имена:
VAR currentTemperature: REAL; pumpRunningHours: INT; isOverheated: BOOL; END_VAR
IF pumpRunningHours > 100 THEN isOverheated := TRUE; END_IF;
Код самодокументируется.
Основные правила:
- Используйте описательные имена. Вместо temp — waterTemperature или motorTemperature.
- CamelCase: первое слово с маленькой буквы, каждое следующее — с заглавной: motorSpeed, systemStatus.
- Избегайте аббревиатур. CurrentTemperature лучше, чем CurTemp.
- Избегайте однобуквенных имён (кроме счётчика i в циклах FOR).
- Будьте последовательны: если выбрали motorSpeed, не используйте speedMotor для второго двигателя.
- Используйте префиксы для группировки: pump1Pressure, pump2Pressure.
- Не используйте префиксы типов данных (вроде intCounter) — в современном ST это не принято.
Локальные и глобальные переменные
Локальные (VAR внутри программы/функции) видны только внутри своего блока кода.
Глобальные (VAR_GLOBAL) видны во всём проекте.
Золотое правило: используйте локальные переменные везде, где возможно. Глобальные — только когда данные должны быть доступны нескольким программам или это конфигурационные параметры системы.
Инициализация переменных
Всегда задавайте начальные значения! Неинициализированная переменная может иметь произвольное значение в памяти контроллера — это опасно, особенно в промышленных приложениях.
VAR
motorSpeed: INT := 0;
isMotorEnabled: BOOL := FALSE;
systemStatus: STRING := 'IDLE';
currentTemperature: REAL := 20.0;
END_VAR
Для флагов управления используйте FALSE (отключено), для счётчиков — 0.
Область видимости (Scope)
Блок Где видна
VAR_GLOBAL Во всём проекте
VAR в PROGRAM Только в этой программе
VAR_INPUT Как входной параметр функции
VAR_OUTPUT Как выходной параметр функции
VAR в FUNCTION_BLOCK Только внутри блока
Распространённые ошибки
1. Слишком много глобальных переменных — создают запутанные зависимости.
2. Неинициализированные переменные — непредсказуемое поведение.
3. Плохие имена — код становится нечитаемым.
4. Путаница между локальными и глобальными — неожиданное изменение значений.
5. Переиспользование одной переменной для разных целей.
Где учиться дальше?
Если вы хотите не просто разобраться с переменными, а освоить программирование ПЛК на профессиональном уровне — обратите внимание на курсы GROMOV-PLC.
Автор курсов — Дмитрий Громов, инженер-робототехник и программист промышленных контроллеров с огромным опытом работы на производствах разных отраслей. За 7 лет курсы прошли более 4000 специалистов из более чем 400 организаций, включая Ростех, Роскосмос, Русгидро, РосАтом и другие.[reference:0]
Что предлагают:
- 6 курсов по программированию ПЛК[reference:1]
- Возможность купить курсы по отдельности или комплектом — так дешевле[reference:2]
- До 31 августа действует летняя распродажа: скидка от 40% на отдельные курсы и до 50% на комплекты[reference:3]
- Бесплатный вебинар каждый четверг в 19:00 MSK[reference:4]
- Доступ в крупнейшее в России сообщество инженеров-программистов[reference:5]
Записаться на курсы и узнать подробности можно здесь: https://gromov-plc.ru/kurs?gcao=53137&gcpc=c0e26
По всем вопросам — техподдержка: edu@gromov-plc.ru
Присоединяйтесь к сообществу!
Обсуждать статьи, задавать вопросы и делиться опытом с коллегами можно в Telegram-группе «Electroman | Промышленность, автоматизация, электротехника» — https://t.me/electroman_industry
Здесь собираются инженеры-электрики, программисты ПЛК, специалисты по автоматизации и все, кто интересуется электротехникой и промышленностью. Участвуйте в дискуссиях, получайте обратную связь и будьте в курсе актуальных тем отрасли!
Итог
Переменные — это способ коммуникации между вами и другими инженерами, которые будут читать ваш код. Правильное именование, инициализация и управление областью видимости — признаки профессионального подхода.
Хорошо написанный код легче отлаживать, модифицировать и передавать коллегам. Это не затраты времени — это инвестиция в качество и надёжность.
А чтобы уверенно применять эти знания на практике — изучайте, практикуйтесь и прокачивайте навыки на профильных курсах.
Подписывайтесь на канал, чтобы не пропустить новые материалы по автоматизации и программированию ПЛК!
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Кстати, вот держите ещё пару кодов, которые защищаются литературными авторскими ... | 0 | 12.16 | 31-07-2026 |
| 2 | Книга: «100 ошибок C++ и как их избежать» | 0 | 7.01 | 03-06-2026 |
| 3 | 🔥 Сегодня рассказываем про курсы Клуба Программистов для детей 9 ... | 0 | 10.42 | 11-08-2026 |
| 4 | [Перевод] Доверьтесь компилятору: C++23 против трюков из 90-х | 0 | 10.4 | 27-07-2026 |
| 5 | ⚙ 27.03.04 «Управление в технических системах» ❓ Что вас ждёт? ... | 7 | 8 | 06-07-2026 |
| 6 | ⚙ 27.03.04 «Управление в технических системах» ❓ Что вас ждёт? ... | 7 | 8 | 08-07-2026 |
| 7 | ⛔️ПРОГРАММИРОВАНИЕ. Друзья, в последнее время в разных пространствах появляются практики, ... | 0 | 7.47 | 27-07-2026 |
| 8 | 🤒 (((((Кто просит в нутре вас безсчёт вкусам и ароматом ... | 0 | 3.5 | 13-08-2026 |
| 9 | Старший разработчик Go (Blockchain / Information Security) | 0 | 7.6 | 13-08-2026 |