Среда программирования контроллеров beckhoff

roman_eremin

Напишу тут подробно, чтобы самому потом не забыть. Похоже, тут половина вещей из серии “Это нельзя понять – это надо запомнить”. Итак, я дошел до того, что софт видит контроллер и простейшая программа туда загружается и вроде бы работает. Вот как это делается.

Мы поставили TwinCAT. Для начала запускаем TwinCAT System Manager. В нем сначала найдем устройство:

В появившемся диалоге выбираем Search (Ethernet) и в диалоге поиска – Broadcast Search

Закрываем диалог, в предыдущем диалоге выделяем только что найденное устройство:

Теперь System Manager подключен к нашему контроллеру, о чем сообщает в статусбаре. Далее надо получить список устройств ввода-вывода. В ноде I/O – Configuration –> I/O Devices ткаем правой кнопкой и говорим Scan Devices:

В результате система получает полную конфигурацию устройств:

Как видно выше, перечислены все три блока подсоединенные к контроллеру, включая пустышку. Я даже могу отсюда управлять состоянием каналов вывода (выделить канал, справа закладка Online и там нажать кнопку Write):

Записал 1 в 4-й канал – на блоке вывода загорелся светодиод. Стало быть поменялось состояние. А вот канал ввода – не меняется так. Видимо, он проверяет физическое состояние (не замкнуто) и врать права не имеет. Ну да ладно.

Далее мне хочется написать простейшую программу. Если замкнут вход 1 – включить выход 1. Если разомкнут – выключить. Для этого нам понадобится другая программа – TwinCAT PLC Control (по сути – IDE CoDeSys). В ней мы создаем новый проект. Нас спрашивают под какое устройство будем писать.

Выбираем CX (ARM), потому что наш cx9010 построен на ARM процессоре. Проект состоит из программных блоков, один из которых – главный нам сразу предлагают создать:

Языков как видите может использоваться множество. Я выберу LD – язык лестничных диаграмм или релейно-контактной логики по-нашему. Сначала в верхнем окошке обьявляем переменные. Вот на этом этапе я и провел полдня. Похоже, для того, чтобы эти переменные были видны и к ним можно было привязать вводы-выводы, они должны иметь адрес. Что конкретно это означает, я пока не понимаю, но вот это вот шаманство работает. То есть для обьявления булевской переменной In01, надо написать не вот так:

Волшебное заклинание %IX0.1 переводится так. %-значит это адрес. I – вход (Q-выход). X – тип данных бит (true/false). 0.1 – это месторасположение в некой области переменных. Это значит 1-й бит нулевого байта.

Пишем саму прогамму. На языке LD программа – это типа две шины (справа и слева) под напряжением. Между ними можно вставлять котакты (Contact) и реле (Coil). Контакт – это вход, Coil – это выход. Можно еще блоки вставлять, но это пока опустим. Таких цепочек может быть много, но у нас пока одна будет. Вставляем контакт. И сверху пишем имя входной переменной In01.

Затем вставляем Coil и называет Out01. Вот такая получается программа:

Она как раз и говорит “Если In01 замкнут, то через Out01 идет ток и оно замыкается”. Ну и наоборот соответственно. Все, программа у нас написана. Говорим Project –> Build. Все компилится без ошибок. Рядом с файлом проекта появляется файл *.tpy который теперь можно загрузить в System Manager:

Как видите, System Manager видит обе наши переменные:

Теперь в I/O Configuration мы можем привязать каналы ввода – вывода к переменным. Выбираем канал, нажимаем Linked to и выбираем переменную:

Теперь у меня физические входы-выходы приделаны к переменным в программе. Я иду в PLC Control. Там я тоже должен сказать что работаю с физическим контроллером (Online –> Choose Rintime System:). Выбираю свой контроллер:

Затем говорю Online –> Login. Система спрашивает загружать ли программу в контроллер. Загружаем. Далее я могу сказать Online –> Run – запустить программу в контроллере. И вроде как она выполняется. Я могу поменять значение переменной In01 из PLC Control и выходная переменная Out01 тоже меняется. Только вот состояние выхода у контроллера – не меняется. Будем копать дальше.

