Зависание порта, что приводит к сбою работы всего приложения

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Зависание порта, что приводит к сбою работы всего приложения

Сообщение AlexanderKonoval »

Уважаемые коллеги, подскажите, пожалуйста!

К компьютеру подключено устройство посредством переходника FTDI. Коммуникация с устройством проходит при помощи C# библиотеки. Устройство работает не постоянно, а запускается только по необходимости.
В :vi: отвечающей за работу устройства идёт сначала инициализация порта, затем отправка команд запуска устройства, затем циклический опрос состояния и выведение этого самого состояния на экран.
Иногда происходит следующее: порт перестаёт реагировать, устройство не запускается, для работы с ним приходится перезапускать :labview: . Весь програмно-аппаратный комплекс должен работать 24/7, то есть подобные случаи не допустимы.
В чём может быть проблема, где может возникать сбой? Я пока что грешу на сбои внутри C# dll-ки, что подвисает она. Но не знаю как это можно проверить.
Также есть следующий фактор: сколько бы я не запускал :vi: отвечающую за работу устройства - ни одного сбоя. Сбои происходят только когда :vi: работает в составе приложения. В приложение оно вписывается посредством Invoke и Property Node, так как мне не надо ни выведение фронт-панели, ничего, нужно только получать результаты цикличного опроса в :vi: более высокого уровня. Может, здесь какая беда?

Заранее спасибо за уделённое время!
колдооооовствооооо! (С)
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение Andrew Lunev »

Боюсь без доступа к оборудованию и коду вам никто не поможет. Вариантов может быть очень много и любое устройство в цепочке может привести к подобному сбою.

Меня очень настораживает, что система должна работать в режиме 24/7, а у вас используется обычная персоналка с Windows видимо и еще переходником. Надежность всей системы определяется надежностью самого ненадежного компонента, а у вас все ненадежные.
Подобную систему надо строить на промышленном контроллере с Watchdog и на операционке реального времени. Конечно же с аппаратным COM-портом. Например на cRIO.
Аватара пользователя
dadreamer

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

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение dadreamer »

AlexanderKonoval писал(а):Я пока что грешу на сбои внутри C# dll-ки, что подвисает она. Но не знаю как это можно проверить.
Оставьте ваш :vi: самого нижнего уровня в работе на продолжительное количество времени (часов 5) и посмотрите, будет ли сбой.
AlexanderKonoval писал(а):В приложение оно вписывается посредством Invoke и Property Node, так как мне не надо ни выведение фронт-панели, ничего, нужно только получать результаты цикличного опроса в :vi: более высокого уровня.
А зачем так сложно, нельзя просто вставить :vi: на блочную диаграмму, предварительно задав ему в параметрах все свойства (отображение панели, реентерантность и т.п.)? Или он у вас должен выполняться асинхронно, без возврата результатов? Если так, то возможно наложение двух потоков друг на друга.
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение AlexanderKonoval »

