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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Windows и реальное время
DMD
сообщение Jun 24 2009, 19:47
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166



Здравствуйте,
У меня такой вопрос. Я разрабатываю программно-аппаратный комплекс и столкнулся с проблемой: нужно каждые (минимум) 30-50 мс записывать данные на устройство и считывать его тоже с такой же дискретностью. То есть нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным.
Системы - Windows XP/2000/Vista.

Проблема в том, что все разработки в этой области - платные, причем очень дорогие. Нет ли чего-нибудь бесплатного и простого в этой области?

И ещё: приоритет REALTIME для потока - не поможет?

Спасибо.


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 24 2009, 20:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Ну раз "аппаратный", то, как минимум, прерывания еще никто не отменял. Да и мультимедийные таймера тоже


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DMD
сообщение Jun 25 2009, 05:58
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166



Так там проблема как раз в том, что из аппаратной части - карта сбора данных (то есть не собственная), поэтому реальное время нужно реализовывать на стороне обрабатывающего ПК (а он работает под ХР)...


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 25 2009, 06:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(DMD @ Jun 25 2009, 08:58) *
Так там проблема как раз в том, что из аппаратной части - карта сбора данных (то есть не собственная)

Не собственная, это хорошо, только "собственные" приходилось видеть сделанные через... "не собственные", они для людей делаются, посему чего-нибудь типа прерываний, DMA, ..., как правило присутствуют. Учите матчасть. Даже если это вдруг действительно огрызок счастья, то 30-50ms это совершенно не время для Windows и в части обработки событий от собственных таймеров.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sysel
сообщение Jun 25 2009, 17:09
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Копайте в сторону мультимедийного таймера. (кажись, библиотека mmsystem.dll)
Было дело - наткнулся на "реальное время" в XP. Через мультимедийный таймер получалось включаться каждые 2 мс, но периодически, когда другой процесс записывал что-то на HDD или гнал поток данных по сети, в моём приложении реальное время сыпалось. Задержки получались миллисекунд по 20...

Вообще XP и т.п. не обеспечивают реального времени, если не использовать расширения реального времени.

Смотрите в сторону RTOS. Оч. рекомендую посмотреть на Windows CE
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 27 2009, 05:56
Сообщение #6


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(DMD @ Jun 25 2009, 09:58) *
Так там проблема как раз в том, что из аппаратной части - карта сбора данных (то есть не собственная), поэтому реальное время нужно реализовывать на стороне обрабатывающего ПК (а он работает под ХР)...


"Реальное время" в Вашем случае придется реализовывать на уровне драйвера устройства. Не на уровне пользовательской программы. Но плата сбора данных должна для этого предоставить какие-то зацепки - выход прерывания и документацию про это. Если всё закрыто - то драйвер с документацией (или примерами как из программы пользователя можно передать в лрайвер данные дол того, как возникло прерывание).

Если ничего нет - проще сделать правильную плату сбора данных.

Цитата(DMD @ Jun 24 2009, 23:47) *
И ещё: приоритет REALTIME для потока - не поможет?

Для потока user mode - не поможет. Во всяком случае, драйвер должен тоже об этом позаботится.

Цитата(DMD @ Jun 24 2009, 23:47) *
Проблема в том, что все разработки в этой области - платные, причем очень дорогие. Нет ли чего-нибудь бесплатного и простого в этой области?


А попробуйте в "эту область" въехать самостоятельно. Литература и примеры работающих драйверов доступны, за пару месяцев непрерывной работы при наличии пары компютеров и представления об архитектуре операционной системы (и согласии "играть по правилам" которые обязательны при написании kernel-mode программ) можете сделать устраивающее Вас решение (если есть документация на плату с описанием портов и правил работы с ними). И если разработчики предусмотрели прерывания.

Что за плата-то?

Сообщение отредактировал Genadi Zawidowski - Jun 27 2009, 06:09
Go to the top of the page
 
+Quote Post
DMD
сообщение Jul 10 2009, 15:39
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166



Спасибо, ребят. Ща сам покопаю.
Плата - дешевая ISA - ACL-8112DG и иже с ней...
Спасибо!


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
tolik1
сообщение Jul 13 2009, 06:18
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016



Цитата(DMD @ Jun 24 2009, 23:47) *
Здравствуйте,
У меня такой вопрос. Я разрабатываю программно-аппаратный комплекс и столкнулся с проблемой: нужно каждые (минимум) 30-50 мс записывать данные на устройство и считывать его тоже с такой же дискретностью. То есть нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным.
Системы - Windows XP/2000/Vista.

Проблема в том, что все разработки в этой области - платные, причем очень дорогие. Нет ли чего-нибудь бесплатного и простого в этой области?

И ещё: приоритет REALTIME для потока - не поможет?

Спасибо.

Вообще-то все упирается в то, какие временные интервалы и с какой точностью их надо обеспечивать...
Если 30-50 мс то вполне возможно:
do
{
sleep(30)
.............(обработка)
}
while(1)
поток в TimeCritical....
Период будет болтаться - 35-40 мс (учитывайте время обраьртки). По опыту знаю - Sleeep(Api32) дает погрешность 1-2 мс+ переключение контекста....(зависит от количества приложений, быстродействия...)
Если надо обеспечивать более короткие или более точно временные интервалы, то прерывания. Как правильно Вам подсказывают. В плате это должно быть.
Go to the top of the page
 
