КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Управление на основе последовательного программированияПопытаемся проанализировать следующую проблему; могут ли задачи управления в реальном времени решаться с помощью последовательного программирования. Блок-схема регулирования температуры представлена на рис. 2.3. Программа считывает температуру пластика каждые 10 секунд, определяет необходимое время нагрева (переменная heat_time), включает нагреватель и затем переходит в цикл занятого ожидания (busy loop) обновления счетчика времени (переменная С), во время которого компьютер не может выполнять никакие другие операции. Очевидно, что это не самое эффективное использование компьютера. Алгоритм управления перемещением поршня показан на рис. 2.4. Компьютер выдает команду начать движение вправо, затем непрерывно контролирует информацию от датчика конечного положения до тех пор, пока не получит сигнал о том, что оно достигнуто. Затем начинается обратное движение поршня влево, при этом компьютер должен в цикле занятого ожидания ждать очередного импульса и суммировать их (счетчик импульсов обозначен п). Цикл считается завершенным при достижении заданного числа импульсов (переменная pulse_ref). Затем весь цикл повторяется сначала. Так же как и при регулировании температуры, компьютер не может выполнять других операций, пока он находится в цикле ожидания очередного импульса.
Рис. 2.3. Блок-схема регулирования температуры пластика Каждую из двух задач можно решить непосредственно с помощью последовательного кода. Но объединить их в одной программе непросто. Циклы взаимного ожидания использовать нельзя, так как управляемый процесс не позволяет длительных задержек, а исполнение одной задачи не должно быть связано с другой. В принципе, можно обойтись и без циклов ожидания. Однако программа при этом будет все время переключаться между двумя задачами и проверять, какая задача должна исполняться следующей, станет громоздкой и сложной для анализа. Попытка последовательного расположения блоков инструкций, исполнение которых фактически должно быть параллельным, порождает взаимосвязи между практически независимыми функциями.
2.1.3. Управление на основе прерываний Главная сложность программы управления прессом — необходимость организации переключения между задачами. На практике проблема решается с помощью двух независимых программ, выполняемых на одной машине: одна — регулирует температуру, а другая — управляет перемещением поршня. Метод сигнализации, называемый прерыванием, используется для переключения ЦП исполнения одной задачи на другую. С помощью прерываний циклы ожидания можно заменить на ожидание прерывания. Фактически прерывание представляет собой внешний сигнал, извещающий Цц о наступлении некоторого события. События отслеживаются датчиками и заставляют ЦП прервать исполнение текущей программы и перейти к другой. Таким образом внешние сигналы могут влиять на исполнение того или иного программного модуля. Особый вид прерывания связан со временем. Электронный таймер выдает сигнал прерывания при наступлении определенного момента времени или по истечении некоторого интервала. Этот таймер не является частью ЦП, однако конструктивно располагается на той же плате. Он освобождает ЦП от необходимости контролировать время. Более подробно о прерываниях рассказано в разделе 10.6. С использованием прерываний задача регулирования температуры решается проще. Прерывание по времени связано с переменной heat_time. После включения нагревателя программа устанавливает таймер на величину времени нагрева (значение переменной heat time) и ждет сигнала прерывания для продолжения работы (инструкция wait_time(heat_time) на рис. 2.5.)
Рис. 2.5. Использование прерываний от таймера для регулирования температуры пластика Аналогично, программа управления поршнем ожидает два прерывания: одно отдатчика крайнего правого положения, другое — от импульсного датчика, контролирующего перемещение поршня (рис. 2.6). Прерываниям соответствуют инструкции вида wait_interrupt(x), где х обозначает канал поступления сигнала прерывания. Оператор wait_interrupt приостанавливает исполнение программы, которое возобновляется только при поступлении соответствующего сигнала внешнего прерывания. Рис. 2.6. Использование прерываний для управления движением поршня пресса для пластика
Система прерываний обеспечивает переключение ЦП с исполнения одной программы на другую как следствие внешних событий. В результате решение задачи управления получается прозрачным и элегантным. Если каждый программный модуль является независимым, то добавить новые блоки к системе можно без нарушения существующей структуры. Проблемы, связанные с многозадачностью и методами программирования в реальном времени, обсуждаются в главе 10.
|