Ons doel: Deze bibliotheek is ontworpen om u te helpen bij het bouwen van uw eigen PLC . Het is de bedoeling een ecosysteem te creëren van apparaten die programmeerbaar zijn met Fulmatic SOFT , waardoor u maximale controle over uw hardware krijgt . U kunt deze uitgebreide bibliotheek gebruiken met elke chip en IDE naar keuze. U kunt zelf het schakelschema en alle andere hardwarespecificaties definiëren.
Fulmatic SOFT: Voeg de Fulmatic Core-bibliotheek toe aan uw chipcode volgens de instructies, en u kunt uw embedded systemen nu programmeren met Fulmatic SOFT met behulp van de ladderprogrammeertaal ( IEC 61131-3 ). Fulmatic SOFT biedt u meer dan alleen een PLC; het beschikt over alle functies van moderne PLC's, plus TCP-, UDP-, Motion- en SD-kaartcommando's. Fulmatic SOFT biedt u een enorme werkruimte met 771 blokken (255 DB, 256 PB, 256 FB en 4 OB) en 16384 I/O's.
Gratis PLC-firmware: U kunt de PLC- bibliotheek gratis gebruiken tot 2048 bytes (waarvan 1026 bytes door DB0 worden gebruikt). Als u meer geheugen nodig heeft, moet u een licentie aanschaffen (10 USD) . Zonder licentie werkt de PLC 60 minuten. Ons transparante licentiemodel kent geen contracten of ingewikkelde procedures. U moet een TSHA204A-SSHDA-chip aan uw circuit toevoegen. Bij aankoop van een licentie ontvangt u een sleutel. De licentieapplicatie maakt met deze sleutel verbinding met onze server en uploadt de licentiecode naar de chip via de seriële poort of Ethernet. Uw licentieteller op de server wordt tegelijkertijd verlaagd.
Github: Je kunt ons voorbeeldproject, gemaakt met VS Code voor de STM32F407VGTx, downloaden van Github om de PLC- bibliotheek te testen. https://github.com/FultekPLC/Plc-Firmware
In dit project vindt u de complete PLC-firmware, die bijna alle functies van de chip benut, en die beschikbaar is als open source. U kunt de hardwarespecificaties van de chip aanpassen met Cube MX- software en verder werken aan hetzelfde project. U kunt ook hardwarespecificaties en software wijzigen met VS Code. U kunt aangepaste functies toevoegen aan de PLC-firmware en deze vanuit de PLC- code uitvoeren. U kunt elk merk en model ARM-chip gebruiken, waarbij u het aantal en de typen I/O's specificeert. Kortom, u kunt de Fulmatic Core-bibliotheek zonder beperkingen gebruiken, in overeenstemming met de licentievoorwaarden.
Firmware-update: Klanten die uw product gebruiken, kunnen PLC -firmware-updates uitvoeren met Fulmatic SOFT. De code voor de PLC-firmware-update is volledig open source en u kunt de bootloader-code in het voorbeeldproject bekijken en aanpassen. Naast de door ons aanbevolen code kunt u ook uw eigen bootloader-code schrijven.