На YouTube есть видео всего процесса и там у них все работает. Но там используется не железный контроллер, а SoftPLC – программный PLC который прямо на компе крутится.

Вот на этом этапе я, пожалуй, пока остановлюсь и пойду дегустировать разливной Newcastle – мозги беречь надо.

Источник

Beckhoff. Программируем контроллер

В этой статье я возьму самый простой пример, чтобы показать как это делается и какое программное обеспечение используется. Дальше уже будем погружаться в разные алгоритмы реальной автоматизации освещения. Также я не буду сильно вдаваться в детали — если кого заинтересует — читайте документацию или пишите письма, что знаю — расскажу.

1. Достаем контроллер из коробки

Перво-наперво, подключаем контроллер к питанию. Для этого находим в закромах блок питания на 24VDC и подключаем провода к клеммам питания. Так как конструктив от WAGO, то все соединения исполнены зажимными клеммами, ничего завинчивать не надо. Одножильные провода можно вставлять в клеммы так, многожильные следуя правилам хорошего тона, лучше обжать гильзой. В документации к контроллеру написано, как расчитать требуемую мощность блока питания в зависимости от количества подключенных модулей. Для экспериментов подойдет любой. В рабочий шкаф я воткнул блок питания на дин-рейку на 2А.

У контроллера два разделенных ввода на 24VDC. Первый — питание самого контроллера и всех подключенных к нему модулей. Второй — питание контактов входа/выхода у модулей. Подаем 24 и туда и туда.

Контроллер подключен и радостно мигает огоньками. С помощью шаманских заклинаний, описанных в документации сбрасываем все настройки контроллера на «заводские». После этого контроллер получает IP адрес сети 172.16.17.*. Последнее число адреса узла мы задаем с помощью восьми джамперов на передней панели.

2. Конфигурирование контроллера

Все, IP адрес есть. Подключаем контроллер в сеть, проверяем, что он благополучно пингуется и подключаемся к контроллеру с компьютера. Для этого используем программу KS2000 от Beckhoff. После загрузки программы создаем новое подключение, вводим IP адрес контроллера и нажимаем кнопку CONNECT. В считанные доли секунды программа находит контроллер и выдает нам такую картинку:

Мы видим на экране конфигурацию, в точности повторяющий нашу сборку. То есть программа определяет тип контроллера и все модули, которые к нему подцеплены. Причем программа отслеживает состояние всех входов и выходов и отображает их на картинке. С помошью мышки можно пощелкать на выходы и они будут менять свое состояние. Полюбовавшись картинкой и поигравшись выходами идем дальше.

Обращаем внимание на запись с номером прошивки (Firmware version). Прошивку можно перепрошивать. Я написал запрос в саппорт компании BECKHOFF в России и они в тот же день прислали мне самую свежую прошивку. Перепрошивается контроллер с помощью той же программы KS2000.

Идем в настойки контроллера и меняем его IP адрес на тот, который нам нужен. Введя номер узла программа нам подсказывает как установить джамперы.

У контроллера есть куча настроек. Пока мы используем заводские, так как во-первых этого для начала нам достаточно, а во-вторых, во многих настройках я пока даже и не разбирался 🙂

3. Пишем первую программу

Для того чтобы писать программы для контроллера скачиваем с сайта BECKHOFF систему TwinCat. Установка ее не предствляет какого-либо труда, так как при инсталляции единственно что она спросит — лицензионный номер для установки TwinCat runtime на локальном компьютере. Он нам не нужен, так как использовать компьютер в качестве контроллера мы не хотим (не доверяем), а данный runtime зашит в нашем контроллере. Среда разработки поставляется абсолютно бесплатно.

Запускаем программу PLC CONTROL — это и есть наша среда разработки. Создаем новый проект. При создании нас спросят под какой контроллер желаете. Выбираем BC9000. На каком языке программирования хотите? На ST, других пока не знаем.

И перед нами тот чистый лист, с которого все как обычно и начинается. Сверху окно объявления переменных, снизу окно для кода, сбоку слева навигатор. Запутаться невозможно.

