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

Простейшие вопросы в области инженерной разработки

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

Postby Andrew Lunev on 16 Apr 2016, 15:15

Darkmen999 wrote:Выключены кнопки, значение = 1, включена первая, значение=2, включены обе, значение=3.

Выключены кнопки - значение 0.
Вы писали выше, что для всех вариантов в двоичном виде получаются комбинации 00, 10, 01, 11.
Вот по ним и отличайте. На выходе получаете числа 0, 1, 2, 3 в десятичном варианте.
User avatar
Andrew Lunev
leader
leader
 
Posts: 843
Joined: 11 Dec 2010, 12:31
Location: Москва
Medals: 2
Activity (1) Professionalism (1)
LabVIEW Version: 2016
Karma: 244
hardware I/O VIP teachers

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

Postby Darkmen999 on 16 Apr 2016, 15:34

Извините. Раньше времени панику навел. Видимо был невнимателен, и показалась всякая ернуда. Заработался)
Большое спасибо за помощь!
Darkmen999
interested
interested
 
Posts: 3
Joined: 16 Apr 2016, 11:17
LabVIEW Version: 2012
Karma: 0

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

Postby Alex77 on 02 Jun 2016, 12:45

Прошу помощи. в LabVIEW совсем новичок. Я получаю значения с СОМ в виде строки, преобразую элементы строки в числовые данные и вывожу значения на график. Но периодически на вход приходит пустая строка и LabView выдает ошибку. Пока решил проблему склеиванием приходящей с порта строки со строкой 0,0,0,0,0,0 (выглядит ужасно, знаю).
Но из-за этого на графиках появляются провалы. Необходимо сделать так, чтобы когда приходит пустая строка, мы вместо нее посылали предыдущую строку. Можете подсказать, как это реализовать? Я так понимаю можно задействовать Case Structure, но как это сделать пока без понятия.
Буду очень благодарен за помощь
Image
Alex77
interested
interested
 
Posts: 8
Joined: 30 May 2016, 12:22
LabVIEW Version: 15
Karma: 0

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

Postby ladik on 02 Jun 2016, 13:15

Alex77, хм..Вы уже писали это недавно вот тут viewtopic.php?f=69&t=57. И подсказку я Вам там набросал. Используйте сдвиговые регистры.
User avatar
ladik
advanced
advanced
 
Posts: 177
Joined: 18 Nov 2014, 11:45
Location: Астана
Medals: 1
Silver (1)
LabVIEW Version: 2011, 2015
Karma: 61
hardware I/O VIP

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

Postby dadreamer on 02 Jun 2016, 13:17

ladik, очевидно, автор хочет реализовать всё именно на Case структуре. :)
User avatar
dadreamer
doctor
doctor
 
Posts: 2756
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 690
I/O VIP vision internet

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

Postby Alex77 on 02 Jun 2016, 14:55

ladik, Прошу прощения, не заметил ваш комментарий. Сделал вот так, но labview ругается... В чем может быть дело?Image
Вы не могли бы объяснить, каким образом работает ваш пример?
Alex77
interested
interested
 
Posts: 8
Joined: 30 May 2016, 12:22
LabVIEW Version: 15
Karma: 0

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

Postby ladik on 03 Jun 2016, 08:57

Хм, Вы совсем не хотите думать и разбираться в том, как работает мой пример. Массив-константа за циклом - это пример данных с пустыми строками, т.е. то, что Вы получаете с порта. Цикл while, чтобы выполнялось не единожды. Пример работает очень просто. Мы получаем строку, если она не пустая, выводим её, и сохраняем в сдвиговом регистре. Если пустая - выводим последнее сохранённое значение. Почитайте Help, как работает каждая функция в примере. Вам не нужен массив констант, цикл for, index array. Вам в свой VI нужно добавить только сдвиговый регистр, проверку на пустую строку и функцию Select.
User avatar
ladik
advanced
advanced
 
Posts: 177
Joined: 18 Nov 2014, 11:45
Location: Астана
Medals: 1
Silver (1)
LabVIEW Version: 2011, 2015
Karma: 61
hardware I/O VIP

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

Postby Alex77 on 05 Jun 2016, 13:57

ladik, Прошу прощения за мою "тупоголовость" и огромное вам спасибо. Сделал, все работает. Поставил два блока проверки последовательно, чтобы еще сильнее снизить вероятность прихода пустой строки.
Image
Alex77
interested
interested
 
Posts: 8
Joined: 30 May 2016, 12:22
LabVIEW Version: 15
Karma: 0

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

Postby Blackman on 05 Jun 2016, 18:09

Сделал, все работает. Поставил два блока проверки последовательно, чтобы еще сильнее снизить вероятность прихода пустой строки.

Вероятность приема пустой строки от этого не зависит. А как по поводу того, что на всех индикаторах (за исключением первого) отображается одно и тоже значение.
Blackman
leader
leader
 
Posts: 606
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 145

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

Postby dadreamer on 05 Jun 2016, 18:15

Alex77 wrote:Поставил два блока проверки последовательно, чтобы еще сильнее снизить вероятность прихода пустой строки.
Image

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

Тогда вам будет полезно прочитать вот эту литературу (хотя бы первую книжку):
Джеффри Тревис, Джим Кринг "LabVIEW для всех"
Питер Блюм "LabVIEW. Стиль программирования"
Сразу многие вещи в :labview: станут намного понятнее. А если примеры ещё поделаете, то вообще супер будет. :)
User avatar
dadreamer
doctor
doctor
 
Posts: 2756
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 690
I/O VIP vision internet

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

Postby Alex77 on 05 Jun 2016, 22:16

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

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

Postby Alex77 on 05 Jun 2016, 22:24

Blackman, ой, не заметил. Исправил!
Alex77
interested
interested
 
Posts: 8
Joined: 30 May 2016, 12:22
LabVIEW Version: 15
Karma: 0

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

Postby Blackman on 05 Jun 2016, 23:19

Прием пустой строки не связана с ее проверкой. Наиболее вероятной причиной приема пустой строки является ошибка функции VISA Read, значение которой даст конкретную причину ошибки.
Для Вашего случая можно использовать функцию RMS Point by Point Signal Processing -> Point by Point -> Probablity & Statistics Point by Point.
Blackman
leader
leader
 
Posts: 606
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 145

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

Postby Boris_K on 05 Jun 2016, 23:38

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

достойно войти в анналы :haha:

Причина всех ошибок - это ошибки в программах, на том или ином уровне (прикладные, драйверы, система, прошивка и т. д.). Поэтому если вы видите ошибку в работе своей программы - не добавляйте никакие блоки "дополнительной проверки" :haha: а просто проверяйте программу. Убедитесь, что она корректно отработает все возможные варианты входных данных и событий. И как уже сказали, цикл, выполняемый всегда 1 раз - это плохо. Нет ни одной причины, по которой можно было бы так делать.
Race conditions - самый опасный, скользкий и противный баг!
Boris_K
adviser
adviser
 
Posts: 245
Joined: 28 Jan 2015, 14:25
LabVIEW Version: 2012 Pro
Karma: 6

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

Postby Alex77 on 06 Jun 2016, 00:31

Blackman, я знаю, что прием пустой строки не связан с ее проверкой. Я просто неправильно выразился..
Alex77
interested
interested
 
Posts: 8
Joined: 30 May 2016, 12:22
LabVIEW Version: 15
Karma: 0

PreviousNext

Return to Для чайников

Who is online

Users browsing this forum: Bing [Bot], Google and 7 guests

cron