Ошибка при записи через COM port

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

Ошибка при записи через COM port

Сообщение AlexOskar »

Приветствую!
При работе vi начала выскакивать ошибка в момент записи значения регистра. Когда идет просто считывание значений регистров - все отлично, работает неделями. Однако стоит воспользоваться кнопками ПУСК и СТОП и через несколько (разное количество) нажатий vi напрочь зависает вместе с LabVIEW. Перезапуск возможен только после извлечения USB шнура из гнезда (использую виртуальный ком порт).
При этом не важно какой библиотекой пользуюсь или организую обмен без их использования - в результате рано или поздно выскакивает ошибка. Есть родное приложение и оно работает без таких проблем.
Ищу ответ уже продолжительное время, но пока результатов нет. Есть догадки, что проблема в настройке (или инициализации) порта. Вот так выглядит обмен при использовании родного приложения.
log1.jpg
Вся разница в наличии верхней строчки: при использовании vi её либо нет, либо там красуется только Open. Из разных форумов понял, что, вероятно, проблема возникает из-за операции fiush_buffer, которую LabVIEW делает после каждого чтения/записи. Насколько верны мои догадки? И есть ли пути решения?
Код возникающей ошибки:
-1073807298 Visa flush I/O buffer in MB Master.lvlib: MB_ADU_RTU.lvclass:TX ADU.vi:5300001 (при использовании библиотеки Плазмоник)
-1073807298 Visa Write in Serial Master.lvclass Protocol Write.vi:6190001...... (при использовании Modbus Lib)
Вложения
Через библиотеку Модбас.vi
(29.11 КБ) 224 скачивания
Аватара пользователя
dadreamer

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

Re: Ошибка при записи через COM port

Сообщение dadreamer »

Попробуйте VISA Close With Abort ( http://www.labviewportal.org/viewtopic. ... 911#p51911 ) после завершения работы программы. Также посмотрите в мониторе (Open VISA Session Monitor), не остаётся ли открытых сессий.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Ошибка при записи через COM port

Сообщение Blackman »

В протоколе MODBUS over Seril Line на уровне транзакций нет никакой разницы при чтении или записи данных в прибор (slave device).
Поэтому раз чтение идет без ошибок, то наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.
Применение функции VISA Flash Buffer Rx в начале каждой транзакции для протокола MODBUS нормальное решение для очистки входного буфера.
Используется ли она в библиотеке NI Modbus Lib из сообщения не видно). А проверить на BD - нет возможности. Может быть у кого-нибудь есть таблетка? :D
Аватара пользователя
dadreamer

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

Re: Ошибка при записи через COM port

Сообщение dadreamer »

Какая библиотека имеется в виду? Эта?
Последний раз редактировалось dadreamer 08 июл 2017, 15:35, всего редактировалось 1 раз.
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

Re: Ошибка при записи через COM port

Сообщение AlexOskar »

dadreamer писал(а):Попробуйте VISA Close With Abort ( http://www.labviewportal.org/viewtopic. ... 911#p51911 ) после завершения работы программы.
Эта настройка сохранится при изготовлении .exe и installer?
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

Re: Ошибка при записи через COM port

Сообщение AlexOskar »

Blackman писал(а): наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.
Но ведь заводская программа работает без проблем
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

Re: Ошибка при записи через COM port

Сообщение AlexOskar »

dadreamer писал(а):
Blackman писал(а):Может быть у кого-нибудь есть таблетка? :D
Нарушаете, товарищ! :wink: Пункт 6.

Какая библиотека имеется в виду? Эта?
Да уж, было бы неплохо её заиметь
Аватара пользователя
dadreamer

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

Re: Ошибка при записи через COM port

Сообщение dadreamer »

AlexOskar писал(а):Эта настройка сохранится при изготовлении .exe и installer?
Этот :vi: вызывает viTerminate из visa32.dll. Вполне себе самодостаточный :vi: . Будет работать хоть в IDE, хоть в RTE.
AlexOskar писал(а):Да уж, было бы неплохо её заиметь
Написано, что нужно поставить пакет LabVIEW Datalogging and Supervisory Control (DSC) и появится палитра с этими инструментами. Проверять, честно говоря, лень.

Похоже, вот эта имеется в виду. Если так, то пароль к сабВИ - bestbus.
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

Re: Ошибка при записи через COM port

Сообщение AlexOskar »

dadreamer писал(а):Похоже, вот эта имеется в виду. Если так, то пароль к сабВИ - bestbus.
По иконкам я сначала подумал, что речь идет о GBus библиотеке. А так, это стандартная Modbus lib. Через нее тоже ошибка выскакивает - см.первый пост

За пароль - ОГРОМНОЕ спасибо. Давно искал
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Ошибка при записи через COM port

Сообщение Blackman »

dadreamer таблетка :super:
Функция VISA Flash Buffer перед транзакциями в этой либе не используется.
Библиотека устанавливаемая DSC Module, также устанавливает LabVIEW RT Module. Одно но, все это доступно начиная с версии LabVIEW 2014.
AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.
AlexOskar
user
user
Сообщения: 95
Зарегистрирован: 05 июл 2016, 21:02
Версия LabVIEW: 12
Контактная информация:

Re: Ошибка при записи через COM port

Сообщение AlexOskar »

Blackman писал(а):AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.
Да тут и применить неправильно не получится!
Но по теме: что означает верхняя строчка при обмене родной программы (см.картинку)?
И еще, есть ли смысл пробовать альтернативы VISA, или они работают хуже?
Аватара пользователя
dadreamer

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

Re: Ошибка при записи через COM port

Сообщение dadreamer »

AlexOskar писал(а):Но по теме: что означает верхняя строчка при обмене родной программы (см.картинку)?
IRP_MJ_CREATE - IRP-запрос к драйверу ядра на открытие устройства. В юзерлэнде соответствует CreateFile, опции WriteThrough и NoBuffer соответствуют FILE_FLAG_WRITE_THROUGH и FILE_FLAG_NO_BUFFERING, что означает отказ от использования промежуточного и системного кэша при операциях ввода-вывода. Насколько я знаю, имеет смысл только при работе с файлами или диском. Тем более, что управлять этими флагами напрямую вы не можете, т.к. VISA вызывает CreateFile при инициализации порта.
AlexOskar писал(а):И еще, есть ли смысл пробовать альтернативы VISA, или они работают хуже?
В данном случае смысла нет, т.к. вам придётся тогда переписать все инструменты для работы с Modbus. Вряд ли вы готовы к такому упражнению.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»