Страница 4 из 4

Re: Scan from string Visa Com

Добавлено: 30 мар 2020, 18:51
ujin
использование терминирующего символа
Ваш пример хороший, но не использованы на 100% символы в посылке.
В этой посылке в качестве терминирующего символа строки используется 2 символа возврат каретки и перевод строки 0xA,0xD. В VISA только 1 символ.
А терминирующий символ всей посылки пустая строка + 0xA,0xD. С учетом предыдущих 0xA,0xD четыре байта.
В VISA я не видел возможность использования нескольких байт в качестве терминирующего символа.
Использование 2х символов для определения конца строки и 4х символов для посылки более надежно чем одного. Хотя в данном случае скорее всего не нужно.
С одним символом, без CRC и др. способов проверки посылки наверное можно использовать только для лабораторной работы.

Re: Scan from string Visa Com

Добавлено: 30 мар 2020, 19:32
Kosist
Терминирующий символ - это условность, которая помогает более легко получать данные. UART посылает 8 битов, и ему все равно на логику посылки. Понятно, что если известно что каждая посылка заканчивается пробелом + 0xA,0xD, то в качестве термин. символа логично выбрать последний символ цепочки.
CRC, спец. символы начала/конца посылки - это уже уровень протокола, он может, но не обязан быть связан с аппаратным уровнем.
Т.е. одну и ту же комманду можно передавать разными каналами - UART, TCP/IP, и т.д., при этом используя одинаковый "синтаксис" комманд. А к нему уже могут добавляться вещи, характерные для канала общения. Т.е. теоретически "тело" комманды которую посылают при помощи CAN и UART будет одинаковое, и парсинг можно делать одинаковым способом, но например CAN будет иметь больше дополнительных байтов - составляющих ее посылки.
Само собой, что может случится так, что термин. символ будет в "теле" посылки, а не в конце. В таком случае приложение должно обрабатывать принятую посылку - чтобы определить, полученная она целиком или нет. Но это нужно делать и с, и без термин. символа (если мы говорим о данных читаемых при помощи VISA Read).

Re: Scan from string Visa Com

Добавлено: 31 мар 2020, 06:54
ujin
логично выбрать последний символ цепочки
Если будет указано количество байт на входе byte count и указано использование терминального символа, VISA Read остановится и по символу и по количеству байт и по таймауту?

Re: Scan from string Visa Com

Добавлено: 31 мар 2020, 09:26
Kosist
Выписка из документации функции VISA Read Details
This function might return less than the number of bytes requested if the function reaches the end of the buffer, reaches a termination character, or if a timeout occurs. The output error cluster indicates if a timeout has occurred.
Так что да, если будет прочитан термин. символ то VISA Read остановится и возвратит столько байтов сколько будет в буффере; но если будет таймаут - то выскочит ошибка.

Re: Scan from string Visa Com

Добавлено: 31 мар 2020, 10:10
ujin
Спасибо за информацию.
Можно мой прием тогда нужно переделать с использованием терминального символа.
Посмотрел еще прием из библиотеки Modbus ASCII, с некоторых пор библиотека MODBUS открыта. Там так же остановки приема по терминальному символу VISA и далее проверка терминального символа 0xA 0XD

Re: Scan from string Visa Com

Добавлено: 31 мар 2020, 11:45
Select
После ряда экспериментов по работе с буфером я представлю на критику видеоролик своей, альтернативной версии кода.

Re: Scan from string Visa Com

Добавлено: 31 мар 2020, 13:16
Select
Сейчас это работает именно так, как хотел.
Несколько мешает начальное смещение символов в момент старта, пока буфер не заполнится ровным количеством символов.

Re: Scan from string Visa Com

Добавлено: 31 мар 2020, 17:23
Select
Я подключил через селективный переключатель сенсор и последовательно в процессе опроса переключаю его по всем каналам, аппаратно меняю его параметры. Любой из 10 каналов можно в процессе программно отключить. Все работает в реальном времени, с параметрами в индикаторах могу выполнять любые логические действия. :drink:
Благодарю всех кто принимал участие в обсуждении.