Сразу скажу, заголовок, возможно, несколько громковат. Мне реально потребовалось выдернуть из протокола всего одну команду для управления диммером. О том, как это было сделано и что получилось в итоге, читайте дальше в статье.
Итак, есть такая немецкая фирма EOS Premium SPA Technology. Она производит большой спектр оборудования для саун. У них довольно интересные пульты управления, с сенсорными экранами, качественным силовым блоком. Стоят, правда, довольно дорого, но, вроде как, себя оправдывают.
Однако есть в их оборудовании один большой минус. Силовые блоки могут управлять многокиловаттными электропечами, но при этом имеют очень слабый канал управления освещением. Всего до 150 Вт! Освещением можно удобно управлять непосредственно с пульта, включать/выключать его, регулировать яркость. Но вот 150 Вт это ОЧЕНЬ мало! В продаже имеются дополнительные блоки для управления освещением, но ценник там очень негуманный.
В связи с этим появилась задача сделать свой диммер, который бы управлял нагрузкой с большей мощностью и, кроме того, низковольтной нагрузкой (светодиодные ленты на 12/24В или галогеновые лампы на 24В).
Галогенки хоть и потребляют больше и склонные к перегораниям, но на мой взгляд, освещение от них более приятное. Хотя это уже вопрос вкуса. В общем, вот такая задача созрела. Для чего именно нужно такое освещение, хорошо проиллюстрировано на этой картинке:
EOS выпускает много пультов управления, но наиболее распространённые сейчас Emotec и Emotouch III. С ними мы будем разбираться.
Надо сказать, что панель управления в оборудовании EOS соединяется с силовым блоком посредством обычного 4-контактного телефонного кабеля:
Беглый осмотр платы показал, что два провода отведены под питание 24В, а два других по линии интерфейса RS-485. В общем, стандартная реализация. Линии A и B находятся посередине:
Подключившись к линии при помощи преобразователя USB – RS-485 и настроив от балды скорость 9600 бит/сек, мы увидели бегущие байты, но назначение их, понятное дело, было неизвестно. Протокол обмена в свободном доступе найти не удалось, а сама фирма-производитель его предоставить отказалась, хотя соответствующий запрос им отправляли.
Пришлось заниматься декодированием самостоятельно :-)
Да, сразу отмечу один нюанс. Управление диммером работает только после перевода силового блока в рабочий режим. Это хорошо видно при подключённой лампе к выходу встроенного диммера. Она начинает светиться только после запуска сауны на нагрев.
Вначале стали перебирать скорости от 9600 до 115200 бит/сек из стандартного ряда.
И вот на скорости 38400 в глаза бросилось то, что команды разделяются двумя стандартными байтами 0x0A, 0x0D.
Что ж, это уже что-то. Сделаем следующий трюк. Поищем нужную нам команду по значению яркости. Вдруг оно передаётся в открытом виде.
Задаём на пульте управление значение 73 (0x49):
Далее снимаем лог и тупо ищем там этот байт:
Вуаля! Находим его, просматриваем вправо и влево до байтов 0x0A, 0x0D, пытаясь выделить нужный нам пакет. И в результате получаем вот такую структуру:
0x0E 0x04 0x04 0x49 0x49 0x00 0x00 0xD1 0x0A 0x0D
В ходе экспериментов было установлено, что 2 и 3 байты всегда равны 0x04, 4 и 5 задают яркость в процентах, 6 и 7 равны 0, 8 — меняется, что означает пока не понятно, 9 и 10 — 0x0A, 0xD.
Как показали эксперименты, первый байт является адресом. Он задаёт так называемый номер комнаты. Дело в том, что пульты EOS могут управлять несколькими силовыми блоками одновременно. Для каждого задаётся свой адрес, который и передаётся в этом байте.
Адреса следующие:
Для пультов управления печью:
01 — первая комната
21 — вторая комната
41 — третья комната
61 — четвертая комната
81 — пятая комната
A1 — шестая комната
C1 — седьмая комната
E1 — восьмая комната
Для пультов управления парогенератором:
0E — первая комната
2E — вторая комната
4E — третья комната
6E — четвертая комната
8E — пятая комната
AE — шестая комната
CE — седьмая комната
EE — восьмая комната
Собственно, это и всё декодирование.
Для проверки, так сказать в «динамике» мы быстренько накидали программку на Delphi для вывода значения яркости и покрутили ползунок. Всё отрабатывает чётко.
После этого разработали на Си несложную программу по декодированию этих пакетов и запустили всё в «железе». Само устройство довольно простое. Там реализован обычный ШИМ на силовом ключе, но если интересно, могу потом отдельную статью про это написать.
Автор: FDA847