После долгой зимней спячки у меня началась пробуждаться активность. Все необходимое вроде бы собрал для начала, осталось просто установить и начать играться с настройками. Но для начала я решил сделать стенд - чтобы не ковыряться долго в электрощите. Выглядит он сейчас вот так:
Верхняя рельса: PLC Beckhoff
CX9010-1001 с двумя Ethernet портами, 4 штуки
KL1418 - модули ввода 24V по 8 каналов, разделитель понециалов
KL9260, 5 штук модулей вывода 220V
KL2622 и заглушка
KL9010. Нижняя релься - блок питания ОВЕН
БП60Б-Д4.
Получается что у меня 8*4 = 32 входных канала. Должно быть вполне достаточно для выключателей и датчиков. Модули вывода KL2622 содержат по два реле и держать до 5A резистивной нагрузки. Итого у меня сейчас 5*2=10 каналов выхода примерно по киловатту каждый - вполне достаточно для любой группы света у меня дома.
Самый минимум который требуется от этой системы чтобы попасть в электрощит - делать то же самое что делает сейчас жестко скоммутированная схема в щите. Для этого достаточно написать программу которая жестко связывает входы и выходы. Как подходить к написанию программы я писал уже раньше
тут и
вот тут. Программу я хочу написать сам, а не использовать Beckoff Building Automation Manager, потому что так интереснее.
Сначала надо в программе описать все переменные входа и выхода. Входы я описал только первые 10, хотя их 32. Потом в System Manager надо не забыть их привязать к каналам ввода и вывода на терминалах.
PROGRAM MAIN
VAR
In01 AT %IX0.1: BOOL;
In02 AT %IX0.2:BOOL;
In03 AT %IX0.3:BOOL;
In04 AT %IX0.4:BOOL;
In05 AT %IX0.5:BOOL;
In06 AT %IX0.6:BOOL;
In07 AT %IX0.7:BOOL;
In08 AT %IX0.8:BOOL;
In09 AT %IX1.1:BOOL;
In10 AT %IX1.2:BOOL;
Out01 AT %QX0.1 : BOOL;
Out02 AT %QX0.2 : BOOL;
Out03 AT %QX0.3 : BOOL;
Out04 AT %QX0.4 : BOOL;
Out05 AT %QX0.5 : BOOL;
Out06 AT %QX0.6 : BOOL;
Out07 AT %QX0.7 : BOOL;
Out08 AT %QX0.8 : BOOL;
Out09 AT %QX1.1 : BOOL;
Out10 AT %QX1.2 : BOOL;
END_VAR
Ну и собственно программа проста до безобразия:
Out01 := In01;
Out02 := In02;
Out03 := In03;
Out04 := In04;
Out05 := In05;
Out06 := In06;
Out07 := In07;
Out08 := In08;
Out09 := In09;
Out10 := In10;
Это язык ST - он наиболее привычен для программиста и, думаю, наиболее компактен. Тут надо понять одно - данная программа выполняется в цикле (периодичность задается в настройках контроллера в проекте - по умолчанию 10 миллисекунд). То есть, каждые 10 миллисекунд выход Out01 устанавливается равным входу In01 и так далее.
Я загрузил программу в контроллер, запустил и стал тыкать проводком, подключенным к +24V в гнезда модулей ввода. При этом загорается индикатор на модуле ввода, сигнализирующий что на входе - единица, и соответствующий индикатор на модуле вывода - а значит моя программа работает!
В таком состоянии это все уже можно установить в электрощит, позвать электрика чтобы он завел выключатели на входы, а группы света - на выходы, и начинать эксперименты. Эксперименты задумываются такие: написать программу таким образом, чтобы сценарии (какой вход каким выходом управляет) задавались через области переменных, а не жестко. Потом заиспользую библиотеку для .NET и напишу простенький web интерфейс чтобы можно было управлять умным домом удаленно. Ну и сами сценарии усложнить - чтобы свет в туалете всю ночь не горел, чтобы ночная подсветка сама включалась, чтобы в прихожей свет сам включался когда приходишь и темно и т.п.
С железной стороны хочется поиграть с диммерами, но тут надо исследовать вопрос с лампами - энергосберегающие нельзя диммировать, а другие, глядишь, запретят нафиг скоро. Потом, надо будет прикручивать какой-нибудь беспроводной интерфейс для датчиков, торшеров и непредусмотренных выключателей - z-wave, zigbee или что-то похожее.