Преобразовать число в строку
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Re: Преобразовать число в строку
>>> Я так понимаю NUCLEO-F767ZI ковыряете? Если да, то зачем Вам UART там же USB на борту...
Ага, он самый!
USB никак не могу подключить. В диспетчере устройств выдает ошибку 43 (сбой дескриптора устройства). Поставил драйвер, менял кабели, пересмотрел кучу роликов на ютубе - ни в какую.
Ага, он самый!
USB никак не могу подключить. В диспетчере устройств выдает ошибку 43 (сбой дескриптора устройства). Поставил драйвер, менял кабели, пересмотрел кучу роликов на ютубе - ни в какую.
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Прием данных по com-порту по прерыванию (events)
Доброе утро форумчане! Вожусь с платой STM32F767, передаю данные на компьютер через com-порт, использую VISA Read.
Передаю с мк, например, число 23. LV его в принципе ловит, но еще ловит кучу нулей и какого-то мусора.
Я так думаю, это из-за рассинхронизации. Говорят, надо поставить задержку в цикле - не помогло.
Сделать бы так, чтобы цикл прокручивался после приема числа в буфер VISA Read (типа прием по прерыванию). Аналог прерываний в LV - структура Events. Настроил вкладку на срабатывание по изменению Visa resourse name.
Не работает, программа вообще перестала принимать данные.
Подскажите пожалуйста, что делаю не так? )))
Передаю с мк, например, число 23. LV его в принципе ловит, но еще ловит кучу нулей и какого-то мусора.
Я так думаю, это из-за рассинхронизации. Говорят, надо поставить задержку в цикле - не помогло.
Сделать бы так, чтобы цикл прокручивался после приема числа в буфер VISA Read (типа прием по прерыванию). Аналог прерываний в LV - структура Events. Настроил вкладку на срабатывание по изменению Visa resourse name.
Не работает, программа вообще перестала принимать данные.
Подскажите пожалуйста, что делаю не так? )))
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Преобразовать число в строку
Второй вариант откидывайте сразу.
Первый более близок к рабочему варианту, но требует доработки.
Я всегда рекомендую использовать "терминатор", почитайте сообщение и тему целиком: http://labviewportal.org/viewtopic.php? ... 849#p65849
В данном случае "0" появляются по причине отсутствия данных.
А "левые" выбросы, возможно из-за попытки преобразования "неполной" посылки.
Первый более близок к рабочему варианту, но требует доработки.
Я всегда рекомендую использовать "терминатор", почитайте сообщение и тему целиком: http://labviewportal.org/viewtopic.php? ... 849#p65849
В данном случае "0" появляются по причине отсутствия данных.
А "левые" выбросы, возможно из-за попытки преобразования "неполной" посылки.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Прием данных по com-порту по прерыванию (events)
LabVIEW Help: VISA Eventspazitiff25 писал(а):...Сделать бы так, чтобы цикл прокручивался после приема числа в буфер VISA Read (типа прием по прерыванию). ...
http://zone.ni.com/reference/en-XX/help ... sa_events/
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Re: Преобразовать число в строку
Оказалось все просто, надо выкинуть никчемный узел Property Node, и в VISA Read напротив byte count написать константу 2 (количество принятых байт, если число больше 255, я подаю например двухбайтное 4500).
Только почему-то LV принимает число задом наперед. Подаю 4500 (hex1194), а принимается 37905 (hex9411). Подскажите, можно настроить прием сперва старших байтов, а потом младших?
Только почему-то LV принимает число задом наперед. Подаю 4500 (hex1194), а принимается 37905 (hex9411). Подскажите, можно настроить прием сперва старших байтов, а потом младших?
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Преобразовать число в строку
pazitiff25, используйте блок unflatten from string и укажите свойство для терминала byte order как little-endian. Если у Вас уже массив из 2-байтных слов, то можете использовать блок swap word.
По умолчанию LabVIEW работает с данными как big-endian, привет макам.
По умолчанию LabVIEW работает с данными как big-endian, привет макам.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Re: Преобразовать число в строку
Поставил unflatten from string, разунбандил получающийся кластер, вроде бы заработало ))
Написал программу, увеличивающую поступающее число на 1. Вроде работает, но иногда, если перезагрузить микроконтроллер во время работы LV, начинает считать непойми как, какие-то лестницы получаются вместо плавно увеличивающейся линии. Рассинхронизация что ли? Как с ней бороться, поставить бит четности, поставить побольше стоповых битов, поставить flow control?
Написал программу, увеличивающую поступающее число на 1. Вроде работает, но иногда, если перезагрузить микроконтроллер во время работы LV, начинает считать непойми как, какие-то лестницы получаются вместо плавно увеличивающейся линии. Рассинхронизация что ли? Как с ней бороться, поставить бит четности, поставить побольше стоповых битов, поставить flow control?
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Re: Преобразовать число в строку
Наверное не очень правильно устраивать подобный просмотр в реальном времени. Надо класть данные в буфер и потом посылать их пакетом в каком-нибудь прерывании...
А уж перезагружать мк прямо во время работы - вообще смерти подобно.
А уж перезагружать мк прямо во время работы - вообще смерти подобно.
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Преобразовать число в строку
pazitiff25, вы переполняете диапазон типа u16, поэтому после 65535 следует вновь 0,1,2,3 и т.д.
МК, видимо генерирует числа с типом u32.
МК, видимо генерирует числа с типом u32.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Re: Преобразовать число в строку
Поменял все на U32. Обнаружил вот что:
Если сперва запустить программу на LV, а после микроконтроллер, то все работает нормально.
А вот если сперва запустить мк, а после программу, то начинаются "лестницы".
Если сперва запустить программу на LV, а после микроконтроллер, то все работает нормально.
А вот если сперва запустить мк, а после программу, то начинаются "лестницы".
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Re: Преобразовать число в строку
Хотя странно, иконка настройки com-порта вынесена за основной цикл, и порт должен инициализироваться до подключения к линиям данных. МК вроде не должен влиять на инициализацию порта, но почему-то влияет ))
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Преобразовать число в строку
Когда вы включаете контроллер после запуска программы, то он сразу шлет посылку с начала. Когда наоборот, то в буфере может оказаться часть посылки не сначала. А так как формат передаваемых данных не содержит байтов обрамления, то определить начало посылки становится как минимум затруднительно.
Мало того, при продолжительной работе единичные сбои в приеме посылки (пропуск байта) будут приводить к потере функциональности программы.
Мало того, при продолжительной работе единичные сбои в приеме посылки (пропуск байта) будут приводить к потере функциональности программы.
-
- beginner
- Сообщения: 15
- Зарегистрирован: 07 окт 2018, 01:40
- Версия LabVIEW: 2013
- Контактная информация:
Re: Преобразовать число в строку
Походу так и есть. А что такое байт обрамления? Терминатор это то же самое? Что-то типа служебного символа в конце байта, который говорит об окончании передачи?
Байты обрамления ставятся только сзади, или можно и спереди и сзади?
Байты обрамления ставятся только сзади, или можно и спереди и сзади?
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Преобразовать число в строку
Если Вы свою обертку не будите делать, только STOP (в конце посылки).pazitiff25 писал(а):Походу так и есть. А что такое байт обрамления? Терминатор это то же самое? Что-то типа служебного символа в конце байта, который говорит об окончании передачи?
Байты обрамления ставятся только сзади, или можно и спереди и сзади?
Обычно хватает стандартных настроек: VISA Configure Serial Port
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Преобразовать число в строку
Терминальный символ можно использовать только при передаче текстовых посылок. В противном случае поведение программы будет непредсказуемым, так как вы не сможете гарантировать отсутствие кода терминального символа в теле посылки.
Байты обрамления - это когда в начале (и в конце) посылки передаются определенные байтовые последовательности. Можно по байту вначале и байту в конце. Тогда после приема посылки можно проконтролировать, правильно ли она принята. В случае, если удаленное устройство передает данные непрерывно, то наличие байтов обрамления позволяет найти начало посылки при первом подключении. А вообще, я делал вебинар на эту тему...
Байты обрамления - это когда в начале (и в конце) посылки передаются определенные байтовые последовательности. Можно по байту вначале и байту в конце. Тогда после приема посылки можно проконтролировать, правильно ли она принята. В случае, если удаленное устройство передает данные непрерывно, то наличие байтов обрамления позволяет найти начало посылки при первом подключении. А вообще, я делал вебинар на эту тему...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 1017 Просмотры
-
Последнее сообщение milakhimov