Как сделать прием данных по rs-232 с прерыванием?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
А ты можешь как нибудь определить какой ответ принадлежит какой команде? Если да, до просто сортируй ответы по их принадлежности. Как выглядит ответ?
-
- assistant
- Сообщения: 104
- Зарегистрирован: 15 авг 2008, 11:55
- Версия LabVIEW: 8.5
- Откуда: Россия, Московская область
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
есть список всех команд и ответов на них. Например, команда которая возвращает
текущие настройки прибора выдает строку в виде:Current speed xxxx hz, Switches status xx, Shutter Open(Close). где ххх-значение на данный момент измерения. строки передаются в ASCII c наличием знаков между словами: , \s \n и т.п. как видно в строке сожержатся несколько параметров которые я уже разделил для вывода на переднюю панель.
текущие настройки прибора выдает строку в виде:Current speed xxxx hz, Switches status xx, Shutter Open(Close). где ххх-значение на данный момент измерения. строки передаются в ASCII c наличием знаков между словами: , \s \n и т.п. как видно в строке сожержатся несколько параметров которые я уже разделил для вывода на переднюю панель.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Ну с ответами всё понятно. Можно легко определить что за ответ и к какой команде он принадлежит. А что ты потом делаешь с этими ответами? Просто показываешь на лицевой панели? Если да, то какая разница в какой очерёдности они приходят от прибора?
-
- assistant
- Сообщения: 104
- Зарегистрирован: 15 авг 2008, 11:55
- Версия LabVIEW: 8.5
- Откуда: Россия, Московская область
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
результаты ответов нужно использовать для мат. обработки и последующей индикации
на панели. это уже другая задача.
еще раз на примере скриншотов выложенных раннее. нужно чтобы при перемещении
каретки (выполнение первой команды) отображалось текущее значение ее координаты (выполнение второй команды). тут-то и возникли проблемы. при запуске двух подприборов (каждый для своей команды), в ответной строке
текущей координаты при запуске выдается предыдущее или еще более раннее значение
координаты и только через какое-то время работы выдается истинное значение.
на панели. это уже другая задача.
еще раз на примере скриншотов выложенных раннее. нужно чтобы при перемещении
каретки (выполнение первой команды) отображалось текущее значение ее координаты (выполнение второй команды). тут-то и возникли проблемы. при запуске двух подприборов (каждый для своей команды), в ответной строке
текущей координаты при запуске выдается предыдущее или еще более раннее значение
координаты и только через какое-то время работы выдается истинное значение.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Мне ещё не хватает скрина прибора "Move Delay Line.vi" . Я хочу узнать ты в нём опрашиваешь данные с порта или только посылаешь команду.
-
- assistant
- Сообщения: 104
- Зарегистрирован: 15 авг 2008, 11:55
- Версия LabVIEW: 8.5
- Откуда: Россия, Московская область
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
"Move Delay Line.vi" по структуре аналогичен остальным vi, в нем посылается команда и идет перемещение каретки. Для этой команды существует ответная строка, считывать можно, но пока нет необходимости.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Но ответ всё таки приходит? Просто ты его не считываешь, да?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Ок, теперь давай разбираться с циклами. Зачем тебе нужен верхний цикл While в основном цикле? Какую функцию он вообще имеет? То что находится внутри этого цикла (то есть считывание статуса) будет выполнятся один раз, а потом программа будет ждать пока не будет нажата какая либо кнопка.
Я думаю ты хотел считывать статус постоянно (параллельно) и время от времени опять же параллельно нажимать на кнопки и посылать команды.
И потом подумай о том, о чём я тебя спрашивал раньше. Ведь если ответ ты не считываешь, значит он остаётся в буфере. А когда ты хочешь считать статус, то считываешь вместо этого ещё и прошлый ответ на команду Move Line.
Я думаю теперь несложно догадаться что и как надо переделать, чтобы программа работала как надо.
Я думаю ты хотел считывать статус постоянно (параллельно) и время от времени опять же параллельно нажимать на кнопки и посылать команды.
И потом подумай о том, о чём я тебя спрашивал раньше. Ведь если ответ ты не считываешь, значит он остаётся в буфере. А когда ты хочешь считать статус, то считываешь вместо этого ещё и прошлый ответ на команду Move Line.
Я думаю теперь несложно догадаться что и как надо переделать, чтобы программа работала как надо.
-
- assistant
- Сообщения: 104
- Зарегистрирован: 15 авг 2008, 11:55
- Версия LabVIEW: 8.5
- Откуда: Россия, Московская область
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Согласен, с циклами здесь запутанно. Нужно правильно организовать
параллельную работу: движение каретки и считывание ее текущего положения.
Теперь что происходит при работе приборов "Move Delay Line.vi" и "Status.vi".
Если после работы прибора "Move Delay Line.vi" отдельно запустить прибор "Status.vi", и последовательно нажимать кнопку Run, то раз через раз на лицевой панели в окнах параметров выдается либо фрагмент части всей строки, либо нужно значение, либо ничего с наличием ошибок. Может нужно настроить Baud rate для Visa Read?
параллельную работу: движение каретки и считывание ее текущего положения.
Теперь что происходит при работе приборов "Move Delay Line.vi" и "Status.vi".
Если после работы прибора "Move Delay Line.vi" отдельно запустить прибор "Status.vi", и последовательно нажимать кнопку Run, то раз через раз на лицевой панели в окнах параметров выдается либо фрагмент части всей строки, либо нужно значение, либо ничего с наличием ошибок. Может нужно настроить Baud rate для Visa Read?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Цитирую то, что я написал выше. Может ты не заметил, т.к. я дописал это тогда, когда ты писал свой ответ.
И потом подумай о том, о чём я тебя спрашивал раньше. Ведь если ответ ты не считываешь, значит он остаётся в буфере. А когда ты хочешь считать статус, то считываешь вместо этого ещё и прошлый ответ.
-
- assistant
- Сообщения: 104
- Зарегистрирован: 15 авг 2008, 11:55
- Версия LabVIEW: 8.5
- Откуда: Россия, Московская область
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Установил Visa buffer size до 120, а по умолчанию - 4096. Теперь работает.
-
- assistant
- Сообщения: 104
- Зарегистрирован: 15 авг 2008, 11:55
- Версия LabVIEW: 8.5
- Откуда: Россия, Московская область
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Вот скрин редактированного прибора.Confocal писал(а):Установил Visa buffer size до 120, а по умолчанию - 4096. Теперь работает.
Еще хотелось бы узнать для чего используют реинтрантные приборы и как их создают?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Реинтрантность задаётся в установках прибора и используется для разделённого использования участков памяти при параллельном вызове этого прибора.
Чтобы было понятнее скажем если у тебя имеется реинтрантный прибор и ты используешь его параллельно, то при каждом вызове такого прибора создаётся его копия. Копия значит почти то же самое как если бы у тебя было например два одинаковых прибора, но с разными названиями и ты использовал бы их параллельно.
Чтобы было понятнее скажем если у тебя имеется реинтрантный прибор и ты используешь его параллельно, то при каждом вызове такого прибора создаётся его копия. Копия значит почти то же самое как если бы у тебя было например два одинаковых прибора, но с разными названиями и ты использовал бы их параллельно.
- Nemo
- user
- Сообщения: 97
- Зарегистрирован: 26 июн 2008, 11:48
- Версия LabVIEW: 8
- Откуда: Россия
- Контактная информация:
Re: Как сделать прием данных по rs-232 с прерыванием?
Всем привет, что-то я столкнулся со странностью, не могу понять где ошибка? Почему-то после установки ИСТИНА в выполняющемся цикле он не останавливается, а делает еще один круг
- Вложения
-
- v0.8.rar
- (804.39 КБ) 175 скачиваний
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение