Протокол обмена с COM-портом

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

AndreyDmitriev писал(а):
Kvanto писал(а):Мой VI запускается НЕ КАЖДЫЙ РАЗ.
Коллега Кванто, не в обиду, но научитесь формулировать сообщение о проблеме правильно. Не бывает такого "запускается не каждый раз". Бывает - "при запуске спонтанно возникает ошибка такая-то там-то и там-то". Если ВИ "зависает" - то это тоже может проявляться по разному - вот эти проявления и надо описывать.
это сообщение не актуально, а вот последнее актуально. То есть фактически вопрос стоит: как разделить выборки массива на четные и нечетные, если он постоянно сдвигается
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Протокол обмена с COM-портом

Сообщение AndreyDmitriev »

Kvanto писал(а): это сообщение не актуально, а вот последнее актуально. То есть фактически вопрос стоит: как разделить выборки массива на четные и нечетные, если он постоянно сдвигается
А что там делить? На каждой итерации там в массиве только один элемент лежит, поэтому Decimate и не отрабатывает. Если на каждой итерации приходит сигнал то с первого, то со второго входа, то самое простое - завести сдвиговый регистр (Boolean), инвертировать его на каждой итерации - он и даст нам информацию - с первого или второго канала приходят данные.
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

ну да. я это тоже осознал. спасибо.
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

А как можно разбить в строке 8 знаков следующие через пробел по 4 знака. Т.е. есть "12345678 12345678", а надо сделать"1234 5678 1234 5678". Вообще у меня из очереди выходят 8-ми знаковые выборки и в старом варианте они разделялись пробелом, чтобы последующая функция преобразования в число вес верно преобразовала.
Так было
Так было
Снимок2.JPG (32.58 КБ) 7809 просмотров
А теперь сделал кое-что,
Снимок.JPG
но у меня возникла ошибка переполнения памяти
Снимок1.JPG
Снимок1.JPG (29.49 КБ) 7809 просмотров
в качестве инициализации сдвиг. регистра String используется пробел
Borjomy_1

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

Re: Протокол обмена с COM-портом

Сообщение Borjomy_1 »

а зачем вам там сдвиговый регистр? Результат конкатенации потом подается на сдвиговый регист, причем с удвоением длины строки на каждой итерации цикла. На 32 итерации или даже существенно раньше будет переполнение памяти. Вспомните притчу о падишахе и изобретателе шахмат.

Чтобы распознавать из строки фиксированное количество символов формат должен быть "%4d" или "%4x" , две операции подряд, на вход второй подавать данные с выхода "resultion string" первого "scan"
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

если вот так, то не проходит такой вариант. Ошибка говорит, что на входе второго Scan непонятный формат.
Снимок.JPG
Borjomy_1

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

Re: Протокол обмена с COM-портом

Сообщение Borjomy_1 »

а надо цикл этот убрать. В очередь ведь строчки длиной 8б запихиваются. При каждом чтении из очереди и приходит эти 8б, они не склеиваются. Вот и распознаешь по два числа из одной строчки. Покажи содержание строки, которая принимается из очереди. Удали второй формат и подсоедини первый ко второму скану, может это не "икс", а "ха"
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

Borjomy_1 писал(а):а надо цикл этот убрать. В очередь ведь строчки длиной 8б запихиваются. При каждом чтении из очереди и приходит эти 8б, они не склеиваются. Вот и распознаешь по два числа из одной строчки. Покажи содержание строки, которая принимается из очереди. Удали второй формат и подсоедини первый ко второму скану, может это не "икс", а "ха"
я тут время зря не тратил) и зашил в контроллер разделительный символ табуляции между 8-ю байтами. Теперь по 4 байта принимаю. Пока лаги какие-то в лабвью отображаются с АЦП. На днях планирую подать на один канал возрастающую "пилу", а на 2-й убывающую. Прямо в контроллере прописать и посмоттреть все ли успевает LV считать. Отпишусь тогда как будут результаты.
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

