задержка в Serial Port

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

задержка в Serial Port

Сообщение uwrtey »

Всем привет.

ПК под Windows 10
Хардварного ком-порта на материнке естественно уже нет.
Юзаю переходничок USB-UART (rs232) от фирмы FTDI
На ПК крутится собственноручно написанный софт.
Софт писал на C# в Unity3D ( это первый мой проект на C#, в UNITY3D, да и в обще для ПК )

Из МК посылаю поток данных по UART в одностороннем порядке
запущенный внутри Юнити скрипт работает без задержек
а вот уже скомпилированный софт под windows работает с задержкой.

В какую сторону копать? мне нужна минимальная задержка

П.С.:

1) тут видел рецепт https://alex-avr2.livejournal.com/126886.html , но мне он не помог - видимо это не мой случай.
внутри Юнити ( повторяюсь ) задержек нет.

2) Изначально в самой Юнити тоже были задержки, но там я понял, что они связаны с большим буфером SerialPort'а
и применил такие комманды:

Код: Выделить всё

SerialPort.DiscardInBuffer(); // Удаляет данные из буфера приема последовательного драйвера.
SerialPort.DiscardOutBuffer(); // Удаляет данные из буфера передачи последовательного драйвера.  (хотя я ничего не передаю )
Спасибо откликнувшимся :beer:
не зная броду не лезь к вольтмоду
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: задержка в Serial Port

Сообщение Ser60 »

Если одно из устройств в связке UART работает быстрее другого, смотрите в сторону организации 4-проводного UART с flow control.
Реклама
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: задержка в Serial Port

Сообщение uwrtey »

На самом деле мой микроконтроллер является посредником ( перекодировщиком ),
он принимает по RX данные в одном протоколе и отправляет по TX в другом протоколе.
принимает от устройства, изменения в которое внести невозможно.
соответственно использую только линии tx и rx.
хотя для отправки можно каждый раз переконфигурировать.
лишь бы COM-Port не повис в атмеге328 от частого переконфига.
где то у Dihalt'а встречал такую заметку.
Последний раз редактировалось uwrtey Вс фев 27, 2022 22:32:16, всего редактировалось 1 раз.
не зная броду не лезь к вольтмоду
Аватара пользователя
Alexey1969
Вымогатель припоя
Сообщения: 622
Зарегистрирован: Чт мар 05, 2009 05:31:16
Откуда: г. Кемерово
Контактная информация:

Re: задержка в Serial Port

Сообщение Alexey1969 »

Предположения :
1. Скомпилированное работает слишком быстро, в МК возникает ошибка синхронизации. Вставить паузы в пакетах.
2. Программа при открытии порта сама настраивает размер буфера, который отличается от того что задан в настройках системы. Проверить
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: задержка в Serial Port

Сообщение uwrtey »

Alexey1969 писал(а):Скомпилированное работает слишком быстро
нет синхронизации. асинхронная передача.
Alexey1969 писал(а):Программа при открытии порта сама настраивает размер буфера
Я тоже об этом думал.
Даже находил что то на СИ... ( код хз от чего был.. )
Но ни одного примера на СИ# я не нашел.
В моем скрипте размер буфера не задан. Значит он задаётся по умолчанию..
Еще одна проблема в Юнити это кастрировааная библа SerialPort.
Мне пришлось организовать чтение потока через функцию readbyte!
Может кастрированная библа и не позволит настраивать буфер порта. Я далёк от этого. Надо бы почитать нужную литературу..
не зная броду не лезь к вольтмоду
Реклама
Аватара пользователя
Alexey1969
Вымогатель припоя
Сообщения: 622
Зарегистрирован: Чт мар 05, 2009 05:31:16
Откуда: г. Кемерово
Контактная информация:

Re: задержка в Serial Port

Сообщение Alexey1969 »

uwrtey писал(а):нет синхронизации. асинхронная передача.
Имеется в виду что тактовая контроллера не кратно укладывается в скорость порта, есть погрешность в приеме, в том числе в асинхронном режиме.
Длинные посылки могут приниматься с ошибками.
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: задержка в Serial Port

Сообщение Мурик »

uwrtey писал(а):Еще одна проблема в Юнити
Так зачем используете Юнити?
Это же игровой движок! Если хочется писать на C#, берите MS студию и пишите.
uwrtey писал(а):Надо бы почитать нужную литературу..
Изучайте https://ru.wikibooks.org/wiki/COM-%D0%B ... %B8%D0%B5)
http://avr90s2313.narod.ru/text_doc/at- ... embler.htm
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: задержка в Serial Port

Сообщение uwrtey »

