Codesys команды плк браузер
Продолжаю делиться кодом и опытом. В этом посте выкладываю выстраданные экспортированные файлы универсальных конфигураций для ОВЕН ПЛК 150 и ПЛК 160. В них нет ничего особенно сложного, просто пришел я к их структуре не сразу.
На работе я и мои коллеги по отделу в основном занимаемся комплексной автоматизацией тепловых пунктов, которые отличаются друг от друга обычно лишь количественно. Соответственно и программы однотипны. Поэтому я поставил перед собой задачу написать универсальную шаблонную программу, позволяющую с минимальными усилиями подстроить себя под любой тепловой пункт. Это задачу я в принципе выполнил, хотя и сейчас постоянно добавляю и изменяю что-то в коде, а иногда и вовсе переписываю заново. Одним из пунктов универсализации было создание конфигурации ПЛК, которую не пришлось бы изменять (возможно, лишь удалять лишнее для сокращения размера программы и увеличения скорости работы интерфейсов). Конфигурирование ПЛК в CoDeSys - это довольно нудное и долгое занятие: много кликаний мышью (с тачпадом – вообще беда), невозможность копировать данные из конфигураций других программ, невозможность выделения и копирования/удаления/редактирования более одного модуля. В общем, неплохо сделать конфигурацию один раз и не вспоминать о ней.
Немного справки. Конфигурация ПЛК располагается во вкладке Ресурсы и позволяет (для ОВЕН ПЛК 150 и ПЛК 160): — организовать доступ к периферии программируемого логического контроллера и настроить её (дискретные и аналоговые входы/выходы, цифровые интерфейсы RS-485 и RS-232, кнопки на панели, зуммер); — создать архиватор данных и модуль статистики; — установить ограничения времени цикла ПЛК.
Базовая конфигурация создается одновременно с проектом, когда вы выбираете ее в настройках целевой платформы. В любой момент можно добавлять в конфигурацию ПЛК дополнительные модули и редактировать существующие. Редактирование заключается в изменении параметров модуля, написании комментариев к нему, а также в именовании переменных, входящих в его состав. Все эти действия для каждого модуля совершать не обязательно, в частности, именовать переменные – к ним можно обращаться по прямым адресам (начинающимся со знака %). Переменные, задаваемые в конфигурации, являются глобальными! Варианты работы с переменными конфигуратора такие:
— Объявить глобальные переменные в соответствующем разделе и связать их с прямыми адресами. Неудобство заключается в том, что при добавлении или удалении модулей эти адреса смещаются. Хотя есть и достоинства. Подробнее читайте в документации (ссылка на скачивание - внизу).
— Задать в самом конфигураторе (нажав два раза мышкой на буквы AT) имена вроде: temperaturaPodachi , puskNasosa1 , alarmOfInverterOfFifthPumpOfColdWaterSupply и подобные, связанные с процессом, контролируемым ПЛК.
— Но для поставленной задачи универсализации удобнее всего дать переменным в конфигураторе следующие имена:
PLC_DIn – дискретный вход n ПЛК,
PLC_DOn – дискретный выход n ПЛК,
PLC_AIn – аналоговый вход n ПЛК,
PLC_AOn – аналоговый выход n ПЛК,
MVA1_AIn – аналоговый вход n первого прибора МВА8,
MDVV_DI_PORT – маска дискретных входов прибора МДВВ (обращение идет к битам, т.е. MDVV_DI_PORT.n - дискретный вход (n+1)),
TRM32_1 – первый вход прибора ТРМ32,
и т.д. в таком духе. После этого создать промежуточные глобальные и/или локальные переменные (теперь спокойно можно использовать массивы и структуры) с именами, несущими информацию о технологических процессах (например, температуры, давления, пуски/работы/аварии частотных преобразователей, сигналы c ПИД-регулятора на открытие/закрытие КЗР и т.д.), и связать их с переменными из конфигурации ПЛК.
Таким образом, можно написать универсальную программу-шаблон, описывающую все возможные процессы на однотипных объектах и использующую промежуточные переменные. Присвоение промежуточным переменным переменных из конфигурации можно вынести в одно место, и в нём указывать к какому входу, выходу, регистру относится каждая промежуточная переменная. Лишние, незадействованные на конкретном объекте, части кода можно удалить, закомментировать или оставить, если они не мешают оставшемуся коду (грузиться программа будет дольше). В итоге нет необходимости перелопачивать весь код, и сейчас для адаптации шаблонной программы под объект у нас уходит всего несколько минут. Также сильно уменьшается вероятность совершить ошибку или пропустить что-то.
Помимо этого, программа становится независимой от платформы. Мы используем одну программу для разных моделей программируемых контроллеров со своими конфигурациями, созданными по четко заданным правилам.
Программный комплекс CoDeSys разработан компанией 3S-Smart Software Solutions GmbH (3S). Основным его назначением является программирование ПЛК и промышленных компьютеров в стандарте МЭК 61131-3. Ряд неординарных решений 3S, иногда наперекор сложившимся на рынке традициям и желанию получения быстрой прибыли, привел к тому, что CoDeSys стал штатным инструментом программирования ПЛК ведущих европейских изготовителей: ABB, Beckhoff, Beck IPC, Berger Lahr, Bosch Rexroth, ifm, Keb, Kontron, Lenze, Moeller, WAGO, Fastwel и др. Некоторые из них используют CoDeSys как базовое ядро собственных систем программирования, известных под собственными торговыми марками.
Несмотря на очевидно наметившееся развитие CoDeSys в сторону обеспечения требований ПЛК высшего класса, комплекс можно применять и с недорогими моделями контроллеров. Специализированные встроенные компиляторы машинного кода и гибко адаптируемая система исполнения позволяют "выжать" максимум из ограниченных аппаратных ресурсов.
Как средство программирования ПЛК CoDeSys можно разделить на 2 части: среду программирования и систему исполнения. Среда программирования функционирует на персональном компьютере в среде Windows:
Поскольку CoDeSys дает машинный код, поддержка его исполнения достаточно проста и по минимуму сводится к набору функций поддержки ввода-вывода и отладки. Система исполнения функционирует в ПЛК и обеспечивает загрузку код прикладной программы, "горячее" обновление кода, отладку, управление задачами и ряд сервисных функций. Система исполнения поставляется 3S изготовителям ПЛК (OEM) в виде исходных текстов. Это позволяет максимально эффективно реализовать поддержку аппаратных средств, без каких либо промежуточных механизмов. Изготовителю оборудования требуется, дописать аппаратно-зависимые функции ввода-вывода, возможно, отредактировать функции поддержки канала связи на физическом уровне (через API при наличии ОС) и функции записи кода прикладной программы в ППЗУ (Flash, диск и др.). Далее он компилирует готовую систему исполнения и помещает ее код в ПЗУ (или на загрузочный диск) своего ПЛК. Теперь ПЛК готов для поставки заказчикам.
Естественно OEM может добавить в систему исполнения собственные функции и поддержку нестандартной аппаратуры. Например, если контроллер имеет достаточно сложный программно-аппаратный счетчик, мы можем полностью встроить его в систему исполнения. Пользователю же будут "видны" только переменные, содержащие готовые результаты. Поддержка нестандартного оборудования или сети, реализуется, таким образом, прозрачно для пользователя.
Одна интересная возможность для OEM в CoDeSys это внешние библиотеки. Допустим, вы уже имеете значительные наработки собственного ПО на языке С. Возникает вопрос, не придется ли все это выбросить при переходе к CoDeSys? Нет. Вы можете написать в CoDeSys интерфейсы (объявления) ваших функций (или функциональных блоков) и сохранить их как внешнюю библиотеку. Сам код реализации функций вы создаете внешним С компилятором и включаете его либо в TSP (см. ниже) в виде obj файла или "прячете" в систему исполнения. Конечно, пользователь не может редактировать эти функции, но он использует их абсолютно свободно наравне со стандартными компонентами.
Конечно, можно написать библиотеки и в самом CoDeSys (внутренние библиотеки). Менеджер лицензий позволяет защитить их от изменения и просмотра, либо даже сделать их платными. После оплаты вам за использование вспомогательной библиотеки, пользователь просто активирует полученную лицензию. Этот метод часто используется и самой компанией 3S при поставке их библиотек CANopen, Modbus и SoftMotion.
С целью унификации системных расширений, часто предлагаемых изготовителями контролеров, 3S разработаны 24 внешних системных библиотеки (SysLib…). В их состав включены функции поддержки работы конечного пользователя с системным таймером, аппаратными часами реального времени, файловой системой контроллера, реализации обработчиков аппаратных прерываний в МЭК функциях, обработки системных событий, синхронизации задач, управления работой ПЛК и планировщиком задач системы исполнения, работы с последовательными портами, сокетами и др. (подробнее см. SysLibs_Overview_RU.pdf). Какие из данных возможностей необходимо поддержать и соответственно, какие системные библиотеки включить пакет поддержки ПЛК, решает изготовитель.
Интересно, что сверх всех 22х стандартных элементарных типов данных МЭК 61131-3 CoDeSys поддерживает работу с указателями. Это дает возможность писать низкоуровневые аппаратные функции непосредственно на языках МЭК. Кроме того, опытные пользователи имеют механизм для эффективной работы с объемными данными и файлами. Учитывая то что, языки МЭК относятся к языкам со строгой типизацией, количество поддерживаемых средой программирования типов данных очень важно. Их перечень служит первейшим индикатором класса системы МЭК программирования.
Общение системы программирования и системы исполнения происходит через так называемый Gateway server. Обычно сверху, со средой программирования он соединяется по TCP/IP, с системой исполнения по последовательному каналу или fieldbus. Среда программирования и Gateway server не обязательно должны функционировать на одной машине. Интерфейсы сервера и сверху и снизу открыты. То есть OEM может применить для связи среды программирования с контроллером собственный протокол, либо написать дополнительные программы, использующие протокол CoDeSys. Через тот же Gateway server работают и входящие в комплект (бесплатно) OPC и DDE серверы.
Еще один специфичный для оборудования компонент CoDeSys это ПЛК-браузер. Для пользователя это окно текстового терминала, оснащенного набором команд уникальных для данного ПЛК. Команды передаются контроллеру и выполняются там, так как это реализовал OEM. Это дает возможность посмотреть версию системного ПО, дамп памяти, выполнить тесты оборудования, настроить определенные параметры и др.
Из отладочных функций CoDeSys интересен инструмент графической трассировки значений переменных. С его помощью можно проводить отладку не только ПО, но и оборудования, причем без написания программы. Весьма удобно и наличие встроенной системы визуализации, функционирующей как в инструментальной среде, так и в ПЛК (имеющем дисплей) и Web. На практике, пользователи выполняют достаточно сложные проекты автоматизации в CoDeSys без необходимости приобретения SCADA:
В настоящее время CoDeSys поддерживает семейства: Intel 8051, Intel 80x86 / 80186/ Pentium, семейство ARM, MIPS, Motorola MC68000 / MC68332/ ColdFire, PowerPC, Hitachi SH 2/3/4, H8, Infineon C16x, Infineon TriCore и Texas Instruments TMS32028x.
Особняком стоит система исполнения CoDeSys SP RTE для Windows XP/NT/2000. Она включает собственное ядро жесткого реального времени, функционирующее под Windows. Эта система не требует адаптации. Связь с оборудованием происходит через драйверы. SDK включен в комплект поставки.
Все это может показаться сложным. Но конечный пользователь всегда получает ПЛК, оснащенный готовой и настроенной системой программирования. Ему необходимо только установить на своем компьютере среду программирования CoDeSys и так называемые файлы поддержки целевой платформы (TSP). Благодаря которым CoDeSys получает информацию о типе процессора, распределении памяти, наименованиях и конфигурации модулей ввода-вывода, сети и т.д. Причем все основные настройки уже заданы изготовителем. То есть задача пользователя просто выбрать нужный ПЛК в списке. TSP может включать описания поддерживаемых в системе модулей, таким образом, пользователь получает возможность конфигурирования модульных систем, включая распределенные. Специфичные для оборудования файлы справочной системы также интегрируются в CoDeSys. В итоге пользователь работает в среде программирования так, как будто она специально написана для используемого им ПЛК:
Среда программирования CoDeSys поставляется бесплатно. Предметом лицензирования является только система исполнения. Но это опять же проблема изготовителя. Как правило, OEM приобретает лицензии оптом, также как и комплектацию для сборки аппаратуры. Пользователь же получает готовый комплекс программирования в одной коробке с ПЛК. Он не должен ни чего докупать, лицензировать, возиться с аппаратными ключами, счетчиками установок и др. Без всяких ограничений он может загрузить с сайта 3S новейшую версию CoDeSys и использовать ее на любом числе компьютеров. В отличие от конкурирующих систем программирования, бизнес модель 3S полностью ориентирована на удобство применения именно конечным пользователем.
Обобщив сказанное, выделим основные моменты, делающие CoDeSys привлекательным для изготовителей ПЛК.
- Среда программирования поставляется бесплатно (включая DDE, OPC). Ее можно расширять и поставлять как собственный продукт.
- Бизнес модель 3S ориентирована на конечного пользователя. Он имеет дело только с поставщиком контроллеров, не должен ничего покупать у 3S. Актуальные обновления CoDeSys всегда доступны бесплатно.
- Поддержка CoDeSys означает совместимость вашего оборудования с большим числом новейших ПЛК высшего класса. Участие в CoDeSys Automation Alliance открывает вашей продукции доступ на Европейский рынок.
- Рекордное быстродействие прикладных МЭК программам. Встроенный компилятор непосредственно формирует машинный код для целевого микропроцессора. Пользователь может писать даже обработчики аппаратных прерываний на МЭК языках (если это разрешено изготовителем ПЛК) и синхронизировать параллельные процессы с микросекундной точностью.
- Для создания библиотек быстрых функций не обязательно использовать внешние средства (C компилятор). Как результат переносимость и нормальная работа в режиме эмуляции.
- Возможность включения собственных программных расширений наравне со стандартными, включая встроенную систему подсказки.
- Доступны исходные тексты системы исполнения.
- Полная и даже расширенная реализация стандарта МЭК 61131-3.
- Упрощенный SFC, CFC.
- Интегрированные средства эмуляции и визуального моделирования.
- Встроенные конфигураторы модульных систем и распределенных fieldbus систем (CANopen, DeviceNet, Profibus и др.).
- 3 механизма создания распределенных приложений: высокоуровневое связывание переменных (network variables), объектная master - slave модель (аналогично PDO в CANopen), библиотеки нестандартных сетей или распределенный ввод/вывод (реализуется изготовителем ПЛК).
- Встроенная, целевая и web визуализация.
- Ряд дополнительных возможностей (библиотеки CANopen, Modbus, система управления версиями ENI. SoftMotion).
- CoDeSys заслуженно называют стандартом реализации и развития МЭК инструментов программирования. Концепт-версия 3.0 включает более 100 оригинальных новшеств, включая революционные (ООП, контроль версий компонентов, программирование безопасных систем и др.). Подробнее см. текст презентации И.В. Петров «Перспективы развития языков МЭК 61131-3 в новом поколении комплекса CoDeSys».
И.В. Петров, ПК "Пролог" из выступления на конференции “ПРОМЫШЛЕННЫЕ КОНТРОЛЛЕРЫ: от А до Я” Москва, ДК МАИ 1 ноября 2005г.
I n t e l i s a r e g i s t e r e d t r a d ema r k a nd 802 8 6 , 8 0 3 8 6 , 8 0 48 6 , P e n ti u m a r e t r a d ema r k s o f I n t e l C o r p o r a ti o n .
M i c r o s o f t , MS a nd MS - D O S a r e r e g i s t e r e d t r a d ema r k s , W i n d o ws i s a t r a d ema r k o f M i c r o s o f t C o r p o r a t i o n .
Т е к ст д а нн о го д о к у м е н та п р е д н аз н а ч ен д ля и с п о л ь з о в а ния C o D e S y s V 2 . 3 с р у сс к им и а н г л ий с к им ин т е р ф ей -
1 . 3 С о с т ав б а з о в ой п о л ь з о в а т е л ь с к ой д о к у м ен т а ции по C o D e S ys . . 1 -3
6 . 2 Г л о б а л ь н ые и к о н ф и г у р а ц и о н н ые п е р е м е н н ые , ф а йл к о мм ен т а р и ев . . 6 -2
К о н ф и г у р и р о в а н ие в е д о м ого C A N o p e n- ус т р о й с т ва ( C A N o p e n S l a v e) . . 6 - 45
‘ Д о п о л н е н ия ’ ‘ За п и сь з н а ч е н ий т р а сс и р о в ки ’ ('E x t r a s ' 'S a v e t r a c e v a lu e s ') . . 6 - 70
‘ Д о п о л н е н ия ’ ‘ В н е ш н яя к о н ф и г у р а ц ия т р а сс и р о в ки ’ ('E x t r a s ' 'E x t e r n a l T r a c e C o n f i gu r a t i o n s ') . . 6 - 70
П Р И Л О ЖЕ Н ИЕ E: К Р А ТК ИЙ С П Р АВ О Ч Н ИК ПО О П ЕР А Т О Р АМ И К О М П О Н Е Н Т АМ Б И Б Л И О Т ЕК 10 - 66
И д е н т и ф и к а т оры ф у н к ций , ф ун к ци о на л ь н ых б л о к ов и п ро г р а мм (P O U) . . 10 - 1 03
C o D e S ys - э то с о в р еме нн ый ин с т р у м е нт д ля п р о г р амм и р о в а ния к о н т р о лл е р ов ( C o D e S ys о б р а з у е т ся
C o D e S y s п р е д о с т а в л я ет п р о г р амм и с ту у д о б н ую с р е ду д ля п р о г р амм и р о в а ния к о н т р о лл е р ов на я зы -
к ах с т а н д а р та М ЭК 61 1 31 - 3 . И с п о л ь з у ем ые р е д а кт о ры и о т л а д о ч н ые с р е д с т ва б аз и р у ю т ся на ш и ро -
ко и з в ес т н ых и х о р о шо се бя за р е к о ме н д о в а в ш их п р и н цип ах , з н а к о м ых по д р у г им п о п ул я р н ым с ре -
д ам п р о ф есс и о н а л ь н о го п р о г р амм и р о в а ния ( т а кие , к ак V i s u a l C ++ ) .
П р е ж де в с е го н уж но д а ть п р о е к ту н о в ое и мя , о но же п о с л уж ит и н аз в а ни ем ф а й ла п р о е кта .
П е р в ый п р о г р амм н ый к о м п о н е нт ( P OU – P r o g r am O r g a n i za ti o n U n it ) п о ме щ ае т ся в н о в ый п р о е кт
а в т о ма т и ч ес ки и п о л у ч ает н а з в а ние P L C _ P R G . И ме нно с н е го и н а ч ин ае т ся в ы п о л н е ние п р о ц есса
( по а н а л о г ии с ф у нкц и ей ma i n в я з ы ке С ) , из н е го б у д ут в ы з ы в а т ь ся д р у г ие п р о г р амм н ые б л о ки
Н ет н е о б х о д и м о с ти пи са ть в р у ч н ую т е к ст д ля P L C _ P R G , п о с к о л ь ку к о н ф и г у р а ция за д а чи о п р е де -
л я е т ся на в к л а д ке п р о е кта ‘ К о н ф и г у р а ция з а д ач ’ ( T a s k C o n f i g u r a t i on ) . П о д р о б н ее э то б у д ет о пи -
П р о е кт с о д е рж ит р яд р аз н о р о д н ых о б ъ е кт ов P OU , д а нн ых р аз н ых т ип ов , э л еме н т ов в и з у а л и з а ции и
‘ О р га ни з а т ор об ъ е к т ов ’ ( O b j ec t O r ga n i z er ) у п р а в л я ет с п и с к ом в сех о б ъ е кт ов В а ш е го п р о е кта .
Д ля н а ч а ла вы о п р е д е л я е те к о н ф и г у р а цию П ЛК в с оо т в е т с т в ии с а пп а р а т н ы ми с р е д с т в ами с в о е го
З а т ем вы с о з д ае те п р о г р амм н ые к о м п о н е н ты , н е о б х о д и м ые д ля р е ш е ния п р о б л емы .
Да л ее вы пи ш е те п р о г р ам м н ый к од д ля с о з д а нн ых к о м п о н е н т ов на в ы б р а нн ых я з ы к ах .
С р а зу п о с ле за в е р ш е н ия п р о г р амм и р о в а ния , вы к о м п и л и р у е те п р о е кт и и с п р а в л я е те о ш и б ки , е с ли
В к л ю ч и те ф л а ж ок ‘ Р е ж им э м у л я ции ’ ( s i m u l a t i on ) и « п о д к л ю ч и т есь » к к о н т р о лл е ру . Т е п е рь вы в
От к р о й те о кно ‘ К о н ф и г у р а ция П ЛК ’ ( P L C C o n f i g u r a t i on ) и п р о в е р ь те п р а в и л ь н о с ть в ы п о л н е ния
п р о е кта . Д ля э т о го и зме ни те в р у ч н ую в х о д н ые д а нн ые и у б е д и т есь , ч то в ы х о ды к о н т р о лл е ра о т р еа -
г и р о в а ли н уж н ым о б р аз ом . Е с ли н е о б х о д и мо , вы м о ж е те н а б л юд а ть з н а ч е ния п е р еме нн ых в п ро -
г р амм н ых к о м п о н е н т ах . И с п о л ь з уя ме н е д ж ер п р о см о т ра и з а к аза з н а ч е ний п е р е ме нн ых ( к о р о че ,
‘ М е н е д ж ер п р о с м о т ра ’ – ‘ W a t c h a nd R ec i p e M a n a g e r’ ) , вы см о ж е те за д а ть с пи с ок п е р еме нн ых ,
В с л у ч ае о ш и б ок в р а б о те к о да вы м о ж е те за д а ть т о ч ки о с т а н о ва . К о г да п р о ц есс о с т а н о в л ен в о п ре -
д е л е нн ой т о ч ке , вы м о ж е те п р о см о т р е ть з н а ч е ния п е р е ме нн ых п р о е кта в д а нн ый м о ме нт в р ем е ни .
В ы п о л н яя п р о е кт в п о ш а г о в ом р е ж и ме ( s i ng l e s t e p ) , вы м о ж е те п р о в е р и ть л о г и ч ес к ую к о рр е к т н о с ть
В п р о ц ессе о т л а д ки вы м о ж е те у с т а н а в л и в а ть з н а ч е ния п е р ем е нн ых п р о г р амм , за д а в а ть ф ик с и ро -
в а нн ые з н а ч е ния на в х о ды и в ы х о ды к о н т р о лл е ра , к о н т р о л и р о в а ть п о с л е д о в а т е л ь н о с ть и с п о л н е ния
п р о ц есса и о п р е д е л и ть мес то в п р о г р амме , к о т о р ое се й ч ас в ы п о л н я е т ся . И с п о л ь з уя ф у нкцию
‘ Ц и ф р о в ая т р а сс и р о в ка ’ ( S a m p l i n g T r a ce ) , м о ж но о т с л е ж и в а ть в г р а ф и ч ес к ом п р е д с т а в л е нии из -
К о г да п р о е кт за к о н ч ен и о т л а ж ен , п е р е х о д и те к о к о н ч а т е л ь н ой д о в о д ке в р а б о ч их у с л о в и ях на ре -
а л ь н ом " ж е л езе " . Е с т ес т в е нно , п ри э т ом п о л н о с т ью д о с т у пны в се о т л а д о ч н ые ф у н кции .
В есь п р о е кт м о ж ет б ы ть э к с п о р т и р о в ан в т е к с т о в ый ф а йл и с ох р а н ен в п е ч а т н ом в и де .
С р е д с т ва к о м м у ни к а ции C o D e S ys в к л ю ч а ют с и м в о л ь н ый и DD E ин т е р ф е й сы . К о мм у ник а ци он -
П у т ем в ы б о ра ц е л е в ой п л а т ф о р мы C o D e S y s п о з в о л я ет и с п о л ь з о в а ть о д ин п р о е кт в р аз л и ч н ых с ис -
С е т е в ые п е р е м е нн ые о б щ е го д о с т у па и М е н е д ж ер п а р а м е т р ов ( P a r a m e t e r m a n ag er ) о б ес п е чи -
E NI : и н ж ини р ин г о в ый ин т е р ф е йс п р и ме н я е т ся с о в мес т но с л юб ы ми с и с т ем а ми у п р а в л е ния в ер -
с и я ми ч е р ез а в т о н о м н ый E N I с е р в ер . П р о г р амм н ые к о м п о н е н ты C o D e S y s с ох р а н яю т ся в е д ин ой ба -
зе д а нн ых , д о с т у пн ой д р у г им п о л ь з о в а т е л ям . E N I се р в ер с л уж ит хр а ни л и щ ем к о н с т р у кт о р с к их
д а нн ых не т о л ь ко д ля C o D e S y s , но и д ля с т о р о нних п р о г р амм н ых ин с т р у м е н т ов .
C o D e S ys п о з в о л я ет за д е й с т в о в а ть « ф и р ме нн ые » п р о г р амм н ые ин с т р у м е н ты . Ф а й лы , в к л ю ч а ю щ ие
и с п о л н я ем ый к од , м о г ут б ы ть с к о м п о н о в а ны с к о д ом п р о е кта и з а г р у ж е ны в к о н т р о л л ер .
С о з д а нн ая в C o D e S ys в и з у а л и за ция м о ж ет в ы п о л н я т ь ся не т о л ь ко в с р е де п р о г р ам м и р о в а ния , но и в
ц е л е в ой п л а т ф о р ме и ли в W e b. Э то п о з в о л я ет к о н т р о л и р о в а ть п р о ц есс и у п р а в л я ть им ч е р ез Ин -
C o D e S y s п р о в е р я ет , ес ть ли в т е к у щ ей д и р е кт о р ии п р о е кт с т а ким же и м е н ем , к ак и в к о н т р о лл е ре .
Е с ли т а к ой п р о е кт ес ть , то п о я в и т ся д и а л ог ‘ З а г р у з ка п р о е к та из П ЛК ’ ( L oa d p r o j ec t f r o m P LC ) ,
в к о т о р ом вы д о лж ны у к а з а ть , н у ж но ли зам е ни ть ф а й лы на в а ш ем д и с ке на п р о е кт из к о н т р о лл е ра .
( П о с л е д о в а т е л ь н о с ть д е й с т в ий п ри в ы п о л н е нии э т ой к о ма н ды о б р а т на т ой , к о т о р ая в ы п о л н я е т ся
п ри в ы з о ве к о ма н ды ‘ О н л а йн ’ ‘ З аг р у з ка и с хо д н ых т е к с т ов ’ ( O n l i ne - S o u r cec o d e d o w n l oad ) . Э та
к о ма н да с о хр а н я ет п р о е кт в к о н т р о лл е ре . Не п у т а й те ее с к о ма н д ой ‘ С о з д а н ие з а г р у з о ч н о го п ро -
З а м е ч а н ие : П р и м и те к с в е д е нию , ч то в с лу ч ае , е с ли п р о е кт в к о н т ро лл е ре не н а з в ан , то вы д о л жны вв е с ти е го
и мя . В п р о т и в н ом с лу ч ае п ро е кт б у д ет с о х р а н ен с и м е н ем “ U n t i t l e d” .
З а м е ч а н ие : Е с ли э то п о дд е р жи в ае т ся ц е л е в ой с и с т е м ой , то н а и м е н о в а ние в п о ле ' З а г л а в ие ' ( T i t le ) д и а л о га
‘ И н ф о р м а ция о п р о е к те ’ ( P r o j ec t i n fo ) б у д ет и с п о л ь з о в а т ь ся к ак н а ч а л ь н ое и мя д ля ф а й ла
п ро е к та . В э т ом с лу ч ае п ри з а г р у з ке п ро е к та из П ЛК б у д ет о т к р ыт д и а л ог з а пи си ф а й ла с д а нн ым
Е с ли п р о е кт в к о н т р о лл е ре не о б н а р у ж ен , то б у д ет в ы в е д е но с оо б щ е ние об о ш и б ке .
Вы д о лж ны за р а н ее и ме ть д о с т уп к б азе д а нн ых п р о е кта . Н а ж м и те к н о п ку E NI , в с л е д у ю щ ем д иа -
л о ге вы п о д к л ю ч и т есь к к а т е г о р ии ‘ О б ъ е к ты п р о е к та ’ ( P r o j ec t o b j ec ts ) б азы д а нн ых E N I с е р в е ра .
З а д а й те с оо т в е т с т в у ю щ ие п а р аме т ры д ля д о с т у па ( T C P / I P- а д р ес , п о рт , и мя п о л ь з о в а т е ля , п а р о ль ,
т о л ь ко ч т е ние ) и р а д ел б азы (‘ И мя п р о е к та ’ - P r o j ec t n ame ) , в к о т о р ом н а х о дя т ся н е о б х о д и м ые о бъ -
е кты . Н а ж м и те к н о п ку ‘ Д а л ее ’ ( N e xt ) . Да нн ый д и а л ог б у д ет за к р ыт , и о тк р ыт с л е д у ю щ ий , в к о то -
р ом вы в с т а в и те д а нн ые из к а т е г о р ии ‘ Р а з д е л я е м ые об ъ е к ты ’ ( S h a r e d O b j ec ts ) . Н а ж м и те к н о п ку
‘ Г о т о во ’ ( F i n i sh ) , о б ъ е кты из за д а нн ых р аз д е л ов б у д ут а в т о ма т и ч ес ки с ч и т а ны и п о к аз а ны в ме -
н е д ж е ре о б ъ е кт ов C o D e S y s . Е с ли вы х о т и те п р о д о лж и ть с о хр а н е ние о б ъ е кт ов п р о е кта в б а зе д ан -
Да нн ые д о с т у па с ох р а н е ны в c od e s y s . i ni ф а й ле , о д н а ко и мя п о л ь з о в а т е ля и п а р о ль - т о л ь ко ес ли
в к л ю ч е на о пция п р о е кта ‘ С о х р а н я ть у д о с т о в е р е н ие E NI ’ ( S a v e E N I c r e d e n t i a ls ) .
С пи с ок н е д а в но и с п о л ь з о в а в ш и х ся ф а й л ов н а х о д и т ся в ни ж н ей ч ас ти м е ню ‘ Ф а йл ’ ( F ile ) п од ко -
Е с ли п ри з а пи си ф а й ла п р о е кта б ы ли о п р е д е л е ны п а р о ли , то C o D e S y s п о т р е б у ет вв од п а р о ля п ри
Пользуйтесь реальностью процессов
Одно из фундаментальных отличий программирования технологических процессов от классического программирования - это обычно значительно меньший уровень абстракции. Алгоритмы определяются технологией процесса, который в свою очередь часто опирается на здравый смысл и простую логику. Об этом часто забывают увлекаясь программированием ради программирования.
Не путайте причины и следствия
Например, пусть при падении давления нужно выключать насос, а при выключенном насосе какой-то клапан должен быть закрыт; предположим, никаких иных условий выключения и закрытия - нет. Ошибочно при этом (даже якобы в целях оптимизации кода) закрывать клапан при падении давления, т.к. алгоритм закрытия клапана строго привязан именно к состоянию насоса. При удлинении или изменении следственных цепочек это может привести к серьезным ошибкам в процессе или сложностям в модификации кода.
Настройка среды CODESYS 2.3
Некоторые настройки "по умолчанию" в CODESYS удивляют. Например, эта среда - единственная из виденных мной, в которой шрифт не моноширинный, т.е. символы в нем имеют разную ширину. Сразу же после установки среды заходите в Проект > Опции > Редактор > Шрифт и выбирайте Consolas (код на всех скриншотах) или хотя бы Courier New.
После этого отмените автообъявление (штука, появляющаяся когда вы вводите незнакомый Кодесису набор символов), этот адский источник всплывающих окон, которыми так любит радовать эта среда.
В настройках "Рабочего стола" уберите лишние галочки и уменьшите таймауты связи до 1000 мс - это сильно упростит вам жизнь, поверьте.
Не стремитесь использовать чужой код
Вторичное использование чужого кода в классическом программировании - норма и необходимость, обусловленная множеством причин. В АСУ ТП же, по моему мнению, почти нет необходимости использовать сторонний код.
Я не считаю себя профессионалом и не писал особо сложных программ, но для тех что писал мне вполне хватало стандартных библиотек Util.lib и Standart.lib. Те же библиотеки Oscat (скачать + мануалы на англ) шикарны и всеохватывающи, но в них нет ничего сверхестественного и, мне кажется, лучше самому писать аналогичные функции. А на тот код, который обычно выкладывают на форумах, лучше вообще не смотреть. Даже с тем, что я выкладываю в блоге лучше просто ознакамливаться, а не использовать. Пишите свои алгоритмы и как можно больше)
Примеры правильного кода внутри библиотек
Чтобы понять как должен выглядеть грамотный код и узнать некоторые программистские приёмчки не нужно далеко ходить. Открывайте Кодесисом библиотеки Util.lib и Oscat.lib как обычные проекты и впитывайте мудрость строк.
NB Может я и негодяй, но с помощью этой проги вы можете взломать запароленные библиотеки.
Пользуйтесь интегрированной справкой CODESYS
Банально, но там есть ответы на большинство вопросов начинающих. Справка небольшая поэтому лучше пробежаться по ней всей чтобы познакомится с возможностями языков и функций.
Вызов справки по "F1" работает по большинству служебных слов и элементам библиотек Util.lib и Standart.lib. Иногда в CODESYS 2.3 вызов по "F1" не срабатывает, например для SEL и ARRAY , поэтому вручную открывайте справку и ищите нужный идентификатор во вкладке "Поиск"
Не повторяйте код
Это самый распространенный косяк у неопытных программистов независимо от платформы и языка программирования. Видите дублированный код - выносите его в отдельную функцию или функциональный блок, и/или же переводите переменные в элементы массивов и прогоняйте в цикле. Предыдущее предложение вам может быть непонятно, но подробности можно загуглить.
На скриншоте код, обрабатывающий данные с частотных преобразователей Danfoss. Переменные типа CWS1_FREQ созданы в Конфигурации ПЛК в разделе ModBus (Master). Слева представлена первая версия кода где каждый ПЧ представлен отдельным куском из восьми строк; код в каждом куске различается только данными, а логика одинакова.
Справа оптимизированная версия - логика вынесена в отдельную функцию GET_PUMP (с адресацией и указателями, о которых расскажу ниже), а код для конкретного ПЧ теперь занимает одну строчку. Если бы в Конфигурации можно было задавать переменные как элементы массива (типа FREQ_CWS[1]), то код обработки любого количества ПЧ свелся к одной строке, вложенных в два цикла (см. совет ниже).
Плюсы языка ST - массивы и циклы
Язык ST я использую из-за того, что моё знакомство с программированием началось с C/C++. В некоторых случаях удобно использовать CFC или что похуже, но в целом ST более ёмок, лаконичен и чёток. Но, чем действительно он отличается от других языков так это возможностью нормального использования массивов и циклов, которые мне сильно облегчают жизнь и увеличивают читабельность кода.
Не злоупотребляйте циклами
При том, что циклы FOR бывают крайне удобны, всегда помните, что код в ПЛК выполняется в суперцикле и часто можно обойтись простым инкрементированием с обнулением (см. скриншот ниже). Также большие циклы FOR и тем более WHILE могут сильно "затормозить" суперцикл ПЛК вплоть до срабатывания сторожевого таймера (об этом в следующем совете) . Иногда, конечно, нужно сделать перебор в текущем суперцикле и тут уж лучше использовать FOR .
Сторожевой таймер и сброс ПЛК
Если суперцикл выполняется слишком долго, то ПЛК производит аппаратный сброс на уровне микроконтроллера. Такое возникает при переходе в бесконечный цикл и других зависаниях. Отвечает за анализ времени выполнения цикла сторожевой таймер, или Watchdog.
Сброс по watchdog'у отличается от любого сброса через среду CODESYS. Этим можно пользоваться. В моей практике сторожевой таймер применяется в контроллерах ОВЕН. В этих ПЛК иногда происходит неприятный момент - созданный в Конфигурации модуль ModBus (Master) перестает вести опрос Слейвов (обычно это возникает после перезаливки программы). Поначалу это решали сбросом питания, но тут возникали трудности при удаленной закачке через интернет.
Позже я обнаружил, что проблему решает искусственное заведение программы в бесконечный цикл. Я вывел сброс на кнопку в визуализации. Или же можно анализировать изменение переменной "Опрашиваемый адрес " в ModBus (Master) - если Slave-устройств больше одного, то она должна меняться каждый цикл.
Расширенное использование функций
Помимо вывода одного-единственного значения любого стандартного типа функция способна возвращать значения пользовательского типа, например структуры, которые могут состояться из любого количества переменных разного типа.
Но что интереснее, имеется возможность изменения переменных, которые являются аргументами функции, внутри самой функции. Это возможно благодаря использованию указателей и адресации на эти переменные. Понять что к чему можно по скриншоту ниже, на котором приведен код функции, инициализирующий переменную если та равна нулю. Параметр внутри функции определяется как указатель на нужный тип, а при вызове функции в параметре используется не сама переменная, а её адрес (функция ADR ).
Иногда SEL удобнее IF
В случае когда при каком-то условии переменная должна изменить своё значение, а в противном - иметь другое значение, применение IF может быть не лучшем решением. Если условие применимо только к этой единственной переменной - используйте функцию-селектор SEL . Она работает с переменными любого типа.
Буль не буль
Очень часто в чужом коде встречаю странное использование операций с булевыми величинами или, наоборот, игнорирование булевой логики.
Во-первых, операции типа сравнения или проверки равенства возвращают булевы значения.
В о-вторых нет необходимости явно сравнивать булеву переменную со значениями TRUE или FALSE .
Наглядная работа с булями
Мне очень часто для сокращения кода приходится использовать явные преобразования BOOL в целое число, например, в формулах. Для этого приходится использовать функцию приведения типов в её стандартном неуклюжем виде BOOL_TO_BYTE(). Но как-то раз наткнулся на блог Егора Петрова, где он придумал более простое и изящное решение - по сути переименовать эту функцию в более читаемую - WHEN(). Теперь пользуюсь, пользуйтесь и вы.
Читайте также: