Опрос


Что для Вас Умный Дом?


Результаты

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

03/09/2011 16:32:55

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

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 подключаемся к контроллеру. После подключения система говорит, что проект у нас на компьютере отличается от того что есть в контроллере и предлагает заменить. Не противимся. Опять таки через меню активируем выполнение программы на контроллере и наслаждаемся нашей нетленкой - при включении выключателя загорается лампочка! Все то что можно сделать без контроллера у нас теперь АВТОМАТИЗИРОВАНО!! :)

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

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



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



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

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 | Миша
Али, скажите, у вас шина и нагрузка запитаны от одного источника? Или раздельно? Насколько это критично в боевых/тестовых условиях?