Bilim.techО проекте

Переменные, условия и циклы

Как программа держит уровень в емкости и следит за перегревом? Пиши код, который включает насос и считает моточасы до ТО, и проверь его на заданиях.

01 Что это такое

Программа управления машиной держится на трех вещах: переменные помнят числа, условия выбирают действие, цикл повторяет все снова и снова.

Контроллер насоса не умнее простой программы. Он по кругу делает одно и то же: читает датчик уровня и кладет число в переменную, сравнивает его с порогами и включает или выключает насос, а потом ждет секунду и начинает заново. Так же устроены защита двигателя от перегрева и счетчик моточасов до ТО. Слова «если» и «пока» в коде это ромбы блок-схемы, а отступ показывает, какие строки относятся к условию или циклу. В опыте ты сам пишешь такую программу и смотришь, как она управляет моделью.

прочитать датчику = уровень()у < 30?условиевключить_насос()выключить_насос()данет, у > 80ждать(1)повторять всегда:пока истина:переменная
Каждый круг цикла длится около секунды. За смену контроллер проходит его десятки тысяч раз, и каждый раз решает заново по свежему числу с датчика.
у
Переменная. Ячейка памяти с именем. В нее кладут показание датчика, счетчик или результат расчета и потом используют по имени.
если
Условие. Сравнение, которое дает «истина» или «ложь». От ответа зависит, выполнятся ли строки с отступом под ним.
пока
Цикл. Повторяет блок, пока условие истинно. «пока истина» крутится вечно, как программа контроллера.
02 Опыт
Выбери задание. Допиши код. Запусти и проверь. КОД УПРАВЛЯЕТ МОДЕЛЬЮ
ПРОГРАММА И МОДЕЛЬ

Код включает насос, сигнал и считает часы

Рис. 12.2
ЗАДАНИЯ
Время модели
Насос
Проверка задания
03 Код по строкам

Что делает каждая строка программы насоса

Разберем код по кусочкам, как формулу по буквам. Числа в зеленых рамках берутся из опыта прямо во время выполнения.

Где программа помнит число?

у = уровень()

Функция уровень() спрашивает датчик и возвращает число в процентах. Знак = кладет его в переменную у. Дальше программа сравнивает уже у, а датчик спросит только на следующем круге.

у
имя переменной. Можно любое: уровень_воды, h, у1, но без пробелов и не с цифры
уровень()
вызов функции модели. Скобки обязательны, даже пустые
%
в записи 7 % 3 это остаток от деления: 1. Пригодится для моточасов

Когда включать насос?

если у < 30:
    включить_насос()

Сравнение у < 30 дает истину или ложь. Строка с отступом выполнится только при истине. Для второго порога пишут еще одно условие: если у > 80, выключить насос.

< >
меньше, больше. Есть еще <= и >= (меньше или равно, больше или равно)
== !=
равно и не равно. Одно = это не сравнение, а «положить в»
и, или, не
склеивают условия: если т > 105 и давление < 2

Почему программа не кончается?

пока истина:
    …
    ждать(1)

Условие «истина» никогда не станет ложным, поэтому цикл вечный, как у настоящего контроллера. ждать(1) пропускает секунду времени модели. В опыте время ограничено 120 секундами.

пока
проверяет условие перед каждым кругом
истина
логическое значение «да». Его пара «ложь»
ждать(с)
функция модели: проходит с секунд. Без нее круги идут очень часто

Тот же код на настоящем Python

Справа код из опыта на Python. Ключевые слова поменялись на английские: если стало if, пока стало while, истина стало True. Имена переменных можно оставить русскими, Python 3 это разрешает, хотя в больших проектах принято писать латиницей.

Функций уровень(), включить_насос() и ждать() в Python нет: в настоящем контроллере их дает библиотека для работы с входами и выходами. Например, ждать(1) это time.sleep(1), а уровень() читает напряжение с датчика и пересчитывает его в проценты.

Почему у насоса два порога, а не один, разобрано в теме «ПИД-регулятор»: с одним порогом насос щелкал бы каждую секунду. Как устроен датчик, рассказано в теме «Датчики и реле».

Перевод делается автоматически из кода в опыте.
04 Где и зачем это применяют

Переменные, условия и циклы есть в каждой машине с контроллером

Допущения модели+

Уровень в емкости меняется линейно: насос добавляет заданное число процентов в секунду, водовоз все время забирает свое. Насос включается мгновенно. Каждая выполненная строка кода занимает 0,05 с времени модели, ждать(с) добавляет еще с секунд, опыт останавливается на 120 с. Температура двигателя задана готовой кривой рейса: подъем с грузом, вершина, спуск; ее высота зависит от нагрузки. Порог 105 °C и интервал ТО 250 моточасов учебные, но близкие к настоящим: у карьерных самосвалов масло в двигателе меняют через 250–500 ч, а сигнал перегрева загорается около 105–110 °C.

Еще в направлении «Инженерия»

Все темы направления «Инженерия» →