Ошибка при записи через COM port
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Ошибка при записи через COM port
Приветствую!
При работе vi начала выскакивать ошибка в момент записи значения регистра. Когда идет просто считывание значений регистров - все отлично, работает неделями. Однако стоит воспользоваться кнопками ПУСК и СТОП и через несколько (разное количество) нажатий vi напрочь зависает вместе с LabVIEW. Перезапуск возможен только после извлечения USB шнура из гнезда (использую виртуальный ком порт).
При этом не важно какой библиотекой пользуюсь или организую обмен без их использования - в результате рано или поздно выскакивает ошибка. Есть родное приложение и оно работает без таких проблем.
Ищу ответ уже продолжительное время, но пока результатов нет. Есть догадки, что проблема в настройке (или инициализации) порта. Вот так выглядит обмен при использовании родного приложения. Вся разница в наличии верхней строчки: при использовании 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 начала выскакивать ошибка в момент записи значения регистра. Когда идет просто считывание значений регистров - все отлично, работает неделями. Однако стоит воспользоваться кнопками ПУСК и СТОП и через несколько (разное количество) нажатий vi напрочь зависает вместе с LabVIEW. Перезапуск возможен только после извлечения USB шнура из гнезда (использую виртуальный ком порт).
При этом не важно какой библиотекой пользуюсь или организую обмен без их использования - в результате рано или поздно выскакивает ошибка. Есть родное приложение и оно работает без таких проблем.
Ищу ответ уже продолжительное время, но пока результатов нет. Есть догадки, что проблема в настройке (или инициализации) порта. Вот так выглядит обмен при использовании родного приложения. Вся разница в наличии верхней строчки: при использовании 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 КБ) 227 скачиваний
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Ошибка при записи через COM port
Попробуйте VISA Close With Abort ( http://www.labviewportal.org/viewtopic. ... 911#p51911 ) после завершения работы программы. Также посмотрите в мониторе (Open VISA Session Monitor), не остаётся ли открытых сессий.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Ошибка при записи через COM port
В протоколе MODBUS over Seril Line на уровне транзакций нет никакой разницы при чтении или записи данных в прибор (slave device).
Поэтому раз чтение идет без ошибок, то наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.
Применение функции VISA Flash Buffer Rx в начале каждой транзакции для протокола MODBUS нормальное решение для очистки входного буфера.
Используется ли она в библиотеке NI Modbus Lib из сообщения не видно). А проверить на BD - нет возможности. Может быть у кого-нибудь есть таблетка?
Поэтому раз чтение идет без ошибок, то наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.
Применение функции VISA Flash Buffer Rx в начале каждой транзакции для протокола MODBUS нормальное решение для очистки входного буфера.
Используется ли она в библиотеке NI Modbus Lib из сообщения не видно). А проверить на BD - нет возможности. Может быть у кого-нибудь есть таблетка?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Ошибка при записи через COM port
Какая библиотека имеется в виду? Эта?
Последний раз редактировалось dadreamer 08 июл 2017, 15:35, всего редактировалось 1 раз.
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Ошибка при записи через COM port
Эта настройка сохранится при изготовлении .exe и installer?dadreamer писал(а):Попробуйте VISA Close With Abort ( http://www.labviewportal.org/viewtopic. ... 911#p51911 ) после завершения работы программы.
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Ошибка при записи через COM port
Но ведь заводская программа работает без проблемBlackman писал(а): наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Ошибка при записи через COM port
Да уж, было бы неплохо её заиметьdadreamer писал(а):Нарушаете, товарищ! Пункт 6.Blackman писал(а):Может быть у кого-нибудь есть таблетка?
Какая библиотека имеется в виду? Эта?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Ошибка при записи через COM port
Этот вызывает viTerminate из visa32.dll. Вполне себе самодостаточный . Будет работать хоть в IDE, хоть в RTE.AlexOskar писал(а):Эта настройка сохранится при изготовлении .exe и installer?
Написано, что нужно поставить пакет LabVIEW Datalogging and Supervisory Control (DSC) и появится палитра с этими инструментами. Проверять, честно говоря, лень.AlexOskar писал(а):Да уж, было бы неплохо её заиметь
Похоже, вот эта имеется в виду. Если так, то пароль к сабВИ - bestbus.
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Ошибка при записи через COM port
По иконкам я сначала подумал, что речь идет о GBus библиотеке. А так, это стандартная Modbus lib. Через нее тоже ошибка выскакивает - см.первый постdadreamer писал(а):Похоже, вот эта имеется в виду. Если так, то пароль к сабВИ - bestbus.
За пароль - ОГРОМНОЕ спасибо. Давно искал
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Ошибка при записи через COM port
dadreamer таблетка
Функция VISA Flash Buffer перед транзакциями в этой либе не используется.
Библиотека устанавливаемая DSC Module, также устанавливает LabVIEW RT Module. Одно но, все это доступно начиная с версии LabVIEW 2014.
AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.
Функция VISA Flash Buffer перед транзакциями в этой либе не используется.
Библиотека устанавливаемая DSC Module, также устанавливает LabVIEW RT Module. Одно но, все это доступно начиная с версии LabVIEW 2014.
AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.
-
- user
- Сообщения: 95
- Зарегистрирован: 05 июл 2016, 21:02
- Версия LabVIEW: 12
- Контактная информация:
Re: Ошибка при записи через COM port
Да тут и применить неправильно не получится!Blackman писал(а):AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.
Но по теме: что означает верхняя строчка при обмене родной программы (см.картинку)?
И еще, есть ли смысл пробовать альтернативы VISA, или они работают хуже?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Ошибка при записи через COM port
IRP_MJ_CREATE - IRP-запрос к драйверу ядра на открытие устройства. В юзерлэнде соответствует CreateFile, опции WriteThrough и NoBuffer соответствуют FILE_FLAG_WRITE_THROUGH и FILE_FLAG_NO_BUFFERING, что означает отказ от использования промежуточного и системного кэша при операциях ввода-вывода. Насколько я знаю, имеет смысл только при работе с файлами или диском. Тем более, что управлять этими флагами напрямую вы не можете, т.к. VISA вызывает CreateFile при инициализации порта.AlexOskar писал(а):Но по теме: что означает верхняя строчка при обмене родной программы (см.картинку)?
В данном случае смысла нет, т.к. вам придётся тогда переписать все инструменты для работы с Modbus. Вряд ли вы готовы к такому упражнению.AlexOskar писал(а):И еще, есть ли смысл пробовать альтернативы VISA, или они работают хуже?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 5 Ответы
- 1576 Просмотры
-
Последнее сообщение Artem.spb
-
- 23 Ответы
- 4629 Просмотры
-
Последнее сообщение maxim_MA
-
- 6 Ответы
- 1648 Просмотры
-
Последнее сообщение ladik
-
- 38 Ответы
- 13309 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 2 Ответы
- 272 Просмотры
-
Последнее сообщение Optoelectronics