VISA -> Serial ошибка обмена данными

Простейшие вопросы в области инженерной разработки
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

dadreamer, дело в том, что UART второстепенная функция, в блоке есть более важные задачи, на момент выполнения которых, прерывания от других периферийных модулей, в том числе от UART не обрабатываются (особенности контроллера управления, в нет системы приоритетных прерываний). То есть, если блок обрабатывает другое прерывание, он не сможет ответить на за запрос входящей команды, а если первый байт остался без ответа, тогда смысл продолжать обмен если устройство все равно не ответит, то есть по хорошему надо закрыть соединение и выполнять другую ветку алгоритма. Насчет второго открытия соединения я согласен, этот кусок можно убрать. Вариант "не связывыйтесь с контроллером, если он занят", тут не выйдет, потому что не известно когда блок доступен или нет. Блок готов для дальнейшего обмена, или нет - определяется статусом приема- передачи первого баита, то есть все равно нужно что-то отправить, чтобы определить состояние.

Насчет буфера, нууу какой есть. В блоке стоит 8 битный контроллер управления и изменить его разрядность невозможно (кроме того он работает на достаточно низкой частоте тактирования). Задержка после 1 байта, нужна для того, чтобы контроллер сверился с внутренней системой команд и проверил на наличие совпадений, это требует времени, поэтому нельзя пытаться отправить данные пока контроллер не обработал предыдущий баит, а то это вызовет переполнение буфера и ошибку приема. Дальнейшие задержки можно удалить, потому как передача идет на низкой скорости и данные успеют перезаписаться пока идет прием нового байта, то есть первый баит идет с задержкой а последующие без нее, я это изменю но позже. Но это уже все детали, в любом случае после любой посылки, контроллер должен реагировать, отправлять как минимум квитанцию, которая в любом случае должна меняться в зависимости от того какую команду отправили, а тут получается - что не отправляй, приходит одно и тоже. То есть либо нет передачи либо нет чтения. Завтра осциилом гляну сам UART, возможно дело даже не в :labview: . В общем чтобы делать какие то выводы надо на другом ПК попробовать запустить проект и 2 блока и глянут сам обмен на аппаратном уровне...
Аватара пользователя
Shamrel
beginner
beginner
Сообщения: 38
Зарегистрирован: 02 мар 2017, 12:15
Версия LabVIEW: 2015

Re: VISA -> Serial ошибка обмена данными

Сообщение Shamrel »

ZAFA писал(а): То есть, если блок обрабатывает другое прерывание, он не сможет ответить на за запрос входящей команды, а если первый байт остался без ответа, тогда смысл продолжать обмен если устройство все равно не ответит, то есть по хорошему надо закрыть соединение и выполнять другую ветку алгоритма.
Гоните программиста микроконтроллера в шею! Нанимайте толкового студента, курса так третьего.
У вас скорость передачи 9600 бит/сек. Это значит, что прием байта занимает чуть более 1мс. Это значит, что между прерываниями на прием байта по UART уйдет не менее 1мс.
Это что же за другое такое прерывание, которое обрабатывается больше 1мс. Это либо процессор, с тактовой частотой в пару сотен килогерц, либо кто-то запихнул алгоритм в обработчик прерывания.
ZAFA писал(а):... то есть по хорошему надо закрыть соединение и выполнять другую ветку алгоритма.
Вы не правильно понимаете смысл закрыть/открыть соединение. Должно быть так: включил прибор, запустил программу -- открыл соединение, вечером пошел домой, закрыл программу -- соединение закрылось. И не забудьте обесточить прибор -- опасно оставлять его без присмотра -- мы ведь помним какой программист писал там прошивку :suicide:

Теперь по делу.
Управление потоком передачи данных (англ. Flow Control) спасет отца русской демократии! Устройство сможет "сказать" хосту, когда оно готово принять байт, а когда нет.
Может на приборе это уже реализовано? :brows:
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

