Зависание порта, что приводит к сбою работы всего приложения
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Зависание порта, что приводит к сбою работы всего приложения
Уважаемые коллеги, подскажите, пожалуйста!
К компьютеру подключено устройство посредством переходника FTDI. Коммуникация с устройством проходит при помощи C# библиотеки. Устройство работает не постоянно, а запускается только по необходимости.
В отвечающей за работу устройства идёт сначала инициализация порта, затем отправка команд запуска устройства, затем циклический опрос состояния и выведение этого самого состояния на экран.
Иногда происходит следующее: порт перестаёт реагировать, устройство не запускается, для работы с ним приходится перезапускать . Весь програмно-аппаратный комплекс должен работать 24/7, то есть подобные случаи не допустимы.
В чём может быть проблема, где может возникать сбой? Я пока что грешу на сбои внутри C# dll-ки, что подвисает она. Но не знаю как это можно проверить.
Также есть следующий фактор: сколько бы я не запускал отвечающую за работу устройства - ни одного сбоя. Сбои происходят только когда работает в составе приложения. В приложение оно вписывается посредством Invoke и Property Node, так как мне не надо ни выведение фронт-панели, ничего, нужно только получать результаты цикличного опроса в более высокого уровня. Может, здесь какая беда?
Заранее спасибо за уделённое время!
К компьютеру подключено устройство посредством переходника FTDI. Коммуникация с устройством проходит при помощи C# библиотеки. Устройство работает не постоянно, а запускается только по необходимости.
В отвечающей за работу устройства идёт сначала инициализация порта, затем отправка команд запуска устройства, затем циклический опрос состояния и выведение этого самого состояния на экран.
Иногда происходит следующее: порт перестаёт реагировать, устройство не запускается, для работы с ним приходится перезапускать . Весь програмно-аппаратный комплекс должен работать 24/7, то есть подобные случаи не допустимы.
В чём может быть проблема, где может возникать сбой? Я пока что грешу на сбои внутри C# dll-ки, что подвисает она. Но не знаю как это можно проверить.
Также есть следующий фактор: сколько бы я не запускал отвечающую за работу устройства - ни одного сбоя. Сбои происходят только когда работает в составе приложения. В приложение оно вписывается посредством Invoke и Property Node, так как мне не надо ни выведение фронт-панели, ничего, нужно только получать результаты цикличного опроса в более высокого уровня. Может, здесь какая беда?
Заранее спасибо за уделённое время!
колдооооовствооооо! (С)
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Зависание порта, что приводит к сбою работы всего прилож
Боюсь без доступа к оборудованию и коду вам никто не поможет. Вариантов может быть очень много и любое устройство в цепочке может привести к подобному сбою.
Меня очень настораживает, что система должна работать в режиме 24/7, а у вас используется обычная персоналка с Windows видимо и еще переходником. Надежность всей системы определяется надежностью самого ненадежного компонента, а у вас все ненадежные.
Подобную систему надо строить на промышленном контроллере с Watchdog и на операционке реального времени. Конечно же с аппаратным COM-портом. Например на cRIO.
Меня очень настораживает, что система должна работать в режиме 24/7, а у вас используется обычная персоналка с Windows видимо и еще переходником. Надежность всей системы определяется надежностью самого ненадежного компонента, а у вас все ненадежные.
Подобную систему надо строить на промышленном контроллере с Watchdog и на операционке реального времени. Конечно же с аппаратным COM-портом. Например на cRIO.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
Оставьте ваш самого нижнего уровня в работе на продолжительное количество времени (часов 5) и посмотрите, будет ли сбой.AlexanderKonoval писал(а):Я пока что грешу на сбои внутри C# dll-ки, что подвисает она. Но не знаю как это можно проверить.
А зачем так сложно, нельзя просто вставить на блочную диаграмму, предварительно задав ему в параметрах все свойства (отображение панели, реентерантность и т.п.)? Или он у вас должен выполняться асинхронно, без возврата результатов? Если так, то возможно наложение двух потоков друг на друга.AlexanderKonoval писал(а):В приложение оно вписывается посредством Invoke и Property Node, так как мне не надо ни выведение фронт-панели, ничего, нужно только получать результаты цикличного опроса в более высокого уровня.
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
Andrew Lunev, система, по сути, является вендинговым аппаратом, чем-то сродни терминалу по оплате услуг и так далее. Это не промышленное оборудование. 24/7 - оно должно обслуживать клиентов, если будет зависание - перезагрузили за 1 минуту и поехали дальше. Имеется ввиду, что когда клиент захочет внести денюжку в купюроприёмник - он должен включится. А проблема возникает именно с ним.
К сожалению, код показать не могу, ибо комм. тайна((
К сожалению, код показать не могу, ибо комм. тайна((
колдооооовствооооо! (С)
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
Нобходимо, чтобы работали одновременно. В обеих есть While Loop. Я не шибко силён в ещё, при попытке просто вставить на диаграмму - ничего не работало, я так понимаю, что как только запускалось subVI, верхнего уровня сразу приостанавливался.dadreamer писал(а): А зачем так сложно, нельзя просто вставить на блочную диаграмму, предварительно задав ему в параметрах все свойства (отображение панели, реентерантность и т.п.)? Или он у вас должен выполняться асинхронно, без возврата результатов? Если так, то возможно наложение двух потоков друг на друга.
Грубо говоря, я получаю с нижнего уровня числа, в верхнего уровня их сразу же подхватывает и обрабатывает, а также являет собой интерфейс человек-устройство
колдооооовствооооо! (С)
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Зависание порта, что приводит к сбою работы всего прилож
Если помогает именно перезагрузка приложения на LabView, то может быть проблема именно там. Если бы зависал драйвер переходника, то требовалось бы и Windows перезагружать.
Пока можно реализовать что-то типа программного WatchDog. То есть проверяйте работу с портом например каждые 10 минут и в случае проблемы перезагружайте приложение. Тогда с высокой вероятностью проблема возникнет не в момент, когда клиент подошел к терминалу. Но это конечно костыль...
Весь код и не нужен, нужна только часть, отвечающая за обмен через COM-порт. Ее даже желательно выделить из кода для поиска и локализации проблемы.
Пока можно реализовать что-то типа программного WatchDog. То есть проверяйте работу с портом например каждые 10 минут и в случае проблемы перезагружайте приложение. Тогда с высокой вероятностью проблема возникнет не в момент, когда клиент подошел к терминалу. Но это конечно костыль...
Весь код и не нужен, нужна только часть, отвечающая за обмен через COM-порт. Ее даже желательно выделить из кода для поиска и локализации проблемы.
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Зависание порта, что приводит к сбою работы всего прилож
Да уж, наворотили. Видимо нужен весь код, а не только часть с COM-портом. В такой архитектуре программы возможна куча проблем.AlexanderKonoval писал(а):Нобходимо, чтобы работали одновременно. В обеих есть While Loop. Я не шибко силён в ещё, при попытке просто вставить на диаграмму - ничего не работало, я так понимаю, что как только запускалось subVI, верхнего уровня сразу приостанавливался.
Грубо говоря, я получаю с нижнего уровня числа, в верхнего уровня их сразу же подхватывает и обрабатывает, а также являет собой интерфейс человек-устройство
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
я бы рад выложить, но , которая общается с портом чуть ли не самая сложная в системе и у меня по ней отдельно подписано неразглашение.Andrew Lunev писал(а): Весь код и не нужен, нужна только часть, отвечающая за обмен через COM-порт. Ее даже желательно выделить из кода для поиска и локализации проблемы.
Ладно, буду ковыряться, авось найду решение. Просто подумалось, может это общеизвестная штука, на которую иногда напарываются чайнички вроде меня)
Спасибо за ответы!
колдооооовствооооо! (С)
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
Было бы интересно взглянуть хотя бы на код запуска SubVI. Call By Reference или Start Asynchronous Call используется?
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
ну, как-то так выглядит собственно запуск с более высокого уровня у меня
колдооооовствооооо! (С)
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
Abort VI - это вы останавливаете так SubVI, работающий с COM-портом? Или текущий ? Почему-то ссылка заходит в цикл, но из цикла не выходит.
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
dadreamer, при копировании случайно удалил, там ссылка выходит из цикла, останавливаю SubVI, работающую с компортом. В самой SubVI при выходе из цикла закрывается сам порт и все ссылки на C# библиотеку.
колдооооовствооооо! (С)
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
А если SubVI не вышел из цикла, а вы прервали его выполнение Abort'ом? Может произойти такое событие? В справке написано:
Если вышеуказанное событие возможно, то у вас от запуска к запуску программы в памяти будет накапливаться мусор от предыдущих структур, созданных библиотекой связи с портом. Рано или поздно произойдет переполнение или ошибка доступа к секции памяти, в результате чего вылетит или выдаст ошибку. Много раз с таким уже сталкивался. Я бы на вашем месте использовал параллельные циклы с очередями, а остановку циклов сделал бы через Notifier.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.
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
dadreamer, дело в том, что у меня SubVI, что работает с купюроприёмником, использует несколько . И сам код SubVI довольно большой, его вставить в другую весьма проблематично.
сработает ли, если на выходе из цикла верхнего уровня использую Invoke Node - Control Value - Set, и задам значение кнопки Stop = True для SubVI? Это не одно и то же, что Abort VI?
сработает ли, если на выходе из цикла верхнего уровня использую Invoke Node - Control Value - Set, и задам значение кнопки Stop = True для SubVI? Это не одно и то же, что Abort VI?
колдооооовствооооо! (С)
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Зависание порта, что приводит к сбою работы всего прилож
Прислушайтесь к совету dadreamer-а по поводу остановки приложения. Notifier идеально для этого подходит. Я даже самые простые приложения с парочкой потоков завершаю с использованием Notifier. Любопытно, а subVI внутри имеют структуры с циклами?А потом еще в основной vi тоже в цикл ставятся?сработает ли, если на выходе из цикла верхнего уровня использую Invoke Node - Control Value - Set, и задам значение кнопки Stop = True для SubVI? Это не одно и то же, что Abort VI?
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 7 Ответы
- 297 Просмотры
-
Последнее сообщение dadreamer
-
- 0 Ответы
- 502 Просмотры
-
Последнее сообщение Juri
-
- 2 Ответы
- 673 Просмотры
-
Последнее сообщение Sergey Puzanov
-
- 6 Ответы
- 905 Просмотры
-
Последнее сообщение AndreyDmitriev