Можно ли разработать систему сбора данных в реальном времени в Windows XP с точностью до микросекунды? - PullRequest
3 голосов
/ 29 ноября 2011

Для одного из моих проектов мне нужно разработать программное обеспечение, которое должно получать 2000 данных за 100 миллисекунд от параллельного порта после получения триггера из приложения. Это означает, что параллельный порт необходимо читать с интервалом 50 микросекунд. Частота данных установлена ​​на 10 кГц. Таким образом, этот процесс сбора данных должен осуществляться в реальном времени с точностью до микросекунды. Я пытаюсь программировать на Java. До сих пор удалось получить данные из параллельного порта, но изо всех сил пытался сохранить временной интервал. Мой вопрос: действительно ли возможно сделать это в среде Windows XP с такой временной (в микросекундах) точностью? Если да, не могли бы вы указать мне некоторые руководящие принципы / ресурсы?

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

3 голосов
/ 29 ноября 2011

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

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

Существуют возможности для реализации программного обеспечения реального времени на Java с использованием виртуальной машины с расширениями для «Спецификации реального времени для Java» (JSR-1), но в AFAIK нет никаких реализаций для Windows, поскольку сама Windows не имеет реального времени возможностей. Прежняя эталонная реализация от Sun (теперь поддерживаемая Oracle) работает на версиях Linux с поддержкой Solaris и RT, и есть другие реализации для встроенных систем.

0 голосов
/ 02 августа 2012

Существуют сторонние расширения реального времени для Windows.Вот один из них: http://www.directinsight.co.uk/products/venturcom/rtx.html

Они утверждают, что доставляют в режиме реального времени.Теперь вопрос о том, подходит ли Java для программирования в реальном времени, - это большой сложный вопрос.Есть сборка мусора, JIT-компиляция может помешать ... Я бы сказал - придерживайтесь нативного кода для критических по времени частей (сбор сигналов), создайте интерфейс для Java для симпатичного графического интерфейса.

C ++концептуально сильно отличается от Java, но, по крайней мере, синтаксис близок.

Ребята из RTX явно позиционируют себя как альтернативу пользовательскому оборудованию, утверждают, что процессоры Intel на обычных материнских платах могут обеспечивать обработку в реальном времени.Их вещи не бесплатны, хотя.Вы хотите бесплатно, идите со встроенным вкусом Linux.Или с QNX .

0 голосов
/ 02 августа 2012

Если вы не намерены делать это исключительно с Windows, может быть целесообразно добавить дополнительное оборудование. Хотя аппаратное обеспечение может быть таким же сложным, как и ПЛИС, вы можете сделать это с помощью чего-то столь же простого, как 8-битный микроконтроллер, такого как Atmega328, используемый в платах Arduino и IDE. Благодаря этому вы можете сэмплировать входные данные, буферизовать данные и подключить параллельный порт к ПК, а микроконтроллер будет действовать как FIFO между источником данных в реальном времени и потреблением данных с компьютера, близким к реальному.

Atmega328 имеет только 2 КБ ОЗУ, поэтому вам необходимо определить, достаточно ли этого, чтобы покрыть время простоя ПК. Если нет, то есть аналогичные микроконтроллеры с большим объемом оперативной памяти.

Arduino UNO доступен для

В случае, если вы не знакомы с микроконтроллерами, под скином нет операционной системы, которая бы вводила неуверенно. Системные проблемы не поддерживаются "незаметно". Написание кода больше похоже на написание драйвера ядра (в том смысле, что вам необходимо учитывать соображения в реальном времени, обработку прерываний и поддерживать целостность состояния ЦП), но окружающая система настолько проста, насколько это возможно.

- Карл

0 голосов
/ 29 ноября 2011

System.nanoTime () даже возвращает время с точностью до наносекунды, вы также можете использовать его для микросекунд.

...