Объявляем глобальные переменные для наших входов и выходов. Это можно сделать автоматически с помошью не очень дружелюбных утилит. Но мы не поленимся и сделаем все ручками. Переходим в раздел глобальных переменных и пишем следующее.

VAR_GLOBAL IN_H2_R1 AT %IX0.0: BOOL; (*ГОСТЕВОЙ ДОМ - ВЫКЛЮЧАТЕЛЬ - СПАЛЬНЯ*) IN_H2_R2 AT %IX0.1: BOOL; (*ГОСТЕВОЙ ДОМ - ВЫКЛЮЧАТЕЛЬ - ВАННАЯ*) OUT_H2_R1_L AT %QX0.0: BOOL; (*ГОСТЕВОЙ ДОМ - ЛАМПА - СПАЛЬНЯ*) OUT_H2_R2_L AT %QX0.1: BOOL; (*ГОСТЕВОЙ ДОМ - ЛАМПА - ВАННАЯ*) OUT_H2_R2_M AT %QX0.2: BOOL; (*ГОСТЕВОЙ ДОМ - ВЕНТИЛЯТОР - ВАННАЯ*) END_VAR

Как я уже писал ранее, информация о состоянии всех входов и выходов хранится в памяти контроллера в строго отведенной области памяти. Все дискретные значения, где мы имеем всего два состояния 0 и 1, для экономии места пакуются в байты.
Сначала мы объявляем два дискретных входа как логические переменные и привязываем их к области памяти, где у контроллера хранится состояние входов. Конструкция %IX0.0 означает, что мы привязываем переменную к области памяти входов к самому первому дискретному входу (байт 0, бит 0). Все тоже самое и для выходов, только область памяти для выходов обозначается контрукцией %QX0.0 . Таким образом мы имеем два выключателя из спальни и из ванной комнаты, подключенные соотвественно к первому и второму входу, а также два светильника и мотор вентилятора, подключенные к трем первым выходам.

Теперь напишем простейшую программу

OUT_H2_R1_L := IN_H2_R1; OUT_H2_R2_L := IN_H2_R2; OUT_H2_R2_M := IN_H2_R2;

Все предельно просто — выключатель включился=лампочка зажглась. В случае с ванной комнатой при включении выключателя у меня запускается и моторчик вентилятора.

Все!! На первый раз хватит. выбираем в меню пункт компиляции проекта. Ошибок нет!

Теперь с помошью меню ONLINE подключаемся к контроллеру. После подключения система говорит, что проект у нас на компьютере отличается от того что есть в контроллере и предлагает заменить. Не противимся. Опять таки через меню активируем выполнение программы на контроллере и наслаждаемся нашей нетленкой — при включении выключателя загорается лампочка! Все то что можно сделать без контроллера у нас теперь АВТОМАТИЗИРОВАНО!!

Понятно, что не ради этого мы тратили деньги на покупку контроллера, но об этом в следущей статье.

Автор: Али
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.

Добавить комментарий:

Сортировка комментариев: Последние сверху | Первые сверху

2019-07-03 00:40:06 | Henek
Повторю вопрос
Подскажите пожалуйста как в ks2000 ввести ip адрес. Расскажите подробней.
Не получается сделать комуникацию

2018-12-30 08:29:51 | Иван
Подскажите пожалуйста как в ks2000 ввести ip адрес

2014-12-12 22:56:14 | Pagan
засада. звездочка затирается. в конце %Q или %I ставьте звездочку. shift+8.

2014-12-12 22:50:51 | Pagan
извините:) — вот так %Q и %I

2014-12-12 22:48:47 | Pagan
Добрый день.
Хотел немного инфы добавить т.к. все мы тут учимся и ищем новое может кому пригодится. Можно сократить время и снизить вероятность ошибок при написании программы используя вместо %IX0.0 или %QX0.0. вот такой вариант — %I и %Q

2013-06-07 12:09:54 | Али
Запитано от одного источника питания. Для небольших домов 1-2 этажа это не критично. Проблем никаких нет.

2013-06-07 01:44:52 | Миша
Али, скажите, у вас шина и нагрузка запитаны от одного источника? Или раздельно? Насколько это критично в боевых/тестовых условиях?

Источник

Читайте также:  Pascal язык программирования словарь
Оцените статью