Volviendo al
primer artículo, me gustaría explicar dónde surgió la necesidad de desarrollar un mecanismo de extensión con una interfaz gráfica (GUI) y explicar con más detalle el mecanismo para crear complementos.
Se recibió una asignación para desarrollar software tecnológico para ajustar, regular, controlar, recopilar y analizar información de pistolas autopropulsadas (sistemas de control automatizados) del motor en el sistema operativo ruso. Donde el intercambio entre las armas autopropulsadas y el programa tecnológico se realiza a través de la interfaz RS-232 o RS422, de acuerdo con un protocolo de intercambio especial.
Después de revisar y analizar las capacidades de la lista de sistemas operativos rusos, se eligió el sistema operativo AstraLinux. Este es un sistema de propósito especial basado en la distribución de Debian, diseñado para proteger integralmente la información y construir sistemas automatizados seguros. El sistema operativo Astra Linux se está desarrollando en dos versiones: Common Edition (gratuita, de uso general) y Special Edition (de pago, de propósito especial con un conjunto de algoritmos de protección).
Al desarrollar software, se utilizó la biblioteca Qt.
El software consta de módulos funcionales, cada uno de los cuales le permite realizar un trabajo específico en la configuración del motor.
El módulo funcional es un widget que consta de varios componentes visuales, gráficos y tablas, donde los parámetros del motor se muestran de forma fácil de usar.
Módulo funcional "Panel de control"
Módulo funcional que le permite controlar dinámicamente valores de parámetros dentro de límites aceptables
Módulo de funciones para configurar las características de las pistolas autopropulsadasEl software desarrollado (programa tecnológico) estaba destinado solo a un cierto tipo de motor. Para un nuevo tipo de motor, fue necesario desarrollar un nuevo software, lo que condujo a un aumento significativo en los costos de mano de obra para el desarrollo, prueba, depuración y, como resultado, retrasos en la implementación de este software, a pesar de que dicho software ya estaba en demanda en la etapa de desarrollo de ACS.
Para alejarse de esta costosa práctica de desarrollar software tecnológico, se decidió desarrollar un paquete de software que se adaptará a cualquier motor cuyo ACS admita el mismo protocolo de intercambio.
El concepto en el desarrollo del paquete de software fue la posibilidad de ampliar la funcionalidad basada en tecnología de complemento con soporte para módulos gráficos.
El paquete de software consta de tres partes principales:
- Núcleo funcional del complejo
- Sistema de extensión del motor
- Conjunto de complementos
Las funciones principales incluyen garantizar un intercambio de datos confiable con ACS y realizar las siguientes tareas:
- Comunicación RS232 utilizando un protocolo especial.
- Monitoreo continuo de la lista de parámetros del motor.
- Solicitud de cambio de parámetro del motor
- Leer solicitudes de lectura del motor
- Mostrar parámetros en forma de tabla
- Procesamiento de solicitudes desde extensiones (creando una nueva lista de monitoreo según sea necesario, solicitudes de escritura y lectura únicas)
Sistema de expansión con las siguientes funciones:
- Buscar extensiones
- Obtener gráficos de extensión
- Mostrar objetos de extensión
- La tarea de vincular solicitudes (señales) de objetos al núcleo del software
Cada complemento es una fábrica de objetos, y la función principal del complemento es crear un objeto gráfico.
La tarea del sistema de extensión es obtener un objeto y asociarlo con el núcleo del programa (usando interfaces bien conocidas), inicializar y activar el objeto.
La conexión de los objetos con el núcleo se produce mediante una clase virtual de interfaces. Para desarrollar una nueva extensión, solo necesita conocer las interfaces que admite el núcleo del programa de tecnología. La estructura del programa se presenta en la siguiente figura.

Desarrollar una jerarquía de complementos.

