Паразитные нули с COM-порта

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
blindoss
beginner
beginner
Сообщения: 21
Зарегистрирован: 03 дек 2020, 16:49
Версия LabVIEW: 2014
Благодарил (а): 6 раз
Контактная информация:

Паразитные нули с COM-порта

Сообщение blindoss »

Здравствуйте, подключили старый советский прибор через микроконтроллер по виртуальному COM-порту к Labview, но несмотря на правильно прописанную скорость приема данных, кроме значений появляющихся на индикаторе прибора появляются лишние нули. Например, на экране 138.7, затем 138.8, а в Labview 138.7, 0, 0, 138.8. Есть ли решение у проблемы?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3408
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение Artem.spb »

вопрос из разряда: у меня машина не заводится, кто-нибудь знает, почему?

Как прибор отправляет данные?
Как вы их читаете?
Банально, вы читаете чаще, чем они присылаются.
blindoss
beginner
beginner
Сообщения: 21
Зарегистрирован: 03 дек 2020, 16:49
Версия LabVIEW: 2014
Благодарил (а): 6 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение blindoss »

Artem.spb писал(а): 03 дек 2020, 17:08 вопрос из разряда: у меня машина не заводится, кто-нибудь знает, почему?

Как прибор отправляет данные?
Как вы их читаете?
Банально, вы читаете чаще, чем они присылаются.
Читаю через VISA. Смотрю данные с микроконтроллера через Termite, там нет нулей, а в Labview та же скорость, но они есть.
(Прошу прощения заранее, я еще новичок, только начал разбираться в приеме/выводе данных в LabView)
Artem.spb

Activity Автор
professor
professor
Сообщения: 3408
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение Artem.spb »

Если вы будете и дальше так детально описывать свою проблему и её детали, то вряд ли найдутся желающие вас пытать и помочь в вашем вопросе.
Скорость - это и частота шины, и период запросов данных из шины.
Может, слишком часто проверяете, что там есть? Сырые данные смотрели?
И уже давно можно было выложить свой код, чтобы было понятно, что происходит
blindoss
beginner
beginner
Сообщения: 21
Зарегистрирован: 03 дек 2020, 16:49
Версия LabVIEW: 2014
Благодарил (а): 6 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение blindoss »

ЭМЦ7-4.vi
(78.48 КБ) 129 скачиваний
Да, конечно, вот код, только почему-то сейчас перестали считываться данные. Весь день работало, а сейчас перестало
Аватара пользователя
IvanLis

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

Re: Паразитные нули с COM-порта

Сообщение IvanLis »

blindoss писал(а): 03 дек 2020, 18:31 Да, конечно, вот код, только почему-то сейчас перестали считываться данные. Весь день работало, а сейчас перестало
Первое, что бросается в глаза...
Вы по какому признаку определяете конец пакета данных?
У Вас в настройках VISA Configure Serial Port VI указываете, что терминатор использовать (по умолчанию = True) в качестве него используете символ перевода каретки (0xA).
Но потом, внутри цикла Вы читаете данные пакетами по 6 byte.

Нужно сначала порыться в протоколе и определиться есть там терминатор, а скорее всего есть и принимать решение именно по нему.
Если терминатор отсутствует, то необходимо как-то синхронизироваться на начальном этапе, что бы не принять две чати разных пакетов за оди, а потом уже вычитывать из регистра указанное число byte.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3408
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение Artem.spb »

И ещё отобразите строку, которую получаете, возможно, проблема при её переводе в число.
Borjomy_1

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

Re: Паразитные нули с COM-порта

Сообщение Borjomy_1 »

IvanLis писал(а): 03 дек 2020, 19:48 Если терминатор отсутствует, то необходимо как-то синхронизироваться на начальном этапе, что бы не принять две чати разных пакетов за оди, а потом уже вычитывать из регистра указанное число byte.
Скорее всего он числа передаются с небольшой частотой, поэтому попасть в середину посылки при старте маловероятно.

