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

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение 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 КБ) 15399 просмотров
А вообще, почитайте сперва в литературе про регистры и 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)?
Alex77
interested
interested
Сообщения: 8
Зарегистрирован: 30 май 2016, 12:22
Версия LabVIEW: 15
Контактная информация:

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

Сообщение Alex77 »

Всем большое спасибо! В итоге сделал вот так!
Изображение
CapitanBlack
interested
interested
Сообщения: 1
Зарегистрирован: 08 июн 2016, 10:36
Версия LabVIEW: 8
Контактная информация:

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

Сообщение CapitanBlack »

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

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

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

Сообщение Blackman »

... В итоге сделал вот так!
Как видно из BD принимаемая строка содержит Terminal Char Line Feed (\n). Поэтому применение Property "Bytes at Port" является ошибкой, так как она приводит к разрыву принимаемой строки на отдельные подстроки и как следствие к ошибке выделения из всей строки (парсинга) блока данных.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

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

Сообщение Boris_K »

Ребят как сделать блок-схему которая на вход принимает набор параллельных байтов .... ??? Нужна помощь.
Какие байты подразумеваете под "параллельными"? Из параллельного порта?
Race conditions - опасный и скользкий баг!
andryvlad
interested
interested
Сообщения: 2
Зарегистрирован: 11 дек 2016, 09:44
Версия LabVIEW: 2015
Контактная информация:

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

Сообщение andryvlad »

Подскажите, как преобразовать цифровые данные типа Single Precision с контрола "Dial" или "Knob" в строку? Нужно подать это значение на вход write buffer VISA Write.
andryvlad
interested
interested
Сообщения: 2
Зарегистрирован: 11 дек 2016, 09:44
Версия LabVIEW: 2015
Контактная информация:

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

Сообщение andryvlad »

Хм, кажется, Format Into String мне подойдет
tomin
interested
interested
Сообщения: 1
Зарегистрирован: 27 апр 2017, 08:11
Версия LabVIEW: 16.0
Контактная информация:

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

Сообщение tomin »

Blackman, Привет будущим коллегам. Использую Datasocket чтобы считывать данные с ЧП, ЧП подключение через RS485 использую преобразователь RS485-USB. Также запустил ОВЕН OPC сервер и привязал теги к регистрам ЧП, осуществляю управление из OPC. Необходимо управлять из Labview. Проблема: решил считывать данные из OPC используя Datasocket, но всплывает ошибка err 1181.
trenrnd
interested
interested
Сообщения: 1
Зарегистрирован: 15 май 2017, 19:19
Версия LabVIEW: 2012
Контактная информация:

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

Сообщение trenrnd »

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

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

trenrnd писал(а):Всем доброго времени суток!
Решил попробовать в действии State Machine от JKI. Подскажите, как правильно в ней реализовать цикличный заход в стейты, т.е. постоянный, для проверки каких-либо условий и прочего. Сейчас пихаю эти стейты из ивента Таймаут, достаточно ли это "изящное" решение?
Всем спасибо.
Мне как-то для цикличных опросов JKI State Machine "не пошла". Но в ее случае использование таймаута для этого - вполне годное решение. Т.к. Вам нужна все равно возможность "достучаться" до Event Structure - что будет возможно при переходе на Timeout, а не при просто переходах по стейтах с задержкой.
Мы делили апельсин - много наших полегло...
546
beginner
beginner
Сообщения: 31
Зарегистрирован: 14 апр 2014, 10:42
Версия LabVIEW: 8.5
Контактная информация:

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

Сообщение 546 »

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

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

546, пробуйте так. Case идентичны, отличается только блок преобразования числа. Для того, чтоб заменить запятую на точку используйте Search and Replace. И на будущее создавайте отдельную тему, ведь данный вопрос немного не из этой ветки :-)
Вложения
Строка.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Artem.spb

Activity Автор
professor
professor
Сообщения: 3387
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение 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 КБ) 10073 просмотра
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

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

Artem.spb, это хитросплетения LabVIEW :D Можно и по формату, но я прям до ноликов всё сделал. Как иначе их вставлять - не придумал :crazy:
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
546
beginner
beginner
Сообщения: 31
Зарегистрирован: 14 апр 2014, 10:42
Версия LabVIEW: 8.5
Контактная информация:

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

Сообщение 546 »

Спасибо.
Я немного неправильно поставил вопрос - на входе значение меняется от 0 до 100(шим) ,а в строке надо получить:от 00.000 до 10.000.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»