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

задержка в Serial Port

Сб фев 26, 2022 22:03:22

Всем привет.

ПК под 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:

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

Вс фев 27, 2022 03:55:09

Если одно из устройств в связке UART работает быстрее другого, смотрите в сторону организации 4-проводного UART с flow control.

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

Вс фев 27, 2022 09:48:19

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

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

Вс фев 27, 2022 12:52:41

Предположения :
1. Скомпилированное работает слишком быстро, в МК возникает ошибка синхронизации. Вставить паузы в пакетах.
2. Программа при открытии порта сама настраивает размер буфера, который отличается от того что задан в настройках системы. Проверить

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

Вс фев 27, 2022 13:50:29

Alexey1969 писал(а):Скомпилированное работает слишком быстро

нет синхронизации. асинхронная передача.

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

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

Вс фев 27, 2022 14:34:55

uwrtey писал(а):нет синхронизации. асинхронная передача.

Имеется в виду что тактовая контроллера не кратно укладывается в скорость порта, есть погрешность в приеме, в том числе в асинхронном режиме.
Длинные посылки могут приниматься с ошибками.

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

Вс фев 27, 2022 15:54:08

uwrtey писал(а):Еще одна проблема в Юнити
Так зачем используете Юнити?
Это же игровой движок! Если хочется писать на C#, берите MS студию и пишите.

uwrtey писал(а):Надо бы почитать нужную литературу..
Изучайте https://ru.wikibooks.org/wiki/COM-%D0%B ... 0%B8%D0%B5)
http://avr90s2313.narod.ru/text_doc/at- ... embler.htm

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

Вс фев 27, 2022 16:08:17

Alexey1969 писал(а):тактовая контроллера не кратно укладывается в скорость порта,
не представляю, как такое может быть.
К тому же я выше описал, что в Unity3D все работает без задержек.
ИМХО: отпадает ваша версия.

Мурик писал(а):берите MS студию
Вы это VisualStudio имеете ввиду?
Юнити именно ее и использует. Мой скрипт именно там и написан...
Юнити юзаю из за удобства работы с графикой.
.
первая ссылка ведёт на страницу, информации на которой нет.
вторую ссылку почитал. спасибо.
.
ответа для себя пока не нашел.
.
на просторах инета нашел вот что:
https://forum.cxem.net/index.php?/topic ... %8B%D1%85/
Последний раз редактировалось uwrtey Вс фев 27, 2022 22:29:55, всего редактировалось 1 раз.

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

Вс фев 27, 2022 16:55:09

uwrtey писал(а):первая ссылка ведёт на страницу, информации на которой нет.
Есть там информация.
Посмотрите внимательно, форум не добавил в ссылку закрывающую скобку. Добавьте ее и ссылка откроется.

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

Вс фев 27, 2022 22:33:23

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

проверил на CH340C - аналогично
Значит проблема не в драйвере USB-TTL конвертора ( Ну уверен, но думаю не в нём. )

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

Вс фев 27, 2022 23:32:57

Выводите время приема пакетов и смотрите из-за чего медленная работа. Может в коде есть ошибка.

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

Пн фев 28, 2022 02:14:48

Всем привет.

ПК под Windows 10
Хардварного ком-порта на материнке естественно уже нет.

А если найду?
Серьезно так сложно купить планку с разъемом? Штырьковый разъем на материнках есть до сих пор, причем на любых. Он просто не выводится на заднюю панель теперь.
Есть на любой материнке. Все было в руках от 2го до 8 поколения интела, A320, В450 и Х570 от амд.
Недавно менял материнку и лично выключал хардверный ком порт в биосе чтобы не мешался в списке, ибо часто работаю с терминалом.

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

Вс мар 06, 2022 00:56:40

Серьезно так сложно купить планку с разъемом? Штырьковый разъем на материнках есть до сих пор, причем на любых. Он просто не выводится на заднюю панель теперь.
Есть на любой материнке.


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

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

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

В большинстве случаев ссылаются на многопоточность.
Неужели придется перелопатить весь код, для того, что бы проверить в многопоточности ли дело... :shock:

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

Вс мар 06, 2022 09:06:55

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

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

Вс мар 06, 2022 17:17:44

Если работать через WinAPI, проблем быть не должно в любой винде. А если напрямую работать с портом, стабильного проема/передачи может не быть.

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

Вс мар 06, 2022 17:42:06

SerialGate

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

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

Вс мар 06, 2022 19:24:32

Попробуйте запустить свою программу под 98 или ХР - скорее всего, всё будет работать нормально, без задержек и потерь... :)

Да, я думал об этом...
Но программа рассчитана на использование на современном железе.
На каком нибудь микрокомпьютере.

Вообще, "форточки" не являются ОС реального времени
Да я в курсе, но видел собственными глазами как некоторая периферия работает в реальном времени. Джойстики например.

Если работать через WinAPI, проблем быть не должно в любой винде. А если напрямую работать с портом, стабильного проема/передачи может не быть.

класс SerialPort относится к WinAPI, на сколько я знаю...

Код:
using System.IO;
using System.IO.Ports;
using System;
Последний раз редактировалось uwrtey Вс мар 06, 2022 20:03:47, всего редактировалось 1 раз.

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

Вс мар 06, 2022 19:27:32

Проблема не в RT, а в говнокоде!
Естественно, при поллинге будет некая задержка. Но ты ее сам выставляешь. Скажем, поставишь одну миллисекунду - будет одна миллисекунда.
Если так критично, используй select вместо poll: там можно микросекундами оперировать.

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

Вс мар 06, 2022 19:53:17

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


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:
Проблема не в RT, а в говнокоде!
Естественно, при поллинге будет некая задержка. Но ты ее сам выставляешь. Скажем, поставишь одну миллисекунду - будет одна миллисекунда.
Если так критично, используй select вместо poll: там можно микросекундами оперировать.


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

"Пап, а ты с кем сейчас разговаривал? " - из анекдота :)))
Последний раз редактировалось uwrtey Вс мар 06, 2022 20:16:11, всего редактировалось 1 раз.

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

Вс мар 06, 2022 20:10:14

"Папа а ты с кем сейчас разговаривал? "

Т.е. ты ни слова не понял? Тогда зачем вообще взялся что-то программировать? Как ты считываешь данные с порта, ничего не зная о поллинге и т.п.? Делаешь тупые блокирующие read что ли?
Ответить