Секвенсер команд

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Аватара пользователя
Juri
I/O
I/O
Сообщения: 263
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

Секвенсер команд

Сообщение Juri »

В процессе написания сложной программы управления разным оборудованием пришло понимание, что невозможно написать хороший и понятный код без специального модуля или даже тулкита, который бы позволил программировать последовательности команд, отправляемых приборам каким-то универсальным способом. В нашей компании мы приняли единый стандарт написания кода в виде машины состояний с использованием очереди как дефолтном проекте "continuous measurement and logging". Каждый блок управления каким-то прибором изолирован и может запускаться как отдельно, так и быть частью другой программы. Все управление программами происходит через очереди с одинаковым кластером из [string, variant]. В каждой программе есть типовые состояния "start", "exit" и т.д. Каждый отдельный блок может делаться разными людьми и отличаться стилем программирования за исключением основных правил написания проекта с использованием очереди состояний.
А теперь начинается самое интересное. Надо придумать способ создавать последовательности команд, тобишь секвенсер. И я хочу спросить у народа. А нет ли уже готового решения? Очень не хочется изобретать велосипед.
К примеру я посылаю команду генератору включить генерацию сигнала. Точнее головная программа должна посылать команду дочернему модулю включить генератор. И меня даже не должно заботить как он это делает. Я просто посылаю в очередь модуля кластер с параметрами генерации и понятия не имею как он заставляет генератор работать. Далее я должен дождаться обратной связи. Модуль должен мне ответить, что генерация началась без ошибок. Затем по списку к примеру идет включение усилителя. Теперь я посылаю команду другому модулю, которого делал другой человек и дожидаюсь обратной связи. И таких комбинаций может быть очень много. Последовательности команд могут чередоваться и быть вложены одна в другую.
В конечном итоге должно появится что-то вроде отдельного языка программирования и программы внутри программы. Человек далекий от понимания что такое лабвью будет создавать последовательности команд на абстрактном языке "Включить прибор 1 с таким параметрами" затем "Включить прибор 2 с другими параметрами" и т.д.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Секвенсер команд

Сообщение Vitekkz88 »

То, что Вы называете "самым интересным" - это реализация SCPI с дополнительной GUI для создания сценария(аналогично, как это сделано в современных измерительных приборах...но там опять же всё похоже на LabVEIW, так что совсем обезьяна или древний человек не справится так и так).
На мой взгляд, для решения подобной задачи не нужен дополнительный тулкит. Вас просто пугает масштаб проекта. Есть конечно же библиотека Tasking, которую сделали давно и она работает...подойдет или нет смотрите сами. Можете тут на форме найти, но говорю: Ваша проблема не в этом. Я бы сказал, что проблем нет вовсе, если выбранная архитектура реализована корректно. Разделяйте методы работы с программой и всё, стандартная задача. Забиваете очередь командами пользователя и даёте старт на выполнение.
Вы работали с анализатором цепей(это измерительный прибор)? Так вот, процедура калибровки этого прибора перед использованием как раз и есть мини-пример вашей задачи. Выполняется сценарий из серии запросов и ответов. Можно сделать автоматически, а можно выбрать какие шаги пропустить или вообще вручную всё делать.
Вложения
Интерактивный режим для создания сценария работы прибора.
Интерактивный режим для создания сценария работы прибора.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Ответить

Вернуться в «Модели программирования»