Siemens S7-300 — это серия модульных программируемых логических контроллеров (ПЛК), широко используемых в промышленной автоматизации. Эти контроллеры отличаются надежностью, гибкостью и широкими функциональными возможностями, что делает их популярными среди инженеров-автоматизаторов.
Необходимое программное обеспечение
Для программирования S7-300 используется среда разработки SIMATIC STEP 7, которая доступна в нескольких версиях:
- STEP 7 Classic (для S7-300/400)
- STEP 7 Professional (включает дополнительные возможности)
- TIA Portal (современная унифицированная среда для всего семейства S7)
Основы программирования в STEP 7
1. Создание нового проекта
- Запустите STEP 7
- Выберите «File» → «New Project»
- Укажите имя проекта и его расположение
- Добавьте новый ПЛК, выбрав соответствующую модель S7-300
2. Конфигурация аппаратного обеспечения (Hardware Configuration)
Перед началом программирования необходимо настроить аппаратную конфигурацию:
- Откройте вкладку «Hardware»
- Перетащите нужные модули из каталога в конфигурационную стойку
- Настройте параметры каждого модуля (адресация, свойства)
- Сохраните и скомпилируйте конфигурацию
Языки программирования для S7-300
S7-300 поддерживает несколько стандартных языков программирования ПЛК согласно МЭК 61131-3:
- LAD (Ladder Diagram) — релейно-контактные схемы
- FBD (Function Block Diagram) — функциональные блоки
- STL (Statement List) — список инструкций (ассемблероподобный)
- SCL (Structured Control Language) — структурированный текст (паскалеподобный)
- GRAPH — для программирования последовательностей
Пример простой программы на LAD
Расширенные примеры программирования Siemens S7-300
Вот несколько более сложных практических примеров программирования на разных языках, которые демонстрируют ключевые принципы работы с S7-300.
Пример 1: Управление двигателем с защитами и режимами (LAD/FBD)
Функциональность:
- Пуск/стоп двигателя
- Защита от перегрузки (с задержкой)
- Режим «Jog» (кратковременный пуск)
- Сигнализация аварии
Пример 2: Обработка аналогового сигнала (SCL)
FUNCTION «ProcessAnalogSignal» : VOID
{ S7_Optimized_Access := ‘TRUE’ }
VERSION : 0.1
VAR_INPUT
AnalogInput : INT; // Аналоговый вход (0-27648)
MinRaw : INT := 0; // Минимальное сырое значение
MaxRaw : INT := 27648; // Максимальное сырое значение
MinScaled : REAL := 0.0; // Минимальное масштабированное значение
MaxScaled : REAL := 100.0; // Максимальное масштабированное значение
FaultThreshold : INT := 500; // Порог определения обрыва
END_VARVAR_OUTPUT
ScaledValue : REAL; // Масштабированное значение
Fault : BOOL; // Флаг ошибки
END_VARVAR_TEMP
RawValue : INT;
END_VARBEGIN
// Проверка на обрыв датчика
IF AnalogInput < FaultThreshold THEN
Fault := TRUE;
ScaledValue := 0.0;
ELSE
Fault := FALSE;
// Масштабирование значения
RawValue := LIMIT(MinRaw, AnalogInput, MaxRaw);
ScaledValue := NORM_X(MIN := MinRaw,
VALUE := RawValue,
MAX := MaxRaw) * (MaxScaled — MinScaled) + MinScaled;
END_IF;
END_FUNCTION
Пример 3: Последовательность операций (GRAPH)
SEQUENCE «Автоматический цикл»
INITIAL_STEP S0:
ACTIVATE S1;STEP S1: // Заполнение бака
TON(IN := S1.X, PT := T#5S);
IF TON.Q THEN
«ValveIn» := TRUE;
ACTIVATE S2;
END_IF;STEP S2: // Нагрев до температуры
IF «TempSensor» >= 80.0 THEN
«Heater» := FALSE;
ACTIVATE S3;
ELSE
«Heater» := TRUE;
END_IF;STEP S3: // Слив продукта
TON(IN := S3.X, PT := T#10S);
«ValveOut» := TRUE;
IF TON.Q THEN
«ValveOut» := FALSE;
ACTIVATE S1; // Цикл повторяется
END_IF;
END_SEQUENCE
Пример 4: Работа с массивами и циклами (STL)
// Инициализация массива значений
L 0
T #Index
InitLoop:
L #Index
L 100 // Размер массива
<I
JC Proc // Пока индекс < 100JU End // Завершение когда индекс >= 100Proc:
L #Index
SLW 3 // Умножаем индекс на 8 для смещения
LAR1 // Загружаем в адресный регистрL MD[AR1,P#0.0] // Загружаем значение из массива L 1.0 +R T MD[AR1,P#0.0] // Сохраняем обратно +1.0 L #Index + 1 T #Index JU InitLoopEnd:
NOP 0
Пример 5: Комплексный FB для управления клапаном
FUNCTION_BLOCK «FB_ValveControl»
VAR_INPUT
OpenCmd : BOOL; // Команда открытия
CloseCmd : BOOL; // Команда закрытия
FeedbackOpen : BOOL; // Обратная связь «Открыт»
FeedbackClose : BOOL; // Обратная связь «Закрыт»
Timeout : TIME := T#5S; // Таймаут срабатывания
END_VARVAR_OUTPUT
OpenOutput : BOOL; // Выход на открытие
CloseOutput : BOOL; // Выход на закрытие
Status : INT; // 0-закрыт, 1-открыт, 2-в движении, 3-ошибка
Fault : BOOL; // Флаг аварии
END_VARVAR
Timer : TON;
MoveTimer : TON;
LastCmd : TIME;
END_VARBEGIN
// Логика управления выходами
OpenOutput := OpenCmd AND NOT CloseCmd AND NOT FeedbackOpen;
CloseOutput := CloseCmd AND NOT OpenCmd AND NOT FeedbackClose;// Определение статуса IF FeedbackOpen THEN Status := 1; // Открыт ELSIF FeedbackClose THEN Status := 0; // Закрыт ELSIF OpenOutput OR CloseOutput THEN Status := 2; // В движении // Запуск таймера движения MoveTimer(IN := TRUE, PT := Timeout); IF MoveTimer.Q THEN Status := 3; // Таймаут - ошибка Fault := TRUE; END_IF; ELSE Status := 3; // Неопределенное состояние Fault := TRUE; END_IF; // Сброс ошибки при получении обратной связи IF (OpenCmd AND FeedbackOpen) OR (CloseCmd AND FeedbackClose) THEN Fault := FALSE; END_IF;END_FUNCTION_BLOCK
Полезные табличные данные, которые вам могут пригодиться
1. Таблица соответствия языков программирования и их применения
| Язык программирования | Обозначение | Лучшее применение | Сложность | Пример использования |
|---|---|---|---|---|
| LAD (Ladder Diagram) | LD | Релейная логика, простые цепи | Низкая | Пуск/стоп двигателя |
| FBD (Function Block) | FBD | Сигнальные обработчики, сложная логика | Средняя | ПИД-регулятор |
| STL (Statement List) | STL | Оптимизация кода, низкоуровневые операции | Высокая | Обработка массивов |
| SCL (Structured Text) | SCL | Алгоритмы, математические вычисления | Средняя | Масштабирование аналоговых сигналов |
| GRAPH | GRAPH | Последовательные процессы | Высокая | Автоматические циклы |
2. Таблица организации памяти S7-300
| Область памяти | Префикс | Диапазон адресов | Тип данных | Назначение | Пример |
|---|---|---|---|---|---|
| Входы | I | I0.0 — I65535.7 | BOOL, BYTE, WORD, DWORD | Физические входы ПЛК | I0.0 — кнопка «Пуск» |
| Выходы | Q | Q0.0 — Q65535.7 | BOOL, BYTE, WORD, DWORD | Физические выходы ПЛК | Q4.0 — реле двигателя |
| Флаги (Меркер) | M | M0.0 — M65535.7 | BOOL, BYTE, WORD, DWORD | Внутренняя память | M10.0 — флаг ошибки |
| Таймеры | T | T0 — T65535 | TIMER | Таймеры задержек | T1 — задержка 5с |
| Счетчики | C | C0 — C65535 | COUNTER | Подсчет событий | C2 — счетчик изделий |
| Блоки данных | DB | DB1 — DB65535 | Любые | Пользовательские данные | DB101 — параметры системы |
Понимание организации памяти критически важно для эффективного программирования:
- Входы (I) — адресуются как I0.0, I1.5 и т.д.
- Выходы (Q) — Q4.0, Q5.1 и т.д.
- Меркерные биты (M) — M0.0, M10.5 и т.д.
- Таймеры (T) — T0, T1 и т.д.
- Счетчики (C) — C0, C1 и т.д.
- DB (Data Blocks) — для хранения пользовательских данных
Организация памяти в Siemens S7-300
- I0.0 — кнопка Пуск
- I0.1 — концевик Открыт
- I1.5 — датчик давления
- Q4.0 — клапан
- Q4.1 — сигнализация
- Q5.1 — двигатель
- M0.0 — флаг ошибки
- M10.5 — режим Авто
- M20.1 — статус системы
- T0 — задержка пуска
- T1 — время работы
- C0 — циклы работы
- C1 — количество изделий
- DB1 — параметры системы
- DB2 — журнал событий
Пояснения:
- Входы (I) — физические входы ПЛК (датчики, кнопки)
- Выходы (Q) — физические выходы ПЛК (реле, клапаны)
- Флаги (M) — внутренние биты памяти для логики программы
- Таймеры (T) — временные задержки и длительности
- Счетчики (C) — подсчет событий и циклов
- Блоки данных (DB) — хранилище данных
3. Таблица типов данных S7-300
| Тип данных | Размер | Диапазон значений | Пример объявления | Применение |
|---|---|---|---|---|
| BOOL | 1 бит | 0 или 1 | "Start" : BOOL; | Дискретные сигналы |
| BYTE | 8 бит | 0..255 | "Status" : BYTE; | Флаги состояния |
| WORD | 16 бит | 0..65535 | "RawValue" : WORD; | Аналоговые входы |
| INT | 16 бит | -32768..32767 | "Temperature" : INT; | Целочисленные значения |
| REAL | 32 бит | ±1.18×10⁻³⁸..±3.40×10³⁸ | "Pressure" : REAL; | Вещественные числа |
| TIME | 32 бит | T#0ms..T#24d20h31m23s647ms | "Delay" : TIME := T#5S; | Таймеры |
| STRING | 1+ байт | До 254 символов | "Message" : STRING[20]; | Текстовые сообщения |
4. Таблица команд STL с примерами
| Команда | Описание | Пример | Результат |
|---|---|---|---|
| L | Загрузить в аккумулятор | L MW10 | Загрузка MW10 в аккумулятор |
| T | Передать из аккумулятора | T MW20 | Сохранение аккумулятора в MW20 |
| +I | Сложение целых | L MW10; L MW12; +I | MW10 + MW12 |
| MOVE | Копирование данных | MOVE MW10, MW20 | Копирование MW10 → MW20 |
| JC | Условный переход | JC LABEL1 | Переход если RLO=1 |
| CALL | Вызов блока | CALL FC10 | Вызов функционального блока |
5. Таблица кодов ошибок при программировании
| Код ошибки | Описание | Возможные причины | Решение |
|---|---|---|---|
| 16#2523 | Неверный адрес | Обращение к несуществующему адресу | Проверить Hardware Config |
| 16#2941 | Переполнение | Превышение диапазона типа данных | Проверить размерности |
| 16#2570 | Ошибка таймера | Некорректное значение времени | Проверить параметры таймера |
| 16#8001 | Ошибка доступа | Попытка записи в read-only | Проверить права доступа |
| 16#6502 | Ошибка компиляции | Синтаксическая ошибка | Проверить код на опечатк |
Работа с данными и блоками
Организация данных
- Общие данные (Shared DB) — доступны всем блокам
- Фоновые данные (Instance DB) — связаны с конкретным FB
Основные типы блоков:
- OB (Organization Blocks) — главные программные блоки
- OB1: Главный цикл выполнения
- OB35: Циклический прерывание (например, каждые 100мс)
- FC (Functions) — функции без памяти
- FB (Function Blocks) — функциональные блоки с памятью
- DB (Data Blocks) — блоки данных
Практические советы по программированию
- Структурируйте код — используйте FC и FB для модульности
- Комментируйте код — это критически важно для поддержки
- Используйте символические имена вместо абсолютных адресов
- Реализуйте обработку ошибок — особенно для аналоговых сигналов
- Тестируйте пошагово — используйте режим мониторинга
Отладка программ
STEP 7 предлагает мощные инструменты отладки:
- Online monitoring — просмотр значений переменных в реальном времени
- Watch tables — таблицы для мониторинга и изменения переменных
- Reference data — анализ использования переменных в программе
- Breakpoints — точки останова (в STL/SCL)
Загрузка программы в ПЛК
- Скомпилируйте проект (без ошибок)
- Подключите ПЛК через соответствующий интерфейс (MPI, PROFIBUS, Ethernet)
- Выполните «Download» для загрузки:
- Конфигурации оборудования
- Пользовательской программы
- Переведите ПЛК в режим RUN
Заключение
Программирование Siemens S7-300 требует понимания как аппаратной части, так и принципов промышленной автоматизации. Начиная с простых релейно-контактных схем и постепенно осваивая более сложные языки и методы, вы сможете создавать надежные системы автоматизации для самых разных задач.
Для дальнейшего изучения рекомендуется:
- Официальная документация Siemens
- Практические курсы по STEP 7
- Работа с симулятором PLCSIM
- Изучение реальных промышленных примеров