реклама на сайте
подробности

 
 
> Real time на Windows XP
Slovan
сообщение Sep 27 2012, 20:58
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 28-10-11
Пользователь №: 68 007



Добрый день!

Понимаю всю обсурдность вопроса... но стоит задача - обеспечить передачу UDP пакетов в сеть с жестким интервалом 10мс.
Система только виндоуз и ничего кроме виндоуз. (Причины: драйвера, ПО, просто лень разработчиков изучать другие системы)
В общем, уговорить перейти на что-то более адекватное у меня не получается.

Какие есть варианты?

Мультимедия таймер не обеспечивает необходимой точности.
http://www.intervalzero.com/ - вроде бы то, что нужно. Но непонятно, сколько времени уйдет на освоение и сколько вообще это будет стоить.

Если подключить к COM порту контроллер, который будет каждые 10мс посылать сигнал, и роботать по прерыванию - может это как-то улучшить ситуацию?
Go to the top of the page
 
+Quote Post
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (15 - 29)
gerber
сообщение Sep 28 2012, 09:42
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(sasamy @ Sep 28 2012, 13:33) *
Ну все - нужно срочно каждому тянуть синхронные коммуникации до Гринвича, ггг. Как говорится смотрю в книгу вижу фигу.

Не каждому, а только топикстартеру. Это он так ставит задачу.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
juvf
сообщение Sep 28 2012, 09:44
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(sasamy @ Sep 28 2012, 14:51) *
a детерминизм достаточный для задач ТС (10 мс) обеспечит даже ванильное ядро на х86 (HPET там давным давно есть на всех системах).

при чем здесь детерминизм? ну будет таймер давать импульсы с точностью ±1*10^(-10000000000000000000000000000000) секунд. и что дальше..... примет обычный линукс это событие.... но у него там ещё к примеру 100 фоновых задач... сколько времени пройдет от импульса до выхода первого байта из порта? Если постучать бубном над приоритетами в линуксе, то можно назначить приоритет задаче отправляющей запрос (как в винде), но все равно, задача по отправке запроса получит больший слот времени, но не все 100% и время от прерывания до выхода первого байта запроса будет плавать.
На сколько плавать? вопрос хороший... простой линукс изкоропки... без х11, 1 задача раз в 10 мс опрашивает устройства, 4 "фоновых" задачи по тсп отдают инфу. так задержки между опросами иногда получаются больше 100 мс, да и при передачи пакета.... по спецификации модбуса если в пакете между байтами пауза больше 1,5 символа, то пакет бракуется. на линуксе 1 задача постоянно шлет пакеты на скорости 921600..... так там постояк паузы до 2-3 символов. А настроить приоритеты на линуксе, даже без реал тайма - пока руки не дошли.


Цитата
http://www.on-time.com/rtkernel-dos.htm
Знакомая штучка?
*ЗАПЕСАЛ*

Цитата(Slovan @ Sep 28 2012, 15:23) *
Хм... Ну роутеров у нас нет, только свичи. Большого потока данных не идет. Небольшое колебание 9-11мс допускается. Вроде не должно быть проблем.

а обычная винда какое колебание даёт? Измеряли?
Go to the top of the page
 
+Quote Post
sasamy
сообщение Sep 28 2012, 09:55
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(juvf @ Sep 28 2012, 13:44) *
при чем здесь детерминизм? ну будет таймер давать импульсы с точностью ±1*10^(-10000000000000000000000000000000) секунд. и что дальше.....


Вы с гербером хоть иногда шлем виртуальной реальности снимайте sm.gif
Go to the top of the page
 
+Quote Post
syoma
сообщение Sep 28 2012, 10:05
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



У MATLAB есть Real-time Windows Target. Мне кажется, что там возможно то, что ТС требует.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 28 2012, 10:30
Сообщение #20


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(juvf @ Sep 28 2012, 12:44) *
*ЗАПЕСАЛ*

Я одно не пойму: фридос32 аппликухи в супервизоре запускает или? Если нет -какая может быть реалтаймовость?, если SVC при желании "заткнет" всю систему собой... smile3046.gif Int21h - и привет.

