Запись в COM и чтение из него в одном VI

Простейшие вопросы в области инженерной разработки
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

Всем привет, я новичок в этих делах, поэтому не судите строго)
Написал прибор, в котором происходит запись и чтение ком порта, и во время чтения происходит ошибка -1073807339 котоорая говорит о том, что вышло время таймаута(VISA: (HEX 0xBFFF0015) Timeout expired before operation completed). В чем может быть проблема??
VI прикрепил
Вложения
Main VI.vi
(32.53 КБ) 179 скачиваний
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение Kosist »

siiilverrr писал(а):Всем привет, я новичок в этих делах, поэтому не судите строго)
Написал прибор, в котором происходит запись и чтение ком порта, и во время чтения происходит ошибка -1073807339 котоорая говорит о том, что вышло время таймаута(VISA: (HEX 0xBFFF0015) Timeout expired before operation completed). В чем может быть проблема??
VI прикрепил
Эта ошибка происходит при инициализации? Если да, то правильный ли указан ком-порт?
Если при чтении, то правильные ли настройки ком-порта, и именно терминирующего характера (или вообще его наличия)? Может быть проблема и с флоу настройками, но я такое встречал редко. Также, обратите внимание на бауд рейт - правильный ли он?
Рекомендую вначале проверить работу с прибором при помощи какого-те терминала, например RealTerm. Если там все работает, то переносите настройки в код-модуль в :labview: , пробуйте - и смотрите на код.
Мы делили апельсин - много наших полегло...
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

Kosist писал(а):
siiilverrr писал(а):Всем привет, я новичок в этих делах, поэтому не судите строго)
Написал прибор, в котором происходит запись и чтение ком порта, и во время чтения происходит ошибка -1073807339 котоорая говорит о том, что вышло время таймаута(VISA: (HEX 0xBFFF0015) Timeout expired before operation completed). В чем может быть проблема??
VI прикрепил
Эта ошибка происходит при инициализации? Если да, то правильный ли указан ком-порт?
Если при чтении, то правильные ли настройки ком-порта, и именно терминирующего характера (или вообще его наличия)? Может быть проблема и с флоу настройками, но я такое встречал редко. Также, обратите внимание на бауд рейт - правильный ли он?
Рекомендую вначале проверить работу с прибором при помощи какого-те терминала, например RealTerm. Если там все работает, то переносите настройки в код-модуль в :labview: , пробуйте - и смотрите на код.
Благодарю за ответ! Ошибка появляется после Visa read и в буфер не передается то, что записано в терминале(использую Teraterm). Вопрос состоит в том, что при том же соединении, но в VI, который исполняет только лишь чтение ком порта, все работает прекрасно, но как только я переношу этот кейс в VI с записью в ком порт и соединяю операторы, в которых находятся visa write и visa read, при чтении появляется ошибка, которую я обозначил выше. И теперь самое интересное. Я решил проверить работу на примере, который предлагает лабвью, VI, в котором происходит и запись и чтение, так вот в этом примере появляется та же самая ошибка! Я уже начинаю грешить на аппаратуру, ибо использую кучу переходников, так как работаю на двух ноутбуках без физического RS-232.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение dadreamer »

siiilverrr, давайте начнём с самого начала, потому что слишком много информации. Судя по тому, что вы написали, вы пытаетесь организовать простую связь а ля "нуль-модемный кабель" между двумя компами, только вместо такого кабеля у вас пара виртуальных портов, соединённых через USB-мосты. Поправьте, если не так. Поэтому вы вправе сами определять протокол и настройки вашего интерфейса. Итак.
1) Какие настройки обоих портов вы выбрали? Крайне желательно, чтобы они совпадали на обоих концах. Напишите их все сюда.
2) Какую структуру протокола ваших сообщений вы задаёте? Будете ли вы использовать терминатор? (для простого текстового обмена лучше его включить, так как с ним чтение пакета проще)
3) Какие данные будете пересылать (текст/бинарные)?
Начнём хотя бы с этого.
Я решил проверить работу на примере, который предлагает лабвью, VI, в котором происходит и запись и чтение, так вот в этом примере появляется та же самая ошибка!
Скорее всего, ошибка из-за того, что вы включили в настройках порта терминатор, а по факту его не отсылаете. VISA Read ожидает его прихода и, не дождавшись, выдаёт таймаут. Вряд ли дело в железе (не исключено, конечно, но маловероятно). Я бы вам посоветовал сперва разработать базовый формат ваших посылок, ибо без него вы постоянно будете наступать на какие-то грабли. Посмотрите, например, эти рекомендации.
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

dadreamer писал(а):siiilverrr, давайте начнём с самого начала, потому что слишком много информации. Судя по тому, что вы написали, вы пытаетесь организовать простую связь а ля "нуль-модемный кабель" между двумя компами, только вместо такого кабеля у вас пара виртуальных портов, соединённых через USB-мосты. Поправьте, если не так. Поэтому вы вправе сами определять протокол и настройки вашего интерфейса. Итак.
1) Какие настройки обоих портов вы выбрали? Крайне желательно, чтобы они совпадали на обоих концах. Напишите их все сюда.
2) Какую структуру протокола ваших сообщений вы задаёте? Будете ли вы использовать терминатор? (для простого текстового обмена лучше его включить, так как с ним чтение пакета проще)
3) Какие данные будете пересылать (текст/бинарные)?
Начнём хотя бы с этого.
Я решил проверить работу на примере, который предлагает лабвью, VI, в котором происходит и запись и чтение, так вот в этом примере появляется та же самая ошибка!
Скорее всего, ошибка из-за того, что вы включили в настройках порта терминатор, а по факту его не отсылаете. VISA Read ожидает его прихода и, не дождавшись, выдаёт таймаут. Вряд ли дело в железе (не исключено, конечно, но маловероятно). Я бы вам посоветовал сперва разработать базовый формат ваших посылок, ибо без него вы постоянно будете наступать на какие-то грабли. Посмотрите, например, эти рекомендации.
Именно так, обмен происходит через 2 виртуальных порта.
1) Все по стандарту: baud rate 9600, data bits 8, parity none, stop bits 1, flow control none. С обеих сторон сопадают.
2) Терминатор использую, при появлении \n в конце строки прием завершается.
3) Передавать по тз нужно шестнадцатиричное число, но я пока балуюсь со строковыми переменными

Когда я только начал разбираться в чтением через визу, не мог никак прочитать буфер, а потом ввел терминатор на окончание приема по появлению \n и все заработало.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение dadreamer »

siiilverrr, попробуйте вот такой простенький мессенджер. Запустите эту программу на обоих компьютерах. Если будете запускать на одном ПК два экземпляра, переименуйте в одном очереди.
Вложения
COM_Port_Messenger.vi
lv2015
(18.92 КБ) 197 скачиваний
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

dadreamer писал(а):siiilverrr, попробуйте вот такой простенький мессенджер. Запустите эту программу на обоих компьютерах. Если будете запускать на одном ПК два экземпляра, переименуйте в одном очереди.
На двух пк запустить возможности нет. Как и раньше подключился к Teraterm'у на втором пк, на первом, где лабвью имеется, с вашего VI отправил строку, все получилось, однако в принятом тексте опять же ничего не наблюдается. Программа не дропается, потому что вы очищаете ошибку по таймауту, это я вижу, но в целом никаких изменений я не наблюдаю :dntknw:
dadreamer писал(а):Если будете запускать на одном ПК два экземпляра, переименуйте в одном очереди.
Можно внести ясности в эту фразу?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение dadreamer »

siiilverrr, то есть, в одну сторону работает, в другую нет? :shok: Может, вы не в текстовом формате с терминала отправляете? Поменяйте display style у индикатора на HEX. Или может терминатор не тот в конце строки?..
siiilverrr писал(а):Можно внести ясности в эту фразу?
Можно запустить два экземпляра этого :vi: на одном компе для проверки алгоритма (впрочем, вчера я это уже проделал). Для этого надо либо установить заглушку на COM-порты (если есть два физических порта), либо установить виртуальную пару с помощью подходящего софта (com0com, например). Так вот, при запуске :vi: создаются две очереди. Если в обоих :vi: у очередей будут одинаковые имена, то их буферы окажутся общими и получится состояние гонки. Хотя, сейчас это не имеет значения вовсе.
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

dadreamer писал(а):siiilverrr, то есть, в одну сторону работает, в другую нет? :shok: Может, вы не в текстовом формате с терминала отправляете? Поменяйте display style у индикатора на HEX. Или может терминатор не тот в конце строки?..
siiilverrr писал(а):Можно внести ясности в эту фразу?
Можно запустить два экземпляра этого :vi: на одном компе для проверки алгоритма (впрочем, вчера я это уже проделал). Для этого надо либо установить заглушку на COM-порты (если есть два физических порта), либо установить виртуальную пару с помощью подходящего софта (com0com, например). Так вот, при запуске :vi: создаются две очереди. Если в обоих :vi: у очередей будут одинаковые имена, то их буферы окажутся общими и получится состояние гонки. Хотя, сейчас это не имеет значения вовсе.
Именно так. В тератерме появляется все, что я записываю, на фронтальной панели в графе "Текст на отправку" после нажатия "Отправить" записанный текст исчезает, и казалось бы должен перейти в соседнюю графу "Принятый текст" но нет. Добавил 4 снимка работы кода под управлением "Hightlight Execution", там можно наблюдать очередное появление той самой ошибки.
Вложения
Снимок1.PNG
Снимок2.PNG
Снимок3.PNG
Снимок4.PNG
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

