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

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

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

Сообщение AlexOskar »

mzu2006 писал(а):Мои $0.02
........
Я бы предложил (в самом простейшем случае) параллельный цикл с задержкой в 1 секунду, генерирующий e.g. пользовательские события.
Вы что-то подобное имели в виду?
Меня этот вариант почти устраивает, кроме:
1. Не воспринимает значения времени вкл и выкл с лицевой панели (пока не тронешь настройку времени курсором шлет 00:00);
2. Никак не могу сделать так, чтобы выполнялся case "Проверка" после каждого изменения времени вкл и выкл
Вложения
Lighting1.vi
(25.22 КБ) 88 скачиваний
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

AlexOskar писал(а):1. Не воспринимает значения времени вкл и выкл с лицевой панели (пока не тронешь настройку времени курсором шлет 00:00);
2. Никак не могу сделать так, чтобы выполнялся case "Проверка" после каждого изменения времени вкл и выкл
1. Функция, которую Вы используете - Get Notifier Status. А Вы должны ожидать прихода нового сообщения - Wait on Notification. И в начале работы виайки никакого сообщения нету - поэтому Get Notifier Status и выдает нули; ведь сообщения не было. Выход - в начале работы отослать сообщение с начальными данными.
2. Используя Wait on Notification, отслеживаем - сообщение пришло, или нет. Если сообщение пришло, то "запоминаем" его в шифт регистр, и переходим сразу на стейт "Проверка". Если не пришло (то бишь, сработал таймаут), то выполняем внутреннюю стейт-машину.
Посмотрите комменты, в виайке.
Плюс я добавил индикатор, который включается-выключается на комманды ON/OFF, т.к. тот индикатор "x <= y?" не корректно отображает результат выполнения срабатывания действия по расписанию.
Лично мне использование нотифаеров кажется неуместным. Если нужно передавать данные с верхнего цикла в нижний, используется с легкостью очередь (queue), при помощи которой можно и "крутит" саму стейт машину.
Но, повторюсь: при использовании нотифаеров не нужно в этом случае Get Notifier Status, нужен Wait on Notification.
Init time + get message.png
Вложения
Lighting1.vi
(21.3 КБ) 95 скачиваний
Мы делили апельсин - много наших полегло...
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

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

Сообщение AlexOskar »

Kosist писал(а):
AlexOskar писал(а):1. Не воспринимает значения времени вкл и выкл с лицевой панели (пока не тронешь настройку времени курсором шлет 00:00);
2. Никак не могу сделать так, чтобы выполнялся case "Проверка" после каждого изменения времени вкл и выкл
1. Функция, которую Вы используете - Get Notifier Status. А Вы должны ожидать прихода нового сообщения - Wait on Notification. И в начале работы виайки никакого сообщения нету - поэтому Get Notifier Status и выдает нули; ведь сообщения не было. Выход - в начале работы отослать сообщение с начальными данными.
2. Используя Wait on Notification, отслеживаем - сообщение пришло, или нет. Если сообщение пришло, то "запоминаем" его в шифт регистр, и переходим сразу на стейт "Проверка". Если не пришло (то бишь, сработал таймаут), то выполняем внутреннюю стейт-машину.
Посмотрите комменты, в виайке
Работает, и даже как надо работает))) Завтра пойду на железе тестить!
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

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

Сообщение AlexOskar »

Kosist писал(а):Лично мне использование нотифаеров кажется неуместным. Если нужно передавать данные с верхнего цикла в нижний, используется с легкостью очередь (queue), при помощи которой можно и "крутит" саму стейт машину
Возможно, но я пока с очередями не работал. Если скинете набросок - попробую освоить
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

AlexOskar писал(а):Возможно, но я пока с очередями не работал. Если скинете набросок - попробую освоить
:nono: :wink: Примеры в самом :labview: - наше все. Плюс куча примеров и здесь на форуме, и на NI-вском форуме, и где угодно , т.е. если реально захотите, то найдете. :crazy:
А хорошим закрепелнием полученных знаний, будет модификация Вашей программы под очереди.
Мы делили апельсин - много наших полегло...
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

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

Сообщение AlexOskar »

Kosist писал(а):А хорошим закрепелнием полученных знаний, будет модификация Вашей программы под очереди.
Попробовал переделать под очереди, но теперь нуждаюсь в редактуре. При работе :vi: есть проблемы:
1. При изменении времени срабатывания сбивается очередь. Здесь, конечно косяк моей архитектуры, т.к. очередь создается и вверху и внизу, а при поступлении команды с лицевой панели эти очереди перемешиваются как попало. Но я никак не придумаю другого решения для отслеживания времени.
2. Да и вообще я думаю там косяков навалом, хотя худо-бедно :vi: работает.
Посмотрите и посоветуйте кто что может)))
Вложения
Lighting1234.vi
(79.39 КБ) 108 скачиваний
Ответить

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