нулевое значение - значение по умолчанию, надо смотреть содержимое принятой строки (после чтения), тогда будет понятнее, откуда нули появляются.
blindoss
beginner
beginner
Сообщения: 21
Зарегистрирован: 03 дек 2020, 16:49
Версия LabVIEW: 2014
Благодарил (а): 6 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение blindoss »

Сразу после чтения нулей не находит, только после преобразования в число
Последний раз редактировалось blindoss 04 дек 2020, 12:46, всего редактировалось 2 раза.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3408
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение Artem.spb »

Значит, проблема в преобразовании. Что именно в строке?
blindoss
beginner
beginner
Сообщения: 21
Зарегистрирован: 03 дек 2020, 16:49
Версия LabVIEW: 2014
Благодарил (а): 6 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение blindoss »

Вывел в массив значения из строки и одновременно построил график уже преобразованных в число значений
Вложения
Снимок.PNG1.PNG
Снимок.PNG2.PNG
Снимок.PNG2.PNG (5.01 КБ) 2475 просмотров
Borjomy_1

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

Re: Паразитные нули с COM-порта

Сообщение Borjomy_1 »

проверяйте перед преобразованием в число на пустую строку и ошибку чтения из порта по таймауту. У вас установлен таймаут 20 секунд. Если обновление происходит реже таймаута, то это надо обрабатывать. Сделаете обработку и таймаут можно уменьшить, программа будет более отзывчивой.
blindoss
beginner
beginner
Сообщения: 21
Зарегистрирован: 03 дек 2020, 16:49
Версия LabVIEW: 2014
Благодарил (а): 6 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение blindoss »

Borjomy_1 писал(а): 04 дек 2020, 15:02 проверяйте перед преобразованием в число на пустую строку и ошибку чтения из порта по таймауту. У вас установлен таймаут 20 секунд. Если обновление происходит реже таймаута, то это надо обрабатывать. Сделаете обработку и таймаут можно уменьшить, программа будет более отзывчивой.
Извините, а не могли бы Вы поподробнее рассказать про обработку ?
Borjomy_1

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

Re: Паразитные нули с COM-порта

Сообщение Borjomy_1 »

blindoss писал(а): 04 дек 2020, 16:50 Извините, а не могли бы Вы поподробнее рассказать про обработку ?
вы проверяете размер строки, которую получили. Если она меньше 6 или 4 (т.е меньше того, что заказали), то весь цикл крутится вхолостую. Можете в холостой части поставить небольшую задержку (20..50 мс), чтобы при возникновении ошибки, не связанной с таймаутом, предотвратить 100% нагрузку процессора.
blindoss
beginner
beginner
Сообщения: 21
Зарегистрирован: 03 дек 2020, 16:49
Версия LabVIEW: 2014
Благодарил (а): 6 раз
Контактная информация:

Re: Паразитные нули с COM-порта

Сообщение blindoss »

Borjomy_1 писал(а): 04 дек 2020, 17:56
blindoss писал(а): 04 дек 2020, 16:50 Извините, а не могли бы Вы поподробнее рассказать про обработку ?
вы проверяете размер строки, которую получили. Если она меньше 6 или 4 (т.е меньше того, что заказали), то весь цикл крутится вхолостую. Можете в холостой части поставить небольшую задержку (20..50 мс), чтобы при возникновении ошибки, не связанной с таймаутом, предотвратить 100% нагрузку процессора.
Сделал так, как Вы сказали, но теперь появилась другая проблема: на Scan From String Function всегда поступает нужная строка, но после нее появлялись нули. Я убрал ноль из default value 1 и и теперь появляется гуляющая запятая. Output 1 - сразу после Scan, а read buffer 2 после проверки размера строки
Вложения
Снимок.PNG3.PNG
Снимок.PNG3.PNG (1.79 КБ) 2425 просмотров
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»