Atmega8 & LV

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Аватара пользователя
EvgenIg
beginner
beginner
Сообщения: 40
Зарегистрирован: 22 авг 2008, 21:34
Версия LabVIEW: 8.5,2009
Откуда: Санкт-Петербург

Re: Atmega8 & LV

Сообщение EvgenIg »

считывание байт и есть длина пакета
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Atmega8 & LV

Сообщение Eugen Graf »

Тогда перед прибором Bytes On Port нужно подождать например секунду (или меньше или больше), но долго ты на этом не протянешь. В конце концов что то пойдёт вкривь :nono:
Аватара пользователя
EvgenIg
beginner
beginner
Сообщения: 40
Зарегистрирован: 22 авг 2008, 21:34
Версия LabVIEW: 8.5,2009
Откуда: Санкт-Петербург

Re: Atmega8 & LV

Сообщение EvgenIg »

не пойму, функция Bytes On Port чтоли не успевает считать байты во время выполнения программы?
какойта бред
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Atmega8 & LV

Сообщение Konstantin Sumenko »

В смысле не успевает считать, это же свойство с параметром Read only, показывает кол-во байт в буфере, но не считывает.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Atmega8 & LV

Сообщение Eugen Graf »

Да нет же. Смотри, ты получаешь пакет смотришь сколько байт в порте, например 5, считываешь их, потом в то время когда прибор посылает следующие 5, но ещё не доконца переслал ты смотришь сколько байт в порте (например 3) и считываешь эти три байта. В следующий раз ты считываешь оставшиеся 2 с прошлого пакет и уже всё сбилось.

Ну или засунь считывание хотя бы внутрь кейса, тогда считывание будет происходить только тогда, когда наберётся 5 байт. Но предупреждаю, что это тоже не самое лучшее решение.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Atmega8 & LV

Сообщение Eugen Graf »

В общем делается так:

Пакет состоит из:
- байтов синхронизации (например 0х07 0х07)
- длины пакета (количество байт в пакете)
- идентифаера (чтобы определить о каком типе пакета идёт речь)
- данных (байты с полезной информацией, желательно если количество не превышает размер буфера в установках порта)
- проверочной суммы (для определения достоверности и полности пакета)

В приборе нужно:
- считать один байт и сверить с первым байтом синхронизации, если совпало, то
- считать один байт и сверить со вторым байтом синхронизации, если совпало, то перейти в режим - "синхронизирован"
- в режиме "синхронизирован" считать один байт, это длина пакета
- перевести считаный байт в число (например с помощью Type Cast)
- подать это число на VISA Read, для считывания содержимого пакета (т.е. полезной информации)
- разбить пакет на идентифаер и остальные данные, преобразить данные в числа и строки и выдать на лицевую панель например
- считать ещё один байт - проверочную сумму
- высчитать проверочную сумму пакета
- сравнить проверочную сумму

В случае каких либо ошибок или если проверочная сумма несовпала, то переходим в режим "несинхонизирован" и пробуем синхронизироваться по новой.

Это конечно только пример, может быть и по-другому. Но в принципе всё устроено почти так, с небольшими отклонениями.
Ответить

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