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