Alexey1969 писал(а):тактовая контроллера не кратно укладывается в скорость порта,
не представляю, как такое может быть.
К тому же я выше описал, что в Unity3D все работает без задержек.
ИМХО: отпадает ваша версия.
Мурик писал(а):берите MS студию
Вы это VisualStudio имеете ввиду?
Юнити именно ее и использует. Мой скрипт именно там и написан...
Юнити юзаю из за удобства работы с графикой.
.
первая ссылка ведёт на страницу, информации на которой нет.
вторую ссылку почитал. спасибо.
.
ответа для себя пока не нашел.
.
на просторах инета нашел вот что:
https://forum.cxem.net/index.php?/topic ... %8B%D1%85/
Последний раз редактировалось uwrtey Вс фев 27, 2022 22:29:55, всего редактировалось 1 раз.
не зная броду не лезь к вольтмоду
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: задержка в Serial Port

Сообщение Мурик »

uwrtey писал(а):первая ссылка ведёт на страницу, информации на которой нет.
Есть там информация.
Посмотрите внимательно, форум не добавил в ссылку закрывающую скобку. Добавьте ее и ссылка откроется.
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: задержка в Serial Port

Сообщение uwrtey »

вот рабочая ссылка ( для удобства )

проверил на CH340C - аналогично
Значит проблема не в драйвере USB-TTL конвертора ( Ну уверен, но думаю не в нём. )
не зная броду не лезь к вольтмоду
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: задержка в Serial Port

Сообщение Мурик »

Выводите время приема пакетов и смотрите из-за чего медленная работа. Может в коде есть ошибка.
Аватара пользователя
Рязанцев Владислав
Мудрый кот
Сообщения: 1781
Зарегистрирован: Пн июн 24, 2013 23:00:42
Откуда: Казахстан

Re: задержка в Serial Port

Сообщение Рязанцев Владислав »

[uquote="uwrtey",url="/forum/viewtopic.php?p=4190091#p4190091"]Всем привет.

ПК под Windows 10
Хардварного ком-порта на материнке естественно уже нет.[/uquote]
А если найду?
Серьезно так сложно купить планку с разъемом? Штырьковый разъем на материнках есть до сих пор, причем на любых. Он просто не выводится на заднюю панель теперь.
Есть на любой материнке. Все было в руках от 2го до 8 поколения интела, A320, В450 и Х570 от амд.
Недавно менял материнку и лично выключал хардверный ком порт в биосе чтобы не мешался в списке, ибо часто работаю с терминалом.
Изображение
Ваши хотелки за ваши деньги
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: задержка в Serial Port

Сообщение uwrtey »

[uquote="Рязанцев Владислав",url="/forum/viewtopic.php?p=4190818#p4190818"]Серьезно так сложно купить планку с разъемом? Штырьковый разъем на материнках есть до сих пор, причем на любых. Он просто не выводится на заднюю панель теперь.
Есть на любой материнке.[/uquote]

Вопрос не в порте. Вопрос в том, что система не работает в реальном времени. Есть некоторая задержка.
Порта может и не быть - я не говорил, о том какое железо я использую.
Давайте договоримся, что порта нет и точка.
Будем использовать USB-TTL конвертор.

Если софт запускаю в среде Unity, то задержки нет.
Если из под винды, то есть и задержка и потеря данных..

Понять не могу куда копать.. :dont_know:

В большинстве случаев ссылаются на многопоточность.
Неужели придется перелопатить весь код, для того, что бы проверить в многопоточности ли дело... :shock:
не зная броду не лезь к вольтмоду
Аватара пользователя
As
Модератор
Сообщения: 46051
Зарегистрирован: Пт янв 23, 2009 19:20:05

Re: задержка в Serial Port

Сообщение As »

...Есть у меня один программный комплекс, где обмен с оборудованием идет через СОМ-порт... В 98 и ХР - проблем нет, в 7 - не работает программа, совсем, в 10 - обмен с СОМ-портом организован "через жопу"(т.е. через специальный драйвер, а не напрямую...), задержки непредсказуемой длительности... Вообще, "форточки" не являются ОС реального времени, поэтому ожидать от них разумного времени реакции на событие трудно, а в десятке ещё и принято решение избавить пользователя от устаревшей периферии, к коей относится и СОМ-порты... :)
...Попробуйте запустить свою программу под 98 или ХР - скорее всего, всё будет работать нормально, без задержек и потерь... :)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: задержка в Serial Port

Сообщение Мурик »

Если работать через WinAPI, проблем быть не должно в любой винде. А если напрямую работать с портом, стабильного проема/передачи может не быть.
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: задержка в Serial Port

Сообщение tonyk »

SerialGate

Почитай и повтори. Правда, _ни_разу_ не видел пример правильной настройки СОМ-порта под Выньдой, но, вроде, у людей работает и ладно. А так WIN API изучай. Натащат всякую шнягу типа Юнити и скриптов, а потом мозг людям выносят почему СОМ-порт тормозит.
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: задержка в Serial Port