Codehandleiding
We werken eraan om het voorbeeldproject van 256 KB gebruiksvriendelijker te maken. 256 KB code voor een chip is een behoorlijk groot project. Het begrijpen, aanpassen en implementeren van een project van deze omvang is niet eenvoudig. We hebben geprobeerd de functies op deze pagina en in de code uit te leggen. We werken er ook aan om ze beter uit te leggen. We zullen proberen uw vragen zo goed mogelijk te beantwoorden in het discussiegedeelte van onze GitHub-repository. Helaas bieden we geen gratis ondersteuning voor Fulmatic Core. U kunt bij ons een offerte aanvragen om alle processen voor u te verzorgen, inclusief het ontwerp van de printplaat.
Je kunt het voorbeeldproject downloaden via onze Github-link: https://github.com/FultekPLC/Plc-Firmware. In het voorbeeldproject kun je alle functies van de PLC bekijken en aanpassen met behulp van open-source code. Je kunt functies verwijderen die je niet nodig hebt en nieuwe functies toevoegen.
Alle informatie over IDE's en buildtools vind je in onze GitHub-repository. Op deze pagina leggen we de functies uit die gebruikt worden voor de integratie van bibliotheken met je MCU-code.
FulmaticConfig.h
In dit bestand worden de firmwareversie en de tekenreeksgrootte gedefinieerd.
FulmaticCore.h
Dit bestand bevat de headers van de functies in de bibliotheek die u vanuit uw MCU-code aanroept. U vindt beschrijvingen van alle functies in dit bestand. De bibliotheek werkt met veel variabelen en tekenreeksen. U moet deze tekenreeksen en variabelen in uw MCU-code aanmaken. De structuur `variables_TypeDef` wordt gebruikt om de variabelen die u aanmaakt aan de bibliotheek door te geven. U kunt deze structuur niet wijzigen.
FulmaticInit : Deze opdracht hoeft slechts eenmaal te worden uitgevoerd wanneer de chip voor het eerst wordt ingeschakeld. Een retourwaarde van 1 geeft aan dat de licentiechip correct is uitgelezen en onder licentie werkt.
FulmaticExecute is een functie die in main.c wordt aangeroepen om PLC-laddercode uit te voeren . Deze functie wordt aangeroepen tijdens het Startup-blok (wanneer de PLC start), het Main-blok (bij elke cyclus), het Shutdown-blok (wanneer de PLC stopt), wanneer een digitale ingangsonderbreking optreedt in Interrput.c, en wanneer een tijdsgebaseerde (timer)onderbreking optreedt in Fulmatic.c.
Fulmatic.c
Alle functies die nodig zijn om de bibliotheek in uw code te gebruiken, zijn verzameld in het bestand Fulmatic.c. Dit bestand bevat vertakkingen naar andere bestanden. We groeperen de functies onder vier rubrieken. De beschrijvingen van de functies staan in het bestand waarin de functiecode zich bevindt.
- Functies die nodig zijn voor het voorbeeldproject, maar niet door de bibliotheek worden gebruikt.
- Functies die door de bibliotheek worden gebruikt en die in uw code moeten worden opgenomen.
- Functies die de bibliotheek gebruikt voor licentiedoeleinden. Functies die niet vereist zijn voor gebruik zonder licentie.
- De functionaliteit van de bibliotheek is afhankelijk van de gebruikte PLC-commando's. Als uw PLC bijvoorbeeld geen gebruikmaakt van TCP, UDP, SPI, seriële poort en SD-kaart, werkt de bibliotheek ook zonder deze functies.
_DefaultEprom: Hardware-instellingen die selecteerbaar zijn met Fulmatic SOFT worden opgeslagen in de arrays PlcSetupEprom[STPMEMORYSIZE] en laddercode , PlcEprom[PRGMEMORYSIZE]. De functie _DefaultEprom in dit bestand bevat de standaardinstellingen van de PLC. U kunt de configuratie tot op zekere hoogte aanpassen door deze arrays in uw code te gebruiken.
`_EachMilliSecond`: Deze functie, die elke milliseconde wordt uitgevoerd, wordt uitgevoerd vanuit het hoofdbestand en de bibliotheek. In het voorbeeldproject worden vlaggen ingesteld met behulp van `TIM7_IRQHandler` in `Interrupt.c`, en niet rechtstreeks uitgevoerd. Daarnaast wordt de waarde van `TIM7->ARR` gekalibreerd met de RTC. Raadpleeg de functie `_RtcCalibration` in `Fulmatic.c`. Een onjuiste kalibratie zal ertoe leiden dat alle tijdsafhankelijke bewerkingen in de PLC met kleine fouten worden uitgevoerd.
_DelayUs: Mogelijk moet u de code aanpassen om ervoor te zorgen dat deze precies is ingesteld op de chipfrequentie. U dient de code gedurende een langere periode te testen en te kalibreren. De code is gekalibreerd voor 168 MHz.
_SetOutputs: Normaal gesproken worden ingangen gelezen en uitgangen geschreven in main.c. Wanneer er echter tijdsafhankelijke of digitale ingangsinterrupts optreden, wordt het OB2-interruptblok geactiveerd. Dit wordt vervolgens vanuit de bibliotheek aangeroepen om de uitgangen zonder vertraging in te stellen.
_GetMsTimerCount : Wordt gebruikt om de duur van veel bewerkingen te meten. Deze functie moet in uw code aanwezig zijn. U moet het uitlezen van een timerwaarde in milliseconden inschakelen.
_CrcCalculate: Wordt gebruikt om checksums te berekenen met behulp van hardware. U moet ervoor zorgen dat het correct werkt, afhankelijk van de chip die u gebruikt.
Communicatie.c
Dit bestand bevat de benodigde code voor het gebruik van Ethernet, seriële poort en SPI binnen de PLC. Aanroepen van Modbus en Fulmatic SOFT worden in dit bestand ontvangen. Dataconsistentie wordt gewaarborgd door de respons met een vertraging vanuit main.c te initiëren. Daarnaast is de code voor firmware-updates en SD-kaartbewerkingen expliciet in dit bestand opgenomen. Fulmatic SOFT voert firmware-updates en SD-kaartbewerkingen uit met behulp van deze code. U kunt deze code aanpassen om vergelijkbare bewerkingen met uw eigen software uit te voeren in plaats van met Fulmatic SOFT. Andere Fulmatic SOFT-bewerkingen en Modbus-bewerkingen worden via deze code naar de bibliotheek verzonden en door de bibliotheek beantwoord. Door de code aan te passen, kunt u ook reageren op Modbus-aanroepen zonder ze naar de bibliotheek te sturen.
Flash.c
De PLC-code en de informatie van de permanente timer-teller worden in het flashgeheugen opgeslagen wanneer de PLC wordt uitgeschakeld. Wanneer de PLC weer wordt ingeschakeld, wordt de laatst opgeslagen code uit het flash.h-bestand gelezen. Vergeet niet de sectorinformatie van de chip die u gebruikt in te stellen. U kunt het volgende circuit gebruiken om te detecteren wanneer de PLC is uitgeschakeld.

