Страница 1 из 2
задержка в Serial Port
Добавлено: Сб фев 26, 2022 22:03:22
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(); // Удаляет данные из буфера передачи последовательного драйвера. (хотя я ничего не передаю )
Спасибо откликнувшимся

Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 03:55:09
Ser60
Если одно из устройств в связке UART работает быстрее другого, смотрите в сторону организации 4-проводного UART с flow control.
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 09:48:19
uwrtey
На самом деле мой микроконтроллер является посредником ( перекодировщиком ),
он принимает по RX данные в одном протоколе и отправляет по TX в другом протоколе.
принимает от устройства, изменения в которое внести невозможно.
соответственно использую только линии tx и rx.
хотя для отправки можно каждый раз переконфигурировать.
лишь бы COM-Port не повис в атмеге328 от частого переконфига.
где то у Dihalt'а встречал такую заметку.
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 12:52:41
Alexey1969
Предположения :
1. Скомпилированное работает слишком быстро, в МК возникает ошибка синхронизации. Вставить паузы в пакетах.
2. Программа при открытии порта сама настраивает размер буфера, который отличается от того что задан в настройках системы. Проверить
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 13:50:29
uwrtey
Alexey1969 писал(а):Скомпилированное работает слишком быстро
нет синхронизации. асинхронная передача.
Alexey1969 писал(а):Программа при открытии порта сама настраивает размер буфера
Я тоже об этом думал.
Даже находил что то на СИ... ( код хз от чего был.. )
Но ни одного примера на СИ# я не нашел.
В моем скрипте размер буфера не задан. Значит он задаётся по умолчанию..
Еще одна проблема в Юнити это кастрировааная библа SerialPort.
Мне пришлось организовать чтение потока через функцию readbyte!
Может кастрированная библа и не позволит настраивать буфер порта. Я далёк от этого. Надо бы почитать нужную литературу..
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 14:34:55
Alexey1969
uwrtey писал(а):нет синхронизации. асинхронная передача.
Имеется в виду что тактовая контроллера не кратно укладывается в скорость порта, есть погрешность в приеме, в том числе в асинхронном режиме.
Длинные посылки могут приниматься с ошибками.
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 15:54:08
Мурик
uwrtey писал(а):Еще одна проблема в Юнити
Так зачем используете Юнити?
Это же игровой движок! Если хочется писать на C#, берите MS студию и пишите.
uwrtey писал(а):Надо бы почитать нужную литературу..
Изучайте
https://ru.wikibooks.org/wiki/COM-%D0%B ... %B8%D0%B5)
http://avr90s2313.narod.ru/text_doc/at- ... embler.htm
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 16:08:17
uwrtey
Alexey1969 писал(а):тактовая контроллера не кратно укладывается в скорость порта,
не представляю, как такое может быть.
К тому же я выше описал, что в Unity3D все работает без задержек.
ИМХО: отпадает ваша версия.
Мурик писал(а):берите MS студию
Вы это VisualStudio имеете ввиду?
Юнити именно ее и использует. Мой скрипт именно там и написан...
Юнити юзаю из за удобства работы с графикой.
.
первая ссылка ведёт на страницу, информации на которой нет.
вторую ссылку почитал. спасибо.
.
ответа для себя пока не нашел.
.
на просторах инета нашел вот что:
https://forum.cxem.net/index.php?/topic ... %8B%D1%85/
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 16:55:09
Мурик
uwrtey писал(а):первая ссылка ведёт на страницу, информации на которой нет.
Есть там информация.
Посмотрите внимательно, форум не добавил в ссылку закрывающую скобку. Добавьте ее и ссылка откроется.
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 22:33:23
uwrtey
вот рабочая
ссылка ( для удобства )
проверил на
CH340C - аналогично
Значит проблема не в драйвере USB-TTL конвертора ( Ну уверен, но думаю не в нём. )
Re: задержка в Serial Port
Добавлено: Вс фев 27, 2022 23:32:57
Мурик
Выводите время приема пакетов и смотрите из-за чего медленная работа. Может в коде есть ошибка.
Re: задержка в Serial Port
Добавлено: Пн фев 28, 2022 02:14:48
Рязанцев Владислав
[uquote="uwrtey",url="/forum/viewtopic.php?p=4190091#p4190091"]Всем привет.
ПК под Windows 10
Хардварного ком-порта на материнке естественно уже нет.[/uquote]
А если найду?
Серьезно так сложно купить планку с разъемом? Штырьковый разъем на материнках есть до сих пор, причем на любых. Он просто не выводится на заднюю панель теперь.
Есть на любой материнке. Все было в руках от 2го до 8 поколения интела, A320, В450 и Х570 от амд.
Недавно менял материнку и лично выключал хардверный ком порт в биосе чтобы не мешался в списке, ибо часто работаю с терминалом.
Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 00:56:40
uwrtey
[uquote="Рязанцев Владислав",url="/forum/viewtopic.php?p=4190818#p4190818"]Серьезно так сложно купить планку с разъемом? Штырьковый разъем на материнках есть до сих пор, причем на любых. Он просто не выводится на заднюю панель теперь.
Есть на любой материнке.[/uquote]
Вопрос не в порте. Вопрос в том, что система не работает в реальном времени. Есть некоторая задержка.
Порта может и не быть - я не говорил, о том какое железо я использую.
Давайте договоримся, что порта нет и точка.
Будем использовать USB-TTL конвертор.
Если софт запускаю в среде Unity, то задержки нет.
Если из под винды, то есть и задержка и потеря данных..
Понять не могу куда копать..
В большинстве случаев ссылаются на многопоточность.
Неужели придется перелопатить весь код, для того, что бы проверить в многопоточности ли дело...

Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 09:06:55
As
...Есть у меня один программный комплекс, где обмен с оборудованием идет через СОМ-порт... В 98 и ХР - проблем нет, в 7 - не работает программа, совсем, в 10 - обмен с СОМ-портом организован "через жопу"(т.е. через специальный драйвер, а не напрямую...), задержки непредсказуемой длительности... Вообще, "форточки" не являются ОС реального времени, поэтому ожидать от них разумного времени реакции на событие трудно, а в десятке ещё и принято решение избавить пользователя от устаревшей периферии, к коей относится и СОМ-порты...
...Попробуйте запустить свою программу под 98 или ХР - скорее всего, всё будет работать нормально, без задержек и потерь...

Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 17:17:44
Мурик
Если работать через WinAPI, проблем быть не должно в любой винде. А если напрямую работать с портом, стабильного проема/передачи может не быть.
Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 17:42:06
tonyk
SerialGate
Почитай и повтори. Правда, _ни_разу_ не видел пример правильной настройки СОМ-порта под Выньдой, но, вроде, у людей работает и ладно. А так WIN API изучай. Натащат всякую шнягу типа Юнити и скриптов, а потом мозг людям выносят почему СОМ-порт тормозит.
Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 19:24:32
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;
Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 19:27:32
Eddy_Em
Проблема не в RT, а в говнокоде!
Естественно, при поллинге будет некая задержка. Но ты ее сам выставляешь. Скажем, поставишь одну миллисекунду - будет одна миллисекунда.
Если так критично, используй select вместо poll: там можно микросекундами оперировать.
Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 19:53:17
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 ?????
"Пап, а ты с кем сейчас разговаривал? " - из анекдота

Re: задержка в Serial Port
Добавлено: Вс мар 06, 2022 20:10:14
Eddy_Em
[uquote="uwrtey",url="/forum/viewtopic.php?p=4194720#p4194720"]"Папа а ты с кем сейчас разговаривал? "[/uquote]
Т.е. ты ни слова не понял? Тогда зачем вообще взялся что-то программировать? Как ты считываешь данные с порта, ничего не зная о поллинге и т.п.? Делаешь тупые блокирующие read что ли?