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

Простейшие вопросы в области инженерной разработки
Аватара пользователя
Shamrel
beginner
beginner
Сообщения: 38
Зарегистрирован: 02 мар 2017, 12:15
Версия LabVIEW: 2015

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

Сообщение Shamrel »

И еще разок!
Перед чтением проверяйте число принятых в буфер байт!
Есть такой удобный инструмент VISA Bytes at Serial Port.
А при необходимости, после отправки команды, добавьте задержку. Тут вам пригодится структура "Flat Sequence Structure" и что-нибудь из палитры Timing.
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

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

Сообщение ZAFA »

Blackman, 71 в Hex формате, кодировка внутренней команды, через probe смотрел q в кодировке ASCII отправляется в буфер записи. "0х71 установить число байт исходящего буфера SPI в контроллере" значение этой команды не важно, пока полностью пакет не обработается, значение этого байта не имеет значение. Это просто квитанция, что команда получена, за этим байтом следует обмен данными и CRC16. Но по протоколу по понятии команды - контроллер должен всегда отвечать квитанцией. У контроллера стоит прерывание по переполнению таймера, после его возникновения, все принимающие буферы UART (их 4 штуки) очищаются, так что от предыдущего пакета, остатки точнее его - обратно уйти не могут - это исключено. По таймауту контроллер переходит в исходное состояние ожидания пакета от ПК.
Blackman

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

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

Сообщение Blackman »

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

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

Сообщение ZAFA »

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

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

Сообщение ZAFA »

Shamrel, поставил как вы сказали, индикатор показывает "0', то есть Visa не читает данные из порта? Так что ли?
Blackman

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

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

Сообщение Blackman »

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

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

Сообщение ZAFA »

Blackman нет, не правильно, терминал отправляет 1 байт в контроллер (CMD баит), принимает от контроллера квитанцию, что тот принял команду и принял ее правильно (изменный код принятой CMD), получив байт, терминал отправляет еще 3 байта в контроллер (Sub_CMD/DATA, СRC16_h, CRC16_l), контроллер принимает эти 3 байта. В итоге его буфер занят 4 байтами, он их сверяет с внутренней системой команд управления, если все ОК, высчитывает CRC из принятых CMD и Sub_CMD/DATA, после чего отправляет 3 байта в ответ в терминал (высчитанное контроллером СRC16_h, CRC16_l из входящих пакетов CMD и Sub_CMD/DATA принятых от терминала, и последний отправляется флаг - параметр исполнения команды). ТО есть это должно так работать в :labview: Терминал жа - да тупо высылает 4 байта с 1 мс задержкой. Терминал - это не программа под контроллер, это универсальная утилита которая никак не привязанна к типу устройств, а работает в соотвествии с введенными установками обмена. Эта программа и не должна ожидать ответа на 1 баит, она не рассчитана на это, поэтому я и попытался перестроить ее модель и то как я задумал обмен на базе :labview:
Blackman

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

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

Сообщение Blackman »

Еще раз: Протокол обмена терминала с контроллером не соответствует протоколу обмена Вашего прибора (Виртуального инструмента) с контроллером. -> Первый протокол (терминал+контроллер) правильный, второй протокол (Виртуальный инструмент+контроллер) не правильный. -> Перейти на первый вариант и проверить его работу в LabVIEW,
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

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

Сообщение ZAFA »

Проблема в том что :labview: передает данные, на осциллографе видел пакеты, пока не нажмешь STOP, смотрел ответные пакеты от контроллера в :labview: . Идет обмен из :labview: в контроллер и посылается обратно, но входящие пакеты не фиксируются в :labview:, стаивл счетчик входящих баит он все время =0. Я не знаю почем так, Операция чтения не возвращает данные из Serial данные. Вне зависимости от того что и как реализуется, первый баит посылаемый в контроллер сопровождается в ответом квитанции, если эта операция не работает- смысл посылать остальные 3? Более того послав 4 баита как в тепминале, я потеряю контрольную квитанцию, если ее не будет как я буду высчитывать CRC прнятого пакета, в том то и соль, что я должен и там и там ловить все баиты данных.
Blackman

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

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

Сообщение Blackman »

Вы не видите разницы как работает программа терминала с контроллером и Ваш :vi:?
Терминал не ждет после отправки первого байта. Он отправляет 4 байта сразу и после этого успешно принимает в ответ 4 байта.
Вы посылаете 1 байт и ждете ответа от контроллера в течении времени таймаута и в итоге получаете ошибку таймаута.
Есть разница в протоколе обмена? Ответ очевиден)
ZAFA
beginner
beginner
Сообщения: 27
Зарегистрирован: 08 мар 2017, 12:22
Версия LabVIEW: 2012
Контактная информация:

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

Сообщение ZAFA »

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

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

Сообщение ZAFA »

И еще, Blackman, у терминала процессы чтения записи развязаны и не зависят друг от друга, да запись идет именно так - 4 байта с интервалом 1мс, но в первый интервал приходит 1 баит ответа от контроллера и только потом по истечении 1 мс отправляются еще 3 баита, а потом читаются 3 баита. Можно выкинуть ожидание ответа в первый интервал, но потом надо ожидать не 4 байт, как вы говорили, а всего 3. И Это, на данный момент, не имеет значения, так как видно, что данные из порта VIsa не принимает почему-то.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

ZAFA писал(а):И Это, на данный момент, не имеет значения, так как видно, что данные из порта VIsa не принимает почему-то.
То есть, вы всё-таки полагаете, что на вашей машине, с вашим устройством, в вашем окружении (нужное подчеркнуть), VISA не работает, несмотря на все ухищрения? Разумеется, в MAX'е вы всю работу также проверили. Случай уникальный, честно говоря. Хоть и не нерешаемый.
Borjomy_1

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

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

Сообщение Borjomy_1 »

ZAFA, не занимайтесь ерундой!... Вся работа с VISA буферизирована. Сами операции ввода-вывода через VISA имеют задержки, причем серьезные, в зависимости от того, какие настройки имеет даже драйвер передающей микросхемы. И если у конечного устройства малые таймауты на прием, то ваша программа никогда не заработает. Потому что вы рвете команду по времени.
На входной массив подавайте то, что у вас задает терминал. Принимать надо ВСЕ 4 байта, так как прием в буфер происходит автоматически, даже если вы функцию не вызываете. При вызове чтения вы получаете данные из буфера + недостающие. И выносите инициализацию из передачи, без шуток! Какой толк вам давать советы, если вы не следуете элементарным правилам???
Вложения
Управление через Com.png
Blackman

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

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

Сообщение Blackman »

ZAFA у Вас в программе терминала в секции Transmit стоит "галка" в чекбоксе CR=CR+LF.
Значит ли это, что в протоколе все таки применяются символы завершения сообщений (терминалы)?
Upd: Программа терминала от Microchip по умолчанию тоже использует эту комбинацию символов.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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