Преобразовать число в строку

Простейшие вопросы в области инженерной разработки
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Re: Преобразовать число в строку

Сообщение pazitiff25 »

>>> Я так понимаю NUCLEO-F767ZI ковыряете? Если да, то зачем Вам UART там же USB на борту...

Ага, он самый!

USB никак не могу подключить. В диспетчере устройств выдает ошибку 43 (сбой дескриптора устройства). Поставил драйвер, менял кабели, пересмотрел кучу роликов на ютубе - ни в какую.
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Прием данных по com-порту по прерыванию (events)

Сообщение pazitiff25 »

Доброе утро форумчане! Вожусь с платой STM32F767, передаю данные на компьютер через com-порт, использую VISA Read.
Передаю с мк, например, число 23. LV его в принципе ловит, но еще ловит кучу нулей и какого-то мусора.
visa com port.jpg
Я так думаю, это из-за рассинхронизации. Говорят, надо поставить задержку в цикле - не помогло.
Сделать бы так, чтобы цикл прокручивался после приема числа в буфер VISA Read (типа прием по прерыванию). Аналог прерываний в LV - структура Events. Настроил вкладку на срабатывание по изменению Visa resourse name.
Не работает, программа вообще перестала принимать данные.
Подскажите пожалуйста, что делаю не так? )))
events.jpg
Аватара пользователя
IvanLis

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

Re: Преобразовать число в строку

Сообщение IvanLis »

Второй вариант откидывайте сразу.

Первый более близок к рабочему варианту, но требует доработки.
Я всегда рекомендую использовать "терминатор", почитайте сообщение и тему целиком: http://labviewportal.org/viewtopic.php? ... 849#p65849

В данном случае "0" появляются по причине отсутствия данных.
А "левые" выбросы, возможно из-за попытки преобразования "неполной" посылки.
Blackman

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

Re: Прием данных по com-порту по прерыванию (events)

Сообщение Blackman »

pazitiff25 писал(а):...Сделать бы так, чтобы цикл прокручивался после приема числа в буфер VISA Read (типа прием по прерыванию). ...
LabVIEW Help: VISA Events
http://zone.ni.com/reference/en-XX/help ... sa_events/
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Re: Преобразовать число в строку

Сообщение pazitiff25 »

Оказалось все просто, надо выкинуть никчемный узел Property Node, и в VISA Read напротив byte count написать константу 2 (количество принятых байт, если число больше 255, я подаю например двухбайтное 4500).

Только почему-то LV принимает число задом наперед. Подаю 4500 (hex1194), а принимается 37905 (hex9411). Подскажите, можно настроить прием сперва старших байтов, а потом младших?
Аватара пользователя
Vitekkz88

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

Re: Преобразовать число в строку

Сообщение Vitekkz88 »

pazitiff25, используйте блок unflatten from string и укажите свойство для терминала byte order как little-endian. Если у Вас уже массив из 2-байтных слов, то можете использовать блок swap word.
По умолчанию LabVIEW работает с данными как big-endian, привет макам.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Re: Преобразовать число в строку

Сообщение pazitiff25 »

Поставил unflatten from string, разунбандил получающийся кластер, вроде бы заработало ))

Написал программу, увеличивающую поступающее число на 1. Вроде работает, но иногда, если перезагрузить микроконтроллер во время работы LV, начинает считать непойми как, какие-то лестницы получаются вместо плавно увеличивающейся линии. Рассинхронизация что ли? Как с ней бороться, поставить бит четности, поставить побольше стоповых битов, поставить flow control?
visa com port.jpg
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Re: Преобразовать число в строку

Сообщение pazitiff25 »

Наверное не очень правильно устраивать подобный просмотр в реальном времени. Надо класть данные в буфер и потом посылать их пакетом в каком-нибудь прерывании...
А уж перезагружать мк прямо во время работы - вообще смерти подобно.
Аватара пользователя
Vitekkz88

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

Re: Преобразовать число в строку

Сообщение Vitekkz88 »

pazitiff25, вы переполняете диапазон типа u16, поэтому после 65535 следует вновь 0,1,2,3 и т.д.
МК, видимо генерирует числа с типом u32.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Re: Преобразовать число в строку

Сообщение pazitiff25 »

Поменял все на U32. Обнаружил вот что:
Если сперва запустить программу на LV, а после микроконтроллер, то все работает нормально.
А вот если сперва запустить мк, а после программу, то начинаются "лестницы".
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Re: Преобразовать число в строку

Сообщение pazitiff25 »

Хотя странно, иконка настройки com-порта вынесена за основной цикл, и порт должен инициализироваться до подключения к линиям данных. МК вроде не должен влиять на инициализацию порта, но почему-то влияет ))
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Преобразовать число в строку

Сообщение Borjomy_1 »

Когда вы включаете контроллер после запуска программы, то он сразу шлет посылку с начала. Когда наоборот, то в буфере может оказаться часть посылки не сначала. А так как формат передаваемых данных не содержит байтов обрамления, то определить начало посылки становится как минимум затруднительно.
Мало того, при продолжительной работе единичные сбои в приеме посылки (пропуск байта) будут приводить к потере функциональности программы.
pazitiff25
beginner
beginner
Сообщения: 15
Зарегистрирован: 07 окт 2018, 01:40
Версия LabVIEW: 2013
Контактная информация:

Re: Преобразовать число в строку

Сообщение pazitiff25 »

Походу так и есть. А что такое байт обрамления? Терминатор это то же самое? Что-то типа служебного символа в конце байта, который говорит об окончании передачи?
Байты обрамления ставятся только сзади, или можно и спереди и сзади?
Аватара пользователя
IvanLis

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

Re: Преобразовать число в строку

Сообщение IvanLis »

pazitiff25 писал(а):Походу так и есть. А что такое байт обрамления? Терминатор это то же самое? Что-то типа служебного символа в конце байта, который говорит об окончании передачи?
Байты обрамления ставятся только сзади, или можно и спереди и сзади?
Если Вы свою обертку не будите делать, только STOP (в конце посылки).
cfgserl.gif
cfgserl.gif (3.75 КБ) 3684 просмотра
Обычно хватает стандартных настроек: VISA Configure Serial Port
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Преобразовать число в строку

Сообщение Borjomy_1 »

Терминальный символ можно использовать только при передаче текстовых посылок. В противном случае поведение программы будет непредсказуемым, так как вы не сможете гарантировать отсутствие кода терминального символа в теле посылки.
Байты обрамления - это когда в начале (и в конце) посылки передаются определенные байтовые последовательности. Можно по байту вначале и байту в конце. Тогда после приема посылки можно проконтролировать, правильно ли она принята. В случае, если удаленное устройство передает данные непрерывно, то наличие байтов обрамления позволяет найти начало посылки при первом подключении. А вообще, я делал вебинар на эту тему...
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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