Как сделать прием данных по rs-232 с прерыванием?

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Аватара пользователя
Eugen Graf

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

Re: Как сделать прием данных по rs-232 с прерыванием?

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

А ты можешь как нибудь определить какой ответ принадлежит какой команде? Если да, до просто сортируй ответы по их принадлежности. Как выглядит ответ?

Confocal
assistant
assistant
Сообщения: 104
Зарегистрирован: 15 авг 2008, 11:55
Репутация: 0
Версия LabVIEW: 8.5
Откуда: Россия, Московская область
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Confocal »

есть список всех команд и ответов на них. Например, команда которая возвращает
текущие настройки прибора выдает строку в виде:Current speed xxxx hz, Switches status xx, Shutter Open(Close). где ххх-значение на данный момент измерения. строки передаются в ASCII c наличием знаков между словами: , \s \n и т.п. как видно в строке сожержатся несколько параметров которые я уже разделил для вывода на переднюю панель.

Аватара пользователя
Eugen Graf

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

Re: Как сделать прием данных по rs-232 с прерыванием?

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

Ну с ответами всё понятно. Можно легко определить что за ответ и к какой команде он принадлежит. А что ты потом делаешь с этими ответами? Просто показываешь на лицевой панели? Если да, то какая разница в какой очерёдности они приходят от прибора?

Confocal
assistant
assistant
Сообщения: 104
Зарегистрирован: 15 авг 2008, 11:55
Репутация: 0
Версия LabVIEW: 8.5
Откуда: Россия, Московская область
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Confocal »

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

Аватара пользователя
Eugen Graf

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

Re: Как сделать прием данных по rs-232 с прерыванием?

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

Мне ещё не хватает скрина прибора "Move Delay Line.vi" . Я хочу узнать ты в нём опрашиваешь данные с порта или только посылаешь команду.

Confocal
assistant
assistant
Сообщения: 104
Зарегистрирован: 15 авг 2008, 11:55
Репутация: 0
Версия LabVIEW: 8.5
Откуда: Россия, Московская область
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Confocal »

"Move Delay Line.vi" по структуре аналогичен остальным vi, в нем посылается команда и идет перемещение каретки. Для этой команды существует ответная строка, считывать можно, но пока нет необходимости.

Аватара пользователя
Eugen Graf

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

Re: Как сделать прием данных по rs-232 с прерыванием?

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

Но ответ всё таки приходит? Просто ты его не считываешь, да?

Confocal
assistant
assistant
Сообщения: 104
Зарегистрирован: 15 авг 2008, 11:55
Репутация: 0
Версия LabVIEW: 8.5
Откуда: Россия, Московская область
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Confocal »

да, не считываю. ответ конечно есть.

Аватара пользователя
Eugen Graf

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

Re: Как сделать прием данных по rs-232 с прерыванием?

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

Ок, теперь давай разбираться с циклами. Зачем тебе нужен верхний цикл While в основном цикле? Какую функцию он вообще имеет? То что находится внутри этого цикла (то есть считывание статуса) будет выполнятся один раз, а потом программа будет ждать пока не будет нажата какая либо кнопка.
Я думаю ты хотел считывать статус постоянно (параллельно) и время от времени опять же параллельно нажимать на кнопки и посылать команды.

И потом подумай о том, о чём я тебя спрашивал раньше. Ведь если ответ ты не считываешь, значит он остаётся в буфере. А когда ты хочешь считать статус, то считываешь вместо этого ещё и прошлый ответ на команду Move Line.

Я думаю теперь несложно догадаться что и как надо переделать, чтобы программа работала как надо.

Confocal
assistant
assistant
Сообщения: 104
Зарегистрирован: 15 авг 2008, 11:55
Репутация: 0
Версия LabVIEW: 8.5
Откуда: Россия, Московская область
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Confocal »

Согласен, с циклами здесь запутанно. Нужно правильно организовать
параллельную работу: движение каретки и считывание ее текущего положения.
Теперь что происходит при работе приборов "Move Delay Line.vi" и "Status.vi".
Если после работы прибора "Move Delay Line.vi" отдельно запустить прибор "Status.vi", и последовательно нажимать кнопку Run, то раз через раз на лицевой панели в окнах параметров выдается либо фрагмент части всей строки, либо нужно значение, либо ничего с наличием ошибок. Может нужно настроить Baud rate для Visa Read?
Вложения
4.JPG
5.JPG
6.JPG

Аватара пользователя
Eugen Graf

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

Re: Как сделать прием данных по rs-232 с прерыванием?

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

Цитирую то, что я написал выше. Может ты не заметил, т.к. я дописал это тогда, когда ты писал свой ответ.

И потом подумай о том, о чём я тебя спрашивал раньше. Ведь если ответ ты не считываешь, значит он остаётся в буфере. А когда ты хочешь считать статус, то считываешь вместо этого ещё и прошлый ответ.

Confocal
assistant
assistant
Сообщения: 104
Зарегистрирован: 15 авг 2008, 11:55
Репутация: 0
Версия LabVIEW: 8.5
Откуда: Россия, Московская область
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Confocal »

Установил Visa buffer size до 120, а по умолчанию - 4096. Теперь работает.

Confocal
assistant
assistant
Сообщения: 104
Зарегистрирован: 15 авг 2008, 11:55
Репутация: 0
Версия LabVIEW: 8.5
Откуда: Россия, Московская область
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Confocal »

Confocal писал(а):Установил Visa buffer size до 120, а по умолчанию - 4096. Теперь работает.

Вот скрин редактированного прибора.
Еще хотелось бы узнать для чего используют реинтрантные приборы и как их создают?
Вложения
VISA1.PNG

Аватара пользователя
Eugen Graf

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

Re: Как сделать прием данных по rs-232 с прерыванием?

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

Реинтрантность задаётся в установках прибора и используется для разделённого использования участков памяти при параллельном вызове этого прибора.
Чтобы было понятнее скажем если у тебя имеется реинтрантный прибор и ты используешь его параллельно, то при каждом вызове такого прибора создаётся его копия. Копия значит почти то же самое как если бы у тебя было например два одинаковых прибора, но с разными названиями и ты использовал бы их параллельно.

Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Репутация: 0
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Как сделать прием данных по rs-232 с прерыванием?

Сообщение Nemo »

Всем привет, что-то я столкнулся со странностью, не могу понять где ошибка? Почему-то после установки ИСТИНА в выполняющемся цикле он не останавливается, а делает еще один круг :shok:
Вложения
v0.8.rar
(804.39 КБ) 118 скачиваний

Ответить

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