PDA

Просмотр полной версии : Включение и выключение освещения по времени на спк207



alexanderzzz
28.06.2016, 17:34
Здравствуйте.
Есть спк207 и модули вывода. Подскажите, пожалуйста, как реализовать включение и отключение освещения по часам. Например, в одном месте свет должен включиться в 7 утра, а выключиться в 2 ночи, в другом 7 включиться, а в 22 выключиться.
Не работал еще с часами реального времени и никак не могу разобраться.

Евгений Кислов
28.06.2016, 18:18
Здравствуйте.
Есть спк207 и модули вывода. Подскажите, пожалуйста, как реализовать включение и отключение освещения по часам. Например, в одном месте свет должен включиться в 7 утра, а выключиться в 2 ночи, в другом 7 включиться, а в 22 выключиться.
Не работал еще с часами реального времени и никак не могу разобраться.

Посмотрите п. 13.3 в документе СПК.FAQ.

alexanderzzz
29.06.2016, 11:11
Спасибо за подсказку.
А не могли бы чуть чуть подробней объяснить. Как извлечь время понятно, но никак не могу сообразить, что нужно сделать, чтоб в 7-00 включилось, а в 2-00 выключилось.

Евгений Кислов
29.06.2016, 11:17
Спасибо за подсказку.
А не могли бы чуть чуть подробней объяснить. Как извлечь время понятно, но никак не могу сообразить, что нужно сделать, чтоб в 7-00 включилось, а в 2-00 выключилось.




IF CurrentHour=7 AND CurrentMinute=0 AND CurrentSecond=0 THEN
Enable:=TRUE;
END_IF

IF CurrentHour=2 AND CurrentMinute=0 AND CurrentSecond=0 THEN
Enable:=FALSE;
END_IF

alexanderzzz
06.07.2016, 11:49
Спасибо большое.

vinam
10.12.2019, 11:05
IF CurrentHour=7 AND CurrentMinute=0 AND CurrentSecond=0 THEN
Enable:=TRUE;
END_IF

IF CurrentHour=2 AND CurrentMinute=0 AND CurrentSecond=0 THEN
Enable:=FALSE;
END_IF



Здравствуйте.
Подскажите немного другую ситуацию.
Нужно чтоб вентилятор работал в двух режимах, допустил режим 1: понедельник - пятница с 22-30 до 6-00, режим 2: понедельник - пятница с 6-00 до 22-30, суббота и воскресенье - режим 1.
Кручу верчу, ничего со временем не получается...

Евгений Кислов
10.12.2019, 11:15
Добрый день.
Покажите, пожалуйста, что именно у вас не получается (примеры кода).

vinam
10.12.2019, 13:08
Добрый день.
Покажите, пожалуйста, что именно у вас не получается (примеры кода).

Последнее на чем остановился, но с диапазонами времени какая то беда

PROGRAM Job_PRG
VAR
usiGetDayOfWeek: USINT; // текущий день недели
usiGetHour: USINT; // текущий час
usiGetMinute: USINT; // текущая минута
usiTimeHourON : USINT; // Время включения (0...23), ч
usiTimeMinuteON : USINT; // Время включения (0...59), мин
usiTimeHourOFF : USINT; // Время выключения (0...23), ч
usiTimeMinuteOFF : UIUSINTNT; // Время выключения (0...59), мин
bJob_1: BOOL; // работа вентилятора режим 1
bJob_2: BOOL; // работа вентилятора режим 2
bFlagTimePRG: BOOL; // флаг

END_VAR

************************************************** ********************************

bFlagTimePRG := usiGetHour >= usiTimeHourON AND usiGetMinute >= usiTimeMinuteON AND
usiGetHour <= usiTimeHourOFF AND usiGetMinute <= usiTimeMinuteOFF;

IF bFlagTimePRG AND NOT usiGetDayOfWeek = 6 OR NOT usiGetDayOfWeek = 7 THEN
bJob_1 := TRUE;
bJob_2 := FALSE;
ELSE
bJob_1 := FALSE;
bJob_2 := TRUE;
END_IF

Евгений Кислов
10.12.2019, 13:29
Чтобы проще было отладить - подставьте вместо usiTimeHourON и т.д. какие-то числа - тогда станет ясно, почему именно все работает не так, как задумано.

vinam
10.12.2019, 13:52
Чтобы проще было отладить - подставьте вместо usiTimeHourON и т.д. какие-то числа - тогда станет ясно, почему именно все работает не так, как задумано.

В этом я то и запутался, это условие работает когда уставки вкл./выкл. в пределах суток от 0-00 до 23-59
bFlagTimePRG := usiGetHour >= 1 AND usiGetMinute >= 15 AND usiGetHour <= 6 AND usiGetMinute <= 30;

А когда включить нужно в конце одного дня, а выключить на следующий, это условие уже не подходит
bFlagTimePRG := usiGetHour >= 22 AND usiGetMinute >= 30 AND usiGetHour <= 6 AND usiGetMinute <= 30;

Евгений Кислов
10.12.2019, 14:10
usiGetHour - текущий час - он не может быть одновременно >=22 и <=6 - а вы условия через оператор AND объединили.

vinam
10.12.2019, 14:37
usiGetHour - текущий час - он не может быть одновременно >=22 и <=6 - а вы условия через оператор AND объединили.

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

capzap
10.12.2019, 14:40
Евгений, это я понимаю, я не понимаю как сделать так как мне нужно)) Просто начал свой вопрос с самого начала, чтоб была понятна моя проблема

превести время в UNIX-время (https://ru.wikipedia.org/wiki/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F) и следить за разницей миллисекунд(просто секунд), от начала до текущего и сравнивать с заданным

petera
10.12.2019, 14:52
В этом я то и запутался, это условие работает когда уставки вкл./выкл. в пределах суток от 0-00 до 23-59
bFlagTimePRG := usiGetHour >= 1 AND usiGetMinute >= 15 AND usiGetHour <= 6 AND usiGetMinute <= 30;

А когда включить нужно в конце одного дня, а выключить на следующий, это условие уже не подходит
bFlagTimePRG := usiGetHour >= 22 AND usiGetMinute >= 30 AND usiGetHour <= 6 AND usiGetMinute <= 30;

Обобщенно



(*собираем часы, минуты и секунды в одну кучу - в секунды*)
time_on:=(on_Hour * 60 + on_Minute) * 60 + on_Second; (*время включения*)
time_of:=(of_Hour * 60 + of_Minute) * 60 + of_Second; (*время отключения*)
current_time:=(CurrentHour * 60 + CurrentMinute) * 60 + CurrentSecond; (*текущее время*)
IF time_on <= time_of THEN
Enable:=current_time >= time_on AND current_time < time_of;
ELSE
Enable:=NOT(current_time >= time_of AND current_time < time_on);
END_IF

vinam
10.12.2019, 15:29
Спасибо, всем!!!