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

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

Добавлено: 06 июн 2016, 09:33
dadreamer
Alex77 писал(а):Когда поставил только одну проверку, то при приеме все же словил пару раз пустые строки.
Такое может произойти только в самом начале работы программы, когда на 1-й итерации основного цикла у вас выходит пустая строка с инструмента Match Pattern. Далее она попадает на первый цикл-фильтр, но т.к. в обоих случаях на селекторе пустая строка, то и на выходе фильтра будет пустая строка. А сдвиговый регистр - это просто ячейка памяти, у вас она изначально инициализирована входной строкой (см. первый цикл-фильтр). Далее пустая строка идёт на второй цикл-фильтр, там сдвиговый регистр не инициализирован. Но по дефолту сдвиговый регистр без инициализации инициализируется пустой строкой (при первом запуске программы). Потому второй фильтр также бесполезен, а пустая строка успешно проходит на следующие инструменты.
Если с Match Pattern приходит непустая строка, то она заменяет значение в сдвиговом регистре, и оно начинает дальше использоваться в тех случаях, когда снова приходят пустые строки. То есть, в вашем случае достаточно было бы задать начальное значение для регистра, чтобы при первом запуске программы оно подменяло пустую строку. Выше у вас на картинке была константа 0,0,0,0,0,0 - наверно, её можно взять за начальное значение.
Alex77 писал(а):Мне кажется такая конструкция более удобна, она представляет собой единый блок, с ней можно работать независимо от основного цикла.
Если нужен отдельный блок кода, то создаётся SubVI, который отлаживать гораздо проще. А в этих "одноразовых" циклах смысла нет. Если не нравится тянуть провода от регистров на рамке цикла, то пользуйтесь Feedback Node (палитра Structures). Он подобен сдвиговому регистру, но не выносится на рамку цикла. Вот как это выглядит:
2016-06-06_11-04-14.jpg
2016-06-06_11-04-14.jpg (45.79 КБ) 15413 просмотров
А вообще, почитайте сперва в литературе про регистры и FN. У Трэвиса по-моему целая глава на это дело отведена.
В вашем случае не стоило даже городить такой огород с этими фильтрами. Можно было сделать так:
2016-06-06_11-22-10.jpg
Но тут надо дополнительно обработать событие тайм-аута при чтении из порта. Посмотрите вот этот пример, там подобная обработка есть. Надеюсь, сможете собрать из двух примеров один?
Alex77 писал(а):К сожалению, в описании к прибору, с которого принимаются сигналы нет ничего кроме описания параметров, приходящих в строках, разделенных запятыми..
То есть, формат посылки примерно такой:
RAW:,a,b,c,d,e,f
где a,b,c,d,e,f - некоторые параметры, измеряемые прибором.
Так?
Используется или нет терминатор? Если используется, это решает сразу большинство ваших проблем. Посмотрите в терминале NI MAX, HyperTerminal, TeraTerm, Advanced Serial Port Monitor или любом другом. Заодно проверьте, будут ли приходить пустые строки непосредственно от прибора. Станет ясно, где ошибка: у вас в проге или в прошивке прибора. Вообще, пустая строка - это RAW:, или совсем-совсем пустая (длина=0)?

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

Добавлено: 07 июн 2016, 22:07
Alex77
Всем большое спасибо! В итоге сделал вот так!
Изображение

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

Добавлено: 08 июн 2016, 10:53
CapitanBlack
Ребят как сделать блок-схему которая на вход принимает набор параллельных байтов .... ??? Нужна помощь.

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

Добавлено: 08 июн 2016, 11:48
Blackman
... В итоге сделал вот так!
Как видно из BD принимаемая строка содержит Terminal Char Line Feed (\n). Поэтому применение Property "Bytes at Port" является ошибкой, так как она приводит к разрыву принимаемой строки на отдельные подстроки и как следствие к ошибке выделения из всей строки (парсинга) блока данных.

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

Добавлено: 08 июн 2016, 20:36
Boris_K
Ребят как сделать блок-схему которая на вход принимает набор параллельных байтов .... ??? Нужна помощь.
Какие байты подразумеваете под "параллельными"? Из параллельного порта?

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

Добавлено: 11 дек 2016, 10:12
andryvlad
Подскажите, как преобразовать цифровые данные типа Single Precision с контрола "Dial" или "Knob" в строку? Нужно подать это значение на вход write buffer VISA Write.

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

Добавлено: 11 дек 2016, 11:31
andryvlad
Хм, кажется, Format Into String мне подойдет

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

Добавлено: 27 апр 2017, 08:29
tomin
Blackman, Привет будущим коллегам. Использую Datasocket чтобы считывать данные с ЧП, ЧП подключение через RS485 использую преобразователь RS485-USB. Также запустил ОВЕН OPC сервер и привязал теги к регистрам ЧП, осуществляю управление из OPC. Необходимо управлять из Labview. Проблема: решил считывать данные из OPC используя Datasocket, но всплывает ошибка err 1181.

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

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

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

Добавлено: 15 май 2017, 20:11
Kosist
trenrnd писал(а):Всем доброго времени суток!
Решил попробовать в действии State Machine от JKI. Подскажите, как правильно в ней реализовать цикличный заход в стейты, т.е. постоянный, для проверки каких-либо условий и прочего. Сейчас пихаю эти стейты из ивента Таймаут, достаточно ли это "изящное" решение?
Всем спасибо.
Мне как-то для цикличных опросов JKI State Machine "не пошла". Но в ее случае использование таймаута для этого - вполне годное решение. Т.к. Вам нужна все равно возможность "достучаться" до Event Structure - что будет возможно при переходе на Timeout, а не при просто переходах по стейтах с задержкой.

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

Добавлено: 26 фев 2018, 14:50
546
Добрый день.
Как сделать строку (string) такого вида 071+0Х.000
где 07- номер прибора,1-номер канала,Х - переменное значение от 0.0 до 10.0
Пытался это сделать с помощью Concatenate ,но числа после запятой игнорируются,нужна точка

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

Добавлено: 27 фев 2018, 09:37
Vitekkz88
546, пробуйте так. Case идентичны, отличается только блок преобразования числа. Для того, чтоб заменить запятую на точку используйте Search and Replace. И на будущее создавайте отдельную тему, ведь данный вопрос немного не из этой ветки :-)

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

Добавлено: 27 фев 2018, 11:15
Artem.spb
Зачем такие сложности? :)

Код: Выделить всё

%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 КБ) 10087 просмотров

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

Добавлено: 27 фев 2018, 12:00
Vitekkz88
Зачем такие сложности? :)

Artem.spb, это хитросплетения LabVIEW :D Можно и по формату, но я прям до ноликов всё сделал. Как иначе их вставлять - не придумал :crazy:

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

Добавлено: 27 фев 2018, 13:24
546
Спасибо.
Я немного неправильно поставил вопрос - на входе значение меняется от 0 до 100(шим) ,а в строке надо получить:от 00.000 до 10.000.