Для понимания этого материала желательно иметь общие представления о CoDeSys, о сетях CANOpen, Ethernet. На компьютере должен быть установлен CoDeSys V2.3.
И так, сегодня мы подключаем контроллер к плате HMI по CANOpen запрограммируем на прикладном уровне в CoDeSys.
В качестве контроллера используем стартовый набор разработчика DK55 (плата DK54 c чипом SC24) фирмы Beck IPC GmbH (рис. 1).
Рис .1.Плата DB54 с установленным чипом SC24
В качестве HMI возьмем стартовый набор для разработчиков HMI от фирмы frenzel + berg electronic GmbH & Co. KG. (рис. 2.)
Рис .2.Плата HMI CO4031-EVA
Обе эти фирмы входят в организацию CoDeSys Automation Alliance (http://www.automation-alliance.com).
Для начала подключимся к DK55 по Ethernet. Для этого нам потребуется установить удобный для нас IP адрес нашей плате, согласный нашей сети. Сделать это можно несколькими способами, через com-порт (telnet), либо сразу через Ethernet при помощи утилиты CHIPTOOL, которая поставляется на диске с платой. Первый способ достаточно подробно описан в этом документе http://www.prolog-plc.ru/st/doc/first_steps_1.pdf, мы же воспользуемся вторым, на мой взгляд, более удобным способом. Для этого мы подключаем к нашему набору DK55 сетевой шнур и подключаем его к сети нашего рабочего компьютера любым доступным способом, либо напрямую, либо в общий хаб сети, как это сделал я. Не забываем про то, что при подключении напрямую или через хаб используются сетевые кабели с различным обжимом. Подаем питание на плату и запускаем на рабочем компьютере утилиту CHIPTOOL. Через несколько секунд утилита обнаружит нашу плату с любым IP, присвоенным по умолчанию (рис. 3.).
Рис.3. Экран CHIPTOOL
Как видим на рисунке 3, в первой строке, а в нашем случае она единственная, отображен DK55 c именем (Name) SC24L. Это название чипа в плате. Если вставить чип SC23, то в поле Name увидим название SC23.
На этой строчке щелкаем правой клавишей мышки и в выпадающем меню выбираем IP Configuration, где и задаем двумя строчками адрес и маску. По нажатию кнопки Config заданные параметры будут применены (рис. 4.).
Рис .4.Окно конфигурирования параметров IP
Это основное, что нам потребуется от CHIPTOOL. Если обратить на эту утилиту более пристальное внимание, можно заметить много полезных функций, например, работа с FTP, телнетом, но оставим это на самостоятельное изучение. Отметим, что CHIPTOOL работает со всеми комплектами разработчика от BECK IPC, а так же с контроллерами, разработанными на чипе BECK IPC.
Следующим шагом объясним CoDeSys, что такое DK55, какие у него есть ресурсы и как с ними работать. Делается это просто. В комплект поставки DK55, как и у других контроллеров с CoDeSys, входит так называемые файлы поддержки целевой платформы – попросту говоря тарджет (target). Для всех изделий BECK IPC тарджеты также можно скачать непосредственно с сайта BECK IPC. Тарджет спрятан глубоко в архиве, который имеет несколько уровней вложений. Для чего это надо, мы поговорим позже. А сейчас давайте возьмем его по указанному мной пути в этом архиве. Нам нужна папка tsp, которая лежит вот тут:
DK55-IEC_Platform_Full_V1.10-Beta.zip\DK55\SC23\DK55_FP_CM\tsp
Распаковываем эту папку и запускаем из нее install.bat. Этому пакетнику можно довериться. Он сделает за нас всю грязную работу, только еще раз отмечу, запускать его надо не из архива, а предварительно распаковав папку tsp.
После исполнения install.bat запускаем CoDeSys. Создаем новый проект и в диалоговом окне “Настройки целевой платформы” выбираем DK55_Full_FP_CM – эта строчка, по сути, и есть результат работы предыдущего шага. Нажимаем OK и в следующем окне выбираем то, что и стоит по умолчанию “тип POU” – программа, “язык реализации” – ST. Жмем ОК. На этом этапе автоматически создается шаблон проекта на языке ST, и автоматически подключаются все библиотеки, необходимые для работы с платой DK55. Забегая вперед, чтобы не возвращаться в окно программы, предлагаю сразу написать тут какую-нибудь программу. К примеру, в первой строчке нижнего поля окна программы написать x:=x+1;. После ввода этой строки ассистент ввода предложит вам объявить переменную (в верхнем поле окна). Ассистент сам сделает все правильно, от вас требуется указать только тип переменной, в нашем случае, INT (см. рис. 5.).
Рис.5. Окно программы
Программу мы уже написали, теперь надо соединиться с контроллером и запустить ее. Для соединения с контроллером нужно настроить параметры связи. Это делается один раз для одного контроллера в меню ОНЛАЙН -> Параметры связи. В диалоговом окне выбираем NEW затем задаем имя нашему соединению и протокол TCP/IP (надо щелкнуть мышкой по надписи Tcp/Ip в поле Name)все как на рисунке 6.
Рис.6. Параметры соединения
Нажимаем OK. Затем в окне Communication Parameters вместо localhost вписываем IP нашего DK55, который мы задали ранее (рис. 7.).
Рис.7. Экран параметров связи
На этом все, жмем OK. И проверяем связь нажатием на 5-тую иконку второй секции панели команд, тот же результат получиться по нажатию Alt+F8 или пункт меню Онлайн-> Подключение. Если мы все сделали правильно, то появиться диалоговое окно с вопросом «Программа была изменена! Загрузить новую программу?» В главном же окне CoDeSys в правом нижнем углу появиться надпись ОНЛАЙН:DK55. Да кстати, если надпись в нижнем правом углу появилась, а вопрос об изменении программы нет, то это означает, что кто-то уже написал такую же программу и загрузил ее в контроллер, либо контроллер совсем чист на предмет какой-либо программы в нем. На это можно не обращать внимания, но если есть желание добиться этого вопроса, то отключитесь от контроллера и поменяйте программу на x:=x+2;. Ну а мы продолжаем с вопроса о загрузке программы. Отвечаем на него ДА. Появляется сообщение о загрузке проекта, это занимает какое-то время подозрительно большое для «одной строчки» программы. И это заставляет пытливый ум задуматься, в чем же дело? А дело в том, что вместе с одной строчкой нашей программы загружается еще куча файлов отвечающих за WEB-визуализацию, которая в нашем примере не нужна. И как это отключить, и ускорить процесс загрузки посмотрим чуть ниже. А пока давайте запустим программу и убедимся в работоспособности всего, чего мы тут подключали и настраивали. Нажимаем иконку «белый листочек и стрелка вниз»(первая во второй секции) либо F5 либо Онлайн->Старт. Сразу же видим изменения значений переменной X. Все отлично. Контролер на связи и справляется с инкрементом нашего икса.
Теперь переходим, к ресурсам. Во вкладе «Ресурсы» в левой нижней части главного окна CoDeSys , зайдем в «Настройки целевой платформы» далее на вкладку “Визуализация” и тут снимем галочку WEB- Визуализация. Этим самым мы отключим загрузку файлов, пока не нужной нам, WEB-визуализации.
Теперь выбираем двойным щелчком в левой части окна CoDeSys «Конфигурация ПЛК» и в открывшимся окне в левой части нажимаем все «плюсики». Этим мы раскроем все доступные нам ресурсы до бита (рис. 8).
Рис .8.Экран Конфигураций ПЛК
На экране мы видим в ветке D_In биты соответствующие входам контроллера, а ветке D_Out биты выходов. Ниже вы можете увидеть ресурс под названием DK55_Full_FP_CM_CO_M, он нам пригодиться позже при подключении по CAN шине. А сейчас можем «поиграть» выходами нашего контроллера. Для этого подключимся к контроллеру командой Онлайн->Подключение и можем не запуская программу на исполнение пощелкать мышкой в клеточках(которые появляются в режиме онлайн) напротив битов выходов в контроллера. Окрас синего цвета клеточки (рис. 9.)– означает единицу соответствующего выхода. Обратим внимание на светодиоды под LCD на плате BECK, они зажигаются и гаснут соответственно состояниям выходов. В режиме ОФФЛАЙН двойным щелчком мышки на битах входов и выходов (прямо на буквах АТ) можно присваивать названия этим битам. Еще раз отметим, что редактирование текста программ и наименований переменных доступно в режиме ОФФЛАЙН. Эти названия (по сути это присвоенные переменные адресам входов и выходов) можно использовать соответственно для чтения и записи, как глобальные переменные.
Рис.9. Ресурсы ПЛК в режиме ОНЛАЙН
Контроллер DK55 мы рассмотрели уже достаточно, чтобы приступить к подключению HMI по CANOpen. Для подключения стоящего у нас на вооружении комплекта CO4031-EVA нам понадобится EDS-файл, который мы возьмем прямо с сайта Frenzel+Berg http://www.frenzel-berg.de/. Архив называется CO4031A1.zip в нем лежит CO4031A1.eds. Этот файл мы должны положить по пути C:\Program Files\3S Software\CoDeSys V2.3\Library\plcconf . Если папки plcconf не существует, то следует создать ее вручную. Перезапускаем CoDeSys, естественно, сохранив проект, и возвращаемся обратно на вкладку ресурсы. Правой клавишей мышки щелкаем на строке DK55_Full_FP_CM_CO_M и выбираем «Добавить CO4031-LCD(EDS)». Под строкой DK55_Full_FP_CM_CO_M появится ветка ресурсов HMI платы. Нам остается только настроить несколько параметров соединения с платой. Эти параметры задаются прямо в ветке ресурсов платы и на самой плате. Начнем с ветки ресурсов, так как мы уже тут.
Выбираем строчку DK55_Full_FP_CM_CO_M и справа во вкладке CAN-параметры выбираем скорость 50 000 и ID узла 1. Теперь по дереву ресурсов переходим на строчку ниже, на CO4031-LCD (EDS) и также во вкладке «CAN параметры» задаем ID узла 2. Переходим на вкладку “Отобр.приним.PDO”. Выбираем параметр PDO 0x1404 и нажимаем кнопочку «Свойства» (рис. 10).
Рис.10. Настройка CAN HMI
В появившемся окне вместо значения 0x80000000 пишем строчку $NODEID+0x300. Нажимаем OK.
Рис.11. Свойства PDO
И переводим взгляд на саму плату CO4031-EVA. В верху видим два блока переключателей SW1 и SW2. Комбинацией движков на этих переключателях задаются параметры CANOpen, такие как скорость , номер узла и другие. Также этими движками задается режим работы LCD панели. Об этом можно почитать в документации на плату. И не вдаваясь в подробности, поставим движки, как на рис 2. На SW2 1-й,3-й,6-ой и 7-ой в положение ON на SW1 1-й и 7-й в положение ON. Все остальные в OFF. Тем самым мы задали скорость передачи 50 000 номер узла 2 и включили дисплей в режиме 2-х строк по 16 символов. Да забыл сказать, мы включили резистор 120 ОМ обозначая конец шины CAN. С другой стороны шины будет подключен DK55 в разъем, который уже имеет терминальный резистор. Естественно, на DK55 существует транзитное подключение CAN, но мы его использовать не будем, поскольку у нас всего два устройства.
В общем-то, и все. Теперь соединяем кабелем две платы. Должно получится вот так, как на рис. 12:
Рис.12. DK55 в связке с CO4031-EVA
Переходим в CoDeSys в ресурсы нашего контроллера. Выполняем команды соединения с контроллером и запускаем проект. Обращаем внимание на байты по ветке DK55_Full_FP_CM_CO_M-> CO4031-LCD (EDS)->%IB2Can-Input они все находятся в нулях. Нажимаем любую кнопку на HMI платы и видим, как соответствующий строке кнопки на HMI байт принимает новое значение. Если отпустить кнопку, он обратно переходит в 0. По секрету скажу, что значение байта при нажатой кнопке соответствует степени двойки по номеру положения клавиши. Каждая клавиша это один бит в байте. 8-мь клавиш (а их реально 6 и еще вы видите 2 запасных места на плате) в строке составляют байт, который мы и видим в ресурсах в CoDeSys.
Аналогичным образом обстоят дела со светодиодами в верхней правой части HMI платы. Каждая линейка светодиодов отображается в байт по ветке в ресурсах DK55_Full_FP_CM_CO_M-> CO4031-LCD (EDS)->%QB1. В верхних 4-рех байтах по этой ветке можно записывать любое значение байта и двоичное отображение можно увидеть на светодиодах HMI. Сделать это можно в режиме Онлайн с запущенным на исполнение проектом, двойным щелчком на буквах АТ соответствующего байта. Как и в случае с DK55 каждому байту можно присвоить имя, и использовать ее в проекте как глобальную переменную. Мы познакомились только с 4-мя байтами вывода. Ниже них в ветке ресурсов находиться еще целое слово %QB5 с названием LCD Access. Это слово представляет собой порт LCD панели. Как работать с ним, опять же, хорошо расписано на 26 странице инструкции CO4031-fl_e.pdf на чип (которую можно взять с сайта производителя). Принцип работы прост. В первый байт слова записывается ASCII код, во второй байт команда к действию. Список команд также представлен в вышеупомянутой инструкции. И вот такое скомпонованное слово посылается LCD присвоением в %QB5. Тут следует отметить то, чего не сказано в инструкции. Каждая команда идущая в порт должна отличаться от предыдущей 15-тым битом. Если предыдущее слово имело в 15-том бите 0, то текущее должно иметь 1, а следующее опять 0. Следует еще обратить внимание на паузу между подачами команд . При паузах меньших 10 мс у меня начинались сбои в работе LCD.
В итоге мы подключились и завладели ресурсами HMI платы CO4031-EVA через CANOpen с контроллера DK55. Я думаю, теперь не составит труда, написать простую программку меняющую значение выходов DK55 в зависимости от состояния клавиш на HMI плате и вывести состояние выходов DK55 на светодиоды HMI. Небольшие затруднения могут быть в работе с LCD, но после нескольких попыток проб и ошибок это удастся.
Скачать проект примера
Для безошибочного открытия этого проекта в CoDeSys необходимо предварительно установить тарджет DK55.