Советы по программированию на 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 3413 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
doctor
doctor
 
Posts: 2827
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 699
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: 646
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 161

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

Postby Boris_K on 08 Jun 2016, 20:36

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

Какие байты подразумеваете под "параллельными"? Из параллельного порта?
Race conditions - самый опасный, скользкий и противный баг!
Boris_K
adviser
adviser
 
Posts: 245
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: 754
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 223
CLAD I/O VIP students

Previous

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

Who is online

Users browsing this forum: Yahoo and 10 guests

cron