Andrew Lunev, система, по сути, является вендинговым аппаратом, чем-то сродни терминалу по оплате услуг и так далее. Это не промышленное оборудование. 24/7 - оно должно обслуживать клиентов, если будет зависание - перезагрузили за 1 минуту и поехали дальше. Имеется ввиду, что когда клиент захочет внести денюжку в купюроприёмник - он должен включится. А проблема возникает именно с ним.
К сожалению, код показать не могу, ибо комм. тайна((
колдооооовствооооо! (С)
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение AlexanderKonoval »

dadreamer писал(а): А зачем так сложно, нельзя просто вставить :vi: на блочную диаграмму, предварительно задав ему в параметрах все свойства (отображение панели, реентерантность и т.п.)? Или он у вас должен выполняться асинхронно, без возврата результатов? Если так, то возможно наложение двух потоков друг на друга.
Нобходимо, чтобы :vi: работали одновременно. В обеих :vi: есть While Loop. Я не шибко силён в :labview: ещё, при попытке просто вставить на диаграмму - ничего не работало, я так понимаю, что как только запускалось subVI, :vi: верхнего уровня сразу приостанавливался.
Грубо говоря, я получаю с :vi: нижнего уровня числа, в :vi: верхнего уровня их сразу же подхватывает и обрабатывает, а также являет собой интерфейс человек-устройство
колдооооовствооооо! (С)
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение Andrew Lunev »

Если помогает именно перезагрузка приложения на LabView, то может быть проблема именно там. Если бы зависал драйвер переходника, то требовалось бы и Windows перезагружать.
Пока можно реализовать что-то типа программного WatchDog. То есть проверяйте работу с портом например каждые 10 минут и в случае проблемы перезагружайте приложение. Тогда с высокой вероятностью проблема возникнет не в момент, когда клиент подошел к терминалу. Но это конечно костыль...

Весь код и не нужен, нужна только часть, отвечающая за обмен через COM-порт. Ее даже желательно выделить из кода для поиска и локализации проблемы.
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение Andrew Lunev »

AlexanderKonoval писал(а):Нобходимо, чтобы :vi: работали одновременно. В обеих :vi: есть While Loop. Я не шибко силён в :labview: ещё, при попытке просто вставить на диаграмму - ничего не работало, я так понимаю, что как только запускалось subVI, :vi: верхнего уровня сразу приостанавливался.
Грубо говоря, я получаю с :vi: нижнего уровня числа, в :vi: верхнего уровня их сразу же подхватывает и обрабатывает, а также являет собой интерфейс человек-устройство
Да уж, наворотили. Видимо нужен весь код, а не только часть с COM-портом. В такой архитектуре программы возможна куча проблем.
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение AlexanderKonoval »

Andrew Lunev писал(а): Весь код и не нужен, нужна только часть, отвечающая за обмен через COM-порт. Ее даже желательно выделить из кода для поиска и локализации проблемы.
я бы рад выложить, но :vi:, которая общается с портом чуть ли не самая сложная в системе и у меня по ней отдельно подписано неразглашение.

Ладно, буду ковыряться, авось найду решение. Просто подумалось, может это общеизвестная штука, на которую иногда напарываются чайнички вроде меня)

Спасибо за ответы!
колдооооовствооооо! (С)
Аватара пользователя
dadreamer

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

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение dadreamer »

Было бы интересно взглянуть хотя бы на код запуска SubVI. Call By Reference или Start Asynchronous Call используется?
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение AlexanderKonoval »

ну, как-то так выглядит собственно запуск :vi: с :vi: более высокого уровня у меня
Вложения
screen.jpg
колдооооовствооооо! (С)
Аватара пользователя
dadreamer

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

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение dadreamer »

Abort VI - это вы останавливаете так SubVI, работающий с COM-портом? Или текущий :vi: ? Почему-то ссылка заходит в цикл, но из цикла не выходит.
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение AlexanderKonoval »

dadreamer, при копировании случайно удалил, там ссылка выходит из цикла, останавливаю SubVI, работающую с компортом. В самой SubVI при выходе из цикла закрывается сам порт и все ссылки на C# библиотеку.
колдооооовствооооо! (С)
Аватара пользователя
dadreamer

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

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение dadreamer »

А если SubVI не вышел из цикла, а вы прервали его выполнение Abort'ом? Может произойти такое событие? В справке :labview: написано:
Aborting a VI that uses external resources, such as external hardware, might leave the resources in an unknown state by not resetting or releasing them properly. Design VIs with a stop button to avoid this problem.
Если вышеуказанное событие возможно, то у вас от запуска к запуску программы в памяти будет накапливаться мусор от предыдущих структур, созданных библиотекой связи с портом. Рано или поздно произойдет переполнение или ошибка доступа к секции памяти, в результате чего :labview: вылетит или выдаст ошибку. Много раз с таким уже сталкивался. Я бы на вашем месте использовал параллельные циклы с очередями, а остановку циклов сделал бы через Notifier.
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение AlexanderKonoval »

dadreamer, дело в том, что у меня SubVI, что работает с купюроприёмником, использует несколько :vi: . И сам код SubVI довольно большой, его вставить в другую :vi: весьма проблематично.

сработает ли, если на выходе из цикла :vi: верхнего уровня использую Invoke Node - Control Value - Set, и задам значение кнопки Stop = True для SubVI? Это не одно и то же, что Abort VI?
колдооооовствооооо! (С)
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Зависание порта, что приводит к сбою работы всего прилож

Сообщение Vitekkz88 »

сработает ли, если на выходе из цикла верхнего уровня использую Invoke Node - Control Value - Set, и задам значение кнопки Stop = True для SubVI? Это не одно и то же, что Abort VI?
Прислушайтесь к совету dadreamer-а по поводу остановки приложения. Notifier идеально для этого подходит. Я даже самые простые приложения с парочкой потоков завершаю с использованием Notifier. Любопытно, а subVI внутри имеют структуры с циклами?А потом еще в основной vi тоже в цикл ставятся? :wink:
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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