SCL в TIA Portal: программирование ПЛК с нуля
SCL (Structured Control Language) — это текстовый язык программирования ПЛК Siemens, аналог языка ST по IEC 61131-3. По синтаксису похож на Pascal, идеален для сложных алгоритмов, математики, работы с массивами.
Зачем нужен SCL
Когда SCL лучше LAD/FBD:
- Сложные вычисления (формулы, преобразования);
- Циклы (FOR, WHILE, REPEAT);
- Условия (IF, CASE, ELSIF);
- Работа с массивами и структурами;
- Алгоритмы регулирования (ПИД, фильтры);
- Обработка данных (буферы, очереди);
- Код, который нужно документировать.
Где используется SCL в TIA Portal
- OB, FB, FC — везде, где поддерживается (кроме некоторых OB);
- Внутри LAD/FBD — через блоки SCL;
- В сочетании с LAD — основной цикл в LAD, сложная логика в SCL.
Базовый синтаксис
Пример простой программы:
// Пример: уставка с ограничением
FUNCTION_BLOCK "FB_Setpoint"
VAR
i_rawInput : INT; // Входное значение
i_minLimit : INT := 0; // Минимум
i_maxLimit : INT := 100; // Максимум
q_output : INT; // Выход
END_VAR
BEGIN
// Ограничение диапазона
IF i_rawInput < i_minLimit THEN
q_output := i_minLimit;
ELSIF i_rawInput > i_maxLimit THEN
q_output := i_maxLimit;
ELSE
q_output := i_rawInput;
END_IF;
END_FUNCTION_BLOCK
Основные конструкции
Условия (IF, CASE)
IF условие THEN
// код
ELSIF условие2 THEN
// код
ELSE
// код
END_IF;
CASE переменная OF
1: // код для 1
2: // код для 2
ELSE // код по умолчанию
END_CASE;
Циклы (FOR, WHILE)
// Цикл FOR
FOR i := 1 TO 10 BY 1 DO
arr[i] := i * 2;
END_FOR;
// Цикл WHILE
WHILE condition DO
// код
END_WHILE;
Работа с массивами
VAR
arrData : ARRAY[1..100] OF INT;
iSum : INT;
END_VAR
iSum := 0;
FOR i := 1 TO 100 DO
iSum := iSum + arrData[i];
END_FOR;
Пример: ПИД-регулятор на SCL
// Простой ПИД-регулятор
FUNCTION_BLOCK "FB_SimplePID"
VAR_INPUT
i_setpoint : REAL; // Уставка
i_process : REAL; // Текущее значение
i_kp : REAL := 1.0; // Kp
i_ki : REAL := 0.1; // Ki
i_kd : REAL := 0.0; // Kd
i_dt : REAL := 0.1; // Период, сек
END_VAR
VAR
q_output : REAL;
r_integral : REAL;
r_prevError : REAL;
END_VAR
BEGIN
VAR r_error : REAL;
VAR r_p, r_i, r_d : REAL;
r_error := i_setpoint - i_process;
r_p := i_kp * r_error;
r_i := r_integral + i_ki * r_error * i_dt;
r_d := i_kd * (r_error - r_prevError) / i_dt;
q_output := r_p + r_i + r_d;
// Ограничение выхода
IF q_output > 100.0 THEN q_output := 100.0; END_IF;
IF q_output < 0.0 THEN q_output := 0.0; END_IF;
r_integral := r_i;
r_prevError := r_error;
END_FUNCTION_BLOCK
Отладка в TIA Portal
В режиме online:
- Точки останова (красные точки слева от строк);
- Watch tables — наблюдение за переменными в реальном времени;
- Monitor — значения прямо в коде;
- Force — принудительная установка значений (осторожно на реальном ПЛК!).
Best practices
- Используйте понятные имена переменных (i_setpoint, а не I0);
- Комментируйте сложные участки;
- Разбивайте код на FB по функциям;
- Не используйте глобальные переменные без необходимости;
- Делайте обработку ошибок (DIV BY 0, выход за диапазон);
- Тестируйте в PLCSIM перед загрузкой в реальный ПЛК.
SCL vs LAD: что выбрать
SCL: сложная логика, циклы, массивы, математика, документирование.
LAD/FBD: простая логика, релейные схемы, дискретные сигналы, читаемость для электриков.
В реальных проектах — комбинация: верхний уровень в LAD, сложные блоки в SCL.
Заключение
SCL — мощный инструмент для серьёзных проектов. В ЭкоЭн используем SCL для всех нетривиальных алгоритмов: фильтры, регуляторы, обработка данных, диагностика. Свяжитесь с нами для обучения.
