Разделение перменных с последовательного серийного порта
-
- interested
- Сообщения: 8
- Зарегистрирован: 13 июн 2013, 14:07
- Версия LabVIEW: 2012
- Контактная информация:
Разделение перменных с последовательного серийного порта
Добрый день. Сравнительно недавно начал работать с LabView. Прошу помощи в вопросе с серийным портом. С помощью VISA принимаю данные с устройства через серийный порт. Устройство передает информацию с в виде двух переменных, которые я указываю в загрузочной программе. Хочу строить график зависимости между этими двумя переменными. Переменные, допустим x и у (числа могут варьироваться от 0 до 400), подаю в виде строки. Для удобства указываю, чтобы они подавались через пробел, то есть: x y x y x y и т. д. В случае с одной переменной ( x x x x x x ) всё прекрасно подается на блок Scan From String и считывается на контроле, изменяя значение с каждым x. Соответственно и график строится замечательно. Но не знаю как быть с двумя переменными, получается постоянное чередование x и y. Помогите, пожалуйста. Как можно их направить на разные оси графика?
- Super Star
- adviser
- Сообщения: 228
- Зарегистрирован: 07 фев 2013, 08:37
- Версия LabVIEW: 2011
Re: Разделение перменных с последовательного серийного порта
сканируй как сканировал, получишь массив, где четное - У, нечетной - Х.
я люблю свою работу.... Я приду сюда в субботу ...
-
Oleg B.
- leader
- Сообщения: 674
- Зарегистрирован: 25 сен 2011, 11:30
- Награды: 2
- Версия LabVIEW: 5 .. 2021
- Откуда: Israel
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
В подобной ситуации, пробел - опасный разделитель.ССС писал(а):Переменные, допустим x и у (числа могут варьироваться от 0 до 400), подаю в виде строки. Для удобства указываю, чтобы они подавались через пробел, то есть: x y x y x y и т. д.
Правильнее назначить разные разделители - например & и ;
Тогда принимаемый техт будет выглядеть так:
x&y;x&y;x&y;x&y;x&y;x&y;x&y;x&y; (если в тексте будут пробелы - не беда)
После разделения по ; получаем -> x&y x&y x&y x&y x&y x&y x&y
Разделить пару на два числа тоже просто.
При подобном подходе у Вас никогда не перепутаются x и y - даже в случае сбоя в канале связи.
veni, vidi, phallomorphi
-
- interested
- Сообщения: 8
- Зарегистрирован: 13 июн 2013, 14:07
- Версия LabVIEW: 2012
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
Спасибо. Да, у меня была такая мысль, но счетчик сделать не получается. Не могу понять, как мне разделить четные и нечетные числа. Может быть есть какой-нибудь наглядный пример реализации похожего алгоритма?Super Star писал(а):сканируй как сканировал, получишь массив, где четное - У, нечетной - Х.
Спасибо. Так тоже пытался сделать. Не подскажите как делить? Получается, что деление нужно производить до блока Scan From String, иначе ошибка из-за формата данных. Я делю функцией Match Pattern. Выражение указываю просто как ";". Но на выходе выражения до и после не такие как нужно. На всякий случай прилепил скриншот, если что-то описываю не так.Oleg B. писал(а):В подобной ситуации, пробел - опасный разделитель.ССС писал(а):Переменные, допустим x и у (числа могут варьироваться от 0 до 400), подаю в виде строки. Для удобства указываю, чтобы они подавались через пробел, то есть: x y x y x y и т. д.
Правильнее назначить разные разделители - например & и ;
Тогда принимаемый техт будет выглядеть так:
x&y;x&y;x&y;x&y;x&y;x&y;x&y;x&y; (если в тексте будут пробелы - не беда)
После разделения по ; получаем -> x&y x&y x&y x&y x&y x&y x&y
Разделить пару на два числа тоже просто.
При подобном подходе у Вас никогда не перепутаются x и y - даже в случае сбоя в канале связи.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
Посмотрите пример...ССС писал(а):Спасибо. Да, у меня была такая мысль, но счетчик сделать не получается. Не могу понять, как мне разделить четные и нечетные числа. Может быть есть какой-нибудь наглядный пример реализации похожего алгоритма?
- Вложения
-
- Untitled 1.vi
- LV2011
- (10.03 КБ) 224 скачивания
-
- interested
- Сообщения: 8
- Зарегистрирован: 13 июн 2013, 14:07
- Версия LabVIEW: 2012
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
Спасибо, не совсем разобрался в алгоритме, но к моей схеме применимо. Нашел другую проблему. Входная строка из буфера от VISA поступает не коррекстно через некоторый промежуток времени. Это применимо и к подаче одной переменной. Строка сдвигается, то есть может начинаться не с первой цифры числа и, соответственно, и заканчиваться не последней или тем же пробелом. Я так понимаю, что это связано с числом бит, которые мы указываем для чтения VISA, и с тем, что числа меняются от единиц до сотен. Менять число бит помогает только когда числа примерно одинаковы. Как можно устранить такой сдвиг?dadreamer писал(а):Посмотрите пример...ССС писал(а):Спасибо. Да, у меня была такая мысль, но счетчик сделать не получается. Не могу понять, как мне разделить четные и нечетные числа. Может быть есть какой-нибудь наглядный пример реализации похожего алгоритма?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
ССС, если пробелы расположены в начале/в конце строки, то поможет Trim Whitespace из палитры String. Если же число в строке одно (что означает отсутствие пробелов вообще после Trim Whitespace, например, вместо "1 2" имеем "1"), то проще всего до цикла конвертации в массив проверять строку на пробел. Если его нет, то сразу превращать в одно число. Иначе, прогонять через цикл.
-
- interested
- Сообщения: 8
- Зарегистрирован: 13 июн 2013, 14:07
- Версия LabVIEW: 2012
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
dadreamer, но ведь строка после выхода из VISA может начинаться как с пробела, так и с числа. Причем вместо числа 105, она начинается с 5 (как видно на скриншоте в предыдущем сообщении). Нужно исправить это, прежде чем подавать строку на Trim Whitespace. Иначе значение 5 все равно будет восприниматься, как число. Я правильно понимаю?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
ССС, да, всё верно, нужно устранить причину обрезания данных, иначе получите неверные числа. Попробуйте использовать Bytes At Port, пример здесь. И наверное стоит мало-мальски сконфигурировать порт перед работой: http://www.labviewportal.org/viewtopic. ... 337#p50327
-
- interested
- Сообщения: 8
- Зарегистрирован: 13 июн 2013, 14:07
- Версия LabVIEW: 2012
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
dadreamer, спасибо, посмотрю. Я вот пока проблему эту решил с помощью подачи переменной каждый раз с новой строки. Теперь это число сразу же на выходе VISA Read меняется мгновенно, то есть меняется строка содержит только X и сразу же заменяется следующей строкой X. То, что надо для подачи одной переменной. Вообщем, значение меняется с каждым новым x, никуда не сдвигаясь, только уже строки с пробелами нет. Соответственно и x с y будут так же меняться. Но как теперь мне организовать счетчик, чтобы он считал каждое новое значение и выделял четные и нечетные? Не могу проследить по тому примеру. Вообщем, задача почти та же, что в была начале.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
Вы просто сложите все числа в один массив, а разделите его потом уже, после всех операций. Это делается с помощью Decimate 1D Array, на выходе будут два массива - с четными элементами и с нечетными.ССС писал(а):Но как теперь мне организовать счетчик, чтобы он считал каждое новое значение и выделял четные и нечетные? Не могу проследить по тому примеру. Вообщем, задача почти та же, что в была начале.
-
- interested
- Сообщения: 8
- Зарегистрирован: 13 июн 2013, 14:07
- Версия LabVIEW: 2012
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
Я стал подавать оба числа в одной строке через пробел. Получилась обновляемая строка с двумя числами, ну а разделить их труда не составило. Я вот только не пойму, почему на графике отражается одна точка, вроде массив создаю перед графиком. Подскажите, пожалуйста, как изменить подключение X-Y Graph, чтобы линия по точкам строилась, а не одна точка бегала туда-сюда ?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
ССС, накапливайте массив из точек, после цикла выводите сразу на график.
-
- interested
- Сообщения: 8
- Зарегистрирован: 13 июн 2013, 14:07
- Версия LabVIEW: 2012
- Контактная информация:
Re: Разделение перменных с последовательного серийного порта
dadreamer, в таком случае график будет строиться после считывания всех данных с устройства? Если так, то каким способом я могу делать это в реальном времени, чтобы одновременно с изменением данных видеть эти изменения на графике?
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Разделение перменных с последовательного серийного порта
по образцу: http://www.labviewportal.org/viewtopic. ... 318#p48330ССС писал(а):каким способом я могу делать это в реальном времени, чтобы одновременно с изменением данных видеть эти изменения на графике?
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 0 Ответы
- 505 Просмотры
-
Последнее сообщение Juri