Сообщение uwrtey »

[uquote="As",url="/forum/viewtopic.php?p=4194449#p4194449"]Попробуйте запустить свою программу под 98 или ХР - скорее всего, всё будет работать нормально, без задержек и потерь... :)[/uquote]
Да, я думал об этом...
Но программа рассчитана на использование на современном железе.
На каком нибудь микрокомпьютере.

[uquote="As",url="/forum/viewtopic.php?p=4194449#p4194449"]Вообще, "форточки" не являются ОС реального времени[/uquote]Да я в курсе, но видел собственными глазами как некоторая периферия работает в реальном времени. Джойстики например.

[uquote="Мурик",url="/forum/viewtopic.php?p=4194676#p4194676"]Если работать через WinAPI, проблем быть не должно в любой винде. А если напрямую работать с портом, стабильного проема/передачи может не быть.[/uquote]
класс SerialPort относится к WinAPI, на сколько я знаю...

Код: Выделить всё

using System.IO;
using System.IO.Ports;
using System;
Последний раз редактировалось uwrtey Вс мар 06, 2022 20:03:47, всего редактировалось 1 раз.
не зная броду не лезь к вольтмоду
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: задержка в Serial Port

Сообщение Eddy_Em »

Проблема не в RT, а в говнокоде!
Естественно, при поллинге будет некая задержка. Но ты ее сам выставляешь. Скажем, поставишь одну миллисекунду - будет одна миллисекунда.
Если так критично, используй select вместо poll: там можно микросекундами оперировать.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: задержка в Serial Port

Сообщение uwrtey »

[uquote="tonyk",url="/forum/viewtopic.php?p=4194679#p4194679"]SerialGate
Почитай и повтори. Правда, _ни_разу_ не видел пример правильной настройки СОМ-порта под Выньдой, но, вроде, у людей работает и ладно. А так WIN API изучай. Натащат всякую шнягу типа Юнити и скриптов, а потом мозг людям выносят почему СОМ-порт тормозит.[/uquote]

1) Пошел читать....
2) Юнити выбрал потому как для ПК ни разу не прогал ( до этого AVR на асме ) а тут нужно стало визуализировать входящие данные.
А тут еще и графика... Я же с ней не работал ни разу...
Пришлось выбирать среду и язык..
Толковых уроков на Русском языке хрен найдешь.
Инглиш мне не вЕдом - только с транслейтером, по этому видео уроки на нем не воспринимаю совсем.
Друг детства пишет немного на Юнити. (Игрушки там или вид делает только.. )
Узнал у него, что юнити юзает VisualStudio, а до этого я смог настроить передачу по SerialPort в VisualStudio.
Вот и решил попробовать юнити.
И тут сразу же начались траблы с портом.
Библиотека серийного порта в юнити кастрированная.
Пое*авшись организовал побайтный прием потока.
А затем и все остальное.
Хуже всего, что планировал запустить софтину на андроиде, но не смог портировать туда.
Забил болт на весь проект - было обидно.. ( Практически год ип*ался над ним )
А сейчас наткнулся на микрокомпьютеры на Винде
СпойлерCHUWI LarkBox 4K
GK3V
CHUWI Herobox
XCY MINI PC
Chatreey AN1
XCY X41
Chatreey G1
GPD P2 Max
И решил продолжить заниматься этим проектом.

Знал бы как делать правильно - делал бы правильно.
И не задавал бы идиотских вопросов.
Сильно не пинайте плиз

Добавлено after 5 minutes 13 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4194708#p4194708"]Проблема не в RT, а в говнокоде!
Естественно, при поллинге будет некая задержка. Но ты ее сам выставляешь. Скажем, поставишь одну миллисекунду - будет одна миллисекунда.
Если так критично, используй select вместо poll: там можно микросекундами оперировать.[/uquote]

Чего ???
что такое RT ?
Где Вы видели мой код ?
Что такое поллинг ?
Где я выставляю задержку????
Какой Select ?
какой poll ?????

"Пап, а ты с кем сейчас разговаривал? " - из анекдота :)))
Последний раз редактировалось uwrtey Вс мар 06, 2022 20:16:11, всего редактировалось 1 раз.
не зная броду не лезь к вольтмоду
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: задержка в Serial Port

Сообщение Eddy_Em »

[uquote="uwrtey",url="/forum/viewtopic.php?p=4194720#p4194720"]"Папа а ты с кем сейчас разговаривал? "[/uquote]
Т.е. ты ни слова не понял? Тогда зачем вообще взялся что-то программировать? Как ты считываешь данные с порта, ничего не зная о поллинге и т.п.? Делаешь тупые блокирующие read что ли?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Ответить

Вернуться в «Интеграция с ПК»