Страница 1 из 1

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

Добавлено: 07 июл 2017, 22:09
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)

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

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

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

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

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

Добавлено: 08 июл 2017, 13:09
dadreamer
Какая библиотека имеется в виду? Эта?

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

Добавлено: 08 июл 2017, 13:58
AlexOskar
dadreamer писал(а):Попробуйте VISA Close With Abort ( http://www.labviewportal.org/viewtopic. ... 911#p51911 ) после завершения работы программы.
Эта настройка сохранится при изготовлении .exe и installer?

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

Добавлено: 08 июл 2017, 14:00
AlexOskar
Blackman писал(а): наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.
Но ведь заводская программа работает без проблем

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

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

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

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

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

Похоже, вот эта имеется в виду. Если так, то пароль к сабВИ - bestbus.

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

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

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

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

Добавлено: 08 июл 2017, 18:39
Blackman
dadreamer таблетка :super:
Функция VISA Flash Buffer перед транзакциями в этой либе не используется.
Библиотека устанавливаемая DSC Module, также устанавливает LabVIEW RT Module. Одно но, все это доступно начиная с версии LabVIEW 2014.
AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.

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

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

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

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