Наиболее сложным этапом автоматизации промышленных предприятий является создание единой управляющей сети, способной объединить всё технологическое оборудование, используемое в производственном процессе.
На сегодняшний день наиболее распространенным способом создания подобной сети является применение программируемых логических контроллеров (ПЛК), объединенных в общую сеть по одному из стандартных промышленных протоколов.
Программируемый логический контроллер является вычислительной системой, способной решать задачи управления и мониторинга как в автономном режиме, так и в качестве компонента распределенной управляющей сети.
ПЛК является специализированной электронно-вычислительной машиной, имеющей ряд особенностей, отличающих его от других контроллеров, используемых для автоматизации.
В наиболее общем смысле ПЛК является вычислительной системой специального назначения, обладающей своей собственной операционной системой с возможностью программирования и подключения к различным периферийным устройствам и коммуникационным сетям.
ПЛК может быть построен на программной и аппаратной базе персональных компьютеров общего назначения или микроконтроллеров. Однако нельзя путать эти вычислительные системы.
В отличие от персональных компьютеров общего назначения, ПЛК способен взаимодействовать с периферийными устройствами напрямую, то есть непосредственно формировать и принимать электрические сигналы. Последнее позволяет ПЛК работать в режимах, близких к "реальному времени".
Необходимо отметить, что термины "реальное время", "мягкое реальное время" и даже "жесткое реальное время" вовсе не означают, что ПЛК выполняет программные инструкции мгновенно.
Под "реальным временем" исполнения в данном случае подразумевается то, что вычислительный процесс, реализуемый электронно-вычислительной машиной, синхронизирован с астрономическим временем. То есть, если какая-то инструкция должна быть выполнена через 20 мс, то это реальное время, через которое она будет исполнена.
Очевидно, что в задачах управления будет одинаково опасно как слишком быстрое, так и слишком медленное выполнение данной инструкции.
Безусловно, такая идеальная ситуация практически трудноосуществима, поэтому и появились термины "мягкое" и "жесткое" реальное время, которые по факту просто обозначают величину допуска на каждый временной интервал, заданный в программе.
Чем меньше данный допуск (дельта), тем точнее будут исполняться инструкции и тем более ответственные задачи сможет решать электронно-вычислительная машина.
Реализация реального времени на персональных компьютерах общего назначения крайне сложна. Дело в том, что подавляющее большинство существующих на сегодняшний день операционных систем являются многозадачными. При этом условно можно считать, что несколько параллельных вычислительных задач должны синхронно и параллельно утилизировать ресурсы всего одного одноядерного процессора управления.
На практике это реализуется постоянным переключением контекста, когда каждому процессу, управляемому операционной системой, выделяется некоторое количество квантов времени в соответствии с некоторыми правилами, определёнными типом и приоритетом решаемой им задачи.
Таким образом, пропорция времени, выделенная на каждую задачу, определяет "загруженность" центрального процессора, которая не может превышать 100 %.
Распределением времени занимается специальная программа-диспетчер, которая следит за назначением определённого количества машинного времени каждому процессу.
Когда время, отведенное данному конкретному процессу, истекает, диспетчер принудительно отбирает у него управление, сохраняет его текущее состояние в памяти, после чего передает управление следующему процессу в своем списке. При этом управление отнимается ультимативно вне зависимости от выполняемой в данный момент процедуры.
Текущим состоянием могут, например, быть значения указателя стека, счетчика команд и системных регистров.
Следовательно, в любой произвольный момент времени состояние вычислительной системы не является абсолютно детерминированным и определяется количеством выполняемых задач, их сложностью, частотой процессора и т. д.
В дополнение к этому необходимо отметить, что диспетчер оперирует только машинными тактами, которые, строго говоря, нельзя назвать настоящими временными метками. Тактирование центрального процессора может осуществляться от внутреннего тактового генератора, который зачастую является обычной RC-цепью с цифровым управлением.
Частота данного источника может изменяться в зависимости от напряжения питания. Естественно, брать за основу только частоту центрального процессора нельзя, необходим какой-то внешний источник точного времени.
Программируемые логические контроллеры, в свою очередь, также реализуют некоторое подобие многозадачной операционной системы. Однако при программировании ПЛК именно время выполнения той или иной процедуры является определяющим.
Операционная система ПЛК реализует следующие виды задач:
- Циклические - задачи, которые выполняются постоянно с момента старта системы с заданным временным интервалом. Временной интервал задается программистом.
- По событию - выполняются только в том случае, если произошло некоторое внешнее событие, которое привело к изменению внутреннего состояния ПЛК. Например, была нажата кнопка, связанная с цифровым входом ПЛК.
- Свободные (англ. freewheeling) - задачи, которые запускаются только в том случае, если центральные процессор ПЛК не занят выполнением других задач. Аналог фоновых задач в операционных системах общего назначения. Как правило, эти задачи реализуют наименее ответственные функции управляющей системы, например, протоколирование событий и графическое отображение результатов работы ПЛК.
Таким образом, работа в режиме, близкому к "реальному времени" в ПЛК, достигается за счёт правильного расчёта времени выполнения каждой задачи, не допускающего их пересечения.
Безусловно, это требует дополнительных знаний от программиста, но за счёт этого программы, написанные для ПЛК, могут стабильно управлять различными быстродействующими промышленными устройствами.
Что касается микроконтроллеров, некорректно сравнивать их с ПЛК, потому что микроконтроллеры не могут выполнять функции по управлению техническими объектами автономно.
Любой микроконтроллер представляет собой систему на кристалле, к которой нужно спроектировать так называемую "обвязку": схему питания, схему сопряжения с внешними устройствами, схему безопасности и т. д. ПЛК может быть создан на основе микроконтроллера, который вместе с электрической "обвязкой" будет выступать в роли вычислительного ядра программируемого логического контроллера.
Впрочем, одного вычислительного ядра недостаточно. Чтобы вычислительная система стала настоящим ПЛК, необходимо привести его программное обеспечение в соответствие со стандартом Международной электротехнической комиссии (МЭК).
Наличие стандарта программирования и четкого описания языков позволяет говорить о практически полной совместимости ПЛК на уровне программного кода.
Программы, написанные для ПЛК одного производителя, могут быть успешно перенесены на контроллеры другого. При этом появляется возможность создания универсальных программных библиотек, которые могут реализовывать наиболее общие функции, необходимые для решения задач управления.
Один из самых популярных пакетов программ для программирования ПЛК: Среда программирования CoDeSys – главный инструмент программиста ПЛК