Сообщение отредактировал _Pasha - Sep 28 2012, 10:33
Go to the top of the page
 
+Quote Post
_pv
сообщение Sep 28 2012, 11:33
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



поднимите приоритет у процесса да посмотрите что получится:
и еще если ядер/процессоров больше чем одно может сильно помочь принудительно перекинуть процесс на другие ядра, там ему почти никто мешать не будет.
Код
SetPriorityClass (GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
//SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
SetProcessAffinityMask(GetCurrentProcess(), 1);
//SetThreadAffinityMask(GetCurrentThread(), 1);

__int64 freq;
__int64 t1;
__int64 t2;
QueryPerformanceFrequency((LARGE_INTEGER *) &freq);
QueryPerformanceCounter((LARGE_INTEGER *) &t1);
QueryPerformanceCounter((LARGE_INTEGER *) &t2);
while (1){
  while ((t2 - t1) < 0.01 * freq) QueryPerformanceCounter((LARGE_INTEGER *) &t2);
  QueryPerformanceCounter((LARGE_INTEGER *) &t1);
  sendUdpPacket();
}

вполне удавалось распарсить синхронный битовый поток просто подключенный к статусным линиям компорта (клоки и данные). с частотами в десятки килогерц, так что 10мс не должно быть проблемой. у меня там правда потеря данных вообще некритична была.
всё упирается в то, насколько критично иногда, пусть очень редко получить задержку более чем 1 мс и в вероятности этого события.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 28 2012, 16:35
Сообщение #22


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(_Pasha @ Sep 28 2012, 16:30) *
Я одно не пойму: фридос32 аппликухи в супервизоре запускает или? Если нет -какая может быть реалтаймовость?, если SVC при желании "заткнет" всю систему собой... smile3046.gif Int21h - и привет.
Дык, ежели повиснуть на таймере - никакой Int21h не помешаетsm.gif
Таймер, кстати, можно ускорить. Помнится, делал 1КГц, всё чудесно работало (в MS-DOS, но не суть).

Цитата(_pv @ Sep 28 2012, 17:33) *
поднимите приоритет у процесса да посмотрите что получится

+1. Мультимедиа таймер + REALTIME_PRIORITY_CLASS - давали вполне приемлемую работу с милисекундными интервалами.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Olej
сообщение Sep 28 2012, 21:50
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(juvf @ Sep 28 2012, 12:44) *
На сколько плавать? вопрос хороший... простой линукс изкоропки... без х11, 1 задача раз в 10 мс опрашивает устройства,


Откуда слухи? biggrin.gif
Таймслайс в ядрах 2.6 Linux из той самой вашей "изкоропки" - 1мс., и именно в таком временном масштабе будут происходить все процессы в Linux.


Цитата(gerber @ Sep 28 2012, 12:04) *
Возможность синхронизировать время по сети никак не гарантирует, что UDP пакеты дойдут до получателя строго с тем же интервалом, с каким вышли от отправителя.

Стандарт UDP вообще не гарантирует, что UDP пакеты вообще дойдут до получателя: стек IP вполне имеет право при высокой загруженности отправлять полученные дэйтаграммы в мусор без всяких реакции или уведомления.
ТС - читайте матчасть по IP, всё того же Р.Стивенса.
Не сможете вы ничего гарантировать при UDP!

P.S. TCP/IP Illustrated, 2nd Edition

Go to the top of the page
 
+Quote Post
Konst_777
сообщение Sep 29 2012, 17:04
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Olej @ Sep 29 2012, 00:50) *

Спасибо a14.gif. Получилось скачать и отсюда.
Go to the top of the page
 
+Quote Post
_pv
сообщение Sep 29 2012, 18:00
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Olej @ Sep 29 2012, 03:50) *
Не сможете вы ничего гарантировать при UDP!

если допустим +-1мс разброса вероятность потери можно сильно уменьшить, послав десяток другой пакетов вместо одного за эту самую 1мс.
а от TCP радости тут тоже не сильно много, то что пакет потерялся и его надо перепослать за 1мс можно и не понять.
то есть какой-нибудь свой простой протокол поверх UDP для контроля потерь может оказаться более подходящим для данной задачи.