+Quote Post
АНТОН КОЗЛОВ
сообщение Jul 15 2009, 03:17
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 344
Регистрация: 3-01-09
Из: УФА
Пользователь №: 42 894



Цитата(DMD @ Jun 24 2009, 22:47) *
Здравствуйте,
У меня такой вопрос. Я разрабатываю программно-аппаратный комплекс и столкнулся с проблемой: нужно каждые (минимум) 30-50 мс записывать данные на устройство и считывать его тоже с такой же дискретностью. То есть нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным.
Системы - Windows XP/2000/Vista.

Проблема в том, что все разработки в этой области - платные, причем очень дорогие. Нет ли чего-нибудь бесплатного и простого в этой области?

И ещё: приоритет REALTIME для потока - не поможет?

Спасибо.

Процедуры для работы с аппаратурой и синхронизации по времени выполняйте в отдельном потоке с приоритетом REALTIME. Под XP может оеспечить интервал 50-100 микросекунд и лучше. Материал есть на Specosoft и на WASM в "секретах WIN32" . Все на дельфи. Очень занятные статьи.
С УСБ в реальном времени из-за буферизации не получится, а вот для встаиваемых плат или для ЛПТ никаких проблем.

Естестественно, что эти приемы имеют реальное воплощение в экспериментальных установках безо всяких лишних дров и СИ.

Ни о каких деньгах на WASMе не говорят. Свободный сайт для свободных людей. Желаю удачи.

Сообщение отредактировал АНТОН КОЗЛОВ - Jul 15 2009, 03:20
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 15 2009, 07:12
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(DMD @ Jun 24 2009, 23:47) *
Здравствуйте,
У меня такой вопрос. Я разрабатываю программно-аппаратный комплекс и столкнулся с проблемой: нужно каждые (минимум) 30-50 мс записывать данные на устройство и считывать его тоже с такой же дискретностью. То есть нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным.
Системы - Windows XP/2000/Vista.
Windows не RealTime система, так что гарантировать не получится.
Цитата
И ещё: приоритет REALTIME для потока - не поможет?
Поможет, (не забудьте и процессу поставить REALTIME), но гарантию все равно не даст.
Кроме того - 30-50мс для User Mode это слишком мало.

Смотрите в сторону Device Driver'а (и DPC в нем), но и это не даст 100% гарантию
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Jul 15 2009, 07:51
Сообщение #11


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(DMD @ Jun 24 2009, 23:47) *
нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным.
Системы - Windows XP/2000/Vista.


Независимо от операционной системы в любом писюке есть часы доступные через порты. А их можно заставить генерить меандр вплоть до 1/8192 секунды.
Вам хватит и 1/32. Конечно в современном чипсете этого вывода давно нет, но включить прерывания по нему можно и запихнуть весь свой вычислительный поток в обработчик. biggrin.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 16 2009, 07:53
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(_4afc_ @ Jul 15 2009, 11:51) *
Независимо от операционной системы в любом писюке есть часы доступные через порты. А их можно заставить генерить меандр вплоть до 1/8192 секунды.
Независимо от порта, Windows не даст к нему прямого доступа. Кроме того, Windows может вообще откачать всю вашу программу по своему усмотрению.
Цитата
Конечно в современном чипсете этого вывода давно нет, но включить прерывания по нему можно и запихнуть весь свой вычислительный поток в обработчик. biggrin.gif
Про прикладное приложение Windows можете сразу забыть crying.gif
Go to the top of the page
 
+Quote Post
АНТОН КОЗЛОВ
сообщение Jul 20 2009, 02:52
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 344
Регистрация: 3-01-09
Из: УФА
Пользователь №: 42 894



Цитата(XVR @ Jul 16 2009, 11:53) *
Независимо от порта, Windows не даст к нему прямого доступа. Кроме того, Windows может вообще откачать всю вашу программу по своему усмотрению.
Про прикладное приложение Windows можете сразу забыть crying.gif

Пилите гири. Почитайте тщательнее статьи WASM.ru. Там как раз для инженеров и научных сотрудников, а не для бухгалтеров.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 20 2009, 06:31
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Если нужно поллить - на большинстве современных компов нормально работают мультимедийные таймеры.

http://msdn.microsoft.com/en-us/library/ms712713(VS.85).aspx

Нить должна быть с приоритетом реального времени, только следует учитываать, что такие нити при ошибках программиста очень хорошо подвешивают GUI, поэтому отладка на них требует аккуратности.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 20 2009, 08:42
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(АНТОН КОЗЛОВ @ Jul 20 2009, 06:52) *
Пилите гири. Почитайте тщательнее статьи WASM.ru. Там как раз для инженеров и научных сотрудников, а не для бухгалтеров.
Это вы к чему? Чтение WASM.ru сделает из Windows систему реального времени?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 03:54
Рейтинг@Mail.ru


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