Unser Ziel: Diese Bibliothek unterstützt Sie beim Aufbau Ihrer eigenen SPS . Sie zielt darauf ab, ein Ökosystem von Geräten zu schaffen, die mit Fulmatic SOFT programmierbar sind und Ihnen maximale Kontrolle über Ihre Hardware ermöglichen . Sie können diese umfangreiche Bibliothek mit jedem beliebigen Chip und jeder beliebigen IDE verwenden. Schaltplan und alle weiteren Hardware-Spezifikationen können Sie selbst definieren.
Fulmatic SOFT: Fügen Sie die Fulmatic Core-Bibliothek gemäß der Anleitung zu Ihrem Chip-Code hinzu. Anschließend können Sie Ihre eingebetteten Systeme mit Fulmatic SOFT in der Kontaktplansprache ( IEC 61131-3 ) programmieren . Fulmatic SOFT bietet Ihnen mehr als nur eine SPS: Alle Funktionen moderner SPSen sowie TCP-, UDP-, Motion- und SD-Karten-Befehle. Fulmatic SOFT stellt Ihnen einen umfangreichen Arbeitsbereich mit 771 Blöcken (255 DB, 256 PB, 256 FB und 4 OB) und 16384 Ein-/Ausgängen zur Verfügung.
Kostenlose SPS-Firmware: Sie können die SPS- Bibliothek bis zu 2048 Bytes kostenlos nutzen (1026 Bytes werden von DB0 belegt). Benötigen Sie mehr Speicher, ist der Erwerb einer Lizenz (10 USD) erforderlich . Ohne Lizenz ist die SPS 60 Minuten lang betriebsbereit. Unser transparentes Lizenzmodell kommt ohne Verträge oder komplizierte Prozesse aus. Sie müssen einen TSHA204A-SSHDA-Chip in Ihre Schaltung integrieren. Nach dem Lizenzerwerb erhalten Sie einen Lizenzschlüssel. Die Lizenzierungsanwendung verbindet sich mit diesem Schlüssel mit unserem Server und lädt den Lizenzcode über die serielle Schnittstelle oder Ethernet auf den Chip. Ihr Lizenzkontingent auf dem Server verringert sich entsprechend.
GitHub: Sie können unser mit VS Code für STM32F407VGTx erstelltes Beispielprojekt von GitHub herunterladen, um die SPS- Bibliothek zu testen. https://github.com/FultekPLC/Plc-Firmware
In diesem Projekt finden Sie die vollständige SPS-Firmware, die nahezu alle Funktionen des Chips nutzt und als Open Source verfügbar ist. Sie können die Hardware-Spezifikationen des Chips mit der Cube MX -Software anpassen und Ihr Projekt anschließend fortsetzen. Änderungen an Hardware- und Software-Spezifikationen sind auch mit VS Code möglich. Sie können der SPS-Firmware benutzerdefinierte Funktionen hinzufügen und diese direkt im SPS- Code ausführen. Sie können beliebige ARM-Chips verschiedener Marken und Modelle verwenden und dabei Anzahl und Art der Ein-/Ausgänge festlegen. Kurz gesagt: Die Fulmatic Core-Bibliothek steht Ihnen gemäß den Lizenzbedingungen uneingeschränkt zur Verfügung.
Firmware-Update: Kunden, die Ihr Produkt verwenden, können mit Fulmatic SOFT Firmware-Updates für ihre SPS durchführen . Der Code für das SPS-Firmware-Update ist vollständig Open Source. Sie können den Bootloader-Code im Beispielprojekt einsehen und anpassen. Neben dem von uns empfohlenen Code können Sie auch Ihren eigenen Bootloader-Code schreiben.



