Исполнение программы
Что такое Runtime?
Runtime-система платформы LC2 (или просто Runtime) — это встроенная часть среды выполнения, которая управляет циклическим исполнением программы и взаимодействием с физическими входами/выходами контроллера.
Исполнение программы
Алгоритм работы Runtime показан на блок-схеме ниже:
flowchart LR
subgraph Инициализация [Инициализация]
A([Запуск]) --> B[init]
end
subgraph Основной цикл [Основной цикл]
C[Чтение входов] --> D[loop]
D --> E[Запись выходов]
E --> F[Пауза]
F --> C
end
B --> C
class A startEnd;
class B init;
class C,D,E,F loop;
%% Связи
linkStyle 0 stroke:#FF6347,stroke-width:2px;
linkStyle 5 stroke:#32CD32,stroke-width:2px,dash:5;
Этапы выполнения
1. Инициализация init()
После запуска программы Runtime вызывает функцию init(). Она вызывается один раз и используется для инициализации переменных, состояния устройства или запуска фоновых процессов.
2. Основной цикл
После завершения init() начинается непрерывный цикл исполнения, который состоит из следующих этапов:
- Чтение входов
Перед вызовом функцииloop(), Runtime считывает состояния всех аппаратных входов (например, дискретных или аналоговых) и сохраняет их в соответствующие Input-переменные. Значения всех Input-переменных обновляются в начале каждой итерации основного цикла, перед вызовомloop(). Во время выполненияloop()эти значения остаются неизменными, независимо от дальнейших изменений на физических входах. - Вызов
loop()
Функцияloop()содержит основную логику обработки. В её пределах выполняется работа с переменными, анализ значений входных сигналов и установка выходных значений. - Запись выходов
Установка физических выходов производится только после завершения выполнения функции loop(). Все изменения Output-переменных, выполняемые внутри loop(), не приводят к немедленному изменению состояния аппаратных выходов. Эти значения сохраняются во временных переменных и применяются к выходам автоматически после выхода из loop(). - Пауза После установки выходов происходит задержка, которая определяет частоту основного цикла. Длительность паузы вычисляется автоматически, чтобы обеспечить стабильный период исполнения. Если вся итерация (чтение входов → loop() → запись выходов) заняла больше времени, чем задано — новый цикл начнётся сразу, без паузы.