AndreyDmitriev писал(а):
Kvanto писал(а): это сообщение не актуально, а вот последнее актуально. То есть фактически вопрос стоит: как разделить выборки массива на четные и нечетные, если он постоянно сдвигается
А что там делить? На каждой итерации там в массиве только один элемент лежит, поэтому Decimate и не отрабатывает. Если на каждой итерации приходит сигнал то с первого, то со второго входа, то самое простое - завести сдвиговый регистр (Boolean), инвертировать его на каждой итерации - он и даст нам информацию - с первого или второго канала приходят данные.
Придумал вот такое, но разделения каналов нет. Где я мог напортачить?
Снимок1.JPG
Снимок1.JPG (19.78 КБ) 7755 просмотров
В варианте False наоборот.
Аватара пользователя
IvanLis

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

Re: Протокол обмена с COM-портом

Сообщение IvanLis »

Kvanto писал(а):Придумал вот такое, но разделения каналов нет. Где я мог напортачить?
нужно наверное использовать сдвиговые регистры и дописывать новый элемент в конец массива при выполнении условия чет/нечет
а условие удобнее задавать используя целочисленное деление на 2 и проверяя остаток, это классика
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

я пока жду ответа, придумываю решение свое порой). Вот теперь сделал так, чтобы мой массив был не с одним элементом, а с 50-ю. И не могу понять как может быть вот такое:
Снимок.JPG
Снимок1.JPG
Аватара пользователя
IvanLis

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

Re: Протокол обмена с COM-портом

Сообщение IvanLis »

Kvanto писал(а):И не могу понять как может быть вот такое
так не поймешь... не все видно и понятно
но ты в массив дописываешь не элемент, а массив...
сколько там элементов, только тебе известно

ты поясни, что имеется и что нужно получить
а то изначально у тебя элементы (скаляр) были и их нужно было раскидать на два массива
а теперь у тебя в исходе массив
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

Вообщем имеется непрерывный поток 2-х байтовых выборок, поступающих с двух каналов АЦП. Если вдаваться в подробности, то в данной блок-диаграмме правильность функции Decimate 1D Array я протестировал на пилообразном сигнале. Для этого прописал в контроллере на один канал восходящую ступеньку, а на другой нисходящую. Вот что получилось, вроде бы все верно.

[Расширение avi было запрещено, вложение больше недоступно.]

Но когда начал вместо тестирования подавать на один из каналов синус некоторой амплитуды, то увидел сигнал похожий на шум. А на выходе Decimate Array образовавшихся получились два массива, совершенно идентичные, "элемент в элемент". Размер массива Main = 50 элем.
Снимок3.JPG
На выходе необходимо получить правильную регистрацию сигналов с 2-х каналов, не важно каких.
Аватара пользователя
IvanLis

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

Re: Протокол обмена с COM-портом

Сообщение IvanLis »

Kvanto писал(а):На выходе необходимо получить правильную регистрацию сигналов с 2-х каналов, не важно каких.
выложи данные, которые ты принимаешь...
данные поступают последовательно или одним пакетом о двух каналах?
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Протокол обмена с COM-портом

Сообщение Kvanto »

IvanLis писал(а): выложи данные, которые ты принимаешь...
данные поступают последовательно или одним пакетом о двух каналах?
данные поступают по очереди 1 канал, 2 канал, элемент массива ниже - выборка с одного канала, следующий элемент со 2-го канала и т.д.
Снимок.JPG
Снимок.JPG (17.1 КБ) 7683 просмотра

Причем думал может где я ошибся в пайке схемы, но проверял: по очереди подключил 1 канал, а 2-й заземлял, затем наоборот. все работает,
но только вот с "одноканальной" программой для МК. Программирую два канала - лезет какой-то шум.
Вложения
Received data.vi
(6.2 КБ) 178 скачиваний
Ответить

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