Dit circuit zet de Shutdown Detect-pin laag wanneer de spanning daalt van 24 volt naar ongeveer 19 volt. De C1-condensator zorgt ervoor dat de chip nog even kan blijven functioneren. Gedurende deze langere periode is het wissen en herschrijven van het flashgeheugen riskant. Daarom moeten de volgende stappen worden gevolgd.
- Wanneer de PLC voor het eerst wordt ingeschakeld, kopiëren we sector 10 naar sector 11. Als de stroomtoevoer tijdens het opstarten wordt onderbroken, blijven de intacte gegevens in sector 11 staan.
- Om nieuwe gegevens in het flashgeheugen op te slaan, moet je ze eerst verwijderen. Verwijderen duurt veel langer dan opslaan. Daarom verwijderen we sector 10 bij het opstarten en wachten we tot het systeem is uitgeschakeld.
- Het circuit voor het detecteren van een uitschakeling geeft ons iets meer dan 1 seconde de tijd. Wanneer een uitschakeling wordt gedetecteerd, worden de gegevens binnen 100-200 ms opgeslagen in sector 10. Omdat het uitschakelblok OB 1 wordt uitgevoerd vóór de uitschakeling en er mogelijk een grote laddercode in de PLC aanwezig is, moet de condensator C1 minimaal 2200 µF zijn. Een stroombegrenzingsweerstand van 100 ohm wordt gebruikt om een schok in het circuit door de grote capaciteit te voorkomen.
- Wanneer de PLC opstart, leest hij alle gegevens in sector 10 en voert een checksumcontrole uit. Als de stroom wordt onderbroken tijdens het opstarten van de PLC, zal de checksumcontrole mislukken. Geen paniek, betrouwbare gegevens zijn altijd beschikbaar in sector 11. Het opstarten gebeurt automatisch vanuit sector 11.
Interrupt.c
De interrupts voor digitale ingang, ADC, timer en UART bevinden zich in dit bestand. Ze worden in- en uitgeschakeld afhankelijk van de PLC-bedrijfsmodus in de functie _INTSetup in Fulmatic.c. Vergeet niet de code van _INTSetup aan te passen aan uw hardware. De functies in dit bestand moeten snel werken. In onze voorbeeldcode hebben we de switch-opdracht gebruikt om de leesbaarheid te verbeteren. Er zijn echter manieren om de uitvoering te versnellen. De bewerkingen binnen de switch-opdracht kunnen bijvoorbeeld als aparte functies worden geschreven.
- void Handle_Encoder(void)
- void (*EXTI0_Handler_Ptr)(void);
- Afhankelijk van de selectie die met Fulmatic SOFT in INTSetup is gemaakt: EXTI0_Handler_Ptr = Handle_Encoder;
- Wanneer een interrupt optreedt: Voer EXTI0_Handler_Ptr(); uit binnen EXTI0_IRQHandler.
Een andere versnellingsmethode is de conversie van bytes naar 32 bits. Je kunt deze code gebruiken voor de STM-serie: *(int32_t *)&PlcIO[EncIAdr[0]] = __rev(ValueS32);
We moeten de HAL-bibliotheek niet gebruiken om interruptvlaggen te wissen. In plaats daarvan geven we de voorkeur aan de snellere methode om de registerwaarde direct aan te passen. TIM3->SR = 0; //__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
Digitale ingangsonderbrekingen: Gebruikt voor snelle tellers, encoders en soortgelijke toepassingen.
ADC: We gebruiken geen DMA; we voeren ADC-leesbewerkingen uit binnen de interrupt. Dit stelt ons in staat om filterbewerkingen uit te voeren.
Timer: We gebruiken dit voor een timer van één milliseconde en PTO-uitgangen. Het is niet voldoende dat de timer simpelweg elke milliseconde een onderbreking veroorzaakt; hij moet ook van 0 tot 999 tellen.
USART: Seriële poortinterrupties worden gebruikt voor het verzenden en ontvangen van gegevens. Daarnaast bevat Fulmatic.c -> _EachMilliSecond bewerkingen voor de RS485-inschakelpin.
SdCard.c
In dit bestand worden bewerkingen met de SD-kaart uitgevoerd. Je kunt dit ook anders doen dan in ons voorbeeldproject. De communicatiecode voor het uploaden en downloaden van bestanden naar de PLC is in open source geschreven in Communication.c. Je kunt bestanden uploaden en downloaden met Fulmatic SOFT. Als je project geen SD-kaart heeft, kun je alle functies verwijderen.
hoofd.c
Dit bestand wordt elke keer gewijzigd wanneer u het project opslaat met Cube MX. Om ervoor te zorgen dat uw commando's ongewijzigd blijven, moet u uw code schrijven in de daarvoor bestemde gedeelten in Cube MX. /* USER CODE BEGIN 2 */ Schrijf hier uw code. /* USER CODE END 2 */
In dit bestand kunt u alle variabelen aanmaken die nodig zijn voor de bibliotheek. Mogelijk moet u grote arrays op een specifiek adres aanmaken. `uint8_t PlcEprom[PRGMEMORYSIZE] __attribute__((section(“.ccmram”))));`
Onderzoek de bewerkingen binnen de while-lus zorgvuldig. Eventuele wijzigingen die u aanbrengt, mogen de algehele structuur niet verstoren. Code in andere delen van uw programma mag deze lus niet vertragen.
