|
|
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Столкнулся с проблемой при работе с SerialPort в C#. Идет большой поток данных через USB COM порт (более 1 мегабайта в секунду) и шарповый класс просто не успевает его принимать и обрабатывать. Часть данных теряется, видимо из-за переполнения буфера в самом порту. Поэтому хочу переписать код для приема данных из порта на неуправляемом коде + большой кольцевой буфер. Все это оформить в виде COM DLL на плюсах. Когда приходит очередная порция данных, бибилиотека должна генерировать событие и должна обеспечивать доступ к своему буфера, чтобы шарповый код мог в любой момент забрать накопленные там данные. В общем может кто-то уже видел/делал такой велосипед? Из платных я наткнулся только на это но там все ссылки битые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 11:02 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Eolt Поэтому хочу переписать код для приема данных из порта на неуправляемом коде + большой кольцевой буфер.Что мешает это сделать на самом C# ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 11:18 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Eolt Поэтому хочу переписать код для приема данных из порта на неуправляемом коде + большой кольцевой буфер.Что мешает это сделать на самом C# ? Видимо JIT, GC мешают. Не может шарповый код на такой скорости данные принимать и парсить в нем пакеты с данными. 7000 пакетов в секунду приходит где-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 11:33 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Eoltkealon(Ruslan)пропущено... Что мешает это сделать на самом C# ? Видимо JIT, GC мешают. Не может шарповый код на такой скорости данные принимать и парсить в нем пакеты с данными. 7000 пакетов в секунду приходит где-то. т.е. сделать всё что вы описали, т.е. "разделить чтение в кольцевой буфер" и "парсинг из буфера" вы уже попробовали и всё так же плохо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 11:53 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
EoltСтолкнулся с проблемой при работе с SerialPort в C#. Идет большой поток данных через USB COM порт (более 1 мегабайта в секунду) и шарповый класс просто не успевает его принимать и обрабатывать. Часть данных теряется, видимо из-за переполнения буфера в самом порту. Поэтому хочу переписать код для приема данных из порта на неуправляемом коде + большой кольцевой буфер. Все это оформить в виде COM DLL на плюсах. Когда приходит очередная порция данных, бибилиотека должна генерировать событие и должна обеспечивать доступ к своему буфера, чтобы шарповый код мог в любой момент забрать накопленные там данные. В общем может кто-то уже видел/делал такой велосипед? Из платных я наткнулся только на это но там все ссылки битые. Мне кажется, это твои девичьи фантазии всё. Тебе надо для начала очень хорошо выяснить, почему теряются данные в USB ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 12:23 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Eoltпропущено... Видимо JIT, GC мешают. Не может шарповый код на такой скорости данные принимать и парсить в нем пакеты с данными. 7000 пакетов в секунду приходит где-то. т.е. сделать всё что вы описали, т.е. "разделить чтение в кольцевой буфер" и "парсинг из буфера" вы уже попробовали и всё так же плохо? Да, отдельный проект в солюшене, это шарповая сборка которая занимается получением сырых данных из порта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 15:57 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Устройство слишком быстро пишет в COM порт, порядка 7000 пакетов в секунду, каждый пакет по 162 байта. Объем данных можешь посчитать сам. Объем буфера в COM порте 4096 байт. Прежде чем шарповый код прочитает данные из буфера порта, он оказывается уже много раз переполненным и перезаписанным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:00 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
EoltMasterZiv, Устройство слишком быстро пишет в COM порт, порядка 7000 пакетов в секунду, каждый пакет по 162 байта. Объем данных можешь посчитать сам. Объем буфера в COM порте 4096 байт. Прежде чем шарповый код прочитает данные из буфера порта, он оказывается уже много раз переполненным и перезаписанным.хм тогда проблема в планировщике задач, он просто не так часто переключает время на твой процесс, скорее всего с сишным кодом будет тоже самое. надо копать в сторону DMA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:30 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)EoltMasterZiv, Устройство слишком быстро пишет в COM порт, порядка 7000 пакетов в секунду, каждый пакет по 162 байта. Объем данных можешь посчитать сам. Объем буфера в COM порте 4096 байт. Прежде чем шарповый код прочитает данные из буфера порта, он оказывается уже много раз переполненным и перезаписанным.хм тогда проблема в планировщике задач, он просто не так часто переключает время на твой процесс, скорее всего с сишным кодом будет тоже самое. надо копать в сторону DMA +1 4096 / (162 * 7000) = 0.0036 сек., т.е. буфер заполняется за 3.6 мс, т.е. твоя прога не должна прерываться более чем на 3.6 мс, а диспетчер потоков виндовса выделяет кванты по 10 мс, т.е. чуть загрузили проц и пошли потери данных. Как вариант: (можно на C#) вынести чтение порта в отдельный EXE, при запуске повышать приоритет до максимального там цикл чтения из порта и отправка в TCP-соединение. Далее другим процессом спокойно читай TCP и парси. В остальном ничего особенного нет. Поток данных 1.1 Мб/сек это немного, тут не требуется каких-то сверхскоростных обработчиков. Проблема только в маленьком буфере COM порта. PS Погугли, может размер буфера можно поменять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:56 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 17:18 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
EoltОбъем буфера в COM порте 4096 байт. Прежде чем шарповый код прочитает данные из буфера порта, он оказывается уже много раз переполненным и перезаписанным. Во-первых, объём буфера регулируется через SetupComm. В отличии от железных UART софтовая эмуляция не ограничена в размерах. Во-вторых, при переполнении буфера посылается сигнал источнику о приостановке передачи и нормальные устройства его распознают. В-третьих, может, стоит выкинуть прокладку в виде СОМ-эмулятора и работать непосредственно через USB? Для внешних USB винтов, например, никаких проблем с приёмом/передачей не наблюдается и на гораздо большей скорости. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 17:22 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, с внешними USB винтами DMA работает, а не ЦП и управление сделано на уровне драйверов, для хз какого устройства естественно драйвер самому клепать нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 20:18 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)с внешними USB винтами DMA работает, а не ЦП Хочешь сказать, что внешний винт как-то насквозь проходит весь южный мост и напрямую выходит на шину памяти? Что-то я сильно сомневаюсь в этом... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 21:00 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, КОМ порты не рассчитаны на такие скорости (10Мбит). Вероятно, есть отдельный УСБ-АПИ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 00:13 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
SiemarglКОМ порты не рассчитаны на такие скорости (10Мбит). Реальные UART, конечно, нет. Но у виртуального кома там от кома только название устройства, которое надо пихать в CreateFile(). Чисто старые программы хоть как-то с этим могли работать. Ну и нубам это проще, чем код типа такого: Код: sql 1. 2. 3. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 00:34 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovХочешь сказать, что внешний винт как-то насквозь проходит весь южный мост и напрямую выходит на шину памяти? Что-то я сильно сомневаюсь в этом... ну почти авторКонтроллер DMA - Используется для уменьшения нагрузки на центральный процессор в случае длительного обмена большим потоком данных с устройствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 00:35 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
DMA-контроллеры сдохли где-то во времена Pentium. Сейчас используется условный bus-mastering. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 03:52 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
В общем, Eoltшарповый класс просто не успевает его принимать и обрабатывать Для начала выкинь этот класс и попробуй читать обычными функциями ввода-вывода в большие буфера. Если чтение будет успевать - будешь решать как ускорить и распараллелить обработку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 12:31 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDMA-контроллеры сдохли где-то во времена Pentium. Сейчас используется условный bus-mastering.эт тоже самое, просто маркетинг Dimitry SibiryakovВ общем, Eoltшарповый класс просто не успевает его принимать и обрабатывать Для начала выкинь этот класс и попробуй читать обычными функциями ввода-вывода в большие буфера. Если чтение будет успевать - будешь решать как ускорить и распараллелить обработку. почти гарантировано тоже самое выйдет - ибо причина никуда не денется, но попробовать конечно, никто не мешает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 12:56 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, т.е., например, хапанул ты в буфер тут "вдруг" системный таймер нашу задачку отстранил от выполнения, и досвидос на время которого хватит что бы буфер переполнился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 13:05 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovEoltОбъем буфера в COM порте 4096 байт. Прежде чем шарповый код прочитает данные из буфера порта, он оказывается уже много раз переполненным и перезаписанным. Во-первых, объём буфера регулируется через SetupComm. В отличии от железных UART софтовая эмуляция не ограничена в размерах. Во-вторых, при переполнении буфера посылается сигнал источнику о приостановке передачи и нормальные устройства его распознают. В-третьих, может, стоит выкинуть прокладку в виде СОМ-эмулятора и работать непосредственно через USB? Для внешних USB винтов, например, никаких проблем с приёмом/передачей не наблюдается и на гораздо большей скорости. Дмитрий, там разве не синхронный обмен с USB идёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 15:11 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
MasterZivДмитрий, там разве не синхронный обмен с USB идёт?там что угодно может быть, всё от устройства зависит в данном случае, скорее всего, примитивные АЦП-ки c 10-ка датчиков постоянно лупят измерения - очень на наши универские лабы похоже, внешне только частоту настроить можно но это, только, Eolt прояснить может ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2018, 08:36 |
|
||
|
COM библиотека для работы с высокоскоростным RS-232 портом
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDMA-контроллеры сдохли где-то во времена Pentium. Сейчас используется условный bus-mastering.С какого перепугу? http://www.xilinx.com/support/documentation/application_notes/xapp1052.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2018, 15:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39699743&tid=2017761]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 524ms |

| 0 / 0 |