Самого себя довольно сложно погнать в шею :wink:. Это во первых, во вторых, контроллер старый, PIC16f877a, аппаратно не поддерживает приоритетные прерывания. Да, в обработчике алгоритм, который должен выполнятся в любом случае, пока не будет достигнут определенный результат операции (выше я писал об этом, функция обмена UART - низкого приоритета, она сильно втростепенная). Flow controll не реализован, то есть тут все зависит от того как распаяна FTDI, а она распаяна так, что работает в сквозном режиме что ли, то есть, что принял то и передал, то есть режим терминала c отслеживанием статуса устройства не доступен, то есть она в режиме всегда готов к приему-передаче. Насчет соединения, да, может быть неправильно понял, но мне так надо, есть режим при котором нужно все передачи и действия контроллера остановить, то есть обрубить все связи и соединения и уйти в спящий режим. Может я не совсем правильно оцениваю все это, но по мне, так открыть соединение - передать данные закрыть, это то самое что требуется, тут не идет речь о постоянной передаче массивов данных, а только формат команда - ответ.
Насчет прибора - громко сказанно :D, самоделка так сказать, Программу писал сам на асме, аппаратная часть покупная, но переделанная чтоб не возиться с ЛУТом и прочими вещами и не переплачивать деньги за заказ палаты на заводе.
Функция UARTа действительно второстепенная, потому как идея "а почему бы не добавить..." пришла когда устройство уже было отлажено и работало, выполняло другие функции. Более того Shamrel, это не ALTERA, или мощный ARM с которыми вы имеете дело, это 8 битный контроллер с 8кб памяти. На функцию обмена места в нем и так почти не осталось, почти впритык.
Кстати попробовал снова установить связь, через ViSA Test Panel, выскочила ошибка VISA: (Hex 0xBFFF0072). В рамках форума кто то писал что такое было, и dadreamer даже что- советовал, но как я понял ничем положительным это не закончилось, может есть идеи как это обойти?
Изображение
Аватара пользователя
Shamrel
beginner
beginner
Сообщения: 38
Зарегистрирован: 02 мар 2017, 12:15
Версия LabVIEW: 2015

Re: VISA -> Serial ошибка обмена данными

Сообщение Shamrel »

Если толковать эту ошибку напрямую, то кто-то, а вернее что-то уже открыло порт и держит его.
Однако, я о вас хорошего мнения, потому, думаю, что вы ни раз уже перезагрузились и другой терминал параллельно не запускали. Потому делаю вывод, что ресурс заняла сама же LabVIEW.
Скорее всего (эх, посмотреть бы на текущий код!) вы открыли порт, а потом не закрыли его и остановили программу, либо получилось так, что вы повторно открываете уже открытый порт.
Упростите программу до самого простого. Оставьте всего два компонента "открыть порт", "закрыть порт", а между ними цикл while с кнопкой стоп. Соедините все линией error, и контролируйте ее.
Да! Перед запуском этой пробы, перезапустите LabVIEW (полностью!) и переподключите прибор.
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

Пробовал все из выше перечисленного. Блок диаграмма на 1 странице текущей темы, там ничего нет лишнего. Терминал работает, то есть он поддерживает связь, данные принимаются и отправляются корректно. :labview: я преустанавливал, драйвера FTDI тоже. Параллельной работы с терминалом не организовывал. В номере порта уверен, что его не использует только FTDI, а не другое устройство. Попробую сделать так как Вы сказали, с простой функцией открытия - закрытия.
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

Ничего не вышло, к сожалению. Повыкидывал все из проекта кроме настроек Serial, собсно чтения, записи и индикатора. Ошибка приема данных, превышен таимаут (10 сек) по приему. Сохранился, ребутнул ПК, переподключил блок ничего не запускал кроме :labview:. После ошибки еще раз запустил ВИ и нажал Send, как вы и говорили повторно открылся не закрытый порт, в этот момент считалость 10h, хотя в первый запуск так ничего и не пришло до самого таимаута обмена.
Изображение Изображение
Blackman

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

Re: VISA -> Serial ошибка обмена данными

Сообщение Blackman »

1. Перед запуском в LabVIEW проверяем в терминале. Закрываем терминал.
2. Запускаем в LabVIEW. После инициализации порта очищаем буфер приема и передачи без операций ввода-вывода.
3. Покажите Значение в строке команды.
4. Согласно Вашему протоколу ответа может и не быть. Или тогда как работает ожидание ответа в терминале? И как в проге терминала обеспечиваются задержка передачи байтов? Это все к тому что терминал и Ваш прибор работают по разному)
Upd. При инициализации порта необходимо отключить символ терминала.
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