Code-Leitfaden
Wir arbeiten daran, das 256 KB große Beispielprojekt benutzerfreundlicher zu gestalten. 256 KB Code für einen Chip sind ein recht umfangreiches Projekt. Ein Projekt dieser Größe zu verstehen, anzupassen und zu implementieren, ist nicht einfach. Wir haben versucht, die Funktionen auf dieser Seite und im Code zu erläutern und arbeiten daran, die Erklärungen weiter zu verbessern. Wir werden Ihre Fragen so gut wie möglich im Diskussionsbereich unseres GitHub-Repositorys beantworten. Leider bieten wir keinen kostenlosen Support für Fulmatic Core an. Gerne erstellen wir Ihnen ein Angebot, um alle Prozesse, einschließlich des Leiterplattendesigns, für Sie zu übernehmen.
Sie können das Beispielprojekt über unseren GitHub-Link herunterladen: https://github.com/FultekPLC/Plc-Firmware. Im Beispielprojekt können Sie alle Funktionen der SPS mithilfe von Open-Source-Code einsehen und anpassen. Sie können nicht benötigte Funktionen entfernen und neue hinzufügen.
Alle Informationen zu IDEs und Build-Tools finden Sie in unserem GitHub-Repository. Auf dieser Seite erläutern wir die Funktionen, die zur Bibliotheksintegration in Ihren MCU-Code verwendet werden.
FulmaticConfig.h
Die Definitionen für Firmware-Version und Zeichenkettenlänge werden in dieser Datei vorgenommen.
FulmaticCore.h
Diese Datei enthält die Header der Funktionen innerhalb der Bibliothek, die Sie in Ihrem MCU-Code aufrufen. Beschreibungen aller Funktionen finden Sie in dieser Datei. Die Bibliothek arbeitet mit vielen Variablen und Zeichenketten. Diese müssen Sie in Ihrem MCU-Code erstellen. Die `variables_TypeDef`-Struktur dient dazu, die von Ihnen erstellten Variablen an die Bibliothek zu übergeben. Diese Struktur darf nicht verändert werden.
FulmaticInit : Dieser Befehl muss nur einmal beim ersten Einschalten des Chips ausgeführt werden. Die Rückgabe von 1 bedeutet, dass der Lizenzchip korrekt ausgelesen wurde und unter Lizenz arbeitet.
FulmaticExecute ist eine Funktion, die in main.c aufgerufen wird, um SPS- Leitercode auszuführen. Sie wird während des Startblocks (beim Start der SPS), des Hauptblocks (in jedem Zyklus), des Abschaltblocks (beim Stoppen der SPS), bei einem digitalen Eingangsinterrupt in Interrput.c und bei einem zeitbasierten (Timer-)Interrupt in Fulmatic.c aufgerufen.
Fulmatic.c
Alle Funktionen, die Sie für die Verwendung der Bibliothek in Ihrem Code benötigen, sind in der Datei Fulmatic.c zusammengefasst. Diese Datei verzweigt in weitere Dateien. Die Funktionen sind in vier Kategorien unterteilt. Die Funktionsbeschreibungen befinden sich in der Datei, in der auch der Funktionsrumpf definiert ist.
- Funktionen, die für das Beispielprojekt benötigt werden, aber von der Bibliothek nicht verwendet werden.
- Funktionen der Bibliothek, die in Ihren Code eingebunden werden müssen.
- Funktionen, die die Bibliothek für Lizenzierungszwecke verwendet. Funktionen, die für die nicht lizenzierte Nutzung nicht erforderlich sind.
- Die Funktionen der Bibliothek hängen von den verwendeten SPS-Befehlen ab. Wenn beispielsweise Operationen wie TCP, UDP, SPI, serielle Schnittstelle und SD-Karte in Ihrer SPS nicht verwendet werden, funktioniert die Bibliothek auch ohne diese Funktionen.
_DefaultEprom: Die mit Fulmatic SOFT auswählbaren Hardwareeinstellungen werden in den Arrays PlcSetupEprom[STPMEMORYSIZE] und PlcEprom[PRGMEMORYSIZE] (Leitercode ) gespeichert . Die Funktion _DefaultEprom in dieser Datei enthält die Standardeinstellungen der SPS. Sie können die Konfiguration bis zu einem gewissen Grad anpassen, indem Sie diese Arrays in Ihrem Code verwenden.
`_EachMilliSecond`: Diese Funktion, die jede Millisekunde ausgeführt wird, befindet sich in der Hauptdatei und der Bibliothek. Im Beispielprojekt werden die Flags mithilfe von `TIM7_IRQHandler` in `Interrupt.c` gesetzt und nicht direkt ausgeführt. Zusätzlich wird der Wert von `TIM7->ARR` mit der Echtzeituhr (RTC) kalibriert. Bitte prüfen Sie die Funktion `_RtcCalibration` in `Fulmatic.c`. Eine fehlerhafte Kalibrierung führt dazu, dass alle zeitbasierten Operationen der SPS mit kleineren Fehlern ausgeführt werden.
_DelayUs: Möglicherweise müssen Sie den Code anpassen, um sicherzustellen, dass er präzise auf die Chipfrequenz eingestellt ist. Testen und kalibrieren Sie ihn über einen längeren Zeitraum. Er ist für 168 MHz kalibriert.
_SetOutputs: Normalerweise werden Eingänge gelesen und Ausgänge in main.c beschrieben. Treten jedoch zeitbasierte oder digitale Eingangs-Interrupts auf, wird der OB2-Interruptblock ausgelöst. Dieser wird dann innerhalb der Bibliothek aufgerufen, um die Ausgänge verzögerungsfrei zu setzen.
_GetMsTimerCount : Wird zur Messung der Dauer in vielen Operationen verwendet. Diese Funktion muss in Ihrem Code vorhanden sein. Sie müssen das Auslesen des Millisekunden-Timerwerts aktivieren.
_CrcCalculate: Wird zur Berechnung von Prüfsummen mithilfe der Hardware verwendet. Sie müssen sicherstellen, dass es je nach verwendetem Chip korrekt funktioniert.
Kommunikation.c
Diese Datei enthält den notwendigen Code für die Verwendung von Ethernet, serieller Schnittstelle und SPI innerhalb der SPS. Aufrufe von Modbus und Fulmatic SOFT werden in dieser Datei empfangen. Die Datenkonsistenz wird durch eine verzögerte Antwortinitiierung in main.c sichergestellt. Zusätzlich ist der Code für Firmware-Updates und SD-Karten-Operationen explizit in dieser Datei implementiert. Fulmatic SOFT führt Firmware-Updates und SD-Karten-Operationen mithilfe dieses Codes durch. Sie können diesen Code anpassen, um ähnliche Operationen mit Ihrer eigenen Software anstelle von Fulmatic SOFT durchzuführen. Andere Fulmatic SOFT- und Modbus-Operationen werden über diesen Code an die Bibliothek gesendet und von ihr beantwortet. Durch Codeänderungen können Sie auch Modbus-Aufrufe beantworten, ohne sie an die Bibliothek zu senden.
Flash.c
Der SPS-Code und die Informationen des permanenten Timer-Zählers werden beim Ausschalten der SPS im Flash-Speicher gesichert. Beim Wiedereinschalten der SPS wird der zuletzt gespeicherte Code aus der Datei flash.h gelesen. Denken Sie daran, die Sektorinformationen des verwendeten Chips einzustellen. Mit der folgenden Schaltung können Sie erkennen, wann die SPS ausgeschaltet ist.

