Нужны критика и нравоучения. Формирование импульсов
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Нужны критика и нравоучения. Формирование импульсов
Приветствую! Изучаю среду сам, по мере выполнения проекта на работе. За период создания приложения походил по граблям, несколько раз всё переписывал и "отшкуривал", но нет предела совершенству, поэтому прошу опытных коллег поделиться мастерством и указать на места, которые можно доделать или сделать по-другому. Что можно сделать оптимальнее в плане ресурсов, что можно сделать более профессионально, чтобы код не смотрелся дилетантским. Буду рад любым замечаниям.
Сам проект довольно большой, поэтому начну с его части - формирование затухающих импульсов data_input. Все subVI прикреплять не буду, только те, которые реализуют сам алгоритм.
Коротко о программе: есть два режима: авто и ручной (кнопка Корректировка таблицы их переключает - в авто режиме таблицу редактировать нельзя). В авто-режиме импульсы строятся по следующим параметрам: Амплитуда первого импульса, режим затухания (линейный/экспоненциальный), декремент затухания (или коэф-т убывания при линейном), время фронтов (t1=t3) и длительность импульса t2. Также программно заданы амплитуда минимального импульса и времена пауз t4 (зависят от амплитуды). Программа рассчитывает количество импульсов и заносит в таблицу все параметры каждого импульса. При выделении строк в таблице также выделяются импульсы на графике. Кроме импульсов также рисуется огибающая.
В режиме корректировки таблицы можно каждый импульс задавать отдельно, редактируя нужную строку. Есть возможность сохранения или загрузки таблицы.
Да, есть ещё режим отр. импульсов (Mode) - если он true, то каждый отрицательный импульс равен предыдущему положительному, а не уменьшается.
Я пытался всё комментировать, но иногда сам путаюсь в своём де коде - так что задавайте вопросы по программе, подробно распишу.
Сама программа работает как надо (за исключением нескольких моментов, о которых я знаю), но вот что касается красоты кода - мне не с чем сравнить, только недавно открыл для себя конечные автоматы, может, я ещё чего полезного не знаю...
Сам проект довольно большой, поэтому начну с его части - формирование затухающих импульсов data_input. Все subVI прикреплять не буду, только те, которые реализуют сам алгоритм.
Коротко о программе: есть два режима: авто и ручной (кнопка Корректировка таблицы их переключает - в авто режиме таблицу редактировать нельзя). В авто-режиме импульсы строятся по следующим параметрам: Амплитуда первого импульса, режим затухания (линейный/экспоненциальный), декремент затухания (или коэф-т убывания при линейном), время фронтов (t1=t3) и длительность импульса t2. Также программно заданы амплитуда минимального импульса и времена пауз t4 (зависят от амплитуды). Программа рассчитывает количество импульсов и заносит в таблицу все параметры каждого импульса. При выделении строк в таблице также выделяются импульсы на графике. Кроме импульсов также рисуется огибающая.
В режиме корректировки таблицы можно каждый импульс задавать отдельно, редактируя нужную строку. Есть возможность сохранения или загрузки таблицы.
Да, есть ещё режим отр. импульсов (Mode) - если он true, то каждый отрицательный импульс равен предыдущему положительному, а не уменьшается.
Я пытался всё комментировать, но иногда сам путаюсь в своём де коде - так что задавайте вопросы по программе, подробно распишу.
Сама программа работает как надо (за исключением нескольких моментов, о которых я знаю), но вот что касается красоты кода - мне не с чем сравнить, только недавно открыл для себя конечные автоматы, может, я ещё чего полезного не знаю...
- Вложения
-
- build_pulses.vi
- (48.69 КБ) 263 скачивания
-
- data_input.vi
- (387.06 КБ) 277 скачиваний
-
- professor
- Сообщения: 3407
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
на основе своего молчания предположу, что дело не в идеальности, а в отсутствии конкретного вопроса.
Если всё работает, то смысл «ремонтировать»?.
Если всё работает, то смысл «ремонтировать»?.
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Дело не в ремонте, а в обучении. Хочется быть "выше, быстрее, сильнее". Я не жду глубокого разбора, но наверняка есть слабые моменты, видные невооружённым глазом. Может, я где-то чешу левое ухо правой рукой, а можно проще, например, ногой ;) Хочу обогатить свой арсенал. Я так понял, эта тема нужна для этого...
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Что бы найти слабые моменты, нужно понимать как работает прогамма. А разбираться в чужом коде, особенно если он кусками и запустить на выполнение невозможно, вряд ли кто то станет.
У каждого свой стиль программирования, мне например нравиться модульность. Это когда вся программа состоит из маленьких кирпичиков - SubVI, потому как модифицировать или что то добавить в отдельно взятый "кирпичик" гораздо проще, чем разбираться в паутине одного VI. Каждый SubVI дожен выполнять "вот это" и ещё.... так вот никаких "ещё" только "вот это".
Конкретно о программе. Я бы обратил внимание на Producer-Consumer pattern. Т.е. разделил бы UI с рабочим кодом. Event structure должна обслуживать кнопочки и реагировать на хотелки юзера немедленно, а не вычислять чего то там... Но опять же каждому свое....
У каждого свой стиль программирования, мне например нравиться модульность. Это когда вся программа состоит из маленьких кирпичиков - SubVI, потому как модифицировать или что то добавить в отдельно взятый "кирпичик" гораздо проще, чем разбираться в паутине одного VI. Каждый SubVI дожен выполнять "вот это" и ещё.... так вот никаких "ещё" только "вот это".
Конкретно о программе. Я бы обратил внимание на Producer-Consumer pattern. Т.е. разделил бы UI с рабочим кодом. Event structure должна обслуживать кнопочки и реагировать на хотелки юзера немедленно, а не вычислять чего то там... Но опять же каждому свое....
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Спасибо большое, буду изучать структуру produser-consumer. Про модульность тоже учту. Выложу потом тут запускабельную модель, надеюсь, количество откликов увеличится.
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Исправляюсь. Прикрепляю запускаемую версию. Главный VI - DATA_INPUT.
1)Жду любых советов по программе, что можно оптимизировать, улучшить и т.д.
2) Я пытался увеличить модульность, но многие куски имеют отношение к интерфейсу данного vi, и спрятать всё это в отдельный блок я не вижу возможным.
3) Как разделить обработку UI и вычислений - покажите, как это сделать, не разломав всю структуру.
1)Жду любых советов по программе, что можно оптимизировать, улучшить и т.д.
2) Я пытался увеличить модульность, но многие куски имеют отношение к интерфейсу данного vi, и спрятать всё это в отдельный блок я не вижу возможным.
3) Как разделить обработку UI и вычислений - покажите, как это сделать, не разломав всю структуру.
- Вложения
-
data input.rar
- (445.15 КБ) 249 скачиваний
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Прошу помочь разобраться с шаблоном Producer/Consumer. Очень мало информации о нем. Если знаете подробную статью, буду рад.
Выше выкладывал свой код, как его пихнуть в этот шаблон? Буду рад любому простому и подробному примеру: как разграничить обработку интерфейса и основные расчеты?
Выше выкладывал свой код, как его пихнуть в этот шаблон? Буду рад любому простому и подробному примеру: как разграничить обработку интерфейса и основные расчеты?
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Нужны критика и нравоучения. Формирование импульсов
Хороший урок есть на этом портале:K0sinus писал(а):Прошу помочь разобраться с шаблоном Producer/Consumer. Очень мало информации о нем. Если знаете подробную статью, буду рад.
Выше выкладывал свой код, как его пихнуть в этот шаблон? Буду рад любому простому и подробному примеру: как разграничить обработку интерфейса и основные расчеты?
http://labviewportal.org/ru/programmiro ... mendannymi
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Я бы советовал привыкать к универсальности. Вот набросал - посмотрите вложенный VI. Думаю разберетесь. Используется список команд из enum (в проекте определите его typedef-ом) и variant в качестве данных. В этом случае можно передавать любые типы данных без больших переделок всей программы.
- Вложения
-
- Producer_Consumer.vi
- (16.5 КБ) 255 скачиваний
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Спасибо всем за ответы. С принципом работы более-менее ясно. Теперь давайте поговорим о том, зачем такая структура нужна в данном случае?
Я правильно понял, что в Producer'е ничего менять не нужно, а обработку событий добавлять в Consumer?
В самом вверху мне писали, что интерфейс надо обрабатывать отдельно, подсчёты по программе отдельно. Что куда надо сунуть, не очень понимаю. Я могу в Priducer засунуть массовое событие или надо каждое обрабатывать отдельно?
Я правильно понял, что в Producer'е ничего менять не нужно, а обработку событий добавлять в Consumer?
В самом вверху мне писали, что интерфейс надо обрабатывать отдельно, подсчёты по программе отдельно. Что куда надо сунуть, не очень понимаю. Я могу в Priducer засунуть массовое событие или надо каждое обрабатывать отдельно?
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
И как реализуется в такой структуре инициализация? Просто кидать все снаружи?
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Можно, например, так как на картинке, можно снаружи в отдельном VI. Преимущества решения с картинки, что можно делать ReInit, если понадобится.И как реализуется в такой структуре инициализация? Просто кидать все снаружи?
Прочтите Блюма, Тревиса, может курсы от NI LabVIEW Core 1, 2 где найдете. Многие моменты сразу станут понятны
![wink :wink:](./images/smilies/icon_wink.gif)
Дорогу осилит идущий.
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Блюм - настольная книга, но как раз это место даётся тяжело, в Трэвисе вроде нет шаблонов (или не там искал?). В core 1,2 по consumer/producer написано тоже, что в описании в самом lv.
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Нужны критика и нравоучения. Формирование импульсов
Попробуйте глянуть Introduction to LabVIEW Design Patterns. В Wiki поглядите как описывается сам шаблон "Producer - Consumer". В LV главное понять реализацию. Есть цикл который "создаёт события" - отправляет данные с определенным периодом, реагирует на события пользователя, прерывания и т.д., есть подчинённые, которые всё это едят. Внутри каждого подчинённого может быть любой алгоритм реализован, например машина состояний, или он может быть Producer-ом для другого Consumer-а.
Дорогу осилит идущий.