Советы по программированию на LabVIEW

Простейшие вопросы в области инженерной разработки
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Советы по программированию на LabVIEW

Сообщение Andrew Lunev »

Darkmen999 писал(а):Выключены кнопки, значение = 1, включена первая, значение=2, включены обе, значение=3.
Выключены кнопки - значение 0.
Вы писали выше, что для всех вариантов в двоичном виде получаются комбинации 00, 10, 01, 11.
Вот по ним и отличайте. На выходе получаете числа 0, 1, 2, 3 в десятичном варианте.
Darkmen999
interested
interested
Сообщения: 3
Зарегистрирован: 16 апр 2016, 11:17
Версия LabVIEW: 2012
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Darkmen999 »

Извините. Раньше времени панику навел. Видимо был невнимателен, и показалась всякая ернуда. Заработался)
Большое спасибо за помощь!
Alex77
interested
interested
Сообщения: 8
Зарегистрирован: 30 май 2016, 12:22
Версия LabVIEW: 15
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Alex77 »

Прошу помощи. в LabVIEW совсем новичок. Я получаю значения с СОМ в виде строки, преобразую элементы строки в числовые данные и вывожу значения на график. Но периодически на вход приходит пустая строка и LabView выдает ошибку. Пока решил проблему склеиванием приходящей с порта строки со строкой 0,0,0,0,0,0 (выглядит ужасно, знаю).
Но из-за этого на графиках появляются провалы. Необходимо сделать так, чтобы когда приходит пустая строка, мы вместо нее посылали предыдущую строку. Можете подсказать, как это реализовать? Я так понимаю можно задействовать Case Structure, но как это сделать пока без понятия.
Буду очень благодарен за помощь
Изображение
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение ladik »

Alex77, хм..Вы уже писали это недавно вот тут http://www.labviewportal.org/viewtopic.php?f=69&t=57. И подсказку я Вам там набросал. Используйте сдвиговые регистры.
Дорогу осилит идущий.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение dadreamer »

ladik, очевидно, автор хочет реализовать всё именно на Case структуре. :)
Alex77
interested
interested
Сообщения: 8
Зарегистрирован: 30 май 2016, 12:22
Версия LabVIEW: 15
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Alex77 »

ladik, Прошу прощения, не заметил ваш комментарий. Сделал вот так, но labview ругается... В чем может быть дело?Изображение
Вы не могли бы объяснить, каким образом работает ваш пример?
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение ladik »

Хм, Вы совсем не хотите думать и разбираться в том, как работает мой пример. Массив-константа за циклом - это пример данных с пустыми строками, т.е. то, что Вы получаете с порта. Цикл while, чтобы выполнялось не единожды. Пример работает очень просто. Мы получаем строку, если она не пустая, выводим её, и сохраняем в сдвиговом регистре. Если пустая - выводим последнее сохранённое значение. Почитайте Help, как работает каждая функция в примере. Вам не нужен массив констант, цикл for, index array. Вам в свой VI нужно добавить только сдвиговый регистр, проверку на пустую строку и функцию Select.
Дорогу осилит идущий.
Alex77
interested
interested
Сообщения: 8
Зарегистрирован: 30 май 2016, 12:22
Версия LabVIEW: 15
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Alex77 »

ladik, Прошу прощения за мою "тупоголовость" и огромное вам спасибо. Сделал, все работает. Поставил два блока проверки последовательно, чтобы еще сильнее снизить вероятность прихода пустой строки.
Изображение
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Советы по программированию на LabVIEW

Сообщение Blackman »

Сделал, все работает. Поставил два блока проверки последовательно, чтобы еще сильнее снизить вероятность прихода пустой строки.
Вероятность приема пустой строки от этого не зависит. А как по поводу того, что на всех индикаторах (за исключением первого) отображается одно и тоже значение.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение dadreamer »

