РЕКЛАМА НА ФОРУМХАУС Самая хорошая система автоматизации в доме - это та о которой не вспоминаешь. Она исправно делает свою работу избавляя от разных мелочей. Подходит к завершению обустройство фасадного забора. Задумал сделать небольшое освещение вдоль забора. Благо кабельные трассы и саму проводку подготовил. Прикрутил светильники на столбы, обвязал их. И теперь задумался как их лучше включать? В качестве источников света приобрел светодиодные лампы в цоколе Е27 5Вт. Решил не городить с датчиками освещения, движения и пр. Использую свободный дискретный выход контроллера (через контактор с автоматом). Управлять думаю просто по времени с учетом восхода-заката. Под козырьком ворот соединения пропаял и обжал термоусадкой. Надеюсь 1,5мм2 не скоро сгниют и контакт не пропадет.
Управление светом на улице, на мой взгляд, эффективнее организовать по сигналам датчика освещенности. Стоит копейки, нужен всего один. Каждый день солнце всходит/садится в разное время+тучи, не угадаете.
Если есть контроллер, который может управлять освещением, то можно включать по времени. В противном случае можно и по датчику освещенности. Мне оказалось гораздо проще включать уличное освещение по времени заката/восхода солнца. В PHP есть функции, которые позволяют точно определить время восхода и заката в данной географической координате (широта+долгота). Координаты взял для своего дома из гугла. Включаю через 20 минут после заката, выключаю за 20 минут до восхода. Бонус управления освещения по времени с учетом координаты - разное освещение у меня включается и отключается по-разному. Над гаражом прожектор горит всю ночь, освещение двора включается после заката и выключается в 11 с чем-то, либо по команде вручную. Остальное освещение управляется по программе тоже по своему. Все руки не доходят датчики движения еще поставить, чтобы свет во дворе включался по датчикам. Это точно. Вчера при мне включился прожектор, и я вспомнил как раньше руками все это дело включал и отключал. И осознал что последние полгода вообще не задумывался об освещении, так как оно работает так как надо само по себе. А на днях зашел в старую квартиру, в прихожей почему-то темно. Пару секунд соображал почему так и только потом дошло что в квартире нет датчиков движения.
Как ни странно но у меня за два года вышли из строя 3 датчика движения и освещения. В одном месте уже второй раз меняю. Возможно брак но мне не легче. Приходится вновь и вновь возвращаться к теме уличного освещения. А вот контроллер ... Как раз забыл про него. Вот и подумал, что один раз скоммутировать выход и забыть. В прочем я сделал проводку в том числе и для датчика движения с освещением и переключить на него - перекоммутировать на кроссе пару перемычек. @usergey, это газовая горелка. Прогревал термоусадку зажигалкой и обжегся. Решил вопрос принципиально - газовая горелка. Очень удобно. Даже насадка есть для пайки если электричество далеко.
Есть специализированные контроллеры для включения освещения в соответствии с закатом-восходом солнца (т.е. ему надо ввести широту-долготу и смещение времени включения). Но вообще я-бы посмотрел в сторону универсальных контроллеров.
@yushkin, не сомневаюсь. Сейчас можно купить практически все. Но в моём случае контроллер уже имеется и 10 свободных дискретных выходов не использовано. Ну а алгоритм может быть самым простейшим. Массив из 12 строк на два поля. Время ВКЛ и время выкл. Строка - месяц. Не думаю, что нужна точность до секунды и сотни строк кода, если все может быть решено банально просто. И вычислительный ресурс контроллера сохранен.
Да, как-то основную мысль в обсуждении потерял. Codesys сложен в изучении? Я вот WirenBoard приобрел - там linux.
@yushkin, мне codesys показался очень простым. Сложнее оказалось перестроить мысли на особенности программирования ПЛК. Привычный стиль написания алгоритмов с циклами и пр. языковыми конструкциями надо менять. Если в обычной программе мы пишем обработку массива путём создания простого цикла, то тут надо учесть, что сама программа будет вызываться циклически. И от входа до выхода - это одна итерация. И стремиться к сокращению времени которое требуется на выполнение одной программы. Т. е. тут нет в явном виде многозадачности. Но зато нет и издержек на организацию многозадачности. Зы. В Codesys 3. x не знаю. Там в качестве ОС линукс используется. Возможно там иначе.
PHP: echo date("D M d Y"). ', время восхода солнца : ' .date_sunrise(time(), SUNFUNCS_RET_STRING, 51.12345, 107.12345, 90, 8);echo "<BR>";echo date("D M d Y"). ', время захода солнца : ' .date_sunset(time(), SUNFUNCS_RET_STRING, 51.12345, 107.12345, 90, 8); PHP: $SunRiseTime = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, 51.12345, 107.12345, 90, 8)-60*30;$SunSetTime = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, 51.12345, 107.12345, 90, 8)+60*20;$CurrentTime = time();
Я поступил банально просто. Время включения и отключения указал на середину месяца и скорректировал включение немного позже, отключение немного раньше. Занес в массив. Код получился простым и быстрым. Код: TYPE tLigtMode : STRUCT H_ON: INT; M_ON: INT; H_OFF: INT; M_OFF: INT; END_STRUCT END_TYPE PROGRAM lighting VAR NightMode : ARRAY[1..12] OF tLigtMode := (H_OFF := 9, M_OFF := 30, H_ON := 17, M_ON := 30), (* Январь *) (H_OFF := 8, M_OFF := 40, H_ON := 18, M_ON := 30), (* Февраль *) (H_OFF := 7, M_OFF := 30, H_ON := 19, M_ON := 30), (* Март *) (H_OFF := 6, M_OFF := 10, H_ON := 20, M_ON := 30), (* Апрель *) (H_OFF := 5, M_OFF := 00, H_ON := 21, M_ON := 30), (* Май *) (H_OFF := 4, M_OFF := 30, H_ON := 22, M_ON := 00), (* Июнь *) (H_OFF := 5, M_OFF := 00, H_ON := 22, M_ON := 00), (* Июль *) (H_OFF := 5, M_OFF := 40, H_ON := 21, M_ON := 00), (* Август *) (H_OFF := 6, M_OFF := 30, H_ON := 20, M_ON := 00), (* Сентябрь *) (H_OFF := 7, M_OFF := 30, H_ON := 18, M_ON := 30), (* Октябрь *) (H_OFF := 8, M_OFF := 30, H_ON := 17, M_ON := 30), (* Ноябрь *) (H_OFF := 9, M_OFF := 30, H_ON := 17, M_ON := 30); (* Декабрь *) GetTime: CurTimeEx; Sys_DateTime, Z: SystemTimeDate; Sys_Time: SysTime64; END_VAR Sys_DateTime := Z; GetTime (SystemTime:=Sys_Time , TimeDate:= Sys_DateTime); (*************************************************) IF Sys_DateTime.Hour >= NightMode[Sys_DateTime.Month].H_OFF AND Sys_DateTime.Minute >= NightMode[Sys_DateTime.Month].M_OFF AND Sys_DateTime.Hour <= NightMode[Sys_DateTime.Month].H_ON AND Sys_DateTime.Minute <= NightMode[Sys_DateTime.Month].M_ON THEN lamp0 := FALSE; ELSE lamp0 := TRUE; END_IF; lamp0 - дискретный выход ПЛК.
Вот, что значит по ночам алгоритмы писать Ошибку допустил. Нужно привести время текущее и время установок к минутам с начала суток. И полученные значения сравнивать.
Да. Описание функций PHP можно в инете посмотреть. Да, вариант, если в контроллере нет функций расчета восхода и заката по координатам. Я тоже опытным путем пришел к тому что свет имеет смысл включать через некоторое время после заката, так как после заката еще какое-то время достаточно светло. Аналогично с рассветом.