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

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

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

Postby dadreamer on 06 Jun 2016, 09:33

Alex77 wrote:Когда поставил только одну проверку, то при приеме все же словил пару раз пустые строки.

Такое может произойти только в самом начале работы программы, когда на 1-й итерации основного цикла у вас выходит пустая строка с инструмента Match Pattern. Далее она попадает на первый цикл-фильтр, но т.к. в обоих случаях на селекторе пустая строка, то и на выходе фильтра будет пустая строка. А сдвиговый регистр - это просто ячейка памяти, у вас она изначально инициализирована входной строкой (см. первый цикл-фильтр). Далее пустая строка идёт на второй цикл-фильтр, там сдвиговый регистр не инициализирован. Но по дефолту сдвиговый регистр без инициализации инициализируется пустой строкой (при первом запуске программы). Потому второй фильтр также бесполезен, а пустая строка успешно проходит на следующие инструменты.
Если с Match Pattern приходит непустая строка, то она заменяет значение в сдвиговом регистре, и оно начинает дальше использоваться в тех случаях, когда снова приходят пустые строки. То есть, в вашем случае достаточно было бы задать начальное значение для регистра, чтобы при первом запуске программы оно подменяло пустую строку. Выше у вас на картинке была константа 0,0,0,0,0,0 - наверно, её можно взять за начальное значение.
Alex77 wrote:Мне кажется такая конструкция более удобна, она представляет собой единый блок, с ней можно работать независимо от основного цикла.

Если нужен отдельный блок кода, то создаётся SubVI, который отлаживать гораздо проще. А в этих "одноразовых" циклах смысла нет. Если не нравится тянуть провода от регистров на рамке цикла, то пользуйтесь Feedback Node (палитра Structures). Он подобен сдвиговому регистру, но не выносится на рамку цикла. Вот как это выглядит:
2016-06-06_11-04-14.jpg
2016-06-06_11-04-14.jpg (45.79 KiB) Viewed 9248 times

А вообще, почитайте сперва в литературе про регистры и FN. У Трэвиса по-моему целая глава на это дело отведена.
В вашем случае не стоило даже городить такой огород с этими фильтрами. Можно было сделать так:
2016-06-06_11-22-10.jpg

Но тут надо дополнительно обработать событие тайм-аута при чтении из порта. Посмотрите вот этот пример, там подобная обработка есть. Надеюсь, сможете собрать из двух примеров один?
Alex77 wrote:К сожалению, в описании к прибору, с которого принимаются сигналы нет ничего кроме описания параметров, приходящих в строках, разделенных запятыми..

То есть, формат посылки примерно такой:
RAW:,a,b,c,d,e,f
где a,b,c,d,e,f - некоторые параметры, измеряемые прибором.
Так?
Используется или нет терминатор? Если используется, это решает сразу большинство ваших проблем. Посмотрите в терминале NI MAX, HyperTerminal, TeraTerm, Advanced Serial Port Monitor или любом другом. Заодно проверьте, будут ли приходить пустые строки непосредственно от прибора. Станет ясно, где ошибка: у вас в проге или в прошивке прибора. Вообще, пустая строка - это RAW:, или совсем-совсем пустая (длина=0)?
User avatar
dadreamer
professor
professor
 
Posts: 3124
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

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

Postby Alex77 on 07 Jun 2016, 22:07

Всем большое спасибо! В итоге сделал вот так!
Image
Alex77
interested
interested
 
Posts: 8
Joined: 30 May 2016, 12:22
LabVIEW Version: 15
Karma: 0

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

Postby CapitanBlack on 08 Jun 2016, 10:53

Ребят как сделать блок-схему которая на вход принимает набор параллельных байтов .... ??? Нужна помощь.
CapitanBlack
interested
interested
 
Posts: 1
Joined: 08 Jun 2016, 10:36
LabVIEW Version: 8
Karma: 0

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

Postby Blackman on 08 Jun 2016, 11:48

... В итоге сделал вот так!

Как видно из BD принимаемая строка содержит Terminal Char Line Feed (\n). Поэтому применение Property "Bytes at Port" является ошибкой, так как она приводит к разрыву принимаемой строки на отдельные подстроки и как следствие к ошибке выделения из всей строки (парсинга) блока данных.
Blackman
leader
leader
 
Posts: 783
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 225
VIP

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

Postby Boris_K on 08 Jun 2016, 20:36

Ребят как сделать блок-схему которая на вход принимает набор параллельных байтов .... ??? Нужна помощь.

Какие байты подразумеваете под "параллельными"? Из параллельного порта?
Race conditions - опасный и скользкий баг!
Boris_K
developer
developer
 
Posts: 277
Joined: 28 Jan 2015, 14:25
LabVIEW Version: 2012 Pro
Karma: 6

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

Postby andryvlad on 11 Dec 2016, 10:12

