Domótica con soporte para lenguajes de programación industrial, o BluePill x405

Inicio de revisión


Entonces, mis queridos colegas, comenzamos la revisión con lo que realmente queremos resaltar aquí. En el artículo quiero considerar los elementos que son típicos para construir un programa de controlador industrial y mostrar cómo se pueden aplicar a los sistemas de automatización del hogar. Y lo más importante es encontrar la respuesta a la pregunta: qué se necesita para esto.

Domótica - Aplicaciones


Hogar, dulce hogar ... ¿Realmente necesitas un controlador? La respuesta es simple: todo depende de lo que esté disponible en esa casa. Por supuesto, si solo tiene un apartamento, y la automatización consiste en administrar el centro de medios de su hogar y el aire acondicionado en el verano, todo lo que está escrito a continuación puede ser completamente interesante. Pero si su pasatiempo no solo es empujar el sofá (lo que hay que esconder, yo mismo lo he notado a veces), entonces el artículo puede ser muy útil.

Entonces, intentemos comprender cómo los medios improvisados ​​pueden simplificar nuestra vida difícil. Como ejemplo, utilizamos la situación real: una bomba en un pozo de 70 metros de profundidad, que dos vecinos pusieron en un pliegue. Lo instalaron en la primavera, cuando había mucha agua en el pozo y, en general, era cálido y bueno. Pero el tiempo pasa y comienzan las preguntas: para elevar el agua desde tal profundidad, necesita electricidad, por lo que tiene que pagar. El sótano y el piso técnico se inundaron varias veces; simplemente se olvidaron de apagar la bomba ... Sí, y no es muy conveniente controlarlo manualmente; debe cerrar un grifo, abrir otro, luego encender la bomba y observar el nivel del agua en el tanque.

¿Vale la pena gastar tu tiempo en eso, que ya falta? Una mente inquisitiva comienza a buscar soluciones y, por supuesto, ¡las encuentra! Nace una lista de tareas para la implementación.

  1. El pago por la electricidad consumida no tiene que ser común, es decir, instalaremos dos arrancadores, cada uno de los cuales está conectado a su propio medidor eléctrico.
  2. La bomba no debe fallar debido a la falta de agua; eso significa que instalaremos un sensor para la carrera "seca" de la bomba. Si no hay agua, simplemente no arranque la bomba, y si funciona, hacemos una parada de emergencia.
  3. La bomba no debe funcionar durante demasiado tiempo; por ejemplo, más de 25 minutos. Exceder este tiempo indica que el sistema está dejando su modo normal de operación.
  4. El llenado de los contenedores debe realizarse sin intervención humana, es decir, automáticamente, y esto significa comenzar en el nivel inferior y detenerse en el nivel superior.
  5. Solo se debe llenar un tanque, es decir, instalamos dos válvulas para suministrar agua para un conjunto en cada tanque.
  6. La pausa entre los arranques de la bomba debe ser de al menos 30 minutos.
  7. Una interrupción de energía no debería afectar el algoritmo de operación, si estaba activo. A pesar de todo, el algoritmo debe completarse.

Las tareas son simples y se pueden resolver en cientos, si no en mil formas. Pero el título del artículo habla por sí mismo, y seguiremos un camino espinoso. Usemos un controlador virtual (por ahora, por supuesto), que hará todo esto.

¿Cómo funciona un controlador industrial?


Por supuesto, aclararemos de inmediato: estamos hablando de los llamados controladores lógicos programables, o PLC, para abreviar. ¿Qué se esconde bajo esta abreviatura? Y esto es lo que está oculto: una increíble variedad de soluciones de hardware, una gran cantidad de productos de software y utilidades. Una pregunta razonable surge de inmediato: ¿cómo usar todo este bien? ¿Es realmente necesario estudiar la parte material desde cero y encontrar tiempo y dinero para cada nuevo dispositivo con el fin de tomar cursos de capacitación y adquirir las habilidades necesarias para trabajar con cada dispositivo?

La respuesta es no, no es necesario. Todo se ha hecho antes que nosotros. Solo queda estudiar y aprender a usar. Esto es lo que propongo hacer más: una pequeña inmersión en el estándar IEC 61131. Vamos a revelar qué partes contiene este estándar.

  • IEC 61131-1: información general.
  • IEC 61131-2: Requisitos del equipo y pruebas.
  • IEC 61131-3: Lenguajes de programación.
  • IEC 61131-4: Guía del usuario.
  • IEC 61131-5: Comunicaciones.
  • IEC 61131-6: seguridad funcional.
  • IEC 61131-7: Programación de control difuso.
  • IEC 61131-8: Directrices para el uso e implementación de lenguajes de programación.
  • IEC 61131-9: interfaz de comunicación digital de punto único para sensores y actuadores pequeños.
  • IEC 61131-10: formato de intercambio basado en XML abierto PLC.

Pero no profundizaremos en el tema de los estándares, y en pocas palabras, el controlador generalmente funciona de manera cíclica: sondear el estado de las entradas, el intérprete ejecuta el programa de control, establece el estado de las salidas, realiza tareas de mantenimiento interno y vuelve a sondear el estado de las entradas. Es lo suficientemente aburrido, pero efectivo y eficiente. Un programa de control es un pseudocódigo que se crea utilizando un entorno de programación.Por lo general, dicho pseudocódigo es una secuencia codificada en binario, que no tiene nada que ver con los lenguajes de programación habituales. Aunque para el usuario se presenta de forma comprensible, para el controlador, se utiliza una vista completamente diferente. Un buen ejemplo es un pequeño programa, presentado en forma de IL, LD y en forma de codificación binaria para el controlador (hmm, ni siquiera hay un término especial). A continuación, debajo del spoiler, se muestra un pequeño ejemplo.

Opciones de visualización del programa


Entonces, ¿qué hace que este programa sea útil? Sí, ella no hace nada: si el valor del merker M8010 es 1, entonces 1. se escribirá en la salida con la dirección Y377. En consecuencia, lo mismo es para 0.
Una de las mayores ventajas de tal implementación es la capacidad de descargar el programa de la memoria del controlador, abrirlo para editarlo en un editor de una manera que sea comprensible para los humanos, compilar (este término es condicional aquí) y cargarlo nuevamente en la memoria del controlador. Además, algunos controladores incluso guardan comentarios y nombres de variables.

¿Cómo programar el controlador?


Por supuesto, se necesita un software especializado. Después de largas búsquedas y experimentos, se eligió Autoshop v3.02 de Inovance Control. Es notable porque es gratis, está disponible para descarga gratuita y es compatible con controladores compatibles con controladores Mitsubishi. Y admite el trabajo no solo a través de puertos serie, sino también a través de Ethernet. Enlace a la versión utilizada por nosotros, bajo el spoiler.

Enlace para descargar desde Yandex Disk

Bueno, instalamos el programa y ahora otra pregunta: ¿cómo escribir el programa en nuestro controlador? Como trabajaremos con un dispositivo específico, instalaremos controladores específicos para el puerto COM virtual. Para guardar conclusiones y simplificar, decidí usar el puerto USB de la placa para la conexión. Conductores bajo el spoiler.

Controladores en Yandex Disk

Después de instalar los controladores y conectar la placa a través de un mini-USB, puede verificar si todo fue exitoso. Para hacer esto, haga clic derecho en My Computer-Management-Device Manager-Ports (COM y LPT). Debería ver una ventana como debajo de un spoiler. El número de puerto COM en su sistema puede variar.

Administrador de dispositivos


Ahora puede seleccionar Herramientas-Configuración de comunicación en el menú de AutoShop, seleccione Serie en la ventana que aparece, especifique el número de puerto y haga clic en el botón Prueba. Deberías tener una ventana como esta debajo de un spoiler.

Conexión exitosa al tablero


Pero si algo no funciona para usted, escriba en PM o en un comentario. Definitivamente lo ayudaremos.

Elementos del programa, sin los cuales será triste.


En adelante, consideraremos el lenguaje de los diagramas de escalera, o el llamado LD. Consideremos solo aquellos elementos que usaremos más adelante.

  • Las entradas y salidas son discretas. Están designados como X e Y. Diseñados para recibir y emitir señales discretas.
  • El área de memoria de M merkers M. Puede tomar dos estados: encendido y apagado.
  • Los temporizadores se designan T. Diseñados para contar el tiempo de 0.1 a 3276.7 segundos.
  • El área de los registros D. Tiene una dimensión de celda de 16 bits, pero también se puede direccionar como una celda de 32 bits.

Caballo esférico en el vacío, o registros de direccionamiento indirecto


Los registros de direccionamiento indirecto se designan V y Z y se pueden direccionar de V0 a V7 y de Z0 a Z7. ¿Por qué se pueden usar? Veamos cómo funcionan en general. Este registro D1000V0 de aspecto loco significa que se utilizará la dirección de celda calculada como la dirección D1000 más el valor escrito en el registro de direccionamiento indirecto. Si hay 15, usaremos la dirección de la celda D1015. Es muy conveniente cuando se trabaja con matrices de datos o con control de tabla: es suficiente para nosotros cambiar el valor del registro de índice, y obtenemos los valores de las celdas de memoria que se abordaron. Pero aunque no los aplicaremos, tocaremos esto en la próxima publicación.

Un poco sobre la visualización del programa o la depuración en línea


Si es programador y acaba de terminar de escribir un programa, el siguiente paso es la depuración. Y aquí surge la pregunta: cómo hacerlo. Nuevamente, hay muchas opciones, pero hablaré sobre la que usaremos más. El editor del entorno de programación le permite mostrar visualmente qué valores de bits y variables están actualmente en la memoria del controlador presionando un botón. Un ejemplo muy revelador será: debajo de los spoilers fuera de línea y la visualización en línea del programa en el editor.

Botón para cambiar al modo de vista variable


Tipo de programa en el modo de visualización de valores variables


Tipo de programa en modo edición


Un poco más sobre los procesos que ocurren cuando hace clic en el botón En línea. El programa compila rápidamente una lista de variables visibles y, al finalizar, la escribe en un búfer de controlador específico. Después de eso, el controlador prepara los datos de esta lista y los coloca en otro búfer. El programa lee los valores de este búfer y los muestra como valores en el diagrama mímico. Si desplaza un pequeño programa en la ventana de visualización y cambia las variables visibles, este ciclo se repetirá nuevamente ...

Quién llama a Hamlet, o en el escenario BluePill x405


¿Has notado que el mercado no se encuentra con placas base simples como una tableta azul, sino que está equipado con procesadores como F405 y superior? Personalmente encontré solo piedras F401, pero este es un nivel ligeramente diferente ... Soy fácil de escalar, y para mis experimentos, sin pensarlo dos veces, hice un pago en el viejo P-CAD 2006 y lo pedí a los chinos en uno de los sitios de pedidos rápidos. Por supuesto, en color es una tableta verde, pero en términos de significado, decidí dejar el nombre BluePill, pero indicando que ya es x405. El resultado debajo de los spoilers es una foto de la placa BluePill x405.

Vista superior


Vista inferior


Concepto y gerber en github

¿Un poco sobre por qué esta placa es tan notable? Después de todo, ¡solo hubo miles de intentos de crear clones de bluepill! Pero la diferencia es esta: adjunto el firmware a esta placa, que la convertirá en un núcleo que ejecuta un programa que es compatible con los controladores industriales de Mitsubishi en un sistema de comando. Este milagro se calcula en 16 entradas, 16 salidas, 2 entradas analógicas, 3 UART con soporte DE para RS485, 1 bus maestro de un cable. UART puede funcionar como un bus maestro modbus RTU y como esclavo. Y pueden trabajar de forma completamente independiente.
Pero esto no es todo: si conecta una batería de 3V al pin VBAT, no solo el reloj, sino también los temporizadores, contadores, marcadores y los primeros 1000 registros de uso general D mantendrán sus valores. Y hay 8000 registros.

Anticipando las preguntas, diré de inmediato: sí, el software se basa en un sistema operativo en tiempo real. Sí, se usa DMA siempre que sea posible. Estas características permiten trabajar sin cambios significativos en el tiempo de ciclo con altas cargas de comunicación. Esta versión es la segunda revisión, revisada y complementada.

Esta placa puede ser totalmente programada por GX FXDeveloper y IEC Developer y GX Works.

El destino de la bomba y dos tanques.


Ahora solucionemos este problema, especialmente porque todas las herramientas para esto están disponibles. Para no alargar mucho, escribí un programa, lo dividí en partes (las llamadas redes o cadenas de trabajo), y mostraré cada una de ellas aquí y daré comentarios.

Net 1 - primera ejecución del programa