а для синхронизации какой-нибудь 1588 не лучше подходит разве? ну или просто NTP.
зачем каждые 10мс с 10% точностью выдавать синхронизацию? по своим часам каждый эти 10мс отмерить не может? ну и иногда подводить их чтоб не разбегались.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 29 2012, 18:33
Сообщение #26


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Вот есть MIDI-RTP, RTP - протоколы. Они ведь поверх udp! А время доставки гарантируется...
Пожалуйста, объясните, за счет чего, я не понимаю. Типа, там в транспортном уровне все?

Сообщение отредактировал _Pasha - Sep 29 2012, 18:34
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 30 2012, 20:17
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Olej @ Sep 29 2012, 01:50) *
стек IP вполне имеет право при высокой загруженности отправлять полученные дэйтаграммы в мусор без всяких реакции или уведомления.

Можно ли получить от Вас какую-нибудь ссылку на стандарт/документ/книгу/что-то ещё, подтверждающие эти Ваши слова ?

При переполнении входных буферов, несомненно, входящая IP-датаграмма будет отброшена, но её отправитель будет уведомлён ICMP сообщением. Теоретически - ICMP сообщение тоже может быть отброшено из-за переполнения буферов, но уже на другой стороне, и тогда IP-датаграмма, действительно, молча "канет в лету". Но, это - уже ошибка в проектировании системы с "жестким" временем, но успользующую для передачи информации "узкие" каналы, а не недостаток UDP. Трименять же TCP в задачах с "жестким" временем - неразумно, поскольку TCP в описанной выше ситуации убивает "жесткое" время "наповал"...
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 30 2012, 22:16
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(_Pasha @ Sep 29 2012, 22:33) *
Вот есть MIDI-RTP, RTP - протоколы. Они ведь поверх udp! А время доставки гарантируется...

Нет, не гарантируется.... Пакеты могут запаздывать или, вообще, терятся. Эти протоколы "заточенны" под алгоритмы сокрытия ошибок. В случае потери (запаздывания) пакета - информация реального времени (голос, видео, и т.п.) воспроизводится с потерей качества с использованием тех пакетов, что были приняты к моменту времени, когда информацию по условию Real time необходимо воспроизвести.
Go to the top of the page
 
+Quote Post
Olej
сообщение Oct 1 2012, 08:02
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(_Pasha @ Sep 29 2012, 21:33) *
Вот есть MIDI-RTP, RTP - протоколы. Они ведь поверх udp! А время доставки гарантируется...


RTP создан главным образом (я не знаю других реальных применений) как несущий протокол для SIP, протокол для передачи потоковых видео-аудио. Там потеря даже и не одного UDP пакета никак принципиально не критична (вы разговаривали по VoIP каналам, наверняка ... ну и как? biggrin.gif ).

Всё что связано с RTP для этих целей очень обстоятельно и любопытно можно наблюдать (или почитать в их документации) в открытых проектах PBX (soft switch): Asterisk, а ещё лучше FreeSWITCH.

Go to the top of the page
 
+Quote Post
Slovan
сообщение Oct 1 2012, 11:05
Сообщение #30





Группа: Участник
Сообщений: 10
Регистрация: 28-10-11
Пользователь №: 68 007



Цитата(juvf @ Sep 28 2012, 13:44) *
а обычная винда какое колебание даёт? Измеряли?

~99.5% пакетов укладываются по времени.
Колебание 7-13мс. При чем на семерке пакеты идут вокруг 10.0 мс, а на ХР где-то ~75% приходит в 9.8мс и ~25% в 10.8 мс. Не знаю с чем это связано.
Сегодня буду разговаривать с алгоритмистами, как я понял, для них главное получать новые показания не реже, чем раз 10мс, то есть если уменьшить период до 5мс (или еще меньше) - это их полностью устроит.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01543 секунд с 7
ELECTRONIX ©2004-2016