Подскажите, как преобразовать цифровые данные типа Single Precision с контрола "Dial" или "Knob" в строку? Нужно подать это значение на вход write buffer VISA Write.
andryvlad
interested
interested
 
Posts: 2
Joined: 11 Dec 2016, 09:44
LabVIEW Version: 2015
Karma: 0

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

Postby andryvlad on 11 Dec 2016, 11:31

Хм, кажется, Format Into String мне подойдет
andryvlad
interested
interested
 
Posts: 2
Joined: 11 Dec 2016, 09:44
LabVIEW Version: 2015
Karma: 0

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

Postby tomin on 27 Apr 2017, 08:29

Blackman, Привет будущим коллегам. Использую Datasocket чтобы считывать данные с ЧП, ЧП подключение через RS485 использую преобразователь RS485-USB. Также запустил ОВЕН OPC сервер и привязал теги к регистрам ЧП, осуществляю управление из OPC. Необходимо управлять из Labview. Проблема: решил считывать данные из OPC используя Datasocket, но всплывает ошибка err 1181.
tomin
interested
interested
 
Posts: 1
Joined: 27 Apr 2017, 08:11
LabVIEW Version: 16.0
Karma: 0

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

Postby trenrnd on 15 May 2017, 19:23

Всем доброго времени суток!
Решил попробовать в действии State Machine от JKI. Подскажите, как правильно в ней реализовать цикличный заход в стейты, т.е. постоянный, для проверки каких-либо условий и прочего. Сейчас пихаю эти стейты из ивента Таймаут, достаточно ли это "изящное" решение?
Всем спасибо.
trenrnd
interested
interested
 
Posts: 1
Joined: 15 May 2017, 19:19
LabVIEW Version: 2012
Karma: 0

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

Postby Kosist on 15 May 2017, 20:11

trenrnd wrote:Всем доброго времени суток!
Решил попробовать в действии State Machine от JKI. Подскажите, как правильно в ней реализовать цикличный заход в стейты, т.е. постоянный, для проверки каких-либо условий и прочего. Сейчас пихаю эти стейты из ивента Таймаут, достаточно ли это "изящное" решение?
Всем спасибо.

Мне как-то для цикличных опросов JKI State Machine "не пошла". Но в ее случае использование таймаута для этого - вполне годное решение. Т.к. Вам нужна все равно возможность "достучаться" до Event Structure - что будет возможно при переходе на Timeout, а не при просто переходах по стейтах с задержкой.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 878
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 246
CLAD I/O VIP students

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

Postby 546 on 26 Feb 2018, 14:50

Добрый день.
Как сделать строку (string) такого вида 071+0Х.000
где 07- номер прибора,1-номер канала,Х - переменное значение от 0.0 до 10.0
Пытался это сделать с помощью Concatenate ,но числа после запятой игнорируются,нужна точка
546
beginner
beginner
 
Posts: 24
Joined: 14 Apr 2014, 10:42
LabVIEW Version: 8.5
Karma: 5

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

Postby Vitekkz88 on 27 Feb 2018, 09:37

546, пробуйте так. Case идентичны, отличается только блок преобразования числа. Для того, чтоб заменить запятую на точку используйте Search and Replace. И на будущее создавайте отдельную тему, ведь данный вопрос немного не из этой ветки :-)
Attachments
Строка.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1044
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 301
hardware I/O VIP

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

Postby Artem.spb on 27 Feb 2018, 11:15

Зачем такие сложности? :)

Code: Select all
%02d%d+%.;%_05f

%02d = целое число, 2 знака, дополнить нулями (d = целое)
%.; = разделитель-точка (незкависимо от системных настроек)
%_5f = 5 Significant Digits (f = число с дробной частью)
единстенное, что может не устроить, это форматирование не ставит 0 ПЕРЕД числом, а задаёи именно 5 символов, 2.3 или 1.4
т.е. 1,575578 = 1,5755
но 10,575578 = 10,575
stringconvert.PNG
stringconvert.PNG (10.09 KiB) Viewed 3922 times
Artem.spb
expert
expert
 
Posts: 1399
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 239
CLD hardware I/O VIP freelance

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

Postby Vitekkz88 on 27 Feb 2018, 12:00

Зачем такие сложности? :)

Artem.spb, это хитросплетения LabVIEW :D Можно и по формату, но я прям до ноликов всё сделал. Как иначе их вставлять - не придумал :crazy:
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1044
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 301
hardware I/O VIP

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

Postby 546 on 27 Feb 2018, 13:24

Спасибо.
Я немного неправильно поставил вопрос - на входе значение меняется от 0 до 100(шим) ,а в строке надо получить:от 00.000 до 10.000.
546
beginner
beginner
 
Posts: 24
Joined: 14 Apr 2014, 10:42
LabVIEW Version: 8.5
Karma: 5

PreviousNext

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

Who is online

Users browsing this forum: No registered users and 16 guests

cron