programming-languages - tipos - ranking de lenguajes de programacion
¿Qué lenguajes se utilizan para la programación de sistemas en tiempo real? (9)
¿Lenguaje orientado en tiempo real?
Que es en tiempo real
Primero tenemos que definir qué significa en tiempo real .
Por supuesto, dependiendo de cómo funcionará su herramienta contra el entorno físico, no se podría realizar efectivamente el tiempo real , principalmente porque habrá muchas dependencias de terceros.
Si está construyendo cosas incrustadas utilizando microcontroladores como arduino , el lenguaje que se usará estará limitado por el hardware, pero con cosas más complejas como Raspberry Pi , la elección del idioma es muy amplia.
Granularidad
Esto depende de lo que esté midiendo, si está trabajando con:
- temperaturas del clima , una lectura cada 10 minutos podría ser suficiente
- altura o peso de las personas , una o tal vez cuatro leídas por día
- estado del servidor , entre 1 segundo para depuración fina hasta aproximadamente 1 hora para servidor secundario sin importancia y silencioso.
- Conteo de colisiones atómicas : algo más fino ...
Lectura basada en eventos
La forma correcta (mejor) de recopilar datos se basa en un evento de cambio de valor ... siempre que el dispositivo lo permita.
Su herramienta no debe sondear los valores del dispositivo, pero el dispositivo tiene que enviar valores a su herramienta cuando cambian.
Esto se puede hacer usando un disparador de interrupción de hardware o usando un protocolo de puerto como RS-232 que permanece escuchando en algún puerto serie, para muestra.
Entorno de monitoreo
Lo último que se debe advertir es cómo interactuará el usuario legítimo .
Si está creando un dispositivo independiente integrado, como un robot , puede usar bibliotecas gráficas para interactuar con la pantalla táctil.
Si está construyendo un monitor basado en la web, debe tener en cuenta que el cliente podría ser una vieja pantalla monocromática de 800x600 , que usa una conexión a Internet deficiente y un procesador pequeño ... Pero dependiendo del objetivo final si puede interactuar con los clientes, podría asegurar hardware fuerte y conexiones de internet fuertes. De todos modos, hay que vigilar la pérdida de conexión y el retraso de la comunicación entre el servidor y el cliente. En su mayoría hay dependencias de terceros.
¿Qué lenguaje de programación?
A partir de ahí, la elección del idioma es amplia y dependerá claramente de
- su conocimiento.
- granularidad solicitada (utilizando también eventos basados, por supuesto)
- la cantidad de tiempo que tiene para construir la herramienta (dinero;)
- retraso, compañeros de trabajo ...
- tipo de dispositivo
- tipo de monitoreo
- algunas otras razones políticas
Podría construir un motor de monitoreo en tiempo real usando bash y sql solo, he visto motores sofisticados que se construyeron solo con postgresql ... Personalmente, he construido un monitor de energía solar basado en la web usando perl , mysql y javascript .
No encontré ninguna información útil sobre lenguajes de programación para sistemas en tiempo real. Todo lo que encontré fue sistemas de tiempo real y lenguajes de programación: Ada 95, Java en tiempo real y C / POSIX en tiempo real ( algunos pdf aquí ), que parece hablar de extensiones de Java y C para sistemas en tiempo real (no tener el libro para leer). Además, el libro se publicó en 2001 y la información puede estar obsoleta ahora.
Por lo tanto, tengo dudas sobre si estos idiomas se usan en aplicaciones del mundo real o si los sistemas de tiempo real en el mundo real se hacen en otros idiomas, como los DSL.
Si la segunda opción es verdadera para usted, ¿cuáles son las características sobresalientes del idioma que usa?
El libro cubre el uso de Ada 95, el sistema de tiempo real Java y las extensiones POSIX en tiempo real (programadas en C). Ninguno de estos es directamente un lenguaje específico de dominio.
Ada 95 es un lenguaje de programación comúnmente utilizado a fines de los años 90 y (AFAIK) todavía se usa ampliamente para la programación en tiempo real en las industrias de defensa y aeroespacial. Hay al menos un DSL construido sobre Ada, SparkAda , que es un sistema de anotaciones que describe las características del sistema a una herramienta de verificación de programas.
Esta entrevista del 6 de abril de 2006 indica algunas de las clases y los cambios en las máquinas virtuales que conforman el sistema Java Real-Time System. No menciona ninguna extensión de lenguaje específica de dominio. No he encontrado el uso de Java en sistemas en tiempo real, pero no he estado buscando en el tipo de sistemas en los que esperaría encontrarlo (trabajo en simulación aeroespacial, donde es C ++, Fortran y ocasionalmente Ada). para sistemas de bucle en tiempo real).
POSIX en tiempo real es un conjunto de extensiones para las instalaciones del sistema operativo POSIX. Como extensiones de sistema operativo, no requieren nada específico en el idioma. Dicho esto, puedo pensar en un DSL basado en C para describir sistemas integrados, SystemC , pero no tengo idea si también se usa para generar los sistemas integrados.
No se menciona en el libro Matlab , que en los últimos años ha pasado de ser una herramienta de simulación a un sistema de desarrollo basado en modelos para sistemas en tiempo real. Matlab / Simulink es, en efecto, un DSL para programación lineal, máquinas de estado y algoritmos. Matlab puede generar C o HDL para sistemas en tiempo real e integrados. Es muy raro ver que se anuncie un trabajo en tiempo real de aviónica, EW u otra industria de la defensa que no requiera algo de experiencia en Matlab. (No trabajo para Matlab, pero es difícil sobreestimar lo ubicuo que es en la industria)
La especificación en tiempo real para Java ahora tiene varias implementaciones de calidad comercial:
Estos productos abarcan el continuo desde la compilación al código nativo (Aonix) a J2ME (aicas, apogee), a J2SE completo (Sun, IBM). La mayoría, si no todos, han visto implementaciones en pequeñas cantidades de sistemas de seguridad o de misión crítica, pero el impulso está creciendo. Los ejemplos incluyen la modernización del radar de vigilancia espacial de Eglin AFB y el uso de RTSJ por parte de la Armada de los EE. UU. En el DDG-1000 / destructor Zumwalt . Sun también reclama el despliegue en el dominio de procesamiento de transacciones financieras.
Si está interesado en RTSJ, sugiero la programación en tiempo real de la plataforma de Peter Dibble, o la programación concurrente y en tiempo real de Professor Wellings en Java .
En una nota relacionada, también se está trabajando para proporcionar un perfil de seguridad crítica para el lenguaje de programación Java, creado como un subconjunto de RTSJ. Además, se formó un grupo de expertos para explorar un RTSJ DRTSJ distribuido, pero el trabajo está estancado.
Las aplicaciones en tiempo real se pueden hacer en casi cualquier idioma. Sin embargo, el entorno (sistema operativo, tiempo de ejecución y bibliotecas de tiempo de ejecución) debe cumplir con las restricciones de tiempo real. En la mayoría de los casos, el tiempo real significa que siempre hay un momento determinista en el que algo sucede. El tiempo determinista suele ser un valor de tiempo muy bajo en el rango de microsegundos / milisegundos.
Los sistemas en tiempo real dependen únicamente de este criterio, ya que las especificaciones generalmente dicen algo como ''Cada x (período de tiempo) (hacer algo | verificar algo)''. Por lo general, esto sucede si el sistema interactúa con sensores externos y controla sistemas que salvan vidas o que ponen en peligro la vida.
Estaba trabajando en un sistema de información y entretenimiento para el automóvil desarrollado principalmente en C / C ++ con un sistema operativo configurado específicamente para cumplir con las restricciones en tiempo real para proporcionar navegación en tiempo real y reproducción de medios.
Pero esto no es todo para los sistemas en tiempo real: por lo general, la selección de algoritmos en todo el sistema está diseñada para tener tiempos de ejecución deterministas de acuerdo con la notación Big-O, principalmente con tiempo lineal o constante. Todo lo demás se considera no determinista y, por lo tanto, no se puede utilizar para sistemas en tiempo real.
Los PLC ejecutan la secuencia y el código fbd, que es realmente un dsl en tiempo real en el sentido de que sus opciones son tan limitadas que es difícil de programar de una manera que podría resultar en un rendimiento de tiempo de ejecución impredecible
Mi Kickstarter http://www.kickstarter.com/projects/767046121/crawl-space-computing-with-connel ofrece una aplicación realmente útil del lenguaje C a la programación en tiempo real, y todos los problemas relacionados (como la programación en paralelo). http://www.kickstarter.com/projects/767046121/crawl-space-computing-with-connel Se llama "Programación amplia" y lo he estado haciendo la mayor parte de mi vida. Las recompensas incluyen una biblioteca de software y un libro, diseñado para ser útil.
No puedo creer que nadie haya mencionado el lenguaje de programación de LabVIEW que se usa ampliamente para los sistemas críticos de seguridad en tiempo real. Cuenta con extensas bibliotecas y patrones de diseño conocidos para la arquitectura e implementación de sistemas RT.
Además, National Instruments fabrica diversos hardware (cRIO, PXI y etc.) que están diseñados para aplicaciones en tiempo real.
Utilizamos LabVIEW para Fracking (fracturación hidráulica) que se utiliza en entornos críticos y seguros.
Por cierto, LabVIEW también se usa para aplicaciones no RT.
Soy un ingeniero de software de aviónica. Pude participar en varios proyectos de desarrollo. Los lenguajes que utilicé en esos proyectos son: C, C ++ y Java en tiempo real.
C es genial C ++ no es tan malo, pero C / C ++ requiere estándares de codificación estrictos para las consideraciones de seguridad como DO-178B.
Creo que Java en tiempo real es el camino a seguir, pero aún no veo muchas aplicaciones de aviónica.
El jet-trainer coreano T-50 tendrá una computadora de la misión que ejecuta la aplicación RT de Java que sirve pantallas HUD y MFD, y todas las funciones de misión crítica.
Todos los sistemas en tiempo real con los que he trabajado se escribieron predominantemente en C con algunos bits de ensamblador, o se escribieron principalmente en ensamblador con pequeños bits de C. respectivamente.) Sin embargo, algunos de los sistemas en tiempo real con los que he trabajado han utilizado, no exactamente DSL, generadores de código de cosecha propia.