Выполнение команд по расписанию
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Выполнение команд по расписанию
Добрый день!
Подскажите, есть ли возможность реализовать в отправку команд по расписанию?
Пример: по RS-485 постоянно опрашивается прибор, получаются данные. Есть необходимость два раза в сутки отправлять команду на включение и отключение (в 8:00 и 17:00 соответственно).
Кто-нибудь реализовывал что-то подобное? Какие есть инструменты для этого?
Подскажите, есть ли возможность реализовать в отправку команд по расписанию?
Пример: по RS-485 постоянно опрашивается прибор, получаются данные. Есть необходимость два раза в сутки отправлять команду на включение и отключение (в 8:00 и 17:00 соответственно).
Кто-нибудь реализовывал что-то подобное? Какие есть инструменты для этого?
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Выполнение команд по расписанию
Отдельный цикл с некоторым тактом ( в данном случае достаточно 1000мс ) проверяет, не больше-ли текущее время заданного. Если больше, то происходит отправка данных, заряжается новое заданное время и цикл продолжается.
Меньше интервал цикла делать не имеет смысла потому, что во-первых оборудованию не жарко и не холодно, если будет ошибка на секунду, а во-вторых разбег настоящего времени и времени компьютера может составлять гораздо большую величину, особенно, если нет временной синхронизации.
Сравнивать необходимо на "больше или равно", но ни в коем случае на "равно".
Меньше интервал цикла делать не имеет смысла потому, что во-первых оборудованию не жарко и не холодно, если будет ошибка на секунду, а во-вторых разбег настоящего времени и времени компьютера может составлять гораздо большую величину, особенно, если нет временной синхронизации.
Сравнивать необходимо на "больше или равно", но ни в коем случае на "равно".
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Выполнение команд по расписанию
Да, я это как-то так и представлял. Время с ПК,я так понимаю, можно взять функцией date/time string или Elapsed Time. А дальше просто сравнивать эти строки и все?
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Выполнение команд по расписанию
Elapsed Time Вам не поможет, т.к. нужно отслеживать абсолютное время, а не прошедшее.AlexOskar писал(а):Да, я это как-то так и представлял. Время с ПК,я так понимаю, можно взять функцией date/time string или Elapsed Time. А дальше просто сравнивать эти строки и все?
А вот date/time string поможет, это да... Искал подобный код - раньше когда-то делал - но, к сожалению, ничего не нашел...
Мы делили апельсин - много наших полегло...
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Выполнение команд по расписанию
Я пока только до такого додумался
- Вложения
-
- Proba.vi
- (8.51 КБ) 72 скачивания
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Выполнение команд по расписанию
Правильнее наверное сразу делать в стиле событийно управляемого конечного автомата.AlexOskar писал(а):Добрый день!
Подскажите, есть ли возможность реализовать в отправку команд по расписанию?
Пример: по RS-485 постоянно опрашивается прибор, получаются данные. Есть необходимость два раза в сутки отправлять команду на включение и отключение (в 8:00 и 17:00 соответственно).
Кто-нибудь реализовывал что-то подобное? Какие есть инструменты для этого?
Остальные состояния я опущу, вот два события, хотя наверное многие сделали бы в одном. Но я специально разнес на два, что бы иметь возможность (после доработки) включения/выключения "в ручном режиме" или из другого Event (но не переписывать код посылки команды). Событие TimeOut - запускается каждую секунду (можно и чаще, но не имеет смысла). Считывает реальное время и сравнивает его с заданным интервалом. Если в интервале, то True, иначе False. Событие In Range: Value Change - здесь сравниваем с предыдущим значением, что бы не слать бестолковые команды. Если произошла смена состояний, то уже посылать команду.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Выполнение команд по расписанию
Очень крутая реализация, спасибо!
Есть ли возможность ограничить максимальное значение вводимых часов 24, минут 60 и сделать так, чтобы их нельзя было вбить с клавиатуры, а изменять только перебором?
Есть ли возможность ограничить максимальное значение вводимых часов 24, минут 60 и сделать так, чтобы их нельзя было вбить с клавиатуры, а изменять только перебором?
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Выполнение команд по расписанию
Для каждого контрола можно настроить диапазон и инкрементAlexOskar писал(а):Есть ли возможность ограничить максимальное значение вводимых часов 24, минут 60 и сделать так, чтобы их нельзя было вбить с клавиатуры, а изменять только перебором?
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Выполнение команд по расписанию
Сегодня удалось протестировать Ваш
Идея использовать интервал - шикарная. При сравнении строк со временем возникала сложность определить при старте в каком положении должен находится выключатель ("уже включен или еще рано???"). Здесь же сразу все понятно.
Но! Все хорошо работает только для периода "с утра до вечера", например с 08:00 до 17:00. При обратном варианте с 17:00 до 08:00 (управление уличным фонарем) ничего не происходит.
Поправить у меня не получилось, зато нагородил свой, но все с той же проблемой определения статуса при старте
Идея использовать интервал - шикарная. При сравнении строк со временем возникала сложность определить при старте в каком положении должен находится выключатель ("уже включен или еще рано???"). Здесь же сразу все понятно.
Но! Все хорошо работает только для периода "с утра до вечера", например с 08:00 до 17:00. При обратном варианте с 17:00 до 08:00 (управление уличным фонарем) ничего не происходит.
Поправить у меня не получилось, зато нагородил свой, но все с той же проблемой определения статуса при старте
- Вложения
-
- Lighting.vi
- (21.82 КБ) 79 скачиваний
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Выполнение команд по расписанию
Предлагаю такой вариант.
Расписание в таком же формате, как и у Вас (т.е. часы и минуты как цифровые контроллы. Можно немного поморочиться, и сделать все красиво через выбор времени, но и так сойдет), плюс - селектор действия (т.к. в принципе, для масштабируемости, действия могут быть разные).
По старту программы, задается расписание (ну или нет, это зависит от того, как сделать; можно и с файла инфу считать), а затем по нажатию кнопки начинается отслеживание. В результате, когда событие настало, при помощи селектора можно определить, что и как нужно сделать.
Расписание в таком же формате, как и у Вас (т.е. часы и минуты как цифровые контроллы. Можно немного поморочиться, и сделать все красиво через выбор времени, но и так сойдет), плюс - селектор действия (т.к. в принципе, для масштабируемости, действия могут быть разные).
По старту программы, задается расписание (ну или нет, это зависит от того, как сделать; можно и с файла инфу считать), а затем по нажатию кнопки начинается отслеживание. В результате, когда событие настало, при помощи селектора можно определить, что и как нужно сделать.
- Вложения
-
- scheduler 2012.zip
- (32.38 КБ) 84 скачивания
Мы делили апельсин - много наших полегло...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Выполнение команд по расписанию
Все работает годами). Что не так - не понятно.AlexOskar писал(а):...Идея использовать интервал - шикарная. ... Но! Все хорошо работает только для периода "с утра до вечера", например с 08:00 до 17:00. При обратном варианте с 17:00 до 08:00 (управление уличным фонарем) ничего не происходит.
- Вложения
-
- IvanLis--Timer+Current Time Simulator10.vi
- (11.66 КБ) 82 скачивания
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Выполнение команд по расписанию
Так вроде работает, а меняю системное время - не хочет. Да и Ваш срабатывает только на следующую ночь: сейчас 16:30 - запускаю -накидывается 1 час - время в симуляторе 17:30 - время включения 17:00 - команды на включение нет - проходит 24 часа и с этого момента все ОКBlackman писал(а):Все работает годами). Что не так - не понятно.AlexOskar писал(а):...Идея использовать интервал - шикарная. ... Но! Все хорошо работает только для периода "с утра до вечера", например с 08:00 до 17:00. При обратном варианте с 17:00 до 08:00 (управление уличным фонарем) ничего не происходит.
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Выполнение команд по расписанию
Над этим надо посидеть. Спасибо за вариант!Kosist писал(а):Предлагаю такой вариант.
Расписание в таком же формате, как и у Вас (т.е. часы и минуты как цифровые контроллы. Можно немного поморочиться, и сделать все красиво через выбор времени, но и так сойдет), плюс - селектор действия (т.к. в принципе, для масштабируемости, действия могут быть разные).
По старту программы, задается расписание (ну или нет, это зависит от того, как сделать; можно и с файла инфу считать), а затем по нажатию кнопки начинается отслеживание......
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Выполнение команд по расписанию
C изменением системного времени не понял. А так поведение при первом вызове из-за алгоритма срабатывания "on change only".
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Выполнение команд по расписанию
Мои $0.02
Идея верная, но:
1. Реализация временных задержек в событии Timeout может привести к тому, что команда либо не начнет выполняться вовремя либо не вовремя не закончится. Например, если пользователь работает с пользовательским интерфейсом Вашей программы.
2. До LV2013 пользовательские события влияли на срабатывание события timeout, т.е. решение трудно масштабировать.
Я бы предложил (в самом простейшем случае) параллельный цикл с задержкой в 1 секунду, генерирующий e.g. пользовательские события.
Идея верная, но:
1. Реализация временных задержек в событии Timeout может привести к тому, что команда либо не начнет выполняться вовремя либо не вовремя не закончится. Например, если пользователь работает с пользовательским интерфейсом Вашей программы.
2. До LV2013 пользовательские события влияли на срабатывание события timeout, т.е. решение трудно масштабировать.
Я бы предложил (в самом простейшем случае) параллельный цикл с задержкой в 1 секунду, генерирующий e.g. пользовательские события.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows