Запись в COM и чтение из него в одном VI
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Запись в COM и чтение из него в одном VI
Всем привет, я новичок в этих делах, поэтому не судите строго)
Написал прибор, в котором происходит запись и чтение ком порта, и во время чтения происходит ошибка -1073807339 котоорая говорит о том, что вышло время таймаута(VISA: (HEX 0xBFFF0015) Timeout expired before operation completed). В чем может быть проблема??
VI прикрепил
Написал прибор, в котором происходит запись и чтение ком порта, и во время чтения происходит ошибка -1073807339 котоорая говорит о том, что вышло время таймаута(VISA: (HEX 0xBFFF0015) Timeout expired before operation completed). В чем может быть проблема??
VI прикрепил
- Вложения
-
- Main VI.vi
- (32.53 КБ) 179 скачиваний
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Эта ошибка происходит при инициализации? Если да, то правильный ли указан ком-порт?siiilverrr писал(а):Всем привет, я новичок в этих делах, поэтому не судите строго)
Написал прибор, в котором происходит запись и чтение ком порта, и во время чтения происходит ошибка -1073807339 котоорая говорит о том, что вышло время таймаута(VISA: (HEX 0xBFFF0015) Timeout expired before operation completed). В чем может быть проблема??
VI прикрепил
Если при чтении, то правильные ли настройки ком-порта, и именно терминирующего характера (или вообще его наличия)? Может быть проблема и с флоу настройками, но я такое встречал редко. Также, обратите внимание на бауд рейт - правильный ли он?
Рекомендую вначале проверить работу с прибором при помощи какого-те терминала, например RealTerm. Если там все работает, то переносите настройки в код-модуль в , пробуйте - и смотрите на код.
Мы делили апельсин - много наших полегло...
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Благодарю за ответ! Ошибка появляется после Visa read и в буфер не передается то, что записано в терминале(использую Teraterm). Вопрос состоит в том, что при том же соединении, но в VI, который исполняет только лишь чтение ком порта, все работает прекрасно, но как только я переношу этот кейс в VI с записью в ком порт и соединяю операторы, в которых находятся visa write и visa read, при чтении появляется ошибка, которую я обозначил выше. И теперь самое интересное. Я решил проверить работу на примере, который предлагает лабвью, VI, в котором происходит и запись и чтение, так вот в этом примере появляется та же самая ошибка! Я уже начинаю грешить на аппаратуру, ибо использую кучу переходников, так как работаю на двух ноутбуках без физического RS-232.Kosist писал(а):Эта ошибка происходит при инициализации? Если да, то правильный ли указан ком-порт?siiilverrr писал(а):Всем привет, я новичок в этих делах, поэтому не судите строго)
Написал прибор, в котором происходит запись и чтение ком порта, и во время чтения происходит ошибка -1073807339 котоорая говорит о том, что вышло время таймаута(VISA: (HEX 0xBFFF0015) Timeout expired before operation completed). В чем может быть проблема??
VI прикрепил
Если при чтении, то правильные ли настройки ком-порта, и именно терминирующего характера (или вообще его наличия)? Может быть проблема и с флоу настройками, но я такое встречал редко. Также, обратите внимание на бауд рейт - правильный ли он?
Рекомендую вначале проверить работу с прибором при помощи какого-те терминала, например RealTerm. Если там все работает, то переносите настройки в код-модуль в , пробуйте - и смотрите на код.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
siiilverrr, давайте начнём с самого начала, потому что слишком много информации. Судя по тому, что вы написали, вы пытаетесь организовать простую связь а ля "нуль-модемный кабель" между двумя компами, только вместо такого кабеля у вас пара виртуальных портов, соединённых через USB-мосты. Поправьте, если не так. Поэтому вы вправе сами определять протокол и настройки вашего интерфейса. Итак.
1) Какие настройки обоих портов вы выбрали? Крайне желательно, чтобы они совпадали на обоих концах. Напишите их все сюда.
2) Какую структуру протокола ваших сообщений вы задаёте? Будете ли вы использовать терминатор? (для простого текстового обмена лучше его включить, так как с ним чтение пакета проще)
3) Какие данные будете пересылать (текст/бинарные)?
Начнём хотя бы с этого.
1) Какие настройки обоих портов вы выбрали? Крайне желательно, чтобы они совпадали на обоих концах. Напишите их все сюда.
2) Какую структуру протокола ваших сообщений вы задаёте? Будете ли вы использовать терминатор? (для простого текстового обмена лучше его включить, так как с ним чтение пакета проще)
3) Какие данные будете пересылать (текст/бинарные)?
Начнём хотя бы с этого.
Скорее всего, ошибка из-за того, что вы включили в настройках порта терминатор, а по факту его не отсылаете. VISA Read ожидает его прихода и, не дождавшись, выдаёт таймаут. Вряд ли дело в железе (не исключено, конечно, но маловероятно). Я бы вам посоветовал сперва разработать базовый формат ваших посылок, ибо без него вы постоянно будете наступать на какие-то грабли. Посмотрите, например, эти рекомендации.Я решил проверить работу на примере, который предлагает лабвью, VI, в котором происходит и запись и чтение, так вот в этом примере появляется та же самая ошибка!
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Именно так, обмен происходит через 2 виртуальных порта.dadreamer писал(а):siiilverrr, давайте начнём с самого начала, потому что слишком много информации. Судя по тому, что вы написали, вы пытаетесь организовать простую связь а ля "нуль-модемный кабель" между двумя компами, только вместо такого кабеля у вас пара виртуальных портов, соединённых через USB-мосты. Поправьте, если не так. Поэтому вы вправе сами определять протокол и настройки вашего интерфейса. Итак.
1) Какие настройки обоих портов вы выбрали? Крайне желательно, чтобы они совпадали на обоих концах. Напишите их все сюда.
2) Какую структуру протокола ваших сообщений вы задаёте? Будете ли вы использовать терминатор? (для простого текстового обмена лучше его включить, так как с ним чтение пакета проще)
3) Какие данные будете пересылать (текст/бинарные)?
Начнём хотя бы с этого.Скорее всего, ошибка из-за того, что вы включили в настройках порта терминатор, а по факту его не отсылаете. VISA Read ожидает его прихода и, не дождавшись, выдаёт таймаут. Вряд ли дело в железе (не исключено, конечно, но маловероятно). Я бы вам посоветовал сперва разработать базовый формат ваших посылок, ибо без него вы постоянно будете наступать на какие-то грабли. Посмотрите, например, эти рекомендации.Я решил проверить работу на примере, который предлагает лабвью, VI, в котором происходит и запись и чтение, так вот в этом примере появляется та же самая ошибка!
1) Все по стандарту: baud rate 9600, data bits 8, parity none, stop bits 1, flow control none. С обеих сторон сопадают.
2) Терминатор использую, при появлении \n в конце строки прием завершается.
3) Передавать по тз нужно шестнадцатиричное число, но я пока балуюсь со строковыми переменными
Когда я только начал разбираться в чтением через визу, не мог никак прочитать буфер, а потом ввел терминатор на окончание приема по появлению \n и все заработало.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
siiilverrr, попробуйте вот такой простенький мессенджер. Запустите эту программу на обоих компьютерах. Если будете запускать на одном ПК два экземпляра, переименуйте в одном очереди.
- Вложения
-
- COM_Port_Messenger.vi
- lv2015
- (18.92 КБ) 197 скачиваний
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
На двух пк запустить возможности нет. Как и раньше подключился к Teraterm'у на втором пк, на первом, где лабвью имеется, с вашего VI отправил строку, все получилось, однако в принятом тексте опять же ничего не наблюдается. Программа не дропается, потому что вы очищаете ошибку по таймауту, это я вижу, но в целом никаких изменений я не наблюдаюdadreamer писал(а):siiilverrr, попробуйте вот такой простенький мессенджер. Запустите эту программу на обоих компьютерах. Если будете запускать на одном ПК два экземпляра, переименуйте в одном очереди.
Можно внести ясности в эту фразу?dadreamer писал(а):Если будете запускать на одном ПК два экземпляра, переименуйте в одном очереди.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
siiilverrr, то есть, в одну сторону работает, в другую нет? Может, вы не в текстовом формате с терминала отправляете? Поменяйте display style у индикатора на HEX. Или может терминатор не тот в конце строки?..
Можно запустить два экземпляра этого на одном компе для проверки алгоритма (впрочем, вчера я это уже проделал). Для этого надо либо установить заглушку на COM-порты (если есть два физических порта), либо установить виртуальную пару с помощью подходящего софта (com0com, например). Так вот, при запуске создаются две очереди. Если в обоих у очередей будут одинаковые имена, то их буферы окажутся общими и получится состояние гонки. Хотя, сейчас это не имеет значения вовсе.siiilverrr писал(а):Можно внести ясности в эту фразу?
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Именно так. В тератерме появляется все, что я записываю, на фронтальной панели в графе "Текст на отправку" после нажатия "Отправить" записанный текст исчезает, и казалось бы должен перейти в соседнюю графу "Принятый текст" но нет. Добавил 4 снимка работы кода под управлением "Hightlight Execution", там можно наблюдать очередное появление той самой ошибки.dadreamer писал(а):siiilverrr, то есть, в одну сторону работает, в другую нет? Может, вы не в текстовом формате с терминала отправляете? Поменяйте display style у индикатора на HEX. Или может терминатор не тот в конце строки?..Можно запустить два экземпляра этого на одном компе для проверки алгоритма (впрочем, вчера я это уже проделал). Для этого надо либо установить заглушку на COM-порты (если есть два физических порта), либо установить виртуальную пару с помощью подходящего софта (com0com, например). Так вот, при запуске создаются две очереди. Если в обоих у очередей будут одинаковые имена, то их буферы окажутся общими и получится состояние гонки. Хотя, сейчас это не имеет значения вовсе.siiilverrr писал(а):Можно внести ясности в эту фразу?
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Создание вирт портов это уже десятое дело, судя по всему, сейчас бы с приемом разобраться...dadreamer писал(а): Можно запустить два экземпляра этого на одном компе для проверки алгоритма (впрочем, вчера я это уже проделал). Для этого надо либо установить заглушку на COM-порты (если есть два физических порта), либо установить виртуальную пару с помощью подходящего софта (com0com, например). Так вот, при запуске создаются две очереди. Если в обоих у очередей будут одинаковые имена, то их буферы окажутся общими и получится состояние гонки. Хотя, сейчас это не имеет значения вовсе.
И по поводу изменения dysplay style, изменил на hex, ничего не помогло
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Не должен. Нажали "Отправить", текст ушёл через последовательный интерфейс на другой компьютер и должен появиться уже там в окне принятых данных. Поле отправки очищается автоматом. Обычная "аська" по RS-232. Или же я вас не понял и вам надо что-то другое.siiilverrr писал(а):на фронтальной панели в графе "Текст на отправку" после нажатия "Отправить" записанный текст исчезает, и казалось бы должен перейти в соседнюю графу "Принятый текст" но нет.
Это нормально, ошибка таймаута должна периодически возникать, т.к. чтение циклично, а данные в порту далеко не всегда имеются. Потому и очищается данная ошибка в соответствующем кадре. В самой ошибке ничего страшного нет совсем. Однако если она вас так пугает, то вам следует всё-таки разработать структуру посылки и тогда можно будет вычитывать фиксированную длину пакета, задав бесконечный таймаут.siiilverrr писал(а):Добавил 4 снимка работы кода под управлением "Hightlight Execution", там можно наблюдать очередное появление той самой ошибки.
Есть какие-то данные или совсем пусто? Напишите что-нибудь в терминале и нажмите Enter. Или добавьте вручную \n в конец строки. Не помню, добавляет ли TeraTerm терминатор по дефолту или надо залезть в опции (проверьте).siiilverrr писал(а):И по поводу изменения dysplay style, изменил на hex, ничего не помогло
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Не должен. Нажали "Отправить", текст ушёл через последовательный интерфейс на другой компьютер и должен появиться уже там в окне принятых данных. Поле отправки очищается автоматом. Обычная "аська" по RS-232. Или же я вас не понял и вам надо что-то другое.dadreamer писал(а):siiilverrr писал(а):на фронтальной панели в графе "Текст на отправку" после нажатия "Отправить" записанный текст исчезает, и казалось бы должен перейти в соседнюю графу "Принятый текст" но нет.
Таким образом, если я сейчас создам 2 вирт порта(раз у меня второй компьютер не запустит лабвью), затем открою 2 экземпляра VI и буду пересылать "самому себе" команды, то во втором экземпляре текст должен отобразиться в графе "Принятый текст", я вас правильно понимаю?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Правильно. Но через любой другой терминал тоже должно работать. В этом и суть. У меня просто не было возможности проверить на двух компах.siiilverrr писал(а):Таким образом, если я сейчас создам 2 вирт порта(раз у меня второй компьютер не запустит лабвью), затем открою 2 экземпляра VI и буду пересылать "самому себе" команды, то во втором экземпляре текст должен отобразиться в графе "Принятый текст", я вас правильно понимаю?
-
- beginner
- Сообщения: 10
- Зарегистрирован: 05 май 2017, 11:23
- Версия LabVIEW: 15
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
Тогда я попробую на одном пк реализовать и отпишусь о результатахdadreamer писал(а):Правильно. Но через любой другой терминал тоже должно работать. В этом и суть. У меня просто не было возможности проверить на двух компах.siiilverrr писал(а):Таким образом, если я сейчас создам 2 вирт порта(раз у меня второй компьютер не запустит лабвью), затем открою 2 экземпляра VI и буду пересылать "самому себе" команды, то во втором экземпляре текст должен отобразиться в графе "Принятый текст", я вас правильно понимаю?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Запись в COM и чтение из него в одном VI
siiilverrr, может, есть смысл проверить в другом терминале. Также надо бы проверить наличие физической связи - откройте на каждом компе обычный терминал и отправьте любой текст. Если с обоих сторон данные приходят/уходят, то можно с дальше разбираться. Если же нет, то какие-то траблы с адаптером.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 548 Просмотры
-
Последнее сообщение Юрий
-
- 0 Ответы
- 498 Просмотры
-
Последнее сообщение Juri
-
- 12 Ответы
- 593 Просмотры
-
Последнее сообщение Sergey Puzanov