While loop не останавливается

Простейшие вопросы в области инженерной разработки
Ответить
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

While loop не останавливается

Сообщение GT21 »

Есть такой блок (LV v.8.6). Программа получает строку и делит ее на ячейки массива по типу вводимых символов(буквы/цифры/точки и т.д.). Например, вводя qw123sd56.2, получим qw/123/sd/56/2 (точки отбрасываются).
Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается. Для примера на входе я использовал строку asfaf (возможно зацикливание происходит потому, что строка состоит только из букв). Но факт остается фактом - при поступлении true цикл не останавливается
Вложения
Slicer.vi
LabVIEW 8.6
(15.3 КБ) 66 скачиваний
LabVIEW 8.6
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: While loop не останавливается

Сообщение IvanLis »

GT21 писал(а):Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается. Для примера на входе я использовал строку asfaf (возможно зацикливание происходит потому, что строка состоит только из букв). Но факт остается фактом - при поступлении true цикл не останавливается
Без имени.png
При подаче "asfaf", на выходе оранжевого цикла получается 5, а на другую сторону условия "=" приходит 5-1=4
По этому внешний цикл и не останавливается.
Уберите "-1" и все заработает.
Shurik_85
beginner
beginner
Сообщения: 49
Зарегистрирован: 13 апр 2014, 18:53
Версия LabVIEW: 14
Контактная информация:

Re: While loop не останавливается

Сообщение Shurik_85 »

Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается.
Цикл, выделенный оранжевым, останавливается каждый раз на 6-ой итерации (I=5) при подаче на вход строки asfaf. Другое дело, что после выхода из внутреннего цикла, условие остановки внешнего цикла равно False. И внутренний цикл запускается снова и снова.
Так что внимательно проверьте условие остановки внешнего цикла. Раз цикл останавливается при обработке другой строки, то нужно доработать программу так, чтобы условие остановки работало в общем случае.
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: While loop не останавливается

Сообщение GT21 »

IvanLis писал(а):
GT21 писал(а):Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается. Для примера на входе я использовал строку asfaf (возможно зацикливание происходит потому, что строка состоит только из букв). Но факт остается фактом - при поступлении true цикл не останавливается
Без имени.png
При подаче "asfaf", на выходе оранжевого цикла получается 5, а на другую сторону условия "=" приходит 5-1=4
По этому внешний цикл и не останавливается.
Уберите "-1" и все заработает.
Действительно, заработало. Однако неясным остался вопрос, почему цикл не останавливался при true на кнопке остановки
LabVIEW 8.6
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: While loop не останавливается

Сообщение GT21 »

Shurik_85 писал(а):
Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается.
Цикл, выделенный оранжевым, останавливается каждый раз на 6-ой итерации (I=5) при подаче на вход строки asfaf. Другое дело, что после выхода из внутреннего цикла, условие остановки внешнего цикла равно False. И внутренний цикл запускается снова и снова.
Так что внимательно проверьте условие остановки внешнего цикла. Раз цикл останавливается при обработке другой строки, то нужно доработать программу так, чтобы условие остановки работало в общем случае.
Понял, он тупо запускался заново. Я почему-то подумал, что он не останавливается

UPD: и все-равно в коде где-то ошибка ))
LabVIEW 8.6
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: While loop не останавливается

Сообщение IvanLis »

GT21 писал(а):Действительно, заработало. Однако неясным остался вопрос, почему цикл не останавливался при true на кнопке остановки
.....
UPD: и все-равно в коде где-то ошибка ))
Потому что цикл While - цикл с постусловием.
Можно исключить лишнюю итерацию, реализовав проверку на такт раньше, но вам проще сделать так:
Без имени11.png
и не забивать голову, это нормальная практика.

Только проверьте, что бы последний символ обрабатывался.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: While loop не останавливается

Сообщение IvanLis »

GT21 писал(а):UPD: и все-равно в коде где-то ошибка ))
На самом деле, можно сделать значительно проще.
Есть такая функция Lexical Class: http://zone.ni.com/reference/en-XX/help ... cal_class/
Получится примерно так:
1.png
Slicer.vi
lv8.0 save from 2010
(10.58 КБ) 73 скачивания
Нужно только фильтрануть ненужные, ну и не знаю, у Вас разница есть между регистрами? Сейчас разница есть, разбираются все семь классов...
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: While loop не останавливается

Сообщение GT21 »

IvanLis писал(а):Нужно только фильтрануть ненужные, ну и не знаю, у Вас разница есть между регистрами? Сейчас разница есть, разбираются все семь классов...
Да, разница есть. И ошибку нашел. Когда ввожу строку, то если символ не является точкой, буквой, цифрой или штрихом, то зацикливается. Сейчас вроде поправил, посмотрю ваш пример
LabVIEW 8.6
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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