Компания beckhoff больше известна в области промышленной автоматизации. В 1995 году они совместно с другой немецкой компанией Wago объединились для создания контроллера с распределенной системой входов-выходов. Beckhoff паяла электронику, а Wago разрабатывал конструктив. В результате beckhoff выпустил контроллеры серии BC/BX (а Wago серию 750) и систему модулей ввода вывода к ним. В 2000 году контракт закончился и компании развивают это направления самостоятельно. У beckhoff последняя линейка контроллеров CX под управлением WinCE или WinXP Embedded. У Wago это последние модификации 750 серии под Linux.
Для своей системы я выбрал контроллер серии BC. Он считается самым "старым" и маломощным, но этой маломощности по моему мнению хватает с лихвой для управления электрикой умного дома. Но, впрочем по порядку о системе распределенного ввода вывода Beckhoff.
![Рис-1.gif](./download/file.php?id=105&sid=902ecf15b1f58f89792db9a0dd5b1f1c)
- Рис-1.gif (19.04 КБ) 113462 просмотра
1. Три источника, три составные части
Распределенная система Beckhoff можно разбить на три основные части:
-
Bus Terminal Controller - микрокомпьютер, который управляет системой, согласно записанной в него программы. Программы пишутся на любом языке программирования микроконтроллеров стандарта МЭК 61131-3. За интерпретацию и исполнение этих программ отвечает встроенное в микроконтроллер программное ядро TwinCat. В принципе в качестве контроллера может выступать и обычный ПК, но на него надо инсталлировать ядро TwinCat (что не бесплатно). Среда разработки и отладки программ для микроконтроллера предоставляется бесплатно. Контроллер умеет общаться с внешним миром с помошью стандартных шин и протоколов. Я использую контроллер BC9000, который подключается к Ethernet и общается по стандарному TCP/IP протоколу. К контроллеру подключаются терминалы ввода-вывода.
-
Bus Terminal Coupler- микрокомпьютер, который выглядит точно так же как и контроллер, но который не умеет исполнять программы. К каплеру также подключаются терминалы ввода-вывода, и его основная задача предоставить к ним доступ контроллеру в распределенной системе. Доступ дается через стандартные шины и протоколы. Для Ethernet к BC9000 идет парный каплер BK9000.
-
Bus Terminals - модули ввода-вывода. Beckhoff предлагает очень широкую линейку модулей ввода вывода, которые деляться у него на следующие группы: дискретные входы-выходы, аналоговые входы-выходы, коммуникационные модули (шлюзы в различные протоколы передачи данных), системные модули (модули, необходимые для фунционирования системы). Контроллер BC9000 поддерживает модули серии KL****. Модули серии EL**** предназначены для самых современных контроллеров с шиной EtherCAT (нам это не нужно). Ширина модуля на рейке - 12 мм.
![Рис-2.gif](./download/file.php?id=106&sid=902ecf15b1f58f89792db9a0dd5b1f1c)
- Рис-2.gif (19.41 КБ) 113462 просмотра
Как я уже говорил, модули ввода-вывода подключаются к контроллеру (или каплеру). Самым последним всегда ставится системный модуль-заглушка KL9010. Общение контроллера и модулей идет через внутреннюю шину K-BUS к которой каждый модуль автоматически подключается после подсоединения в контроллеру с помошью специальных контактов. Контроллер (или каплер) централизованно питает все модули 24V DC. В случае, если питания от контроллера не хватает, или мы используем например модули которые надо запитывать уже к 220V AC, то используются системные модули для разделения потенциала.
2. Контроллер BC9000
К контроллеру BC9000 можно подключить до 64 модулей, что для наших задач достаточно с избытком (легко посчитать, чтобы разместить сосиску из 64 модулей нужна дин-рейка длиной не менее 80 см). Для программы выделяется 64 кб памяти, столько же под данные. Есть область 'энергонезависимой памяти размером 4 кб. Питание 24V.
Контроллер подключается к с обычной сети через Ethernet. C помошью программы конфигурации ему присваивается свой IP адрес в сети. Каждый модуль, который присоединен к контроллеру - это по сути микроконтроллер, который исполняет свою задачу, а именно либо считывает данные со входа и записывает в ячейку своей памяти, либо устанавливает выход в зависимости от установленного значения в своей памяти. Причем beckhoff продает различные модули с различной скоростью считывания, в зависимости от задачи. Контроллер циклически через шину K-BUS считывает все данные из ячеек модулей в свою память для дальнейшей обработки программой (о циклах контроллера читай ниже).
3. Программирование контроллера. Beckhoff TwinCat.
Как и в других логических контроллерах у контроллера BC9000 существует понятие "цикла исполнения". Контроллер производит циклические действия, которые состоят из двух фаз - время исполнения программы (programm running time) и коммуникационное время (background time).
![Рис-3.gif](./download/file.php?id=107&sid=902ecf15b1f58f89792db9a0dd5b1f1c)
- Рис-3.gif (6.64 КБ) 113462 просмотра
Врямя исполнения программы - это четко заданные промежуток времени в течение которого происходят следующие действия - контроллер считывает все данные с модулей памяти по шине K-BUS, запускает нашу программу, которая на основании состояния входов меняет значения состояния выходов в памяти контроллера, после чего контроллер по шине K-BUS записывает данные в модули выходов, чтобы те в свою очередь произвели соответствующие действия. Если мы управились быстрее времени, чем нам выделено, то оставшееся время добавляется в background time. А вот если наша программа не успела все сделать за назначенное время, то срабатывает watchdog, который обычно перезагружает контроллер.
Коммуникационное время (background time) выделяется контроллером для осуществления обмена данными между контроллером и внешним миром через Ethernet.
По умолчанию в BC9000 время исполнения составляет 5 ms, а коммуникационное время 1 ms, но через программу настройки эти значения можно менять, в зависимости от наших задач.
Для написания, отладки и заливки программы в контроллер Beckhoff предоставляет бесплатный инструментарий под названием TwinCat. По сути это более известная разработчикам ПЛК система CoDeSys, только в профиль... Программирование контроллера может вестись на любом из 5 языков программирования из стандарта 61131-3. Причем в рамках одной программы разные ее модули могут быть написаны на разных языках. Так как я до этого не занимался программированием контроллеров, то пока выбрал для работы язык SF - это паскале-подобный язык программирования, в котором мне проще работать... Дальше будет видно..
Также хочется отметить, что после опыта написания программ для ПК надо немного привыкнуть к программированию контроллеров, что по сути является программированием дискретных автоматов. Нужно привыкнуть к тому, что цикл опроса WHILE (1) ... DO за тебя уже сделали. Нужно привыкнуть к тому, что контроллер входит в каждый цикл, как первый раз в жизни, поэтому надо все состояния хранить в переменных. Нужно привыкнуть к тому, что сигнал дикретного входа определяется не как "IF MyInput=1 Then" а надо "ловить фронты". Вообщем надо мозг чуть-чуть повернуть... На пару градусов...
4. Подключение к контроллеру через Ethernet. Протокол ADS.
Для обмена данными между контроллером и компьютером у Beckhoff разработан протокол ADS, который является надстройкой над TCP/IP. Инструментарий для работы с этим протоколом предоставляется бесплатно в виде файлов библиотек и поддерживает DLL, OCX, VB Script, J Script, .NET, Java для Windows, а также есть open source проект для реализации этого протокола под Linux. Наличие этих библиотек позволяют делать две очень важные для нас вещи. Первое - это чтение данных с контроллера о состоянии входов-выходов для отображения на интерфейсе пользователя, либо для сохранения в базе данных. Второе - с помощью этих библиотек мы имеем возможность напрямую управлять выходами, а также мы получаем доступ ко всем переменным программы контроллера, то есть можем управлять ходом действия программы изменяя значения этих переменных. Одним словом, это очень важный функционал для интеграции этого блока управления "Умным домом" в единую систему.
Также в контроллер BC9000 встроена поддержка ModbusTCP, но я не пользоался пока этой возможностью.
5. И немного о ценах.
Так как программируемые контроллеры за последние годы шагнули вперед, то "устаревшие" модели типа BC9000 можно поймать на немецком e-bay где то за 100 евро. Мне обошелся с доставкой 110 евро. Также учитывая что Beckhoff сейчас вовсю переходит на модули с новой шиной e-bus (стандарт EtherCAT), то "старые" модули под K-BUS с кодировкой KL**** можно купить сейчас дешево. Дискретные модули ввода-вывода на 2 или 4 канала продаются где то за 10 евро, на 8 каналов за 15 евро. Естественно, выгоднее покупать на 8 выходов. Я купил 8-канальные дискретные входы и выходы по 17 евро с доставкой. То есть по 2,125 евро за канал ( по тому курсу получилось по 80 рублей за канал, что меня вполне устраивает). Аналоговые входы-выходы стоят дороже - от 20 до 50 евро на 2 канала (надо ловить), но их и меньше требуется. Коммуникационные самые дорогие - от 50 до 100. Я их пока не покупал, так как пока не возникло у меня необходимости в этом.
В следующих постах я более детально опишу модули, которые я использую для своих задач.