14 декабря 2018
телекоммуникациисистемы безопасностиуправление питаниеммедицинаответственные примененияTexas Instrumentsстатьяинтегральные микросхемысредства разработки и материалы
Программируемым логическим контроллерам уже 50 лет, но без них и сейчас невозможно представить автоматизированное производство. Начинаем публиковать цикл статей о ПЛК и об электронных компонентах, производимых компанией Texas Instruments для создания современных ПЛК.
Подписаться на получение уведомлений о публикации новых статей о ПЛК.
Программируемые логические контроллеры (ПЛК) широко применяются в сфере промышленной автоматизации разнообразных технологических процессов на больших и малых предприятиях. Популярность контроллеров легко объяснима. Их применение значительно упрощает создание и эксплуатацию как сложных автоматизированных систем, так и отдельных устройств, в том числе — бытового назначения. ПЛК позволяет сократить этап разработки, упрощает процесс монтажа и отладки за счет стандартизации отдельных аппаратных и программных компонентов, а также обеспечивает повышенную надежность в процессе эксплуатации, удобный ремонт и модернизацию при необходимости.
Принято считать, что задача создания прообраза современного ПЛК возникла в конце 60-х годов прошлого столетия. В частности, в 1968 году она была сформулирована руководящими специалистами General Motors. Тогда эта компания пыталась найти замену для сложной релейной системы управления. Согласно полученному заданию на проектирование, новая система управления должна была отвечать таким критериям как:
- простое и удобное создание технологических программ;
- возможность изменения рабочей управляющей программы без вмешательства в саму систему;
- простое и недорогое обслуживание;
- повышенная надежность при сниженной стоимости, в сравнении с подобными релейными системами.
Последующие разработки в General Motors, Allen-Bradley и других компаниях привели к созданию системы управления на базе микроконтроллеров, которая анализировала входные сигналы от технологических датчиков и управляла электроприводами исполнительных устройств.
Термин ПЛК (Programmable Logic Controller, PLC) впоследствии был определен в стандартах EN 61131 (МЭК 61131). ПЛК – это унифицированная цифровая управляющая электронная система, специально разработанная для использования в производственных условиях. ПЛК постоянно контролирует состояние устройств ввода и принимает решения на основе пользовательской программы для управления состоянием выходных устройств.
Упрощенное представление состава и принципа действия ПЛК хорошо демонстрирует рисунок 1. Из него видно, что ПЛК имеет три основные секции:
- входную;
- выходную;
- центральную.
Рис. 1. Состав и принцип действия ПЛК
Имеется еще источник питания. Возможно подключение к ПЛК внешнего ПК для программирования и отладки.
Центральная секция содержит центральный процессор (ЦП), память и систему коммуникаций. Она выполняет обработку данных, принимаемых от входной секции данных, и передает результаты обработки в выходную секцию. Следует сразу отметить, что в больших ПЛК, кроме ЦП, действующего в режиме «ведущий», могут быть дополнительные «ведомые» ПЛК со своими ЦП. В качестве ЦП небольшого ПЛК используются стандартные микропроцессоры (МП). Обычно 8- и 16-разрядные МП вполне справляются со всеми стандартными задачами. Но, как отмечено в МЭК 61131, выбор конкретного МП все же зависит от задач, возлагаемых на данный тип ПЛК.
Для передачи данных другому ПЛК или для подключения к сетям передачи данных PROFIBUS, Industrial Ethernet, AS-Interface в распределенных системах управления сегодня используются коммуникационные процессоры, такие как DP83867IR производства Texas Instruments (TI).
Входная секция ПЛК обеспечивает ввод в центральную секцию состояния переключателей, датчиков и смарт-устройств. Через выходную секцию ЦП управляет внешними исполнительными устройствами, среди которых могут быть электромагнитные пускатели моторов, источники света, клапаны и смарт-устройства.
Общая информация
Начинающие пользователи часто задаются вопросом, что такое программирование логических контроллеров. На деле программный язык этих устройств идентично логике функционирования обычных реле. Поэтому специалисты, ранее работавшие со схемами релейных принципов с легкостью разберутся с созданием программ для ПЛК.
Подключение сигналов и разработка стандартного программирования может различаться для разных марок и моделей PLC, но при этом в общем понимании они все равно будут обладать схожим набором черт и особенностей. Поэтому можно рассмотреть общие принципы.
Прежде следует разобраться с самим устройством:
- простой промышленный логический контроллер спереди включает 2 винтовые клеммы L1 и L2, которые отвечают за подключение внутренних цепей устройства;
- слева находятся 6 винтовых клемм, которые необходимы для подключения входных приборов. Они представляют собой 6 входных каналов;
- в корпусе расположен оптоизолятор для создания электрически изолированного сигнала для схемы ПК при установке связи между клеммой на входе и общей клеммой. Светодиод на входе отображает ситуацию, какой именно из входов сейчас находится под напряжением;
- сигналы на выходе получаются за счет схемотехники контроллера за счет активизации переключающего устройства. Это позволяет связать клемму с источником с помеченным пользователем буквой Y выходом.
Таким образом, PLC программирование базируется на определении, какие выходы находятся под напряжением и какие при этом присутствуют входные условия. Все программы разрабатываются с помощью ПК, который подключается к порту программирования контроллера.
Для программирования промышленных контроллеров используются специальные системы. Для этого существуют 2 возможных варианта:
- производитель PLC предлагает свою программную среду, которая реализована для работы от конкретного разработчика. Распространяются как на платной, так и на бесплатной основе в зависимости от компании и модели;
- компании по разработке ПО занимаются созданием специальных систем программирования для ПЛК от разных производителей.
CS-CS.Net: Лаборатория Электрошамана
Тестовый стенд для ОВЕН ПЛК 110
Ну что? Я продолжаю рассказывать базовые понятия ПЛК и то, как их программировать. Сегодня я расскажу про свои дальнейшние приключения с ОВЕНом и тем, как я его программировал. Как я уже говорил, программирование ПЛК — это совсем другая религия! Это вам не схемки или кубики в логическом реле двигать! Тут всё значительно мудрее и очень важен грамотный выбор железа, грамотное физическое подключение линий IO и внешних модулей.
Для ПЛК обычно есть два варианта сред разработки: CodeSys и собственные. CodeSys — это бесплатная среда разработки, которая делится на компилятор и ядро. Ядро CodeSys производители ПЛК загружают в него при производстве. И всё, что надо для программирования такого ПЛК — скачать CodeSys и специальные файлы, которые описывают конкретную модель ПЛК.
Второй вариант — это собственное ядро и собственная среда разработки. Тут уже каждый производитель извращается как нравится. Я вот хотел повозиться с Сименсами, но мне рассказали, что их среда разработки требует очень мощный комп и жрёт много ресурсов. Мне это не нравится, и я лучше подберу что-нибудь такое что работает с CodeSys, потому что мне проще поставить один раз хорошую среду, вылизать её настройки и заниматься только программированием.
ПЛК, который заказчик купил под свой щит работает на ядре CodeSys v2. Сейчас везде используется ядро CodeSys v3, а вторая версия ядра является устаревшей. Но так как принципы программирования всё равно одинаковые, то этот пост будет полезен всем начинающим. Да и мне охота поделиться информацией, которую я собирал по крупицам, неделю обложившись документацией. Блин! Мне кажется, что мне уже надо или учебные курсы вести, или посты продавать, гыгы =)
Первое, с чего начинается работа по программированию — это создание тестового стенда. У меня валялись кнопки на DIN-рейку от ABB, и я собрал из них четыре линии ввода: три на бортовом IO ПЛК, а одну — на внешнем модуле для того, чтобы проверить как работает опрос модулей по ModBus.
Кнопки для подачи сигналов на входы ПЛК
Настройка внешних модулей и ModBus
У меня появился большой сборный пост про модули ОВЕН Мх110 и Мх210. Почитайте его — там много интересного!
Первое, с чего начинается наше программирование — это с конфигурации железа. Любой внешний модуль имеет на шине RS-485 свой адрес. А ещё модулю надо указать правильные настройки обмена: скорость, чётность и тип протокола обмена.
Каждый модуль или внешнее устройство настраивается по своему. У кого-то надо будет зайти в меню и поменять там цифирки. У кого-то поставить перемычки. А у других устройств для их настройки предусмотрена специальная программа-конфигуратор. У ОВЕНа сделано именно так.
Их модули подключаются штатно под RS-485 к компьютеру и настраиваются при помощи программы. Для того, чтобы подключить RS-485 к компьютеру, понадобится любой преобразователь интерфейсов. Их на рынке навалом и можно использовать любой. Если хочется — можно RS-485 завернуть даже в обычный Ethernet и общаться с модулями или нашей системой по сетке.
Так как вокруг меня был ОВЕН, то я для личных целей купил преобразователь ОВЕН АС-4. Он у них сделан в корпусе на DIN-рейку, питается от самого же порта USB. Из фич — то, что перемычками можно подключать и изменять сопротивление резисторов-терминаторов шины RS-485.
Мы подаём на модуль питание и подключаем его к преобразователю:
Преобразователь ОВЕН АС-4 и настройка модуля IO
Дальше запускаем программу «Конфигуратор М110». Первым делом программа предложит нам задать настройки для подключения к модулю. Если мы только что купили модуль — то можно смело тыкать кнопку «Заводские сетевые настройки». А если модуль уже настроен на какой-то адрес и другие параметры протокола, то нам надо их знать заранее и ввести в программу:
Подключение к модулю IO в программе
Если по какой-то причине мы забыли все настройки модуля (например нам подарили БУшный модуль), то можно запустить сканирование сети. Программа найдёт всё, что может и предложит подключиться к указанному модулю. Ну а если мы совсем ничего не можем — то сам модуль ввода-вывода можно жёстко сброить на заводские установки, если установить одну из перемычек, которые находятся на нём под крышкой. Это описано в инструкции на модуль.
После того, как мы подключились к модулю, программа выдаёт нам все его настройки, которые можно прочитать и записать в модуль. Нас интересуют настройки сети: скорость обмена, сетевой адрес и всякие таймауты. Напоминаю, что у модулей есть фишка: если его не опрашивали по RS-485 указанное время, то он считает что связь оборвалась и выставляет на выходах аварийные значения, чтобы оборудование не натворило дел (сам не поехал лифт или не включились насосы и прочее). В нашем случае модуль управляет лампочками, поэтому мы выставляем все аварийные значения на ноль.
Настройки модуля релейных выходов МУ110-16Р
А некоторые модули ввода-вывода ещё и могут общаться по разным протоколам. Да и даже у самого ModBus есть парочка модификаций: RTU (устройства обмениваются двоичными даными) и ASCII (все данные гоняются в текстовом виде). Мы будем использовать более быстрый протокол ModBus-RTU.
Настройки модуля входов МВ110-16Д
Обратите внимание, что для модулей ввода есть программный фильтр дребезга контактов. Его мы тоже включаем.
Ещё у этой программы есть возможность контролировать состояние входов-выходов. С помощью этого можно отдельно протестировать каждый модуль на работоспособность.
Изучаем CodeSys
Итак, с помощью программы мы настроили все модули на одинаковые параметры связи и дали им адреса. Теперь их можно физически подключить к ПЛК, а сам ПЛК воткнуть в сетку. ПЛК ОВЕН 110 можно программировать тремя способами: через USB, через RS-232 и по сетке. Самый лучший способ из этого — программировать ПЛК по сетке, потому что в этом случае он не перезапускается, а программа заливается туда в горячем режиме. То-есть написали, загрузили, проверили. Что-то исправили? Сразу же загрузили и проверили. Если же программировать ПЛК по USB — то там надо вынимать USB-кабель после заливки программы, что адски неудобно.
Связь с ПЛК 110 по Ethernet
И теперь начинаем разбираться с CodeSys. Я скачал её прямо с сайта ОВЕНа, где она есть в русском варианте. Вообще я не люблю русские переводы специального софта, потому что переводят его те, кто ни фига не понимает в технике. Например, самый адский перевод был у AutoCad: «Вырезать, Обрезать, Растянуть, Расчленить, Взорвать». Или у P-CAD, где Net (соединение) перевели как «Сеть». Но в случае с CodeSys русский перевод мне помог разобраться в терминологии и в том, где что находится. После этого русский перевод мне уже не нужен, и я могу ориентироваться в английской среде свободно.
Сама среда состоит из дерева проекта, где несколько вкладок и элементов дерева. В них отображается как структура программы, так и всякие злобные параметры ПЛК и его внешние ресурсы. Все элементы дерева открываются кучей дочерних окон со своими настройками.
Среда разработки CodeSys v2 для ПЛК 110
Сама CodeSys поддерживает много языков программирования. В том числе и тех, на которых удобно программировать логические реле.
Пример проекта на CodeSys на нескольких языках одновременно
Например, можно программировать при помощи блок-схем (CFC). Это как нам в школе алгоритмы учили рисовать в стиле «Начало => Ввод данных => Если .. то => иначе => Конец». Тут это рисуется при помощи блоков:
Пример последовательных логических схем (CFC)
А можно програмировать функциональными блоками (FBD), как на логических реле. В этом случае схема исполняется не последовательно как в CFC, а по сигналам, как в обычной цифровой логике на микросхемах:
Пример разработки на функциональных блоках (FBD)
Для тех, кто переходит с обычных релюшек и автоматики есть возможность писать всё в релейной логике LD, LAD. Тогда всякие сигналы описываются контактами, которые включают или выключают реле:
Пример разработки на релейно-контактной схеме (LD)
А ещё есть язык инструкций IL. Он подойдёт тем, кто любит суровый ассемблер. Смотрите, как он похож на него же:
Пример разработки на языке инструкций (IL)
А на мой взгляд самый удобный язык для сложных задач — это обычный текст ST, который похож на смесь СИ и Pascal одновременно:
Пример разработки на редакторе кода (ST)
Тут тебе есть и комментарии, и возможность написать любые условия.
Внутри CodeSys можно совмещать все эти языки и создавать свои функциональные блоки. Например, вы можете на ST написать сложный блок, который чего-нибудь вычисляет и выдаёт на выходе логическое значение 1 или 0. А потом взять язык FBD и из этих блоков составить «простую» логическую схемку.
Распределяем ресурсы ПЛК
Наше программирование, конечно же, тесно связано с железом. И наша среда CodeSys должна знать то, какие железо мы сейчас используем. Это конечно же понятно: в разных ПЛК есть разное количество памяти, портов ввода-вывода и прочих штуковин.
Поэтому новый проект всегда начинается с выбора платформы. На английском это называется Target. Сама среда никогда не будет знать о всяких ОВЕНах и других ПЛК. Изначально она знает только о некоем абстрактном ядре «3S CodeSys». Чтобы она узнала про наши ПЛК, нам надо пойти на сайт разработчика и скачать оттуда Target-файлы для наших ПЛК.
После этого Target’ы загружаются в CodeSys (на версии 2 этот процесс адски мутный, неочевидный и противный), и мы наконец-то можем творить. Выбираем нужный вариант нашего ПЛК:
Выбор железа для разработки программы под ПЛК
Теперь мы сразу вспоминаем то, что ПЛК — это многозадачная система, внутри которой крутятся задачи — программы, которые что-нибудь делают. Задач может быть несколько, но для работы ПЛК нужна хотя бы одна. В CodeSys она обязана называться «PLC_PROG», и именно её нам сразу предлагают создать после выбора платформы ПЛК.
Сразу же при её создании надо выбрать язык, на котором вы будете писать код. Если вы вдруг ошиблись с названием языка (я постоянно путаю IL и ST), то можно просто удалить эту задачу и создать новую с тем же именем.
Создание основной программы по умолчанию
После этого наш проект создан и среда от нас отстала. Если мы пишем на ST, то в коде PLC_PROG достаточно поставить «;» и программа откомпилируется. Но работать ничего не будет. Почему? А потому что ПЛК не знает, как к его ресурсам обращаться и чего у него вообще есть.
И вот чтобы его этому научить — надо аккуратно и внимательно разобраться с его ресурсами и с тем, как туда прописывать внешние модули ввода-вывода. Всё это кажется лёгким только тогда, когда сам всё понял. А когда смотришь на конфигурацию ПЛК в самый первый раз, то от неё взрывается голова. Я разбирался с этим дней пять, потому что ещё и инструкция по работе с CodeSys на сайте ОВЕНа говорит «Сделайте это и то», но не говорит ПОЧЕМУ так надо делать. Я этот недостаток хочу исправить и потом пошлю ОВЕНу ссылку на эти посты.
Для того, чтобы CodeSys знала про все-все ресурсы и ввод-вывод всей системы на базе ПЛК, это всё надо прописать руками. То-есть, вся конфигурация системы прописывается в том же программном коде жёстко. И поэтому когда вы выбираете всякие модули ввода-вывода, назначаете им параметры связи и адреса, вы должны понимать, что это останется навсегда. А если надо будет поменять адрес устройства — то вам надо будет перекомпилировать проект.
Общий концепт ресурсов и обращения к ним сделан при помощи неких адресов. Адреса эти вычисляет сама среда по нашей конфигурации ПЛК. На скриншоте ниже эти адреса начинаются со знаков «AT %». Чтобы программист не мучился с этими адресами, он может создать обычные программные переменные, которые будут использовать вместо адресов понятные имена типа «WaterPump», которая на самом деле будет говорить о внешнем выходе по адресу типа «%QW6.3.0.0».
Поэтому первой нашей задачей будет изучить окошко «Конфигурация ПЛК» и то, что там можно делать. Давайте на него посмотрим:
Конфигурация ПЛК и его ресурсов
Слева у нас есть дерево, в котором будет показываться вся-вся конфигурация нашей системы. А справа от дерева появляются разные параметры, которые можно настраивать. Там же можно задать для самих себя понятные имена и названия всех объектов системы, чтобы не путаться.
Слева у меня сейчас развёрнута конфигурация самого ПЛК. Чего у нас тут есть? Есть два быстрых входа, 16 обычных входов (в сумме — 18). Так же есть четыре быстрых выхода и 10 обычных — в сумме 14. Это соотвествует тому, что у этого ПЛК действительно есть. Дополнительно есть Special Input — это кнопка «F1» на самом ПЛК и Special Output — это пищалка ПЛК. Если туда записать «1», то пищалка будет пищать и привлекать наше внимание к системе.
Около этих ресурсов есть обозначение «[FIX]» или «[SLOT]». Если написано «SLOT», то это означает что программно можно заставить среду воспринимать эти входы или выходы не как дискретные 1..0, а например как энкодер или ШИМ-регулятор. Это сделано для того, чтобы облегчить программирование с заставить ПЛК максимально автоматически обрабатывать данные с IO, не нагружая этим программиста. Соотвественно те ресурсы, которые «FIX» изменять нельзя и они всегда будут теми, какие они и есть.
Около каждого ресурса как раз и указан его адрес, по которому к нему можно обращаться. Вот если мы хотим программно включить быстрый выход 2, то нам нужен адрес «%QX2.0». Про то, как назначать адреса переменным, я расскажу позже.
Для каждого ресурса есть свой набор настроек. Вот например для выходов можно точно так же настроить безопасные значения, как и для внешних модулей ввода-вывода:
Настройка безопасных значений выходов ПЛК
Идём дальше! Это-то мы изучали внутренние ресурсы, которые есть на борту ПЛК. А как же нам добраться до внешних ресурсов? Вот у нас есть аж три модуля ввода-вывода. Но где же они?
А нигде! Их надо добавить ручками. Логика тут простая и технарская: то, что у тебя есть физически должно быть и в программе. Давайте вспомним, чего у нас есть физически? Модули? Неа! У нас есть протокол ModBus!
Поэтому мы кликаем на самом ПЛК и выбираем из меню этот самый ModBus (Master) вот так, как показано ниже. Master — потому что главный у нас в сети ПЛК, и именно он будет управлять всеми другими модулями. Так же там есть ещё и другие протоколы обмена для разных вариантов сети. Например можно было вообще взять собственный протокол «ОВЕН» и построить сетку на нём.
Добавляем внешний интерфейс связи
Обратите внимание, что этот протокол сейчас не привязан к физическим проводам ПЛК! После того, как мы добавим наш ModBus, система просто будет знать что есть некий абстрактный протокол, по которому гоняются байтики. Но через какой порт ПЛК это будет работать — она пока ещё не знает!
Что же делать? Придётся научить нашу систему нужному порту. Для этого мы разворачиваем дерево под нашим ModBus’ом и видим искомое. По умолчанию система подставила самый первый попавшийся интерфейс ПЛК — «Debug RS-232». Мы видим около него волшебную надпись «SLOT». Кликаем по ней правой кнопкой мыши и — вуаля! Мы можем заменить его на нужный на RS-485.
Выбираем тип интерфейса RS-485
Причём список замены будет только из тех вариантов, которые действительно есть в именно этом ПЛК. Например в некоторых ПЛК бывает аж два интерфейса RS-485, на которых можно построить две разные сетки ModBus.
И вот только теперь мы дошли до физического уровня: собственно самого RS-485. Для него у нас есть настройки протокола обмена и параметров связи. Если вы помните, то мы все модули конфигурировали на ModBus RTU и скорость обмена 9600. Теперь вставим эти же настройки в нашем ПЛК:
Настраиваем параметры протокола интерфейса
ПЛК сам следит за работой этого протокола и этого интерфейса. Нам не надо программно включать или отключать опрос модулей: он будет делаться автоматически, если есть хоть один внешний модуль, который надо опрашивать.
Вот сейчас мы как раз и добавим наши внешние модули. Сам ОВЕН рекомендует добавлять свои модули как «Unversal ModBus Device» — некое абстрактное устройство. Сделаем так:
Добавляем устройство ModBus
Теперь у нас появился некий внешний модуль, который подключен на нашу шину RS-485 и будет работать по ModBus. Но напоминаю вам то, что протокол ModBus — это просто способ читать и записывать байты в и из устройств. И более ничего. А вот что значит каждый байт и та область памяти, куда его надо записать/прочитать — знает разработчик модуля и разработчик системы на базе ПЛК.
Для каждого модуля надо будет задать параметры связи. Для нас это адрес модуля (ModuleSlaveAddress) и время опроса его контроллером. Контроллер будет автоматически общаться с модулем раз в столько миллисекунд, сколько мы укажем.
Настраиваем параметры устройства
Время опроса позволяет снизить нагрузку на шину связи. Например если модуль управляет лампочками освещения, то его можно опрашивать реже, отдавая время шины каким-нибудь более быстрым модулям аналогового регулирования.
Ну добавили мы модуль, и чего? А как система узнает как рулить его входами или выходами? Вообще, откуда она узнает, где они у него находятся? А узнает она это через человека, который достанет и прочитает инструкцию на модуль. Для любого устройства с протоколом ModBus производитель даёт таблицу, в которой указаны все адреса его регистров. Выглядит эта таблица вот таким образом, например:
Пример регистров устройства из документации
Тут нас интересует два момента. Так как это модуль ввода, то нам надо получать значения его входов. Производитель, чтобы не гонять по сети тьму байтов, упаковал все 16 входов в 16 бит — в два байта, в тип WORD. Значит, нас интересует регистр номер 51, который надо будет читать из модуля. Следующий момент, который нам важен — это проверить команду, которая используется для записи-чтения данных в этот модуль. Иногда они могут отличаться от стандартных.
Отлично! Вот теперь мы всё знаем, чтобы добавить это в наш ПЛК. Тыкаем менюшкой на нашем модуле и выбираем, что добавить. типы в CodeSys называются так:
- 8 Bit — BYTE, байт
- Register — INT, WORD — два байта
- 32 Bit — DWORD, четыре байта
Так как в документации видно что мы читаем двухбайтовое слово — то нам нужен тип «Register input»:
Добавляем регистр устройства в конфигурацию
Теперь задаём параметры именно для этого кусочка: адрес регистра, который читаем и команду, которой читаем.
Настраиваем адрес регистра и способ его опроса
Вот теперь (см. скриншот сверху) ПЛК знает что у нас есть протокол MoBus-RTU на основе интерфейса RS-485, на котором висит устройство с адресом «1», из которого мы читаем два байта из ячейки «51».
А вот как выглядит конфигурация ПЛК для моей системы. У меня стоит один модуль ввода на 16 входов и модуль вывода на 16 выходов. И на будущее для диммирования света стоит модуль аналогого вывода.
Полный список внешних устройств и внешних регистров
Назначение переменных в ПЛК
Вот теперь у нас есть все-все адреса наших ресурсов. Чтобы нам было удобно ими пользоваться, мы заведём для них программные переменные. Это тоже ручная работа, в которой требуется внимательность. А ещё её в CodeSys v2 делать не очень удобно, потому что в табличке для ввода переменных не меняется ширина колонок.
Посмотрим на конфигурацию ПЛК и выцепим оттуда адреса всех наших входов и выходов. Я их подчеркнул красным:
Адреса переменных внутреннего ввода-вывода
А теперь создадим переменные для них. Для этого мы идём в раздел «Глобальные переменные» и начинаем заполнять табличку примерно так:
Создаём переменные внутреннего ввода-вывода
Видите? Мы указываем название переменной и прописываем её адрес и тип. И теперь чтобы включить внутренний выход 1, нам надо написать «MOuts0_1 := TRUE;».
Проделаем то же самое с внешними устройствами. Тут адреса становятся длиннее:
Адреса переменных внешнего ввода-вывода
И редактировать их не совсем удобно. Заполняем переменные:
Создаём переменные внешнего ввода-вывода
Кроме переменных, которые красиво связывают адреса ресурсов и код, можно насоздавать своих собственных переменных для любых задач. Всё эти переменные будут глобальными: они будут доступны из любого места любой программы.
Ну и если теперь залить эту пустую программу (в коде мы ничего не написали) в ПЛК, то он сразу же примется опрашивать наши модули. На фотке ниже я случайно заснял момент, когда ПЛК опрашивает один из модулей.
После запуска ПЛК начинает опрашивать все внешние устройства
Программируем
А дальше начинается колдунство. Мне надо было на тот момент вообще научиться работать с CodeSys. Я тогда не разобратся, можно ли адресовать отдельные биты переменных и написал простые участки кода, которые приводили все переменные внешних ресурсов в удобоваримый для меня код.
Видите, я просто беру значение бита нужной мне переменной (от входа) и заношу его в глобальную переменную, которая уже обозначает конкретную кнопку управления светом.
Код преобразования входных переменных к типу BOOL
То же самое я проделал с выходами:
Код преобразования выходных переменных из типа BOOL
Теперь можно кодить. Для теста я сделал самое простое: нажимаем кнопку — срабатывает выход. То-есть мы просто присваиваем выход входу и наслаждаемся работой мощного ПЛК
Кусочек прошивки для управления освещением на ПЛК
Ещё я нашёл в Сети пример того, как сделать на CodeSys импульсное реле и тоже его протестировал. Кстати, пример лежит на форуме ОВЕНа.
На форуме у них не совсем приятно. Там тусуются ушлые товарищи (не из ОВЕНа), которые в личке каждому новому пользователю сразу предлагают услуги по разработке и поддержке решений на ПЛК. Мне один такой тоже написал. Я ради прикола послал его нафиг и расспросил, почему он это сделал. Ответ был типично маркетологовский: «Ну так если ты тут зарегался, значит ты можешь быть моим клиентом». В итоге товарищ был послан далеко и надолго. Особенно после того, как стал угрожать мне завалить мой блог за посыл нахуй. М-да. Страшно, в общем, на форуме ОВЕНа.
Задачи
Кратко покажу, чего есть из задач и чего с ними можно делать. Напоминаю: задача — это кусок программы, который ПЛК будет выполнять через указанное время. Есть системные события, которые показаны ниже (запуск ПЛК, остановка ПЛК, перед и после сброса):
Настройка задач в ПЛК
А мы хотим навесить на ПЛК свои собственные задачи. Вот у меня их получилось две штуки. Одна считает импульсы со счётчиков воды, а другая обслуживает управление освещением.
Для каждой задачи задаётся время её исполнения. Оно может измеряться в миллисекундах, часах и даже днях.
Конфигурация задачи в ПЛК
Ну а для самой задачи задаётся то, что будет выполняться:
Настройка вызова подпрограммы в задаче
Связь с ПЛК и заливка программы
Ну и теперь нам осталось только залить нашу программу в ПЛК. Для этого мы идём в меню «Онлайн -> Параметры связи» и создаём там подключение по сетке через протокол TCP.
Настройка связи с ПЛК по протоколу IP
После этого достаточно выбрать команду подключения к ПЛК:
Начинаем подключение к ПЛК
CodeSys устанавливает связь с ПЛК и спрашивает нас о том, что нам надо сделать с программой. Если ПЛК только с завода и там нет никакой программы — то CodeSys предложит загрузить новую программу в ПЛК. А если программа в ПЛК уже была, то система предложит загрузить новую или перезаписать программу полностью:
Запрос среды разработки о загрузке программы в ПЛК
У ПЛК и здесь всё отличается от логических реле. В логическом реле программа загружается навсегда и будет работать после выключения и включения питания реле. А у ПЛК программа загружается просто в память и работает только для момента выключения питания ПЛК. Это сделано специально, чтобы можно было отлаживать программу и не испортить рабочую систему и программу. Скажем, можно поиграться с другой версией программы, а потом передёрнуть питание — и ПЛК будет работать по старому.
Если же мы хотим записать нашу программу в ПЛК навсегда (чтобы она работала при следующих включениях питания), то нам надо выбрать пункт «Создание загрузочного проекта». В этом случае программа без запросов записывается в ПЛК и будет выполняться при следующем включении его питания.
Создание загрузочного проекта в ПЛК
Из дополнительных возможностей можно загрузить в ПЛК исходники проекта или любой файл (размером несколько мегабайт). Это полезно, если мы хотим оставить внутри ПЛК архив документации по всему проекту.
При подключенной связи с ПЛК можно наблюдать как и чего работает и производить отладку программы. Вот как выглядит это на нашей:
Работа среды CodeSys в режиме отладки программы
Собственно по программированию всё. Если сказать всё сжато, то для того чтобы начать работать с ПЛК, надо занести в него все его ресурсы и внешние модули. После этого можно назначить переменные по адресам и писать обычный программный код.
Библиотеки
А ещё под CodeSys есть много библиотек с готовыми функцями. Самая известная среди них — библиотека OSCAT. Я её скачал и нашёл там много интересного. Например вот модуль CLICK, который может определять одинарное, двойное и тройное нажатие на кнопку. При помощи него можно делать например так, чтобы если мы погасили весь свет одной кнопкой, то при двойном нажатии на неё весь свет включился там же, где и был включен.
Пример из библиотеки OSCAT: Определение количества нажатий
А вот навороченный диммер с кучей предустановок и возможностей. Сигнал с диммера можно направить на модуль аналогового вывода или на диммер, который управляется по Modbus напрямую и управлять освещением.
Пример из библиотеки OSCAT: Многофункциональный диммер
Ну а я же сделал для заказчика простую программу включения и выключения света и реализацию функции защиты от протечек. Про это я расскажу позже в третьей части статьи.
Программирование Siemens
Сименс ПЛК программирование может понадобиться в следующих случаях:
- происходит в составе с шкафом автоматики используется для управления различными системами автоматизации разного назначения и типа;
- создание пользовательского интерфейса устройств с дисплеями или с одновременным подключением к панели оператора;
- разработка программ для обработки, архивирования и хранения, а также вывода итоговых показаний с внутренними вычислениями самих PLC и от внешних приборов;
- для организации взаимодействия контроллера с системами формата SCADA;
- реализация в составе объемных систем автоматизации, где в схеме подключено сразу несколько ПЛК;
- реализация функционала по взаимодействию в специальных режимах Slave и Master с промышленным оборудованием через протоколы связи.
Программирование Сименс контроллеров осуществляется в определенных средах. Одной из них является TIA Portal, которая предназначена для организации систем автоматизации разного уровня сложности и включает определенный набор программных компонентов: Simatic Step 7, WinCC, PLCSIM. Функционал:
- разработка конфигурации и отладка компонентов систем;
- создание и наладка коммуникационных сетей;
- разработка программного обеспечения для контроллеров;
- организация панелей операторов Simatic и реализация ЧМИ (человеко-машинный интерфейс).
Например, программирование контроллеров Siemens Logo производится, как и в классическом общем случае, после монтажа и настройки прибора. В данном случае простыми словами процесс представляет собой ввод коммутационной схемы. Перечислим основные этапы:
- для начала с помощью стандартной схемы из руководства следует разобраться с расположением соединительных элементов: входов и выходов;
- далее необходимо разобраться с блоками и их номерами. Блоки — это функции, которые отвечают за преобразование данных на входе в информацию на выходе. Поэтому требуется соединить соединительные элементы с помощью выбора необходимого соединения из меню Co. Самыми простыми блоками становятся логические операции. При вставке блока в программу первому назначается определенный номер, который в дальнейшем используется для отображения связей между блоками;
- создание схемы происходит путем соединения блоков с соединительными элементами. Сам процесс начинается с выхода, которым является или реле или нагрузка, за счет которых происходит управление. На этом этапе нужно подключить выключатели S1-S3 к винтовым клеммам;
- после проектирования схемы необходимо произвести ввод и запуск программы. Для этого PLC Siemens Logo подключается к сети, и включается питание. Затем логический контроллер переключается в режим программирования, где на основании предыдущей схемы организуется нужная программа.
Типы ПЛК
Современные ПЛК, использующие инновационные технологии, далеко ушли от первых упрощенных реализаций промышленного контроллера, но заложенные в систему управления универсальные принципы были стандартизированы и успешно развиваются уже на базе новейших технологий.
Крупнейшими мировыми производителями ПЛК сегодня являются компании Siemens AG, Allen-Bradley, Rockwell Automation, Schneider Electric, Omron. Кроме них ПЛК выпускают и многие другие производители, включая российские компании ООО КОНТАР, Овен, Сегнетикс, Fastwel Групп, группа компаний Текон и другие.
Рис. 2. Моноблочные программируемые логические контроллеры
По конструктивному исполнению ПЛК делят на моноблочные (рисунок 2) и модульные. В корпусе моноблочного ПЛК наряду с ЦП, памятью и блоком питания размещается фиксированный набор входов/выходов. В модульных ПЛК используют отдельно устанавливаемые модули входов/выходов. Согласно требованиям МЭК 61131, их тип и количество могут меняться в зависимости от поставленной задачи и обновляться с течением времени. ПЛК подобной концепции представлены на рисунке 3. Подобные ПЛК могут действовать в режиме «ведущего» и расширяться «ведомыми» ПЛК через интерфейс Ethernet.
Рис. 3. Программируемые логические контроллеры с расширенными возможностями
Моноблочные функционально завершенные ПЛК могут включать в себя небольшой дисплей и кнопки управления. Дисплей предназначен для отображения текущих рабочих параметров и вводимых с помощью кнопок команд рабочих программ и технологических установок. Более сложные ПЛК комбинируются из отдельных функциональных модулей, совместно закрепляемых на стандартной монтажной рейке. В зависимости от количества обслуживаемых входов и выходов, устанавливается необходимое количество модулей ввода и вывода.
Источник питания может быть встроенным в основной блок ПЛК, но чаще выполнен в виде отдельного блока питания (БП), закрепляемого рядом на стандартной рейке. Блок питания небольшой мощности представлен на рисунке 4.
Рис. 4. Блок питания для ПЛК
Первичным источником для БП чаще всего служит промышленная сеть 24/48/110/220/400 В, 50 Гц. Другие модели БП могут использовать в качестве первичного источник постоянного напряжения на 24/48/125 В. Стандартными для промышленного оборудования и ПЛК являются выходные напряжения БП: 12, 24 и 48 В. В системах повышенной надежности возможна установка двух специальных резервированных БП для дублирования электропитания.
Для сохранения информации при аварийных отключениях сети электропитания в ПЛК используют дополнительную батарею.
Как известно, первоначальная концепция программируемого логического контроллера сформировалась во времена перехода с релейно-транзисторных систем управления промышленным оборудованием на появившиеся тогда микроконтроллеры. Подобные ПЛК с 8- и 16-разрядными МП ограниченной производительности до сих пор успешно эксплуатируются и находят новые сферы применения.
Огромный прогресс в развитии микроэлектроники затронул всю элементную базу ПЛК. У них значительно расширился диапазон функциональных возможностей. Несколько лет назад немыслимы были аналоговая обработка, визуализация технологических процессов или даже раздельное использование ресурсов ЦП в качестве непосредственного управляющего устройства. В настоящее время поддержка этих функций входит в базовую версию многих ПЛК.
Примером подобного подхода является отдельное направление в линейке продукции компании Texas Instruments. Как известно, TI не входит в число производителей ПЛК, но выпускает для них специализированные ЦП и сетевые процессоры, компоненты для создания периферийных цифровых и аналоговых модулей, контроллеры температуры, смешанные модули цифровых и аналоговых входов/выходов.
Блок схема процессора TI Sitara AM570x на рисунке 5 позволяет судить об огромной функциональной оснащенности этого ARM-процессора, работающего на частоте до 1 ГГц, поддерживающего интерфейсы CAN, I²C, McASP, McSPI, SPI, UART, USB и способного работать в диапазоне температур 0…90°С.
Рис. 5. Блок-схема процессора TI Sitara AM570x
Программирование ПЛК Овен
ПЛК Овен программирование осуществляется на языках МЭК 61131-3. Среди них используются IL, FBD, LD, SFC, ST. Как уже говорилось выше, для этого используются среды от производителя (наиболее подходящий вариант) или стороннее ПО. Если речь идет о продукции Овен, то выбор падает на CoDeSys.
Указанная среда программирования Овен контроллеров помогает спроектировать подходящую программу, а также произвести ее отладку и загрузку в ПЛК. Для использования CoDeSys пользователь должен позаботиться о среде исполнения, которую предоставляет производитель или создает сам разработчик.
Помимо этого программирование Овен контроллеров может производиться с помощью инструмента диспетчеризации предприятия MasterSCADA, который может выступать в качестве подходящей среды для разработки и внедрения нужной программы. Преимуществом варианта становится возможность объединения целого множества ПЛК, которые работают на разных системах.
Программное обеспечение ПЛК
Современный ПЛК имеет развитый комплекс программных средств, состоящих из системного программного обеспечения ПЛК, предоставляемого производителем контроллера и сторонних или собственных программных средств, предназначенных для разработки, отладки и записи в контроллер пользовательских программ.
Системное программное обеспечение ПЛК, состоящее из операционной системы с интегрированным в нее набором драйверов, отвечает за выполнение контроллером пользовательского приложения, обслуживает низкоуровневую систему ввода-вывода контроллера, интерфейсы передачи данных, управляет распределением памяти, режимами энергопотребления, таймерами, осуществляет обработку ошибок, позволяя пользователю, разрабатывающему приложение, полностью сосредоточиться на алгоритмической части решения прикладной задачи.
Средства разработки и отладки пользовательских программ позволяют создавать и корректировать программы, реализующие алгоритмы работы контроллера, моделировать на ПК процесс выполнения программы контроллером, наблюдать за промежуточными результатами вычислений, а также записывать программное обеспечение в контроллер.
ПЛК Delta
Программирование ПЛК Дельта осуществляется посредством специального пакета WPLSoft, который не нуждается в большом объеме ресурсов персонального компьютера. Поэтому подходит для использования специалистов разных категорий и является очень простым. Здесь применяются 3 языка: LD, SFC и IL.
Главной особенностью процесса здесь становится создание ступенчатых диаграмм, которые в итоге составляют общую программу. Процесс производится построчно. Этот фактор существенно упрощает разработку ПО для PLC Delta.
Техническое задание
Создание и утверждение технического задания (ТЗ) – очень важная часть разработки ПО. От грамотно составленного ТЗ зависит, насколько эффективно будет вестись разработка.
Опытные программисты знают, что программа не пишется за один раз. Как правило, софт корректируется и приближается итерациями к конечному варианту в соответствии с пожеланиями конструкторов, инженеров, электриков, механиков и технологов. Поэтому очень важно на этапе составления ТЗ плотно взаимодействовать со всеми заинтересованными специалистами, которые подписывают ТЗ, а по окончании принимают работу.
Schneider Electric
Программирование ПЛК Шнайдер Электрик может быть выполнено с участием одной из нескольких сред: EcoStruxure Machine Expert, EcoStruxure Machine Expert HVAC, Unity Pro, Zelio Soft. Создание программ используется для тех же целей, что и контроллеров марки Siemens. Наиболее часто предназначены для управления технологическими процессами систем автоматизации следующих видов:
- вентиляционное оборудование;
- системы кондиционирования;
- индивидуальные тепловые пункты;
- осветительные системы;
- управления конвейерными линиями и станками;
- водоподготовка;
- упаковочное оборудование;
- грузоподъемные машины и сопутствующие механизмы.
Требования, ограничения и проблемы при проектировании и производстве ПЛК
Таким образом, становится понятно, что ПЛК — это просто особым образом спроектированная цифровая система управления на основе процессоров разной мощности и с различной функциональной оснащенностью, в зависимости от предназначения. Такую систему можно также считать специализированным мини-компьютером. Причем она изначально ориентирована на эксплуатацию в цехах промышленных предприятий, где имеется множество источников электромагнитных помех, а температура может быть как положительной, так и отрицательной. Дополнительно к минимизации воздействия вышеуказанных факторов необходимо предусмотреть и защиту от агрессивной внешней среды, включающей пыль, брызги технологических жидкостей и паровоздушные взвеси. В таких случаях предусмотрена установка ПЛК в защитные шкафы или в удаленных помещениях. Отдельные модули могут размещаться на удалении до сотен метров от основного комплекта ПЛК и эксплуатироваться при экстремальных внешних температурах. Согласно МЭК 61131, для ПЛК с наружной установкой допустима температура 5…55°C. Для устанавливаемого в закрытых шкафах ПЛК необходимо обеспечить рабочий диапазон 5…40°C при относительной влажности 10…95% (без образования конденсата).
Тип ПЛК выбирается при проектировании системы управления и зависит от поставленных задач и условий производства. В отдельных случаях это может быть моноблочный ПЛК с ограниченными функциями, имеющий достаточное количество входов и выходов. В других условиях потребуются ПЛК с расширенными возможностями, позволяющими использовать распределенную конфигурацию с удаленными модулями входа/выхода и с удаленными пультами управления технологическим процессом.
Связь между удаленными блоками и основным ядром ПЛК осуществляется через помехозащищенные полевые шины по медным кабелям и оптическим линиям связи. В отдельных случаях, например, для связи с подвижными объектами, применяют беспроводные технологии, чаще всего это сети и каналы Wi-Fi. Для взаимодействия с другими ПЛК могут применяться как широко известные интерфейсы RS-232 и RS-485, так и более помехозащищенные промышленные варианты типа Profibus и CAN.
ПЛК Мицубиси
Программирование ПЛК Mitsubishi организуется с помощью среды GX Works2 нового поколения. Поддерживает следующие языки: IL, LD, SFC, LD, FBD, ST. Среда бывает двух видов GX Works2 и GX Works2 FX. Вторая предназначена для настройки контроллеров серии FX:
Функциональные возможности среды программирования для ПЛК Митсубиси:
- параметризация функциональных модулей;
- применение программных библиотек и специальных функциональных блоков;
- моделирование является встроенным внутрь системы для автономной проверки конфигурации и программ;
- широкий спектр функций для диагностики и отладки;
- возможность восстановления предыдущих версий программ и проведения сравнения с текущими;
- совместимость с рядом проектов GX Developer.
Как работает ПЛК
Перед применением ПЛК, в него необходимо загрузить системное ПО и пользовательскую программу, разработанную для решения конкретной прикладной задачи. Все программное обеспечение ПЛК обычно располагается в энергонезависимой памяти и защищено от повреждения в случае сброса питания. Изменение кода прикладной программы в памяти ПЛК может быть выполнено пользователем многократно.
Типовая схема работы ПЛК может быть описана следующим образом.
К внешним каналам ввода контроллера подключаются датчики, к каналам вывода — исполнительные механизмы. На контроллер подается питание и его системное ПО начинает циклически исполнять пользовательское приложение.
Цикл выполнения приложения состоит из следующих, последовательных этапов:
- системное ПО контроллера считывает состояние каждого входного канала контроллера и записывает его во внутреннюю память контроллера;
- системное ПО контроллера, последовательно, команда за командой, выполняет всё пользовательское приложение: каждая исполняемая команда приложения считывает из внутренней памяти необходимые ей данные, производит с ними вычисления и записывает результаты своих расчетов во внутреннюю память контроллера;
- системное ПО контроллера получает из внутренней памяти те значения, которые необходимо отобразить на выходе контроллера, и переводит выходные каналы в соответствующее состояние, после чего, весь цикл выполнения повторяется с начала.
Рассмотренный подход к архитектуре среды исполнения пользовательской программы, дает возможность реализовать логически параллельное исполнение контроллером нескольких задач в рамках одной пользовательской программы, позволяя автоматизировать управление несколькими одновременно происходящими процессами используя единственный ПЛК.