Definieren benutzerdefinierter Arrays in nativen Funktionsblöcken – Ein praktischer Leitfaden
Warum dieser Beitrag?
Tatsächlich wurde dieser Beitrag erstellt, weil ich bei der Entwicklung des Native Function Block festgestellt habe, dass es unmöglich ist, eine Reihe benutzerdefinierter Strukturen zu verwenden. Oder anders ausgedrückt:Es ist schade, dass es auf dem offiziellen GitHub von PLCnext keine Tutorials dieser Art gibt. Wenn Sie das C#-Tutorial verwenden, um ein benutzerdefiniertes Array in Native Function Block zu erstellen, werden Sie feststellen, dass Sie es nicht erfolgreich kompilieren können oder dass das Festlegen der Array-Werte in PLCnext Engineer zu keiner Reaktion führt. Das Beispiel in diesem Fall bezieht sich zufällig auf die Datenbank, das ist alles.
Demo-Beschreibung
- Das folgende Beispiel verwendet den nativen Funktionsblock, um eine benutzerdefinierte Array-Schnittstelle mit der 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 dargestellt.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Anforderungen
- Stellen Sie sicher, dass die ToolChain-Version 23.0 oder höher ist. In diesem Beispiel wird die 23.6 ToolChain zu Demonstrationszwecken verwendet.
- Vertraut mit dem grundlegenden Prozess zum Einrichten eines nativen Funktionsblocks.
- Visual Studio 2019 oder 2022 mit ToolChain-Add-In-Plugins
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)
SCHRITT1
- 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 im ArrayTest-Projekt in Visual Studio einen neuen nativen Funktionsblock mit dem Namen „ArrayCplus“.
SCHRITT2
-
Kopieren Sie diesen Code nach ArrayCplus.cs
-
Da es bei der direkten Einbindung des Quellcodes hier zu Anzeigeproblemen kommt, z. B. &und>, habe ich stattdessen einen Link bereitgestellt.
-
Beispielsweise wird das &als
&kodiert in diesem HTML...
ArrayCplus.cs
SCHRITT3
Öffnen Sie das Terminal im Ordner „ArrayTestCpp“ und geben Sie Folgendes ein:
$ plcncli generate code
Suchen Sie nach dem Generieren des Codes nach ArrayTest-cli32.h und ArrayTest-cli64.h Dateien im src-Verzeichnis und suchen Sie 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 ändern Sie die Implementierung.
IntArrayFB-cli.cpp
SCHRITT4
In ArrayCplus.cpp , geben Sie den folgenden Code ein. Inhalte, die Zeichenfolgen enthalten, müssen im Prozess und nicht im Init-Bereich initialisiert werden. Ihre Initialisierung in der Init-Region funktioniert nicht, was dazu führt, dass Werte über Engineer nicht in sName und sAttribute geschrieben werden können.
ArrayCplus-cli.cpp
SCHRITT5
Öffnen Sie das Terminal im Ordner „ArrayTestCpp“ und geben Sie Folgendes ein:
$ plcncli build all
$ plcncli deploy
SCHRITT6
Öffnen Sie den PLCnext Engineer und laden Sie die Datei ArrayTest.pcwlx Fügen Sie dem ArrayTest eine Variable mit dem Namen arr
hinzuJetzt kann es funktionieren
Fragen
- Obwohl diese Methode in der Praxis funktioniert, warum ist es notwendig, Inhalte, die IecString oder benutzerdefinierten String enthalten, im void PInvoke ArrayTest::ArrayCplus::Process() zu initialisieren? statt im void PInvoke ArrayTest::ArrayCplus::Init() ? Es funktioniert nicht, wenn ich den Code in void PInvoke ArrayTest::ArrayCplus::Init() einfüge .
- Es ist klar, dass es auf GitHub kein entsprechendes Tutorial zu benutzerdefinierten Arrays für native Funktionsblöcke gibt. Kann es jemand ergänzen und verbessern? (Die Art und Weise, wie das Csharp Userdefine-Array im nativen Funktionsblock nicht funktioniert.)
- Ein letzter Punkt, der mich ebenfalls verwirrt, ist, warum, unabhängig davon, ob es sich um IecString, benutzerdefinierten String oder IecStringEx* handelt, wenn sie Strings enthalten, diese in der Form „InOut“ vorliegen müssen 】im CSharp-Code bei Verwendung als nativer Funktionsblock?
Hinweis:
Der Makers Blog zeigt Anwendungen und User Stories von Community-Mitgliedern, die nicht von Phoenix Contact getestet oder überprüft wurden. Die Nutzung erfolgt auf eigene Gefahr.
Industrietechnik
- Schlauchverbindungstypen und Anwendungsfälle
- Präzises 4-Achsen-CNC-Fräsen in Australien – schnelle und zuverlässige Fertigung komplexer Teile
- Was ist Laserstrahlbearbeitung? - Typen und Arbeitsweise
- Warum haben sich Probenahmesysteme nicht verbessert – drei Hauptgründe
- Unterschied zwischen Gießen und Schmieden
- Maschinelles Lernen vs. Deep Learning und seine Verwendung im täglichen Leben
- Warum ist der Leistungsfaktor in elektrischen Energiesystemen so wichtig?
- Aluminiumgusstoleranzen für die Luft- und Raumfahrt
- Boeing:Leichtestes Metall aller Zeiten
- Warum Sie Rohrverschraubungen nicht untereinander mischen sollten