Alex77 писал(а):Поставил два блока проверки последовательно, чтобы еще сильнее снизить вероятность прихода пустой строки.
Изображение
:D А не кажется ли вам такая конструкция излишней? Или серьёзно считаете, что пустая строка каким-то образом проскочит через первый While Loop и попадёт в остальной код?
И зачем было делать циклы в цикле, выполняющиеся ровно 1 раз? (Можете проверить, вытащив из цикла индекс i - при таком условии "продолжать, если i > 0" цикл выполнится 1 раз). По тем подсказкам, что вам давали, имелось в виду, что сдвиговый регистр нужно делать в основном цикле: ПКМ на рамке цикла -> Add Shift Register. А вообще, по-моему, подобные манипуляции со строками изначально лишены смысла, если операции приёма-передачи строго соответствуют описанию протокола RS-232, которое обычно содержится в мануале на прибор. При правильной организации протокола и чтению по терминальному символу пустые строки не придут, т.к. в посылке будет как минимум "шапка" и "хвост", даже если полезных данных нет.
Alex77 писал(а):в LabVIEW совсем новичок.
Тогда вам будет полезно прочитать вот эту литературу (хотя бы первую книжку):
Джеффри Тревис, Джим Кринг "LabVIEW для всех"
Питер Блюм "LabVIEW. Стиль программирования"
Сразу многие вещи в :labview: станут намного понятнее. А если примеры ещё поделаете, то вообще супер будет. :)
Alex77
interested
interested
Сообщения: 8
Зарегистрирован: 30 май 2016, 12:22
Версия LabVIEW: 15
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Alex77 »

dadreamer, Когда поставил только одну проверку, то при приеме все же словил пару раз пустые строки. Мне кажется такая конструкция более удобна, она представляет собой единый блок, с ней можно работать независимо от основного цикла.
К сожалению, в описании к прибору, с которого принимаются сигналы нет ничего кроме описания параметров, приходящих в строках, разделенных запятыми..
За литературу большое спасибо, почитаю на досуге.
Сейчас возникла еще одна задача - считать среднеквадратичное значение данных, принятых за определенный промежуток времени. Нашел блок для вычисления RMS во вкладке обработка сигнала, но на сколько я понимаю он работает c непрерывным сигналом, а у меня просто поток изменяющихся значений...
Alex77
interested
interested
Сообщения: 8
Зарегистрирован: 30 май 2016, 12:22
Версия LabVIEW: 15
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Alex77 »

Blackman, ой, не заметил. Исправил!
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Советы по программированию на LabVIEW

Сообщение Blackman »

Прием пустой строки не связана с ее проверкой. Наиболее вероятной причиной приема пустой строки является ошибка функции VISA Read, значение которой даст конкретную причину ошибки.
Для Вашего случая можно использовать функцию RMS Point by Point Signal Processing -> Point by Point -> Probablity & Statistics Point by Point.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Советы по программированию на LabVIEW

Сообщение Boris_K »

Alex77, никогда, ни при каких условиях компьютер не ошибается. Во всех миллиардах бит в компьютере, нигде и никогда ноль случайно не станет единицей, а единица нулём. Единичные случаи битой памяти и бракованного процессора можно не рассматривать (они как правило быстро выявляются, по постоянным крэшам, BSOD'ам и т. д.). Уж простите, не удержался, но это
Поставил два блока проверки последовательно, чтобы еще сильнее снизить вероятность прихода пустой строки.
достойно войти в анналы :haha:

Причина всех ошибок - это ошибки в программах, на том или ином уровне (прикладные, драйверы, система, прошивка и т. д.). Поэтому если вы видите ошибку в работе своей программы - не добавляйте никакие блоки "дополнительной проверки" :haha: а просто проверяйте программу. Убедитесь, что она корректно отработает все возможные варианты входных данных и событий. И как уже сказали, цикл, выполняемый всегда 1 раз - это плохо. Нет ни одной причины, по которой можно было бы так делать.
Race conditions - опасный и скользкий баг!
Alex77
interested
interested
Сообщения: 8
Зарегистрирован: 30 май 2016, 12:22
Версия LabVIEW: 15
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Alex77 »

Blackman, я знаю, что прием пустой строки не связан с ее проверкой. Я просто неправильно выразился..
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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