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

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы

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

Postby AlexOskar on 07 Jul 2017, 22:09

Приветствую!
При работе 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)
Attachments
Через библиотеку Модбас.vi
(29.11 KiB) Downloaded 73 times
AlexOskar
user
user
 
Posts: 93
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

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

Postby dadreamer on 08 Jul 2017, 09:47

Попробуйте VISA Close With Abort ( viewtopic.php?p=51911#p51911 ) после завершения работы программы. Также посмотрите в мониторе (Open VISA Session Monitor), не остаётся ли открытых сессий.
User avatar
dadreamer
professor
professor
 
Posts: 3058
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet

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

Postby Blackman on 08 Jul 2017, 12:41

В протоколе MODBUS over Seril Line на уровне транзакций нет никакой разницы при чтении или записи данных в прибор (slave device).
Поэтому раз чтение идет без ошибок, то наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.
Применение функции VISA Flash Buffer Rx в начале каждой транзакции для протокола MODBUS нормальное решение для очистки входного буфера.
Используется ли она в библиотеке NI Modbus Lib из сообщения не видно). А проверить на BD - нет возможности. Может быть у кого-нибудь есть таблетка? :D
Blackman
leader
leader
 
Posts: 719
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 187

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

Postby dadreamer on 08 Jul 2017, 13:09

Какая библиотека имеется в виду? Эта?
Last edited by dadreamer on 08 Jul 2017, 15:35, edited 1 time in total.
User avatar
dadreamer
professor
professor
 
Posts: 3058
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet

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

Postby AlexOskar on 08 Jul 2017, 13:58

dadreamer wrote:Попробуйте VISA Close With Abort ( viewtopic.php?p=51911#p51911 ) после завершения работы программы.

Эта настройка сохранится при изготовлении .exe и installer?
AlexOskar
user
user
 
Posts: 93
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

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

Postby AlexOskar on 08 Jul 2017, 14:00

Blackman wrote: наиболее вероятной причиной появления ошибки ввода-вывода после записи в регистр 220 значения 0 или 2 является реакция прибора на эту команду, которая приводит драйвер кабеля в состояние генерации ошибки IO.

Но ведь заводская программа работает без проблем
AlexOskar
user
user
 
Posts: 93
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

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

Postby AlexOskar on 08 Jul 2017, 14:01

dadreamer wrote:
Blackman wrote:Может быть у кого-нибудь есть таблетка? :D

Нарушаете, товарищ! :wink: Пункт 6.

Какая библиотека имеется в виду? Эта?

Да уж, было бы неплохо её заиметь
AlexOskar
user
user
 
Posts: 93
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

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

Postby dadreamer on 08 Jul 2017, 15:16

AlexOskar wrote:Эта настройка сохранится при изготовлении .exe и installer?

Этот :vi: вызывает viTerminate из visa32.dll. Вполне себе самодостаточный :vi: . Будет работать хоть в IDE, хоть в RTE.
AlexOskar wrote:Да уж, было бы неплохо её заиметь

Написано, что нужно поставить пакет LabVIEW Datalogging and Supervisory Control (DSC) и появится палитра с этими инструментами. Проверять, честно говоря, лень.

Похоже, вот эта имеется в виду. Если так, то пароль к сабВИ - bestbus.
User avatar
dadreamer
professor
professor
 
Posts: 3058
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet

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

Postby AlexOskar on 08 Jul 2017, 16:26

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

По иконкам я сначала подумал, что речь идет о GBus библиотеке. А так, это стандартная Modbus lib. Через нее тоже ошибка выскакивает - см.первый пост

За пароль - ОГРОМНОЕ спасибо. Давно искал
AlexOskar
user
user
 
Posts: 93
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

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

Postby Blackman on 08 Jul 2017, 18:39

dadreamer таблетка :super:
Функция VISA Flash Buffer перед транзакциями в этой либе не используется.
Библиотека устанавливаемая DSC Module, также устанавливает LabVIEW RT Module. Одно но, все это доступно начиная с версии LabVIEW 2014.
AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.
Blackman
leader
leader
 
Posts: 719
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 187

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

Postby AlexOskar on 08 Jul 2017, 22:00

Blackman wrote:AlexOskar, работа какого -то функционала прибора в другом приложении говорит только об одном, что этот функционал может работать и в Вашем приложении, при условии его правильного применения.

Да тут и применить неправильно не получится!
Но по теме: что означает верхняя строчка при обмене родной программы (см.картинку)?
И еще, есть ли смысл пробовать альтернативы VISA, или они работают хуже?
AlexOskar
user
user
 
Posts: 93
Joined: 05 Jul 2016, 21:02
LabVIEW Version: 12
Karma: 6

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

Postby dadreamer on 10 Jul 2017, 13:49

AlexOskar wrote:Но по теме: что означает верхняя строчка при обмене родной программы (см.картинку)?

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

В данном случае смысла нет, т.к. вам придётся тогда переписать все инструменты для работы с Modbus. Вряд ли вы готовы к такому упражнению.
User avatar
dadreamer
professor
professor
 
Posts: 3058
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet


Return to Коммуникация с приборами

Who is online

Users browsing this forum: No registered users and 2 guests

cron