Страница 14 из 31

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

Добавлено: 16 апр 2016, 15:15
Andrew Lunev
Darkmen999 писал(а):Выключены кнопки, значение = 1, включена первая, значение=2, включены обе, значение=3.
Выключены кнопки - значение 0.
Вы писали выше, что для всех вариантов в двоичном виде получаются комбинации 00, 10, 01, 11.
Вот по ним и отличайте. На выходе получаете числа 0, 1, 2, 3 в десятичном варианте.

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

Добавлено: 16 апр 2016, 15:34
Darkmen999
Извините. Раньше времени панику навел. Видимо был невнимателен, и показалась всякая ернуда. Заработался)
Большое спасибо за помощь!

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

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

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

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

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

Добавлено: 02 июн 2016, 13:17
dadreamer
ladik, очевидно, автор хочет реализовать всё именно на Case структуре. :)

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

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

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

Добавлено: 03 июн 2016, 08:57
ladik
Хм, Вы совсем не хотите думать и разбираться в том, как работает мой пример. Массив-константа за циклом - это пример данных с пустыми строками, т.е. то, что Вы получаете с порта. Цикл while, чтобы выполнялось не единожды. Пример работает очень просто. Мы получаем строку, если она не пустая, выводим её, и сохраняем в сдвиговом регистре. Если пустая - выводим последнее сохранённое значение. Почитайте Help, как работает каждая функция в примере. Вам не нужен массив констант, цикл for, index array. Вам в свой VI нужно добавить только сдвиговый регистр, проверку на пустую строку и функцию Select.

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

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

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

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

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

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

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

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

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

Добавлено: 05 июн 2016, 22:24
Alex77
Blackman, ой, не заметил. Исправил!

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

Добавлено: 05 июн 2016, 23:19
Blackman
Прием пустой строки не связана с ее проверкой. Наиболее вероятной причиной приема пустой строки является ошибка функции VISA Read, значение которой даст конкретную причину ошибки.
Для Вашего случая можно использовать функцию RMS Point by Point Signal Processing -> Point by Point -> Probablity & Statistics Point by Point.

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

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

Причина всех ошибок - это ошибки в программах, на том или ином уровне (прикладные, драйверы, система, прошивка и т. д.). Поэтому если вы видите ошибку в работе своей программы - не добавляйте никакие блоки "дополнительной проверки" :haha: а просто проверяйте программу. Убедитесь, что она корректно отработает все возможные варианты входных данных и событий. И как уже сказали, цикл, выполняемый всегда 1 раз - это плохо. Нет ни одной причины, по которой можно было бы так делать.

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

Добавлено: 06 июн 2016, 00:31
Alex77
Blackman, я знаю, что прием пустой строки не связан с ее проверкой. Я просто неправильно выразился..