Какие языки используются для программирования в реальном времени?
Я не нашел полезной информации о языках программирования для систем реального времени. Все, что я нашел, это системы реального времени и языки программирования: Ada 95, Real-Time Java и C / POSIX реального времени ( некоторые здесь pdf ), которые, похоже, говорят о расширениях Java и C для систем реального времени (я не прочитайте книгу). Кроме того, книга была опубликована в 2001 году, и теперь информация может быть устаревшей.
Итак, я сомневаюсь, используются ли эти языки в реальных приложениях, или если системы реального времени в реальном мире сделаны на других языках, таких как DSL.
Если второй вариант верен для вас, каковы выдающиеся характеристики используемого вами языка?
Спецификация Real-Time для Java теперь имеет несколько реализаций коммерческого уровня:
- JavaRTS от Sun
- IBM WebSphere Real-Time
- Aonix PERC
- aicas JamaicaVM
- Апогей Афелий
Эти продукты охватывают континуум от компиляции до собственного кода (Aonix) до J2ME (aicas, apogee) до полного J2SE (Sun, IBM). Большинство, если не все, видели развертывание в небольшом количестве систем безопасности или критически важных задач, но импульс строится. Примеры include модернизацию радара космического наблюдения Эглин и использование ВМС США RTSJ в эсминце DDG-1000 / Zumwalt . Sun также заявляет о развертывании в домене обработки финансовых транзакций.
Если вас интересует RTSJ, я предлагаю Программу платформы реального времени Питера Диббла или Программирование параллельного и реального времени профессора Веллингса в Java .
В соответствующей заметке также идет работа по обеспечению профиля безопасности для языка программирования Java, построенного как подмножество RTSJ. Кроме того, создана группа экспертов для изучения распределенного RTSJ DRTSJ, но работа застопорилась.
Я инженер-программист авионики. Я смог участвовать в нескольких проектах развития. Языками, которые я использовал в этих проектах, являются: C, C ++ и Java в реальном времени.
C отлично. C ++ не так уж плох, но C / C ++ требует строгих стандартов кодирования для соображений безопасности, таких как DO-178B.
Я думаю, что Java в режиме реального времени – это путь, но я пока не вижу много приложений для авионики.
Корейский реактивный тренажер T-50 будет иметь компьютер миссии, на котором запущено приложение RT Java, обслуживающее дисплеи HUD и MFD, и все критически важные функции.
Книга охватывает использование Ada 95, системы реального времени Java и расширений POSIX реального времени (запрограммированных на C). Ни один из них не является непосредственно языком, специфичным для домена.
Ada 95 – это язык программирования, обычно используемый в конце 90-х годов и (AFAIK), который все еще широко используется для программирования в реальном времени в области обороны и аэрокосмической промышленности. Существует, по крайней мере, один DSL, построенный поверх Ada – SparkAda, который представляет собой систему аннотаций, которая описывает характеристики системы для инструмента проверки программы.
Это интервью от 6 апреля 2006 года указывает на некоторые classы и изменения виртуальной машины, которые составляют Java Real-Time System. В нем не упоминаются какие-либо расширения языка для конкретного домена. Я не сталкивался с использованием Java в системах реального времени, но я не смотрел на те системы, в которых я ожидал бы его найти (я работаю в аэрокосмическом симуляции, где это C ++, Fortran и иногда Ada для систем реального времени в замкнутом контуре).
POSIX реального времени представляет собой набор расширений для объектов операционной системы POSIX. Как расширения ОС, они не требуют ничего конкретного на языке. Тем не менее, я могу представить один DS на основе C для описания встроенных систем – SystemC, но я не знаю, используется ли он для создания встроенных систем.
В книге не упоминается Matlab , который в последние годы перешел от инструмента моделирования к моделируемой системе разработки для систем реального времени. Matlab / Simulink, по сути, является DSL для линейного программирования, государственных машин и алгоритмов. Matlab может генерировать C или HDL для реального времени и встроенных систем. Очень редко можно увидеть рекламу авионики, EW или другой оборонной промышленности в режиме реального времени, которая не требует какого-либо опыта Matlab. (Я не работаю для Matlab, но трудно переоценить, насколько повсеместно это происходит в индустрии)
Приложения реального времени могут быть созданы практически на любом языке. Однако среда (операционная система, среда выполнения и библиотеки времени выполнения) должна соответствовать требованиям реального времени. В большинстве случаев реальное время означает, что всегда есть детерминированное время, в котором что-то происходит. Детерминированное время обычно является очень низким значением времени в диапазоне микросекунд / миллисекунд.
Системы реального времени зависят исключительно от этих критериев, так как в конкретных формулировках обычно говорится что-то вроде «Каждый х (период времени) (что-то делать, что-то проверять)». Обычно это происходит, если система взаимодействует с внешними датчиками и управляет жизненно важными или опасными для жизни системами.
Я работал над автомобильной навигационной системой и информационно-развлекательной системой, разработанной в основном на C / C ++ с операционной системой, сконфигурированной специально для удовлетворения ограничений в реальном времени для обеспечения навигации в реальном времени и воспроизведения мультимедиа.
Но это не все для систем реального времени: обычно для выбора алгоритмов во всей системе требуется детерминированное время автономной работы в соответствии с нотами Big-O, в основном с использованием линейного или постоянного времени. Все остальное считается недетерминированным и, следовательно, не пригодным для использования в системах реального времени.
Все системы реального времени, с которыми я работал, были в основном записаны на C с некоторыми битами ассемблера или написаны в основном на ассемблере с небольшими бит C. (В зависимости от того, говорим ли мы о 90-х годах и далее, или о 80-х годах, соответственно.) Однако некоторые из систем реального времени, с которыми я работал, использовали – не точно DSL – специальные генераторы генерируемого кода.
Язык в реальном времени?
Что такое в реальном времени
Сначала мы должны определить, что означает в реальном времени .
Конечно, в зависимости от того, как ваш инструмент будет работать против физической среды, чистое реальное время не может быть эффективно выполнено, главным образом потому, что будет много зависимостей третьей стороны.
Если вы создаете встроенный контент с помощью микроcontrollerов, таких как arduino , язык для использования будет ограничен аппаратным обеспечением, но с более сложными вещами, такими как Raspberry Pi , выбор языка очень широк.
Зернистость
Это зависит от того, что вы измеряете, если вы работаете с:
- погодные температуры , по одному чтению каждые 10 минут может быть достаточно
- высота или вес людей , один или, возможно, четыре дня
- статус сервера , между 1 секундой для тонкой отладки примерно до 1 часа для тихого неважного вторичного сервера.
- атомный столкновение : что-то прекрасное …
Чтение на основе событий
Правильный (лучший) способ сбора данных основан на событии изменения стоимости … всякий раз, когда это разрешает это устройство.
Ваш инструмент должен не проверять значения с устройства, но устройство должно отправлять значения вашему инструменту, когда они меняются.
Это можно сделать, используя триггер аппаратного прерывания или используя протокол протоколов, например, RS-232, который будет прослушивать какой-то serial port, для образца.
Мониторинг среды
Последнее, что нужно предупредить, это то, как будет взаимодействовать законный пользователь .
Если вы создаете встроенное автономное устройство, например робот , вы можете использовать графические библиотеки для взаимодействия с сенсорным экраном.
Если вы создаете веб-монитор, возможно, вам стоит помнить, что клиент может быть старым monoхромным экраном 800×600 , используя плохое подключение к Интернету и небольшой процессор … Но в зависимости от конечной цели, если вы можете взаимодействовать с клиентами, вы может обеспечить сильное оборудование и сильные интернет-соединения. В любом случае вам нужно следить за потерей связи и событием для задержки связи между сервером и клиентом. В основном существуют зависимости сторонних сторон.
Какой язык программирования?
Оттуда выбор языка широк и четко зависит от
- Ваши знания.
- запрошенная степень детализации (с использованием, конечно, и событий)
- время, необходимое для создания инструмента (деньги;)
- задержка, сотрудники …
- вид устройства
- вид мониторинга
- некоторые другие политические причины
Вы можете создать механизм мониторинга в режиме реального времени, используя только bash и sql , я видел сложные двигатели, которые были созданы только в postgresql … Я лично создал веб-монитор солнечной энергии, используя perl , mysql и javascript .
Я не могу поверить, что никто не упомянул язык программирования LabVIEW, который широко используется для критически важных систем в режиме реального времени. Он имеет обширные библиотеки и хорошо известные шаблоны проектирования для архитектуры и внедрения для систем RT.
Также National Instruments производит различные аппаратные средства (cRIO, PXI и т. Д.), Которые предназначены для приложений реального времени.
Мы используем LabVIEW для Fracking (Hydraulic Fracturing), который используется в безопасных средах.
Кстати, LabVIEW также используется и для приложений, не относящихся к RT.
ПЛК запускают код лестницы и fbd, который действительно является dsl в режиме реального времени в том смысле, что ваши параметры настолько ограничены, что их сложно программировать таким образом, чтобы это приводило к непредсказуемой производительности во время выполнения
Действительно целеустремленное применение языка C для программирования в реальном времени – и все связанные с этим проблемы (например, параллельное программирование) – предлагается моим Kickstarter http://www.kickstarter.com/projects/767046121/crawl-space-computing- with-connel Это называется «Широкое программирование», и я занимаюсь этим большую часть своей жизни. Наgradleы include в себя библиотеку программного обеспечения и книгу, предназначенную для использования.