Коллеги, здравствуйте!
Помогите, пожалуйста, разобраться с ситуацией:
1) Есть некое устройство с IP адресом, с возможностью управления текстовыми командами через telnet.
2) Мною была написана subvi, см. вложение для управления данным устройством, что-то вроде драйвера.
3) Задача драйвера: связаться с устройством, опросить его, получить начальный ответ, подтверждающий, что устройство готово для общения, затем драйвер посылает команду с паролем для деблокирования устройства, а затем посылает нужную команду, которая придет из главной vi.
Проблема в следующем: связь устанавливается, первичная запись в порт проходит, получаем нужный ответ от устройства, все хорошо, записываем команду с паролем (на диаграмме помечена как VISA Write Password) для деблокирования..... и обнаруживаем, что в порт записано 0 байт со всеми дальнейшими вытекающими, что отклик от устройства неверный (его просто нет, раз ничего не записали) и т.д и т.п. Почему не проходит вторая запись, не понимаю.
Проверил телнетом, все ок.
VISA_TCPIP: не выполняется повторная VISA Write, где грабли?
-
- beginner
- Сообщения: 11
- Зарегистрирован: 10 апр 2011, 14:56
- Версия LabVIEW: 2013
- Контактная информация:
VISA_TCPIP: не выполняется повторная VISA Write, где грабли?
- Вложения
-
- TCPIP_VISA_Comm_Experimental.vi
- (32.32 КБ) 117 скачиваний
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: VISA_TCPIP: не выполняется повторная VISA Write, где гра
1. В профиле указана одна версия LabVIEW, а файл другой, поправьте пожалуйста._Mickey_ писал(а):Проблема в следующем: связь устанавливается, первичная запись в порт проходит, получаем нужный ответ от устройства, все хорошо, записываем команду с паролем (на диаграмме помечена как VISA Write Password) для деблокирования..... и обнаруживаем, что в порт записано 0 байт со всеми дальнейшими вытекающими, что отклик от устройства неверный (его просто нет, раз ничего не записали) и т.д и т.п. Почему не проходит вторая запись, не понимаю.
Проверил телнетом, все ок.
2. Возникают ли при этом ошибки? Посмотрите в режиме отладки, возможно, что на первом этапе - соединения возникает ошибка и на Case-структуру подается False. В этом случае запись в порт и не будет производиться.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: VISA_TCPIP: не выполняется повторная VISA Write, где гра
Может быть, для поиска подстроки в строке использовать не Match Pattern, а Search/Split String? И ещё, у вас в кейсе "Sending command to device here" задержка стоит параллельно основному коду, т.е. фактически две операции Visa Write могут быть выполнены с малым промежутком, и потом будет сделана задержка. Может, это не так критично, но лучше тогда так:
Чтение данных можно было бы сделать в цикле While: считывать не 255 байт, а до тех пор, пока не будет получена строка, содержащая нужные данные (или пока не будет получена команда "стоп"). Но это всё рекомендации, ошибку вылавливать придётся вам.-
- beginner
- Сообщения: 11
- Зарегистрирован: 10 апр 2011, 14:56
- Версия LabVIEW: 2013
- Контактная информация:
Re: VISA_TCPIP: не выполняется повторная VISA Write, где гра
1. Поправил, извините.IvanLis писал(а):1. В профиле указана одна версия LabVIEW, а файл другой, поправьте пожалуйста._Mickey_ писал(а):Проблема в следующем: связь устанавливается, первичная запись в порт проходит, получаем нужный ответ от устройства, все хорошо, записываем команду с паролем (на диаграмме помечена как VISA Write Password) для деблокирования..... и обнаруживаем, что в порт записано 0 байт со всеми дальнейшими вытекающими, что отклик от устройства неверный (его просто нет, раз ничего не записали) и т.д и т.п. Почему не проходит вторая запись, не понимаю.
Проверил телнетом, все ок.
2. Возникают ли при этом ошибки? Посмотрите в режиме отладки, возможно, что на первом этапе - соединения возникает ошибка и на Case-структуру подается False. В этом случае запись в порт и не будет производиться.
2. Да, уже на самой первой VISA Read возникает timeout чтения, но я не придавал этому значения , т.к. данные все равно верно считываются и на первую case структуру приходит TRUE, а вот запись не проходит, это видно и по return count 2 и по режиму отладки, счетчик записанных байт остается равным нулю и дальше все происходит как я описывал выше, на вторую case структуру уже приходит FALSE.
-
- beginner
- Сообщения: 11
- Зарегистрирован: 10 апр 2011, 14:56
- Версия LabVIEW: 2013
- Контактная информация:
Re: VISA_TCPIP: не выполняется повторная VISA Write, где гра
По поводу задержки учту, но это не причина.dadreamer писал(а):Может быть, для поиска подстроки в строке использовать не Match Pattern, а Search/Split String? И ещё, у вас в кейсе "Sending command to device here" задержка стоит параллельно основному коду, т.е. фактически две операции Visa Write могут быть выполнены с малым промежутком, и потом будет сделана задержка. Может, это не так критично, но лучше тогда так:Чтение данных можно было бы сделать в цикле While: считывать не 255 байт, а до тех пор, пока не будет получена строка, содержащая нужные данные (или пока не будет получена команда "стоп"). Но это всё рекомендации, ошибку вылавливать придётся вам.
Про считывание до получения нужных данных - буду двигаться в этом направлении, но хотел сделать по аналогии с Serial портом, где-то видел пример, что есть функция определяющая сколько байт пришло в порт и ровно это количество и читаем, но не уверен, что такое есть для TCPIP.
Вот, нашел, как здесь:
-
- beginner
- Сообщения: 11
- Зарегистрирован: 10 апр 2011, 14:56
- Версия LabVIEW: 2013
- Контактная информация:
Re: VISA_TCPIP: не выполняется повторная VISA Write, где гра
Решил ситуацию путем игнорирования timeout через case структуру. Всем спасибо.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 657 Просмотры
-
Последнее сообщение Borjomy_1
-
- 4 Ответы
- 240 Просмотры
-
Последнее сообщение Embedder74