Considere la jerarquía del objeto gráfico creado por el complemento. Dado que cuando trabaje con complementos, debe operar en objetos Qt, la clase principal, como en la biblioteca Qt, será la clase QObject, que admite el mecanismo de ranura de señal Qt.
La siguiente clase es QWidget: es necesario crear sus propios formularios gráficos.
A continuación, necesita su propia clase de interfaces, interfaceWidget. Para hacer esto, se crea una clase abstracta, que se heredará de QWidget. En esta clase, se declaran interfaces (señales, funciones, ranuras) que conectarán el proyecto principal y el objeto del complemento. Una clase abstracta proporciona soporte de interfaz en el proyecto principal.
La clase MyFormQt, que hereda de la clase de interfaz interfaceWidget y define las interfaces y en las que se desarrollan los gráficos y la funcionalidad interna del módulo. Gracias a este esquema de herencia, la clase MyFormQt admite la funcionalidad de la clase QWidget y las interfaces de comunicación desarrolladas con el objeto principal de la aplicación.
class interfaceWidget: public QWidget { public:
Dicha jerarquía permite sortear el problema de la herencia en forma de diamante, al tiempo que mantiene el mecanismo de ranura de señal para el objeto creado, que es un punto importante en la tecnología propuesta para el desarrollo de software tecnológico.
Proceso de inicialización e intercambio de datos: todo el proyecto se basa en un área MDI; por lo tanto, todos los complementos se cargarán como una ventana MDI separada.
El complemento de fábrica crea un objeto de la clase MyFormQt, convierte el puntero al objeto creado en un puntero a QObject y lo pasa al programa tecnológico, donde el objeto se convierte mediante la operación dynamic_cast a un objeto de la clase interfaceWidget, como resultado de lo cual tenemos acceso completo a la forma gráfica y las interfaces de este objeto .
Función de fábrica (crear un objeto de función gráfica en el complemento).
La función de obtener e iniciar un objeto gráfico funcional en un programa tecnológico (núcleo).
Se coloca un objeto de la clase interfaceWidget (objeto de función gráfica) en la ventana QmdiSubWindow creada, estableciéndolo así como hijo.
Luego, conecte (conecte) las señales y las ranuras del objeto con las señales y las ranuras del núcleo del programa tecnológico y la última etapa de la visualización de la ventana utilizando el método show (). Cuando cierre la ventana QmdiSubWindow, el objeto de la clase interfaceWidget también se eliminará, porque la propiedad DeleteOnClose se configuró de antemano para la subventana en la que se colocó el objeto.
El intercambio de datos entre objetos gráficos funcionales y un programa tecnológico se lleva a cabo mediante el cálculo de datos y dos modos:
• Modo único (solicitud-respuesta);
• Modo de monitoreo, recibimos datos constantemente con un período determinado por el mecanismo de intercambio de datos con el dispositivo objetivo;
Marshaling es el proceso de convertir datos a un formato adecuado para almacenamiento o transmisión. Se utiliza cuando la información necesita ser transferida entre diferentes partes de un programa o de un programa a otro.En un solo modo, el usuario presiona un botón en un objeto de función gráfica (widget) genera una señal que contiene una lista de parámetros, cuyos datos deben leerse en el dispositivo de destino (ACS) y transferirse al objeto de función gráfica. El mecanismo de intercambio de datos en el programa principal procesa la señal y comienza a solicitar datos RS-232 de las armas autopropulsadas, los datos recibidos se empaquetan en QbyteArray y se envían con una señal a un objeto gráfico. El objeto tiene una lista de parámetros solicitados y, por lo tanto, conoce sus tipos, desempaqueta los datos contenidos en QbyteArray y los muestra en forma de gráficos y tablas y widgets gráficos especializados (indicadores de flecha, indicadores digitales, botones retroiluminados, etc.).
En el modo de supervisión, cuando se inicializa el complemento, el sistema solicita inmediatamente la lista de parámetros necesarios para el complemento, y durante el monitoreo constante de sus parámetros, lee parámetros adicionales para el complemento y los entrega como un paquete de bytes en cada ciclo de intercambio de datos. El período del ciclo de intercambio de datos depende del número de parámetros solicitados.
Por el momento, las pruebas están en marcha y al mismo tiempo el desarrollo de grupos de complementos para diferentes tareas.
Se ha creado una plantilla de complemento que acelera el proceso de desarrollo de nuevos complementos. Al utilizar la plantilla de complemento para el desarrollo de un nuevo módulo funcional, es necesario crear una nueva forma gráfica e implementar algoritmos de procesamiento y visualización de datos.
Se han desarrollado módulos de software de controlador físico para la interfaz cableada RS-232 y WIFI inalámbrico y Bluetooth.
Hasta la fecha, el paquete de software funciona en modo de 2 canales, es decir, puede funcionar simultáneamente con 2 pistolas autopropulsadas (este era el requisito del cliente). Los módulos funcionales complementos están conectados a cualquiera de los 2 canales por el usuario.
Durante las pruebas, logramos lanzar simultáneamente 12 complementos que fueron procesados con éxito por el núcleo. E incluso 12 complementos no son el límite para este sistema. Debido al sistema de doble búfer Qt, el tiempo dedicado a dibujar complementos se reduce y evita que los complementos parpadeen, por lo que al aumentar el número de complementos en el futuro, la carga principal solo recaerá en el intercambio de datos a través de la interfaz RS-232. Aunque la práctica muestra que durante la depuración, el ajuste y las pruebas de un motor ACS, son suficientes 3-4 complementos que funcionan al mismo tiempo.
Como resultado del trabajo, recibimos un paquete de software para el rápido desarrollo de programas tecnológicos destinados a afinar, poner en marcha y probar pistolas autopropulsadas para varios tipos de motores (sistemas mecatrónicos).
Se desarrollaron 2 conjuntos de complementos para diferentes tipos de motores.
Al conectar un conjunto de complementos para un tipo específico de pistolas autopropulsadas al paquete de software, obtenemos un programa multifuncional para configurar, poner en marcha y probar este tipo de pistolas autopropulsadas.

En el futuro, planeamos escribir un artículo sobre el desarrollo de nuestros propios widgets gráficos, para tareas específicas y un artículo separado sobre el diseño de los objetos gráficos.