Definition benutzerdefinierter Arrays in Native Function Blocks – Ein praktischer Leitfaden
Warum dieser Beitrag?
Tatsächlich wurde dieser Beitrag erstellt, weil ich bei der Entwicklung des Native Function Blocks feststellte, dass es unmöglich war, ein Array von benutzerdefinierten Strukturen zu verwenden. Anders ausgedrückt: Es ist schade, dass das offizielle GitHub von PLCnext keine Tutorials dieser Art hat. Wenn Sie das C#-Tutorial verwenden, um ein benutzerdefiniertes Array in einem Native Function Block zu erstellen, werden Sie feststellen, dass Sie es nicht erfolgreich kompilieren können, oder das Setzen der Array-Werte in PLCnext Engineer keine Reaktion zeigt. Das Beispiel im Fall bezieht sich zufällig auf die Datenbank, das ist alles.
Demo-Beschreibung
- Das folgende Beispiel verwendet den Native Function Block, um eine benutzerdefinierte Array-Schnittstelle mit dem PLCncli-Toolchain zu erstellen.
- Das Array besteht aus 21 Elementen, von denen jedes eine Struktur ist. Die Struktur enthält zwei IecString80 und eine Enumeration, wie im folgenden Diagramm gezeigt.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Voraussetzungen
- Stellen Sie sicher, dass die ToolChain-Version 23.0 oder höher ist. Dieses Beispiel verwendet die 23.6 ToolChain für Demonstrationszwecke.
- Vertraut mit dem grundlegenden Prozess der Erstellung eines Native Function Blocks.
- Visual Studio 2019 oder 2022 mit ToolChain Add-in Plugins
$ plcncli --version plcncli 23.6.0.1450 (23.6.0.1450)
SCHRITT 1
- Erstellen Sie ein neues Projekt mit Visual Studio, wählen Sie den Projekttyp „Shared Native Function Block“ und nennen Sie das Projekt „ArrayTest“.
- Erstellen Sie dann innerhalb des ArrayTest-Projekts in Visual Studio einen neuen Native Function Block namens „ArrayCplus“.
SCHRITT 2
Kopieren Sie diesen Code in ArrayCplus.cs
Aufgrund von Anzeigeproblemen beim direkten Einfügen des Quellcodes hier (z. B. & und >), habe ich einen Link bereitgestellt.
Zum Beispiel wird & in diesem HTML als
&kodiert…
ArrayCplus.cs
SCHRITT 3
Öffnen Sie das Terminal im ArrayTestCpp-Ordner und geben Sie Folgendes ein.
$ plcncli generate code
Nach der Codegenerierung suchen Sie die Dateien ArrayTest-cli32.h und ArrayTest-cli64.h im src-Verzeichnis und finden die Stellen, an denen #error angezeigt wird.
Wir müssen die Kommentare entfernen und den Code verbessern. Klicken Sie, um zu InArrayFB-cli.cpp zu navigieren und die Implementierung zu ändern.
IntArrayFB-cli.cpp
SCHRITT 4
In ArrayCplus.cpp geben Sie den folgenden Code ein. Inhalte, die Strings enthalten, müssen im Process-Bereich initialisiert werden, nicht im Init-Bereich; eine Initialisierung im Init-Bereich funktioniert nicht und führt dazu, dass Werte nicht über Engineer in sName und sAttribute geschrieben werden können.
ArrayCplus-cli.cpp
SCHRITT 5
Öffnen Sie das Terminal im ArrayTestCpp-Ordner und geben Sie Folgendes ein.
$ plcncli build all $ plcncli deploy
SCHRITT 6
Öffnen Sie PLCnext Engineer und laden Sie die ArrayTest.pcwlx, fügen Sie eine Variable zum ArrayTest namens arr hinzu.
Jetzt funktioniert es.
Fragen
- Obwohl diese Methode in der Praxis funktioniert, warum ist es notwendig, Inhalte, die IecString oder benutzerdefinierte Strings enthalten, in void PInvoke ArrayTest::ArrayCplus::Process() zu initialisieren, anstatt in void PInvoke ArrayTest::ArrayCplus::Init()? Es funktioniert nicht, wenn ich den Code in void PInvoke ArrayTest::ArrayCplus::Init() platziere.
- Es ist klar, dass es auf GitHub kein entsprechendes Tutorial zu benutzerdefinierten Arrays für Native Function Blocks gibt. Kann jemand dies ergänzen und verbessern? (Die Art und Weise, wie C# benutzerdefinierte Arrays funktioniert, funktioniert nicht im Native Function Block.)
- Ein letzter Punkt, der mich auch verwirrt: Warum müssen IecString, benutzerdefinierte Strings oder IecStringEx*, wenn sie Strings enthalten, in C#-Code, wenn sie als Native Function Block verwendet werden, in Form von 【InOut】 sein?
Hinweis:
Der Makers Blog zeigt Anwendungen und Benutzerberichte von Community-Mitgliedern, die nicht von Phoenix Contact getestet oder überprüft wurden. Verwendung auf eigenes Risiko.
Industrietechnik
- Vier entscheidende Erkenntnisse für resiliente E-Commerce-Lieferketten nach der Pandemie
- Generatorüberlastung: Warnsignale & mögliche Folgen
- Umfassender Leitfaden zu Rohrkennzeichnung und -markierung: Standards, Sicherheit & Best Practices
- Schneller Wiederanlauf nach Brand: Leitfaden für Werkstätten
- Keramische Dieselpartikelfilter: Fortschrittliche Emissionsreinigung für sauberere Stadtluft
- Lagerautomatisierung voranbringen: Bots zur Kommunikation befähigen für mehr Effizienz
- Das richtige Verkabelungssystem & Kabelführungen für sichere Inneninstallationen wählen
- Werkstattwachstum durch Automatisierung beschleunigen – bei Erhalt der Arbeitsplätze
- Industrielle Beschaffung meistern: Von Markenbekanntheit zum Purchase Order
- Warum Gusseisen-Platentische der Goldstandard für Schweißen sind