Page 4 of 5

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

PostPosted: 15 Sep 2008, 13:56
by Eugen Graf
А ты можешь как нибудь определить какой ответ принадлежит какой команде? Если да, до просто сортируй ответы по их принадлежности. Как выглядит ответ?

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

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

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

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

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

PostPosted: 15 Sep 2008, 16:36
by Confocal
результаты ответов нужно использовать для мат. обработки и последующей индикации
на панели. это уже другая задача.
еще раз на примере скриншотов выложенных раннее. нужно чтобы при перемещении
каретки (выполнение первой команды) отображалось текущее значение ее координаты (выполнение второй команды). тут-то и возникли проблемы. при запуске двух подприборов (каждый для своей команды), в ответной строке
текущей координаты при запуске выдается предыдущее или еще более раннее значение
координаты и только через какое-то время работы выдается истинное значение.

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

PostPosted: 15 Sep 2008, 17:14
by Eugen Graf
Мне ещё не хватает скрина прибора "Move Delay Line.vi" . Я хочу узнать ты в нём опрашиваешь данные с порта или только посылаешь команду.

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

PostPosted: 16 Sep 2008, 14:53
by Confocal
"Move Delay Line.vi" по структуре аналогичен остальным vi, в нем посылается команда и идет перемещение каретки. Для этой команды существует ответная строка, считывать можно, но пока нет необходимости.

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

PostPosted: 16 Sep 2008, 15:10
by Eugen Graf
Но ответ всё таки приходит? Просто ты его не считываешь, да?

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

PostPosted: 16 Sep 2008, 15:22
by Confocal
да, не считываю. ответ конечно есть.

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

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

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

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

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

PostPosted: 16 Sep 2008, 17:21
by Confocal
Согласен, с циклами здесь запутанно. Нужно правильно организовать
параллельную работу: движение каретки и считывание ее текущего положения.
Теперь что происходит при работе приборов "Move Delay Line.vi" и "Status.vi".
Если после работы прибора "Move Delay Line.vi" отдельно запустить прибор "Status.vi", и последовательно нажимать кнопку Run, то раз через раз на лицевой панели в окнах параметров выдается либо фрагмент части всей строки, либо нужно значение, либо ничего с наличием ошибок. Может нужно настроить Baud rate для Visa Read?

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

PostPosted: 16 Sep 2008, 17:27
by Eugen Graf
Цитирую то, что я написал выше. Может ты не заметил, т.к. я дописал это тогда, когда ты писал свой ответ.

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

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

PostPosted: 23 Sep 2008, 18:41
by Confocal
Установил Visa buffer size до 120, а по умолчанию - 4096. Теперь работает.

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

PostPosted: 01 Oct 2008, 18:10
by Confocal
Confocal wrote:Установил Visa buffer size до 120, а по умолчанию - 4096. Теперь работает.

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

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

PostPosted: 01 Oct 2008, 18:12
by Eugen Graf
Реинтрантность задаётся в установках прибора и используется для разделённого использования участков памяти при параллельном вызове этого прибора.
Чтобы было понятнее скажем если у тебя имеется реинтрантный прибор и ты используешь его параллельно, то при каждом вызове такого прибора создаётся его копия. Копия значит почти то же самое как если бы у тебя было например два одинаковых прибора, но с разными названиями и ты использовал бы их параллельно.

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

PostPosted: 02 Oct 2008, 09:45
by Nemo
Всем привет, что-то я столкнулся со странностью, не могу понять где ошибка? Почему-то после установки ИСТИНА в выполняющемся цикле он не останавливается, а делает еще один круг :shok: