Biblioteca PLC – Núcleo Fulmatic – Firmware PLC

Nuestro objetivo: Esta biblioteca en sí misma PLCEstá diseñado para que usted mismo lo fabrique. Le brinda el máximo control sobre el hardware. Fulmatic SOFT El objetivo es crear un ecosistema de dispositivos programables con esta amplia biblioteca. Puedes usarla con cualquier chip y entorno de desarrollo integrado (IDE). Tú mismo puedes definir el diagrama del circuito y todas las demás especificaciones de hardware.

Fulmatic SOFT: Añade la biblioteca Fulmatic Core al código de tu chip siguiendo las instrucciones y ya podrás ejecutar tus sistemas embebidos. Fulmatic SOFT s ladder (IEC-61131 3Programa en el lenguaje ( ). Fulmatic SOFT Además de todas las funciones de los PLC modernos, le ofrece mucho más que un simple PLC con comandos TCP, UDP, de movimiento y de tarjeta SD. Con 771 bloques (255 DB, 256 PB, 256 FB y 4 OB) y 16384 E/S, el Fulmatic SOFT le ofrece una enorme capacidad de almacenamiento.

Firmware PLC gratuito: PLC Puedes usar la biblioteca de forma gratuita hasta 2048 bytes (DB0 utiliza 1026 bytes). Se aplicará una licencia si se requiere mayor cantidad de memoria. (10 USD) Debe adquirir una licencia. Sin licencia, el PLC funcionará durante 60 minutos. Nuestro modelo de licencias transparente no incluye contratos ni procesos complicados. Debe añadir un chip TSHA204A-SSHDA a su circuito. Recibirá una clave al adquirir la licencia. Solicitud de licencia Esta llave se conectará a nuestro servidor y cargará el código de licencia en el chip a través del puerto serie o Ethernet. El número de licencias en el servidor disminuirá simultáneamente.

Github: PLC Para probar la biblioteca, puede descargar nuestro proyecto de ejemplo preparado para STM32F407VGTx con VS Code desde GitHub. https://github.com/FultekPLC/Plc-Firmware

En este proyecto, verá el firmware completo del PLC, que utiliza casi todas las funciones del chip, disponible como código abierto. Cubo MX Puedes modificar las especificaciones de hardware del chip con el software y continuar trabajando en el mismo proyecto. Puedes cambiar las especificaciones de hardware y el software con VS Code. Puedes agregar funciones personalizadas al firmware del PLC y... PLC Puedes ejecutar el código desde dentro. Puedes usar cualquier marca y modelo de chip ARM que desees, y especificar la cantidad y el tipo de E/S. En resumen, puedes usar la biblioteca Fulmatic Core sin restricciones, de acuerdo con los términos de la licencia.

Actualización de firmware: Sus clientes que utilizan su producto PLC Las actualizaciones de firmware se pueden realizar con Fulmatic SOFT. El código de actualización del firmware del PLC es completamente de código abierto, y puede consultar y modificar el código del gestor de arranque en el proyecto de ejemplo. Además del código que sugerimos, puede escribir su propio código de gestor de arranque.

Guía de códigos

256 KB Estamos trabajando para que el proyecto de ejemplo sea fácil de usar. Un chip de 256 KB de código representa un proyecto bastante grande. Comprender, modificar e implementar un proyecto de este tamaño no será sencillo. Hemos intentado explicar las funciones en esta página y en el código, y seguimos trabajando para mejorar su explicación. Intentaremos responder a sus preguntas en la sección de discusiones de nuestro repositorio de GitHub. Lamentablemente, no ofrecemos soporte gratuito para Fulmatic Core. Puede solicitarnos un presupuesto para que gestionemos todos los procesos en su nombre, incluido el diseño de la placa de circuito impreso.

Puedes descargar el proyecto de ejemplo desde nuestro enlace de Github: https://github.com/FultekPLC/Plc-Firmware En el proyecto de ejemplo, puede ver y modificar todas las características del PLC utilizando código abierto. Puede eliminar las funciones que no necesite y agregar otras nuevas.

Puedes encontrar toda la información sobre IDE y herramientas de compilación en nuestro repositorio de GitHub. En esta página, explicaremos las funciones utilizadas para la integración de la biblioteca con tu código MCU.

FulmaticConfig.h

En este archivo se definen la versión del firmware y el tamaño de las cadenas de caracteres.

FulmaticCore.h

Este archivo contiene los encabezados de las funciones de la biblioteca que llamarás desde tu código MCU. Encontrarás descripciones de todas las funciones en este archivo. La biblioteca trabaja con numerosas variables y cadenas de caracteres. Debes crear estas cadenas y variables en tu código MCU. La estructura `variables_TypeDef` se utiliza para pasar las variables que crees a la biblioteca. Esta estructura no se puede modificar.

FulmaticInitEl chip solo necesita activarse una vez al encenderlo por primera vez. Cuando el valor de retorno es 1, significa que el chip de licencia se ha leído correctamente y está funcionando bajo licencia.

Ejecutar Fulmatic: dentro de main.c Diagrama de escalera PLC Esta es la función que se llama para ejecutar el código. Se llama durante el bloque de inicio (cuando se inicia el PLC), el bloque principal (en cada ciclo), el bloque de apagado (cuando se detiene el PLC) y cuando se produce una interrupción de entrada digital en Interrput.c, así como con una interrupción basada en tiempo (temporizador) en Fulmatic.c.

Fulmatic.c

Todas las funciones necesarias para usar la biblioteca en tu código se encuentran en el archivo Fulmatic.c. Este archivo genera dependencias con otros archivos. Agrupamos las funciones bajo cuatro encabezados. Las descripciones de las funciones se encuentran en el archivo donde se ubica el cuerpo de cada función.

  • Funciones necesarias para el proyecto de ejemplo que no son utilizadas por la biblioteca.
  • Funciones utilizadas por la biblioteca que deben incluirse en su código.
  • Funciones que la biblioteca utiliza para fines de licencia. Funciones que no son necesarias para el uso sin licencia.
  • Las funciones de la biblioteca dependen de los comandos del PLC utilizados. Por ejemplo, si en su PLC no se utilizan operaciones como TCP, UDP, SPI, puerto serie y tarjeta SD, la biblioteca funcionará sin estas funciones.

_Eprom predeterminado: Los ajustes de hardware seleccionables con Fulmatic SOFT incluyen PlcSetupEprom[STPMEMORYSIZE] y ladder El código se almacena en matrices PlcEprom[PRGMEMORYSIZE]. La función _DefaultEprom de este archivo contiene la configuración predeterminada del PLC. Puede personalizar la configuración hasta cierto punto utilizando estas matrices en su código.

Cada milisegundo: Esta función, que se ejecuta cada milisegundo, se ejecuta tanto en el archivo principal como en la biblioteca. En el proyecto de ejemplo, los indicadores se configuran mediante TIM7_IRQHandler en Interrupt.c, en lugar de ejecutarse directamente. Además, el valor TIM7->ARR se calibra con el RTC. Consulte la función _RtcCalibration en Fulmatic.c. Una calibración incorrecta provocará errores menores en todas las operaciones temporizadas del PLC.

_Retrasarnos: Es posible que necesite modificar el código para asegurar que esté calibrado con precisión a la frecuencia del chip. Debe probarlo y calibrarlo durante un período prolongado. Está calibrado para 168 MHz.

_EstablecerSalidas: Normalmente, las entradas se leen y las salidas se escriben en main.c. Sin embargo, cuando se producen interrupciones de entrada digitales o basadas en tiempo, se activa el bloque de interrupción OB2. Esta interrupción se llama desde la biblioteca para configurar las salidas sin demora.

_ObtenerMsTimerCount: Se utiliza para medir el tiempo en muchos procesos. Debe incluirse en su código. Debe habilitar la lectura del valor del temporizador de un milisegundo.

_CrcCalculate: Se utiliza para calcular sumas de verificación mediante hardware. Debes asegurarte de que funcione correctamente según el chip que estés utilizando.

Comunicación.c

Este archivo contiene el código necesario para usar Ethernet, el puerto serie y SPI en el PLC. Las llamadas de Modbus y Fulmatic SOFT se reciben en este archivo. La consistencia de los datos se garantiza iniciando la respuesta con un retardo desde main.c. Además, el código para la actualización del firmware y la tarjeta SD está escrito explícitamente en este archivo. Fulmatic SOFT realiza las actualizaciones del firmware y las operaciones con la tarjeta SD mediante este código. Puede modificar este código para realizar operaciones similares con su propio software en lugar de Fulmatic SOFT. Otras operaciones de Fulmatic SOFT y de Modbus se envían a la biblioteca y esta responde a ellas a través de este código. Al modificar el código, también puede responder a las llamadas de Modbus sin enviarlas a la biblioteca.

Flash.c

El código del PLC y la información del temporizador persistente se guardan en la memoria flash cuando el PLC se apaga. Al encenderlo de nuevo, se lee el último código guardado del archivo flash.h. Recuerde configurar la información del sector del chip que esté utilizando. Puede usar el siguiente circuito para detectar cuándo se apaga el PLC.

Este circuito activará el pin de detección de apagado cuando la tensión baje de 24 voltios a aproximadamente 19 voltios. El condensador C1 permite que el chip siga funcionando durante un breve periodo. Durante este tiempo prolongado, borrar y reescribir la memoria flash es arriesgado. Por lo tanto, se deben seguir los siguientes pasos.

  • Cuando se enciende el PLC por primera vez, copiamos el sector 10 al sector 11. Si se interrumpe la alimentación durante el arranque, los datos intactos se almacenan en el sector 11.
  • Para guardar datos nuevos en la memoria Flash, primero hay que borrarlos. Borrar lleva mucho más tiempo que guardar. Por lo tanto, borramos el sector 10 al arrancar y esperamos a que se apague el sistema.
  • El circuito de detección de apagado nos proporciona algo más de un segundo. Cuando se detecta el apagado, los datos se guardan en el sector 10 en un plazo de 100 a 200 ms. Dado que el bloque de apagado OB 1 se ejecutará antes del apagado y puede haber un código de escalera extenso en el PLC, el condensador C1 debe ser de al menos 2200 µF. Se utiliza una resistencia limitadora de corriente de 100 ohmios para evitar una sobrecarga en el circuito debido a la alta capacitancia.
  • Cuando el PLC arranca, lee todos los datos del sector 10 y realiza una comprobación de suma de verificación. Si se interrumpe la alimentación durante el arranque, la comprobación de suma de verificación fallará. No se preocupe, siempre hay datos fiables disponibles en el sector 11. El arranque se realiza automáticamente desde el sector 11.

Interrupción.c

Las interrupciones de entrada digital, ADC, temporizador y UART se encuentran en este archivo. Se habilitan y deshabilitan según el modo de operación del PLC en la función _INTSetup dentro de Fulmatic.c. Recuerde adaptar el código de _INTSetup a su hardware. Las funciones en este archivo deben ejecutarse rápidamente. En nuestro código de ejemplo, usamos el comando switch para mejorar la legibilidad del código. Sin embargo, existen maneras de acelerar su ejecución. Por ejemplo, las operaciones dentro del comando switch se pueden escribir como funciones separadas.

  • void Handle_Encoder(void)
  • void (*EXTI0_Handler_Ptr)(void);
  • Dependiendo de la selección realizada con Fulmatic SOFT en INTSetup: EXTI0_Handler_Ptr = Handle_Encoder;
  • Cuando se produce una interrupción: Ejecute EXTI0_Handler_Ptr(); dentro de EXTI0_IRQHandler.

Otro método de aceleración es la conversión de byte a 32 bits. Puede usar este código para la serie STM: *(int32_t *)&PlcIO[EncIAdr[0]] = __rev(ValueS32);

No deberíamos usar la biblioteca HAL para borrar los indicadores de interrupción. En su lugar, deberíamos preferir el método más rápido de modificar directamente el valor del registro. TIM3->SR = 0; //__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);

Interrupciones de entrada digital: Se utiliza para contadores de alta velocidad, codificadores y aplicaciones similares.

ADC: No utilizamos DMA; realizamos operaciones de lectura del ADC dentro de la interrupción. Esto nos permite realizar operaciones de filtrado.

Minutero: Lo usamos para un temporizador de milisegundos y salidas PTO. No basta con que el temporizador simplemente interrumpa cada milisegundo; también debe contar de 0 a 999.

USART: Las interrupciones del puerto serie se utilizan para la transmisión y recepción de datos. Además, Fulmatic.c -> _EachMilliSecond contiene operaciones de habilitación del pin RS485.

Tarjeta SD.c

Las operaciones con la tarjeta SD se realizan en este archivo. También puede hacerlo de forma diferente a como se muestra en nuestro proyecto de ejemplo. Los códigos de comunicación para cargar o descargar archivos al PLC están escritos en código abierto dentro de Communication.c. Puede cargar y descargar archivos usando Fulmatic SOFT. Si su proyecto no tiene una tarjeta SD, puede eliminar todas las funciones.

C Principal

Este archivo cambiará cada vez que guardes el proyecto con Cube MX. Para asegurarte de que tus comandos permanezcan sin cambios, debes escribir tu código en las áreas reservadas para ello en Cube MX. /* USER CODE BEGIN 2 */ Escribe tu código aquí. /* USER CODE END 2 */

En este archivo puede crear todas las variables necesarias para la biblioteca. Es posible que necesite crear matrices grandes en una dirección específica. `uint8_t PlcEprom[PRGMEMORYSIZE] __attribute__((section(“.ccmram”))));`

Examine detenidamente las operaciones dentro del bucle while. Cualquier cambio que realice no debe alterar la estructura general. El código escrito en otras partes del programa no debe ralentizar este bucle.