Подключение DK55 и HMI по CANOpen. Шаг за шагом. CDS V2.3

Для понимания этого материала желательно иметь общие представления о CoDeSys, о сетях CANOpen, Ethernet. На компьютере должен быть установлен CoDeSys V2.3.

И так, сегодня мы подключаем контроллер к плате HMI по CANOpen запрограммируем на прикладном уровне в CoDeSys.
В качестве контроллера используем стартовый набор разработчика DK55 (плата DK54 c чипом SC24) фирмы Beck IPC GmbH (рис. 1).
img1_1.jpg
Рис .1.Плата DB54 с установленным чипом SC24

В качестве HMI возьмем стартовый набор для разработчиков HMI от фирмы frenzel + berg electronic GmbH & Co. KG. (рис. 2.)

img2_1.jpg
Рис .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.).

img3_1.jpg
Рис.3. Экран CHIPTOOL

Как видим на рисунке 3, в первой строке, а в нашем случае она единственная, отображен DK55 c именем (Name) SC24L. Это название чипа в плате. Если вставить чип SC23, то в поле Name увидим название SC23.
На этой строчке щелкаем правой клавишей мышки и в выпадающем меню выбираем IP Configuration, где и задаем двумя строчками адрес и маску. По нажатию кнопки Config заданные параметры будут применены (рис. 4.).

img4_1.jpg
Рис .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.).

img5_1.jpg
Рис.5. Окно программы

Программу мы уже написали, теперь надо соединиться с контроллером и запустить ее. Для соединения с контроллером нужно настроить параметры связи. Это делается один раз для одного контроллера в меню ОНЛАЙН -> Параметры связи. В диалоговом окне выбираем NEW затем задаем имя нашему соединению и протокол TCP/IP (надо щелкнуть мышкой по надписи Tcp/Ip в поле Name)все как на рисунке 6.
img6_1.jpg
Рис.6. Параметры соединения

Нажимаем OK. Затем в окне Communication Parameters вместо localhost вписываем IP нашего DK55, который мы задали ранее (рис. 7.).

img7_1.jpg
Рис.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, они зажигаются и гаснут соответственно состояниям выходов. В режиме ОФФЛАЙН двойным щелчком мышки на битах входов и выходов (прямо на буквах АТ) можно присваивать названия этим битам. Еще раз отметим, что редактирование текста программ и наименований переменных доступно в режиме ОФФЛАЙН. Эти названия (по сути это присвоенные переменные адресам входов и выходов) можно использовать соответственно для чтения и записи, как глобальные переменные.

img9_1.jpg
Рис.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).

img10_1.jpg
Рис.10. Настройка CAN HMI

В появившемся окне вместо значения 0x80000000 пишем строчку $NODEID+0x300. Нажимаем OK.

img11_1.jpg
Рис.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:

img12_1.jpg
Рис.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.

Обсуждение на форуме