SPS-Bibliothek – Fulmatic Core – SPS-Firmware

Unser Ziel: Diese Bibliothek selbst PLCEs wurde entwickelt, damit Sie Ihre eigenen Produkte herstellen können. Es bietet Ihnen maximale Kontrolle über die Hardware. Fulmatic SOFT Ziel ist der Aufbau eines Ökosystems von Geräten, die mit dieser umfangreichen Bibliothek programmiert werden können. Sie können diese Bibliothek mit jedem beliebigen Chip und jeder beliebigen IDE verwenden. Schaltpläne und alle weiteren Hardware-Spezifikationen können Sie selbst definieren.

Fulmatic SOFT: Fügen Sie die Fulmatic Core-Bibliothek gemäß den Anweisungen zu Ihrem Chip-Code hinzu, und Sie können nun Ihre eingebetteten Systeme ausführen. Fulmatic SOFT s Leiter (IEC 61131-3Programmieren Sie in der Sprache ( ). Fulmatic SOFT Zusätzlich zu allen Funktionen moderner SPSen bietet sie Ihnen weit mehr als nur eine SPS mit TCP-, UDP-, Motion- und SD-Karten-Befehlen. Mit 771 Bausteinen (255 DB, 256 PB, 256 FB und 4 OB) und 16384 E/A bietet die Fulmatic SOFT Ihnen enorm viel Speicherplatz.

Kostenlose SPS-Firmware: PLC Die Bibliothek kann bis zu einer Größe von 2048 Byte kostenlos genutzt werden (DB0 belegt 1026 Byte). Für größeren Speicherbedarf ist eine Lizenz erforderlich. (10 USD) Sie müssen eine Lizenz erwerben. 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 einbauen. Den entsprechenden Schlüssel erhalten Sie nach dem Lizenzkauf. Lizenzantrag Dieser Schlüssel verbindet sich mit unserem Server und lädt den Lizenzcode über die serielle Schnittstelle oder Ethernet auf den Chip. Die Anzahl der Lizenzen auf dem Server verringert sich gleichzeitig.

Github: PLC Um die Bibliothek zu testen, können Sie unser für STM32F407VGTx mit VS Code vorbereitetes Beispielprojekt von GitHub herunterladen. https://github.com/FultekPLC/Plc-Firmware

In diesem Projekt sehen Sie die vollständige SPS-Firmware, die nahezu alle Funktionen des als Open Source verfügbaren Chips nutzt. Cube MX Sie können die Hardware-Spezifikationen des Chips mithilfe der Software anpassen und am selben Projekt weiterarbeiten. Hardware- und Software-Spezifikationen lassen sich mit VS Code ändern. Sie können der SPS-Firmware benutzerdefinierte Funktionen hinzufügen und… PLC Sie können den Code direkt ausführen. Sie können jeden beliebigen ARM-Chip verwenden und die Anzahl und Art der Ein-/Ausgabe festlegen. Kurz gesagt: Sie können die Fulmatic Core-Bibliothek gemäß den Lizenzbedingungen uneingeschränkt nutzen.

Firmware-Update: Ihre Kunden, die Ihr Produkt verwenden PLC Firmware-Updates können mit Fulmatic SOFT durchgeführt werden. 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 vorgeschlagenen Code können Sie auch Ihren eigenen Bootloader-Code schreiben.

Code-Leitfaden

256 KB Wir arbeiten daran, das Beispielprojekt so benutzerfreundlich wie möglich zu gestalten. 256 KB Code für einen Chip sind ein recht umfangreiches Projekt. Ein Projekt dieser Größenordnung 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. Sie können bei uns ein Angebot anfordern, um alle Prozesse in Ihrem Namen abzuwickeln, einschließlich der Leiterplattenentwicklung.

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.

FulmaticInitDer Chip muss nur einmal beim ersten Einschalten aktiviert werden. Wenn die Rückmeldung 1 lautet, bedeutet dies, dass der Lizenzchip korrekt ausgelesen wurde und unter Lizenz arbeitet.

FulmaticExecute: innerhalb von main.c SPS-Leiter Dies ist die Funktion, die zum Ausführen des Codes aufgerufen wird. Sie wird während des Startblocks (beim Start der SPS), des Hauptblocks (in jedem Zyklus), des Abschaltblocks (beim Stoppen der SPS) und bei einem digitalen Eingangsinterrupt in Interrput.c sowie 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: Zu den mit Fulmatic SOFT auswählbaren Hardware-Einstellungen gehören PlcSetupEprom[STPMEMORYSIZE] und Leiter Der Code ist in PlcEprom[PRGMEMORYSIZE]-Arrays 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.

Jede Millisekunde: Diese Funktion, die jede Millisekunde ausgeführt wird, wird sowohl in der Hauptdatei als auch in der Bibliothek aufgerufen. 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 eine präzise Kalibrierung auf die Chipfrequenz zu gewährleisten. 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 Eingangsunterbrechungen auf, wird der OB2-Interruptblock ausgelöst. Dieser Interrupt wird dann innerhalb der Bibliothek aufgerufen, um die Ausgänge verzögerungsfrei zu setzen.

_GetMsTimerCount: Es dient in vielen Prozessen zur Zeitmessung. Es muss in Ihren Code eingebunden werden. Sie müssen das Auslesen eines Ein-Millisekunden-Timerwerts aktivieren.

_CrcCalculate: Es dient zur Berechnung von Prüfsummen mithilfe von Hardware. 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 Eingangsunterbrechungen: Es wird für Hochgeschwindigkeitszähler, Encoder und ähnliche Anwendungen verwendet.

ADC: Wir verwenden kein DMA; wir führen ADC-Leseoperationen innerhalb der Interrupt-Routine durch. Dies ermöglicht uns die Durchführung von Filteroperationen.

Timer: Wir verwenden es für einen Millisekunden-Timer und Nebenabtriebsausgänge. Es genügt nicht, dass der Timer einfach jede Millisekunde einen Stopp 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.