dadreamer писал(а): Можно запустить два экземпляра этого :vi: на одном компе для проверки алгоритма (впрочем, вчера я это уже проделал). Для этого надо либо установить заглушку на COM-порты (если есть два физических порта), либо установить виртуальную пару с помощью подходящего софта (com0com, например). Так вот, при запуске :vi: создаются две очереди. Если в обоих :vi: у очередей будут одинаковые имена, то их буферы окажутся общими и получится состояние гонки. Хотя, сейчас это не имеет значения вовсе.
Создание вирт портов это уже десятое дело, судя по всему, сейчас бы с приемом разобраться...
И по поводу изменения dysplay style, изменил на hex, ничего не помогло :think:
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение dadreamer »

siiilverrr писал(а):на фронтальной панели в графе "Текст на отправку" после нажатия "Отправить" записанный текст исчезает, и казалось бы должен перейти в соседнюю графу "Принятый текст" но нет.
Не должен. Нажали "Отправить", текст ушёл через последовательный интерфейс на другой компьютер и должен появиться уже там в окне принятых данных. Поле отправки очищается автоматом. Обычная "аська" по RS-232. Или же я вас не понял и вам надо что-то другое.
siiilverrr писал(а):Добавил 4 снимка работы кода под управлением "Hightlight Execution", там можно наблюдать очередное появление той самой ошибки.
Это нормально, ошибка таймаута должна периодически возникать, т.к. чтение циклично, а данные в порту далеко не всегда имеются. Потому и очищается данная ошибка в соответствующем кадре. В самой ошибке ничего страшного нет совсем. Однако если она вас так пугает, то вам следует всё-таки разработать структуру посылки и тогда можно будет вычитывать фиксированную длину пакета, задав бесконечный таймаут.
siiilverrr писал(а):И по поводу изменения dysplay style, изменил на hex, ничего не помогло :think:
Есть какие-то данные или совсем пусто? Напишите что-нибудь в терминале и нажмите Enter. Или добавьте вручную \n в конец строки. Не помню, добавляет ли TeraTerm терминатор по дефолту или надо залезть в опции (проверьте).
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

dadreamer писал(а):
siiilverrr писал(а):на фронтальной панели в графе "Текст на отправку" после нажатия "Отправить" записанный текст исчезает, и казалось бы должен перейти в соседнюю графу "Принятый текст" но нет.
Не должен. Нажали "Отправить", текст ушёл через последовательный интерфейс на другой компьютер и должен появиться уже там в окне принятых данных. Поле отправки очищается автоматом. Обычная "аська" по RS-232. Или же я вас не понял и вам надо что-то другое.

Таким образом, если я сейчас создам 2 вирт порта(раз у меня второй компьютер не запустит лабвью), затем открою 2 экземпляра VI и буду пересылать "самому себе" команды, то во втором экземпляре текст должен отобразиться в графе "Принятый текст", я вас правильно понимаю?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение dadreamer »

siiilverrr писал(а):Таким образом, если я сейчас создам 2 вирт порта(раз у меня второй компьютер не запустит лабвью), затем открою 2 экземпляра VI и буду пересылать "самому себе" команды, то во втором экземпляре текст должен отобразиться в графе "Принятый текст", я вас правильно понимаю?
Правильно. Но через любой другой терминал тоже должно работать. В этом и суть. У меня просто не было возможности проверить на двух компах.
siiilverrr
beginner
beginner
Сообщения: 10
Зарегистрирован: 05 май 2017, 11:23
Версия LabVIEW: 15
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение siiilverrr »

dadreamer писал(а):
siiilverrr писал(а):Таким образом, если я сейчас создам 2 вирт порта(раз у меня второй компьютер не запустит лабвью), затем открою 2 экземпляра VI и буду пересылать "самому себе" команды, то во втором экземпляре текст должен отобразиться в графе "Принятый текст", я вас правильно понимаю?
Правильно. Но через любой другой терминал тоже должно работать. В этом и суть. У меня просто не было возможности проверить на двух компах.
Тогда я попробую на одном пк реализовать и отпишусь о результатах
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Запись в COM и чтение из него в одном VI

Сообщение dadreamer »

siiilverrr, может, есть смысл проверить в другом терминале. Также надо бы проверить наличие физической связи - откройте на каждом компе обычный терминал и отправьте любой текст. Если с обоих сторон данные приходят/уходят, то можно с :labview: дальше разбираться. Если же нет, то какие-то траблы с адаптером.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»