Diese Schaltung setzt den Shutdown-Detect-Pin auf Low-Pegel, sobald die Spannung von 24 Volt auf etwa 19 Volt abfällt. Der Kondensator C1 ermöglicht den Weiterbetrieb des Chips für kurze Zeit. Während dieser Zeit ist das Löschen und Überschreiben des Flash-Speichers riskant. Daher müssen die folgenden Schritte befolgt werden.
- Beim ersten Einschalten der SPS kopieren wir Sektor 10 in Sektor 11. Falls die Stromzufuhr während des Startvorgangs unterbrochen wird, bleiben die intakten Daten in Sektor 11 erhalten.
- Um neue Daten im Flash-Speicher zu speichern, müssen diese zunächst gelöscht werden. Das Löschen dauert deutlich länger als das Speichern. Daher löschen wir Sektor 10 beim Systemstart und warten auf das Herunterfahren.
- Die Abschalterkennungsschaltung gibt uns etwas mehr als eine Sekunde Zeit. Sobald eine Abschaltung erkannt wird, werden die Daten innerhalb von 100–200 ms in Sektor 10 gespeichert. Da der Abschaltblock OB 1 vor der Abschaltung ausgeführt wird und möglicherweise umfangreicher Kontaktplan in der SPS vorhanden ist, sollte der Kondensator C1 mindestens 2200 µF betragen. Ein 100-Ohm-Strombegrenzungswiderstand verhindert einen Kurzschluss im Stromkreis durch die hohe Kapazität.
- Beim Start liest die SPS alle Daten aus Sektor 10 und führt eine Prüfsummenprüfung durch. Wird die Stromversorgung während des Startvorgangs unterbrochen, schlägt die Prüfsummenprüfung fehl. Keine Sorge, zuverlässige Daten sind stets in Sektor 11 verfügbar. Der Startvorgang erfolgt automatisch ab Sektor 11.
Interrupt.c
Digitale Eingänge, ADC, Timer und UART-Interrupts befinden sich in dieser Datei. Sie werden in der Funktion `_INTSetup` in `Fulmatic.c` entsprechend dem SPS-Betriebsmodus aktiviert bzw. deaktiviert. Passen Sie den Code von `_INTSetup` an Ihre Hardware an. Die Funktionen in dieser Datei müssen schnell ausgeführt werden. In unserem Beispielcode haben wir den Befehl `switch` verwendet, um die Lesbarkeit des Codes zu verbessern. Es gibt jedoch Möglichkeiten, die Ausführungsgeschwindigkeit zu erhöhen. Beispielsweise können die Operationen innerhalb des `switch`-Befehls in separate Funktionen ausgelagert werden.
- void Handle_Encoder(void)
- void (*EXTI0_Handler_Ptr)(void);
- Abhängig von der mit Fulmatic SOFT in INTSetup getroffenen Auswahl: EXTI0_Handler_Ptr = Handle_Encoder;
- Wenn eine Unterbrechung auftritt: Führen Sie EXTI0_Handler_Ptr(); innerhalb von EXTI0_IRQHandler aus.
Eine weitere Beschleunigungsmethode ist die Byte-zu-32-Bit-Konvertierung. Für die STM-Serie können Sie folgenden Code verwenden: *(int32_t *)&PlcIO[EncIAdr[0]] = __rev(ValueS32);
Wir sollten die HAL-Bibliothek nicht zum Löschen von Interrupt-Flags verwenden. Stattdessen sollten wir die schnellere Methode der direkten Änderung des Registerwerts bevorzugen. TIM3->SR = 0; //__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
Digitale Eingangs-Interrupts: Werden für Hochgeschwindigkeitszähler, Encoder und ähnliche Anwendungen verwendet.
ADC: Wir verwenden kein DMA; die ADC-Leseoperationen werden innerhalb der Interrupt-Routine durchgeführt. Dies ermöglicht uns die Durchführung von Filteroperationen.
Timer: Wir verwenden diesen für einen Ein-Millisekunden-Timer und PTO-Ausgänge. Es genügt nicht, dass der Timer einfach jede Millisekunde einen Interrupt auslöst; er muss auch von 0 bis 999 zählen.
USART: Serielle Schnittstelleninterrupts werden zur Datenübertragung und zum Datenempfang verwendet. Zusätzlich enthält Fulmatic.c -> _EachMilliSecond Operationen für den RS485-Aktivierungspin.
SdCard.c
Die SD-Karten-Operationen werden in dieser Datei ausgeführt. Sie können dies auch anders als in unserem Beispielprojekt umsetzen. Der Kommunikationscode zum Hoch- und Herunterladen von Dateien auf die SPS ist in Open Source in der Datei Communication.c geschrieben. Sie können Dateien mit Fulmatic SOFT hoch- und herunterladen. Wenn Ihr Projekt keine SD-Karte besitzt, können Sie alle Funktionen löschen.
Haupt c
Diese Datei ändert sich jedes Mal, wenn Sie das Projekt mit Cube MX speichern. Damit Ihre Befehle unverändert bleiben, müssen Sie Ihren Code in den dafür vorgesehenen Bereichen in Cube MX schreiben. /* USER CODE BEGIN 2 */ Schreiben Sie hier Ihren Code. /* USER CODE END 2 */
In dieser Datei können Sie alle für die Bibliothek benötigten Variablen erstellen. Möglicherweise müssen Sie große Arrays an einer bestimmten Adresse erstellen. `uint8_t PlcEprom[PRGMEMORYSIZE] __attribute__((section(“.ccmram”))));`
Untersuchen Sie die Operationen innerhalb der while-Schleife sorgfältig. Jegliche Änderungen dürfen die Gesamtstruktur nicht beeinträchtigen. Code in anderen Teilen Ihres Programms darf diese Schleife nicht verlangsamen.