El registro D1000 almacena el tiempo requerido para suprimir el rebote de contacto. De hecho, esto ya está en el programa, pero quiero mostrarlo más claramente. El registro D1001 es responsable del tiempo de protección de la bomba. En él escribimos 15,000, o 1,500 segundos. A continuación, tenemos una cadena de restablecimiento de respaldo: si algo sale mal, puede enviar la señal 1 a la entrada X14 y reiniciar la placa. En este caso, 0 se escribe en los registros D0 y D1, y los merckers M98 y M99 se reinician.

Net 2 - procesamiento de señal de entrada


Aquí, con la ayuda de temporizadores, nos deshacemos del rebote de los contactos. Para hacer esto, use un retraso de 200 milisegundos. Para garantizar que en el futuro programa, al cambiar la dirección de entrada del contacto, no sea necesario reescribir muchas cadenas, utilizo marcadores intermedios (por ejemplo, M102). También es digno de mención que el comerciante del sistema M8003 se usa aquí: se enciende después de que ha pasado el primer ciclo de ejecución del programa. Pero el M8002 Merker está activo solo en el primer ciclo del programa, y ​​esto puede y debe usarse para establecer los valores iniciales.

Red 3 - llenado del tanque 1.


El llenado del tanque 1 es completamente idéntico al llenado del tanque 2 con la excepción de las direcciones. El dibujo no encajaba un poco, pero es mejor que lo veas simplemente abriendo el proyecto. ¿Qué es lo notable de esta unidad de control? La presencia de protecciones y puntos muertos que permiten mecanismos de arranque y parada sin golpes. Por ejemplo, después de abrir la válvula 1, solo después de 700 ms se emitirá un comando para arrancar el arrancador, que enciende la bomba.

La administración aquí no proporciona el modo manual. Además, se implementa la protección contra el funcionamiento en seco y la protección contra el funcionamiento prolongado de la bomba.

Net 5-6 - Gestión de salida


Y aquí controlamos las salidas de acuerdo con las cerraduras.

De las tareas, solo la conexión del intervalo de protección de 30 minutos antes de reiniciar permaneció sin cumplirse. Debo decir de inmediato: en esta versión solo se implementan las entradas X0-X3 y la salida Y0-Y3, lo cual es suficiente para probar el material en este artículo. La unión es PA4-X0, PA5-X1, PA6-X2, PA7-X3 y PB4-Y0, PB5-Y1, PB6-Y2, PB7-Y3.

Velocidad del ciclo del programa: métodos de medición del abuelo


Cuando nos hacemos esta pregunta, inmediatamente se nos ocurre hacer esto: escribir en el controlador un programa muy grande a partir de un cierto número de elementos idénticos, obtener el tiempo de ejecución y el tiempo de ejecución de un comando. Se dice - hecho, bajo el programa de spoiler y en nombre del tiempo de ejecución del spoiler.

7995 pasos - 2.6 milisegundos

Aquí, cada paso es un comando, y obtenemos 2.6 / 7995 = 0.325 microsegundos. No muy rápido, pero no está mal.

FPU: ¿ser o no ser?


Ahora determinemos qué tan rápido funcionan las instrucciones de punto flotante en nuestro firmware. Hay dos firmwares, uno que usa la FPU incorporada y el otro con emulación de software. El siguiente programa:

Programa para calcular el tiempo de ejecución de una instrucción.

El firmware a continuación está debajo del spoiler, y no tienen restricciones

Dos firmware

Cuando se utiliza una FPU de hardware, el tiempo de ejecución del programa es de 1.8 ms, o 1.8 / 600 = 0.003 ms, o 3 microsegundos.

Ahora reemplace el firmware: use la emulación de software. El resultado ya es diferente: 2.5 ms, o 2.5 / 600 = 0.0041 ms, o 4.1 microsegundos. No está mal, pero la diferencia es bastante notable.

Conclusión


A pesar del gran volumen del artículo, todavía hay muchos materiales que sería bueno cubrir. Entonces, si este artículo es de su interés, este artículo será seguido por otro más. Pero me gustaría encontrar personas con ideas afines que quieran unirse al cruce de lo industrial y lo doméstico con un solo propósito, para que estas herramientas sean accesibles para un simple laico.

Source: https://habr.com/ru/post/477478/


All Articles