Bibliothèque PLC – Noyau Fulmatic – Firmware PLC

Notre objectif : Cette bibliothèque elle-même PLCIl est conçu pour vous permettre de fabriquer vos propres composants. Il vous offre un contrôle maximal sur le matériel. Fulmatic SOFT L'objectif est de créer un écosystème de dispositifs programmables grâce à cette vaste bibliothèque. Vous pouvez l'utiliser avec n'importe quelle puce et EDI. Vous pouvez définir vous-même le schéma du circuit et toutes les autres spécifications matérielles.

Fulmatic DOUX : Ajoutez la bibliothèque Fulmatic Core à votre code de puce conformément aux instructions, et vous pouvez maintenant exécuter vos systèmes embarqués. Fulmatic SOFT s échelle (IEC 61131-3Programme dans le langage ( ). Fulmatic SOFT Outre toutes les fonctionnalités des automates programmables modernes, il vous offre bien plus qu'un simple automate programmable avec commandes TCP, UDP, de mouvement et de carte SD. Avec 771 blocs (255 DB, 256 PB, 256 FB et 4 OB) et 16 384 E/S, le Fulmatic SOFT vous offre une capacité de stockage considérable.

Firmware PLC gratuit : PLC Vous pouvez utiliser la bibliothèque gratuitement jusqu'à 2048 octets (1026 octets sont utilisés par DB0). Une licence sera requise si une mémoire plus importante est nécessaire. (10 USD) Vous devez acquérir une licence. Sans licence, l'automate fonctionnera pendant 60 minutes. Notre modèle de licence transparent ne nécessite aucun contrat ni procédure complexe. Vous devez ajouter une puce TSHA204A-SSHDA à votre circuit. Une clé vous sera fournie lors de l'achat de la licence. Demande de licence Cette clé permettra de se connecter à notre serveur et de transférer le code de licence vers la puce via un port série ou Ethernet. Le nombre de licences sur le serveur diminuera simultanément.

Github: PLC Pour tester la bibliothèque, vous pouvez télécharger notre exemple de projet préparé pour STM32F407VGTx avec VS Code depuis GitHub. https://github.com/FultekPLC/Plc-Firmware

Dans ce projet, vous découvrirez le firmware complet de l'automate programmable, utilisant la quasi-totalité des fonctionnalités de la puce, disponible en open source. Cube MX Vous pouvez modifier les spécifications matérielles de la puce via le logiciel et poursuivre votre travail sur le même projet. Vous pouvez modifier les spécifications matérielles et logicielles avec VS Code. Vous pouvez ajouter des fonctions personnalisées au firmware de l'automate programmable et… PLC Vous pouvez exécuter le code directement depuis l'application. Vous pouvez utiliser n'importe quelle marque et modèle de puce ARM et spécifier le nombre et le type d'E/S. En bref, vous pouvez utiliser la bibliothèque Fulmatic Core sans aucune restriction, conformément aux termes de la licence.

Mise à jour du firmware : Vos clients qui utilisent votre produit PLC Les mises à jour du firmware peuvent être effectuées à l'aide de Fulmatic SOFT. Le code de mise à jour du firmware de l'automate programmable est entièrement open source ; vous pouvez consulter et modifier le code du chargeur de démarrage dans l'exemple de projet. Outre le code que nous proposons, vous pouvez également écrire votre propre code de chargeur de démarrage.

Guide du code

256 KB Nous nous efforçons de rendre le projet d'exemple facile à utiliser. Un projet de 256 Ko pour une puce est assez conséquent. Comprendre, modifier et implémenter un projet de cette taille ne sera pas chose aisée. Nous avons tenté d'expliquer les fonctions sur cette page et dans le code. Nous travaillons également à améliorer ces explications. Nous ferons de notre mieux pour répondre à vos questions dans la section discussions de notre dépôt GitHub. Malheureusement, nous n'offrons pas de support gratuit pour Fulmatic Core. Vous pouvez nous demander un devis pour que nous prenions en charge l'ensemble des processus en votre nom, y compris la conception des circuits imprimés.

Vous pouvez télécharger l'exemple de projet depuis notre lien Github : https://github.com/FultekPLC/Plc-Firmware Dans ce projet d'exemple, vous pouvez visualiser et modifier toutes les fonctionnalités de l'automate programmable à l'aide du code source ouvert. Vous pouvez supprimer les fonctions inutiles et en ajouter de nouvelles.

Vous trouverez toutes les informations concernant les environnements de développement intégrés (IDE) et les outils de compilation dans notre dépôt GitHub. Sur cette page, nous expliquerons les fonctions permettant l'intégration de la bibliothèque à votre code microcontrôleur.

FulmaticConfig.h

Ce fichier définit la version du firmware et la taille des chaînes de caractères.

FulmaticCore.h

Ce fichier contient les en-têtes des fonctions de la bibliothèque que vous appellerez depuis votre code microcontrôleur. Vous y trouverez la description de chaque fonction. La bibliothèque utilise de nombreuses variables et chaînes de caractères. Vous devez créer ces variables et chaînes de caractères dans votre code microcontrôleur. La structure `variables_TypeDef` sert à transmettre les variables que vous créez à la bibliothèque. Vous ne pouvez pas modifier cette structure.

FulmaticInitLa puce ne doit être activée qu'une seule fois, lors de la première mise sous tension. Lorsque le résultat est 1, cela signifie que la puce de licence a été correctement lue et fonctionne sous licence.

FulmaticExecute: à l'intérieur de main.c Échelle PLC Il s'agit de la fonction appelée pour exécuter le code. Elle est appelée lors du bloc de démarrage (au démarrage de l'automate), du bloc principal (à chaque cycle), du bloc d'arrêt (à l'arrêt de l'automate), et lors d'une interruption d'entrée numérique dans Interrput.c, ainsi que lors d'une interruption temporelle (Timer) dans Fulmatic.c.

Fulmatic.c

Toutes les fonctions nécessaires à l'utilisation de la bibliothèque dans votre code sont regroupées dans le fichier Fulmatic.c. Ce fichier contient des dépendances vers d'autres fichiers. Les fonctions sont regroupées en quatre catégories. Leur description se trouve dans le fichier où est implémenté le corps de la fonction.

  • Fonctions nécessaires au projet d'exemple mais non utilisées par la bibliothèque.
  • Fonctions utilisées par la bibliothèque et qui doivent être incluses dans votre code.
  • Fonctions utilisées par la bibliothèque à des fins de gestion des licences. Fonctions non requises pour une utilisation sans licence.
  • Les fonctionnalités de la bibliothèque dépendent des commandes de l'automate programmable utilisé. Par exemple, si votre automate n'utilise pas les protocoles TCP, UDP, SPI, le port série et la carte SD, la bibliothèque fonctionnera sans ces fonctionnalités.

_Eprom par défaut : Les paramètres matériels sélectionnables avec Fulmatic SOFT incluent PlcSetupEprom[STPMEMORYSIZE] et échelle Le code est stocké dans des tableaux PlcEprom[PRGMEMORYSIZE]. La fonction _DefaultEprom de ce fichier contient les paramètres par défaut de l'automate. Vous pouvez personnaliser la configuration dans une certaine mesure en utilisant ces tableaux dans votre code.

Chaque milliseconde : Cette fonction, exécutée toutes les millisecondes, l'est depuis le fichier principal et la bibliothèque. Dans l'exemple de projet, les indicateurs sont définis via TIM7_IRQHandler dans Interrupt.c, et non exécutés directement. De plus, la valeur TIM7->ARR est calibrée avec l'horloge temps réel (RTC). Veuillez consulter la fonction _RtcCalibration dans Fulmatic.c. Un calibrage incorrect entraînera des erreurs mineures dans toutes les opérations temporelles de l'automate.

_Retardez-nous : Il peut être nécessaire de modifier le code pour garantir un étalonnage précis à la fréquence de la puce. Il est recommandé de le tester et de l'étalonner sur une période prolongée. Il est étalonné pour 168 MHz.

_SetOutputs : Normalement, les entrées sont lues et les sorties écrites dans le fichier main.c. Cependant, en cas d'interruption temporelle ou d'entrée numérique, le bloc d'interruption OB2 est déclenché. Cette interruption est ensuite appelée depuis la bibliothèque pour configurer les sorties sans délai.

_GetMsTimerCount : Il sert à mesurer le temps dans de nombreux processus. Il doit être inclus dans votre code. Vous devez activer la lecture d'une valeur de minuterie à la milliseconde.

_CrcCalculer : Il sert à calculer les sommes de contrôle à l'aide du matériel. Vous devez vous assurer de son bon fonctionnement en fonction de la puce utilisée.

Communication.c

Ce fichier contient le code nécessaire à l'utilisation d'Ethernet, du port série et du protocole SPI au sein de l'automate programmable. Les appels Modbus et Fulmatic SOFT sont reçus dans ce fichier. La cohérence des données est assurée par un délai entre l'exécution de la réponse et le lancement du programme dans main.c. De plus, le code de mise à jour du firmware et de gestion de la carte SD est explicitement inclus dans ce fichier. Fulmatic SOFT effectue les mises à jour du firmware et les opérations sur la carte SD à l'aide de ce code. Vous pouvez modifier ce code pour réaliser des opérations similaires avec votre propre logiciel. Les autres opérations Fulmatic SOFT et Modbus sont envoyées à la bibliothèque et reçoivent les réponses de celle-ci via ce code. En modifiant le code, vous pouvez également répondre aux appels Modbus sans les transmettre à la bibliothèque.

Flash.c

Le code de l'automate et les informations du compteur de temporisation persistant sont sauvegardés dans la mémoire flash lorsque l'automate est mis hors tension. À la remise sous tension, le dernier code sauvegardé est lu depuis le fichier flash.h. N'oubliez pas de configurer les informations de secteur de la puce utilisée. Le circuit suivant permet de détecter la mise hors tension de l'automate.

Ce circuit met la broche de détection d'arrêt à l'état bas lorsque la tension chute de 24 volts à environ 19 volts. Le condensateur C1 permet à la puce de continuer à fonctionner pendant un court laps de temps. Durant cette période prolongée, l'effacement et la réécriture de la mémoire flash sont risqués. Il est donc impératif de suivre les étapes suivantes.

  • Lors de la première mise sous tension de l'automate programmable, nous copions le secteur 10 dans le secteur 11. Si l'alimentation est interrompue pendant le démarrage, les données intactes sont stockées dans le secteur 11.
  • Pour enregistrer de nouvelles données dans la mémoire Flash, il faut d'abord les supprimer. La suppression étant beaucoup plus longue que l'enregistrement, nous effaçons le secteur 10 au démarrage et attendons l'arrêt du système.
  • Le circuit de détection d'arrêt nous accorde un délai d'un peu plus d'une seconde. Lorsqu'un arrêt est détecté, les données sont sauvegardées dans le secteur 10 en 100 à 200 ms. Étant donné que le bloc d'arrêt OB 1 s'exécute avant l'arrêt et qu'un programme à relais important peut être présent dans l'automate programmable, le condensateur C1 doit avoir une capacité minimale de 2200 µF. Une résistance de limitation de courant de 100 ohms est utilisée pour éviter toute surtension dans le circuit due à cette capacité élevée.
  • Au démarrage, l'automate programmable lit toutes les données du secteur 10 et effectue un contrôle d'intégrité. En cas de coupure de courant pendant le démarrage, ce contrôle échouera. Pas d'inquiétude : des données fiables sont toujours disponibles dans le secteur 11. Le démarrage se fait automatiquement à partir de ce secteur.

Interrupt.c

Les interruptions d'entrée numérique, de CAN, de temporisateur et d'UART sont définies dans ce fichier. Elles sont activées et désactivées selon le mode de fonctionnement de l'automate programmable dans la fonction `_INTSetup` du fichier `Fulmatic.c`. N'oubliez pas d'adapter le code de `_INTSetup` à votre matériel. Les fonctions de ce fichier doivent s'exécuter rapidement. Dans notre exemple, nous avons utilisé la commande `switch` pour améliorer la lisibilité du code. Cependant, il existe des méthodes pour optimiser son exécution. Par exemple, les opérations effectuées avec la commande `switch` peuvent être écrites sous forme de fonctions distinctes.

  • void Handle_Encoder(void)
  • void (*EXTI0_Handler_Ptr)(void);
  • Selon la sélection effectuée avec Fulmatic SOFT dans INTSetup : EXTI0_Handler_Ptr = Handle_Encoder ;
  • Lorsqu'une interruption se produit : Exécutez EXTI0_Handler_Ptr() ; à l'intérieur de EXTI0_IRQHandler.

Une autre méthode d'accélération consiste à convertir un octet en 32 bits. Vous pouvez utiliser ce code pour la série STM : *(int32_t *)&PlcIO[EncIAdr[0]] = __rev(ValueS32);

Il ne faut pas utiliser la bibliothèque HAL pour effacer les indicateurs d'interruption. Il est préférable d'utiliser la méthode plus rapide consistant à modifier directement la valeur du registre. TIM3->SR = 0; //__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);

Interruptions d'entrée numérique : Il est utilisé pour les compteurs à grande vitesse, les encodeurs et les applications similaires.

ADC: Nous n'utilisons pas le DMA ; nous effectuons les opérations de lecture ADC au sein de l'interruption. Cela nous permet d'effectuer des opérations de filtrage.

Minuterie : Nous l'utilisons pour un minuteur à la milliseconde et des sorties de prise de force. Il ne suffit pas que le minuteur interrompe une impulsion toutes les millisecondes ; il doit également compter de 0 à 999.

USART : Les interruptions du port série sont utilisées pour la transmission et la réception des données. De plus, la fonction Fulmatic.c -> _EachMilliSecond contient les opérations sur la broche d'activation RS485.

Carte SD.c

Les opérations sur la carte SD sont gérées dans ce fichier. Vous pouvez également procéder différemment de notre exemple. Les codes de communication pour le chargement et le téléchargement de fichiers vers l'automate programmable sont fournis en open source dans le fichier Communication.c. Vous pouvez effectuer ces opérations à l'aide du logiciel Fulmatic. Si votre projet ne comporte pas de carte SD, vous pouvez supprimer toutes les fonctions correspondantes.

principal c

Ce fichier sera modifié à chaque enregistrement du projet avec Cube MX. Pour que vos commandes restent inchangées, vous devez écrire votre code dans les zones prévues à cet effet dans Cube MX. /* USER CODE BEGIN 2 */ Écrivez votre code ici. /* USER CODE END 2 */

Vous pouvez créer toutes les variables nécessaires à la bibliothèque dans ce fichier. Il peut être nécessaire de créer de grands tableaux à une adresse spécifique. `uint8_t PlcEprom[PRGMEMORYSIZE] __attribute__((section(“.ccmram”))));`

Examinez attentivement le fonctionnement de la boucle while. Toute modification apportée ne doit pas perturber sa structure globale. Le code écrit ailleurs dans votre programme ne doit pas ralentir cette boucle.