Ons doel: Deze bibliotheek zelf PLCHet is ontworpen zodat u het zelf kunt produceren. Het geeft u de hoogste mate van controle over de hardware. Fulmatic SOFT Het doel is om een ecosysteem van apparaten te bouwen die met deze grote bibliotheek geprogrammeerd kunnen worden. Je kunt deze bibliotheek gebruiken met elke chip en IDE die je wilt. Je 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 uitvoeren. Fulmatic SOFT s ladder (IEC-61131 3Programmeer in de taal ( ). Fulmatic SOFT Naast alle functies van moderne PLC's biedt het u meer dan alleen een PLC met TCP-, UDP-, Motion- en SD-kaartcommando's. Met 771 blokken (255 DB, 256 PB, 256 FB en 4 OB) en 16384 I/O's biedt de Fulmatic SOFT u enorm veel ruimte.
Gratis PLC-firmware: PLC Je kunt de bibliotheek gratis gebruiken tot 2048 bytes (DB0 gebruikt 1026 bytes). Voor meer geheugen is een licentie vereist. ($ 10) U dient een licentie aan te schaffen. Zonder licentie werkt de PLC 60 minuten. Ons transparante licentiemodel kent geen contracten of ingewikkelde procedures. U dient een TSHA204A-SSHDA-chip aan uw circuit toe te voegen. Na aankoop van de licentie ontvangt u een licentiesleutel. Licentieaanvraag Deze sleutel maakt verbinding met onze server en uploadt de licentiecode naar de chip via de seriële poort of Ethernet. Het aantal licenties op de server zal gelijktijdig afnemen.
Github: PLC Om de bibliotheek te testen, kunt u ons voorbeeldproject, speciaal ontwikkeld voor STM32F407VGTx met VS Code, downloaden van GitHub. https://github.com/FultekPLC/Plc-Firmware
In dit project ziet u de volledige PLC-firmware, die gebruikmaakt van bijna alle functies van de chip, en die als open source beschikbaar is. Cube MX Je kunt de hardwarespecificaties van de chip aanpassen met de software en gewoon doorwerken aan hetzelfde project. Je kunt hardwarespecificaties en software wijzigen met VS Code. Je kunt aangepaste functies toevoegen aan de PLC-firmware en... PLC Je kunt de code direct uitvoeren. Je kunt elk gewenst merk en model ARM-chip gebruiken en het aantal en type I/O-poorten specificeren. Kortom, je kunt de Fulmatic Core-bibliotheek zonder enige beperking gebruiken, in overeenstemming met de licentievoorwaarden.
Firmware-update: Uw klanten die uw product gebruiken PLC Firmware-updates kunnen worden uitgevoerd 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 voorgestelde code kunt u ook uw eigen bootloader-code schrijven.



Codehandleiding
256 KB We werken eraan om het voorbeeldproject 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 nog beter uit te leggen. We zullen proberen uw vragen zo goed mogelijk te beantwoorden in het discussiegedeelte van onze GitHub-repository. Helaas bieden wij geen gratis ondersteuning voor Fulmatic Core. U kunt bij ons een offerte aanvragen om alle processen namens 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 kunt u alle functies van de PLC bekijken en aanpassen met behulp van open-source code. U kunt functies verwijderen die u 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.
FulmaticInitDe chip hoeft slechts één keer geactiveerd te worden, namelijk bij het eerste inschakelen. Als de retourwaarde 1 is, betekent dit dat de licentiechip correct is uitgelezen en onder licentie functioneert.
FulmaticExecute: binnen main.c PLC-ladder Dit is de functie die wordt aangeroepen om de code uit te voeren. Deze wordt aangeroepen tijdens het Startup-blok (wanneer de PLC start), het Main-blok (bij elke cyclus), het Shutdown-blok (wanneer de PLC stopt), en wanneer er een digitale ingangsonderbreking optreedt in Interrput.c, en ook bij een tijdsgebaseerde (timer)onderbreking 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: Met Fulmatic SOFT kunnen hardware-instellingen worden geselecteerd, waaronder PlcSetupEprom[STPMEMORYSIZE] en ladder De code is opgeslagen in PlcEprom[PRGMEMORYSIZE] arrays. 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.
_ElkeMilliSeconde: Deze functie, die elke milliseconde wordt uitgevoerd, wordt aangeroepen vanuit het hoofdbestand en de bibliotheek. In het voorbeeldproject worden de vlaggen ingesteld met behulp van TIM7_IRQHandler in Interrupt.c, en niet rechtstreeks uitgevoerd. Daarnaast wordt de TIM7->ARR-waarde 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.
_VertragingOns: Mogelijk moet u de code aanpassen om ervoor te zorgen dat deze nauwkeurig is gekalibreerd 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. Deze interrupt wordt vervolgens vanuit de bibliotheek aangeroepen om de uitgangen zonder vertraging in te stellen.
_GetMsTimerCount: Het wordt gebruikt om de tijd in veel processen te meten. Het moet in uw code worden opgenomen. U moet het uitlezen van een timerwaarde van één milliseconde inschakelen.
_CrcCalculate: Het wordt gebruikt om met behulp van hardware checksums te berekenen. 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: Het wordt 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 het voor een millisecondentimer en PTO-uitgangen. Het is niet voldoende dat de timer elke milliseconde een onderbreking veroorzaakt; hij moet ook van 0 tot 999 tellen.
USART: Seriële poortinterrupts worden gebruikt voor het verzenden en ontvangen van gegevens. Daarnaast bevat Fulmatic.c -> _EachMilliSecond bewerkingen op 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.
