Выполнение команд по расписанию

Простейшие вопросы в области инженерной разработки
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Выполнение команд по расписанию

Сообщение AlexOskar »

Добрый день!
Подскажите, есть ли возможность реализовать в :labview: отправку команд по расписанию?
Пример: по RS-485 постоянно опрашивается прибор, получаются данные. Есть необходимость два раза в сутки отправлять команду на включение и отключение (в 8:00 и 17:00 соответственно).
Кто-нибудь реализовывал что-то подобное? Какие есть инструменты для этого?

Borjomy_1

Activity Professionalism Silver
expert
expert
Сообщения: 1923
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Репутация: 0
Версия LabVIEW: 4-8.6,9-14
Откуда: город семи холмов

Re: Выполнение команд по расписанию

Сообщение Borjomy_1 »

Отдельный цикл с некоторым тактом ( в данном случае достаточно 1000мс ) проверяет, не больше-ли текущее время заданного. Если больше, то происходит отправка данных, заряжается новое заданное время и цикл продолжается.
Меньше интервал цикла делать не имеет смысла потому, что во-первых оборудованию не жарко и не холодно, если будет ошибка на секунду, а во-вторых разбег настоящего времени и времени компьютера может составлять гораздо большую величину, особенно, если нет временной синхронизации.
Сравнивать необходимо на "больше или равно", но ни в коем случае на "равно".

AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение AlexOskar »

Да, я это как-то так и представлял. Время с ПК,я так понимаю, можно взять функцией date/time string или Elapsed Time. А дальше просто сравнивать эти строки и все?

Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1069
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Репутация: 0
Версия LabVIEW: 2013-2020
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение Kosist »

AlexOskar писал(а):Да, я это как-то так и представлял. Время с ПК,я так понимаю, можно взять функцией date/time string или Elapsed Time. А дальше просто сравнивать эти строки и все?

Elapsed Time Вам не поможет, т.к. нужно отслеживать абсолютное время, а не прошедшее.
А вот date/time string поможет, это да... Искал подобный код - раньше когда-то делал - но, к сожалению, ничего не нашел...
Вложения
time.png
Мы делили апельсин - много наших полегло...

AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение AlexOskar »

Я пока только до такого додумался
Вложения
Proba.vi
(8.51 КБ) 43 скачивания

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4947
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: Выполнение команд по расписанию

Сообщение IvanLis »

AlexOskar писал(а):Добрый день!
Подскажите, есть ли возможность реализовать в :labview: отправку команд по расписанию?
Пример: по RS-485 постоянно опрашивается прибор, получаются данные. Есть необходимость два раза в сутки отправлять команду на включение и отключение (в 8:00 и 17:00 соответственно).
Кто-нибудь реализовывал что-то подобное? Какие есть инструменты для этого?


Правильнее наверное сразу делать в стиле событийно управляемого конечного автомата.
Остальные состояния я опущу, вот два события, хотя наверное многие сделали бы в одном. Но я специально разнес на два, что бы иметь возможность (после доработки) включения/выключения "в ручном режиме" или из другого Event (но не переписывать код посылки команды).
Timer.vi
lv2010
(14.72 КБ) 41 скачивание

Снимок экрана от 2017-01-07 23-49-36.png

Событие TimeOut - запускается каждую секунду (можно и чаще, но не имеет смысла). Считывает реальное время и сравнивает его с заданным интервалом. Если в интервале, то True, иначе False.
Снимок экрана от 2017-01-07 23-49-47.png
Снимок экрана от 2017-01-07 23-49-47.png (10.41 КБ) 5309 просмотров

Событие In Range: Value Change - здесь сравниваем с предыдущим значением, что бы не слать бестолковые команды. Если произошла смена состояний, то уже посылать команду.

AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение AlexOskar »

Очень крутая реализация, спасибо!
Есть ли возможность ограничить максимальное значение вводимых часов 24, минут 60 и сделать так, чтобы их нельзя было вбить с клавиатуры, а изменять только перебором?

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4947
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: Выполнение команд по расписанию

Сообщение IvanLis »

AlexOskar писал(а):Есть ли возможность ограничить максимальное значение вводимых часов 24, минут 60 и сделать так, чтобы их нельзя было вбить с клавиатуры, а изменять только перебором?

Для каждого контрола можно настроить диапазон и инкремент
Снимок экрана от 2017-01-08 00-21-49.png

AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение AlexOskar »

Сегодня удалось протестировать Ваш :vi:
Идея использовать интервал - шикарная. При сравнении строк со временем возникала сложность определить при старте :vi: в каком положении должен находится выключатель ("уже включен или еще рано???"). Здесь же сразу все понятно.
Но! Все хорошо работает только для периода "с утра до вечера", например с 08:00 до 17:00. При обратном варианте с 17:00 до 08:00 (управление уличным фонарем) ничего не происходит.
Поправить :vi: у меня не получилось, зато нагородил свой, но все с той же проблемой определения статуса при старте
Вложения
Lighting.vi
(21.82 КБ) 45 скачиваний

Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1069
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Репутация: 0
Версия LabVIEW: 2013-2020
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение Kosist »

Предлагаю такой вариант.
Расписание в таком же формате, как и у Вас (т.е. часы и минуты как цифровые контроллы. Можно немного поморочиться, и сделать все красиво через выбор времени, но и так сойдет), плюс - селектор действия (т.к. в принципе, для масштабируемости, действия могут быть разные).
По старту программы, задается расписание (ну или нет, это зависит от того, как сделать; можно и с файла инфу считать), а затем по нажатию кнопки начинается отслеживание.
UI.PNG

Wait for action.png

Get Record_1.png

Get Record_2.png

Check Scheduler.png

В результате, когда событие настало, при помощи селектора можно определить, что и как нужно сделать.
Вложения
scheduler 2012.zip
(32.38 КБ) 51 скачивание
Мы делили апельсин - много наших полегло...

Blackman

Activity
leader
leader
Сообщения: 931
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Репутация: 0
Версия LabVIEW: 6.1,8.5,20
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение Blackman »

AlexOskar писал(а):...Идея использовать интервал - шикарная. ... Но! Все хорошо работает только для периода "с утра до вечера", например с 08:00 до 17:00. При обратном варианте с 17:00 до 08:00 (управление уличным фонарем) ничего не происходит.

Все работает годами). Что не так - не понятно.
Вложения
IvanLis--Timer+Current Time Simulator10.vi
(11.66 КБ) 53 скачивания

AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение AlexOskar »

Blackman писал(а):
AlexOskar писал(а):...Идея использовать интервал - шикарная. ... Но! Все хорошо работает только для периода "с утра до вечера", например с 08:00 до 17:00. При обратном варианте с 17:00 до 08:00 (управление уличным фонарем) ничего не происходит.

Все работает годами). Что не так - не понятно.

Так вроде работает, а меняю системное время - не хочет. Да и Ваш срабатывает только на следующую ночь: сейчас 16:30 - запускаю :vi: -накидывается 1 час - время в симуляторе 17:30 - время включения 17:00 - команды на включение нет - проходит 24 часа и с этого момента все ОК

AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение AlexOskar »

Kosist писал(а):Предлагаю такой вариант.
Расписание в таком же формате, как и у Вас (т.е. часы и минуты как цифровые контроллы. Можно немного поморочиться, и сделать все красиво через выбор времени, но и так сойдет), плюс - селектор действия (т.к. в принципе, для масштабируемости, действия могут быть разные).
По старту программы, задается расписание (ну или нет, это зависит от того, как сделать; можно и с файла инфу считать), а затем по нажатию кнопки начинается отслеживание......

Над этим надо посидеть. Спасибо за вариант!

Blackman

Activity
leader
leader
Сообщения: 931
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Репутация: 0
Версия LabVIEW: 6.1,8.5,20
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение Blackman »

C изменением системного времени не понял. А так поведение при первом вызове из-за алгоритма срабатывания "on change only".
Вложения
IvanLis--Timer+Current Time Simulator.png

Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Репутация: 0
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Выполнение команд по расписанию

Сообщение mzu2006 »

Мои $0.02
Идея верная, но:
1. Реализация временных задержек в событии Timeout может привести к тому, что команда либо не начнет выполняться вовремя либо не вовремя не закончится. Например, если пользователь работает с пользовательским интерфейсом Вашей программы.
2. До LV2013 пользовательские события влияли на срабатывание события timeout, т.е. решение трудно масштабировать.

Я бы предложил (в самом простейшем случае) параллельный цикл с задержкой в 1 секунду, генерирующий e.g. пользовательские события.

Ответить

Вернуться в «Для чайников»