Терминал работает - все корректно. Последняя схема должна отправлять один байт и читать один байт при нажатии SEND, так ведь? Открыть порт, настроить соединение, указать скорость и другие параметры. Сейчас подоткнулся стареньким C1-55 передача от ПК идет, ответ тоже уходит из контроллера, что конкретно уходит посмотреть не могу - сложно засинхронизироваться. Но данные то уходят и приходят в ПК, почему не читается баит, если до этого все работало?
Дурацкий вопрос, как выполнить пункт 2?
Ответ в терминале есть, причем корректный без очистки буфера.
Изображение
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение dadreamer »

ZAFA писал(а):что конкретно уходит посмотреть не могу - сложно засинхронизироваться
Ну, об этом я уже писал:
dadreamer писал(а):Хотя, перед этим можно пройтись сниффером трафика, например NI I/O Trace (NI Spy), вдруг что подскажет...
Запустите сниффер и выполните однократный прогон вашей тестовой программы. Получите, что приходит и что уходит.
ZAFA писал(а):Дурацкий вопрос, как выполнить пункт 2?
VISA Flush I/O Buffer
Хотя, при корректном обмене не приходится пользоваться этой функцией. Но, может, у вас уникальный случай. :)
Blackman

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

Re: VISA -> Serial ошибка обмена данными

Сообщение Blackman »

2. VISA Flash IO Buffer
3. ?
4. ?
По поводу терминала: Байт 07 приходит последним, а он его показывает втором в строке) Это так для размышления)
Аватара пользователя
Shamrel
beginner
beginner
Сообщения: 38
Зарегистрирован: 02 мар 2017, 12:15
Версия LabVIEW: 2015

Re: VISA -> Serial ошибка обмена данными

Сообщение Shamrel »

Дурацкий вопрос.
Что вам мешает для опытов максимально упростить программу?
1. Выкинуть цикл while.
2. Убрать структуру IF и кнопку SEND (надеюсь, в эксперименте Mechanical Action стояло Latch When Releaset ?)
3. Убрать структуру очереди.
4. Для того, что бы настройки было видно без лицевой панели зрителям (то бишь нам на скринах), преобразуйте все контролы в константы.
5. Однократно запустите прибор.
6. Если опять ошибка, то еще упростите схему -- выкидывайте запись и чтение, убедитесь, что виза корректно открывает и закрывает устройство.

Далее мне для советов нужна установленная LabVIEW с VISA, чего у меня нет :(
По идее, после того, как вы отправили байт, нужно запросить у драйвера статус приемного буфера (должен же быть такой VI?), узнать сколько байт принято и ждет чтения. И если там что-то есть, то считывать. Может понадобится задержка после записи перед чтением статуса.
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

Не работает с VISA Flush Buffer так же как и до этого. Насчет терминала Blackman, вы не правы, там все ровно рабтает. Таков формат команды и ответа на нее, это не строка отправляется, а последовательно байты из введенной строки, с интервалом 1мс.
Изображение
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

Shamrel, функции кнопки стояли от отпусканию кнопки, то есть происходило однократное срабатывание, настройки эти тыщу раз проверил, и только что еще раз проверил.
Открытие - закрытие работает, скрина не приведу но проверил, Осциллографом как раз проверял, после того ка добавил чтение в работающий цикл.
Изображение
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

Re: VISA -> Serial ошибка обмена данными

Сообщение ZAFA »

dadreamer, спасибо за совет, но как пользоваться Trace, я еще не разобрался, так что завтра на нормальном осциллографе гляну, что реально пишется в контроллер и приходит из него, сейчас уже поздно возиться с этим, и так весь день убил на это.
Shamrel, тоже спасибо за идеи и советы но даже будь у вас установлена LabVIEW с VISA, у вас нет моего блока, а без него не получится проверить точно проверить работу. Честно говоря, все больше склоняюсь что либо от самой Visa надо отказаться, но все больше мне кажется проблема в ПК и интеграции Visa c дровами виртуального порта FTDI. Завтра на рабочем ПК проверю, с конкретным блоком.
Но опять же, повторюсь, все изначально работало, пока не выскочила ошибка когда проект ВИ с рабочего компа не попытался запустить на домашнем, до этой ошибки все работало корректно.
Blackman

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

Re: VISA -> Serial ошибка обмена данными

Сообщение Blackman »

Что такое 71? Какой формат дисплея строки? Hex 71 должен быть равен бинарному значению строки q или ASCII коду 113.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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