Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Industrietechnik

PLCnext CLI Templates: C++-Entwicklung effizienter gestalten

Dieser Artikel bezieht sich auf PLCnext CLI Version 22.0.0 LTS.


Wenn Sie PLCnext Control-Geräte mit C++ programmieren, haben Sie vermutlich bereits die mit der PLCnext CLI installierten Code-Vorlagen verwendet.

In Visual Studio und Eclipse wählen Sie beim Erstellen eines neuen Projekts mit dem PLCnext-Projektassistenten (installiert mit der PLCnext IDE-Erweiterung) die gewünschte Projektvorlage aus.

Auch beim Generieren eines neuen C++-Projekts auf der Kommandozeile mit der PLCnext CLI müssen Sie eine Projektvorlage angeben.

Die drei Standard-Projektvorlagen sind:

project       Vorlage für Benutzerprogramme. Sie werden vom PLM (Program Library Manager) verwaltet.
acfproject    Vorlage für komponentenbasierte Plattformentwicklung. Die resultierende Komponente wird vom ACF (Application Component Framework) verwaltet.
consumablelibrary Vorlage für eine Bibliothek, die von anderen Projekten verwendet werden kann.

Diese Informationen lassen sich durch Ausführen des Befehls plcncli new anzeigen. Weitere Informationen zu diesen Projekttypen finden Sie im PLCnext Info Center:

In diesem Artikel wird beschrieben, wie Sie zusätzliche, mit der PLCnext CLI installierte Projektvorlagen aktivieren und nutzen, und wie Sie eigene Projektvorlagen erstellen und verwenden.

Zunächst schauen wir uns an, wie das PLCnext CLI Template-System funktioniert.

Das PLCnext CLI Template-System

Die PLCnext CLI enthält eine Standardeinstellung namens TemplateLocations, die angibt, wo Code-Vorlagen zu finden sind. Den Wert dieser Einstellung können Sie mit folgendem Befehl anzeigen:

user@machine:~$ plcncli get setting TemplateLocations
{
  "setting": {
    "TemplateLocations": "./Templates/Templates.xml"
  }
}

Der Pfad zur XML-Datei ist relativ zum plcncli-Installationspfad.

Wechselt man in das Verzeichnis ./Templates, findet man die Datei Templates.xml und mehrere Unterverzeichnisse.

Den Inhalt der Templates.xml anzeigen:

user@machine:~/plcncli/Templates$ cat Templates.xml
<?xml version="1.0" encoding="utf-8"?>
<Templates xmlns="https://www.phoenixcontact.com/schema/clitemplates">
  <Include type="Template">ProjectTemplate/TemplateDescription.xml</Include>
  <Include type="Template">ProgramTemplate/TemplateDescription.xml</Include>
  <Include type="Format">ProjectTemplate/FormatTemplates.xml</Include>
  <Include type="Template">ComponentTemplate/TemplateDescription.xml</Include>
  <Include type="Template">BaseTemplates/BaseTemplateDescription.xml</Include>
  <Include type="Template">BaseTemplates/CodeTemplateDescription.xml</Include>
  <Include type="Fields">BaseTemplates/FieldTemplates.xml</Include>
  <Include type="Types">BaseTemplates/TypeTemplates.xml</Include>
  <Include type="Format">BaseTemplates/FormatTemplates.xml</Include>
  <Include type="Template">AcfProjectTemplate/TemplateDescription.xml</Include>
  <Include type="Template">BaseProjectTemplate/TemplateDescription.xml</Include>
  <Include type="Template">AcfComponentTemplate/TemplateDescription.xml</Include>
  <Include type="Template">BaseComponentTemplate/TemplateDescription.xml</Include>
  <Include type="Template">ConsumableLibraryTemplate/TemplateDescription.xml</Include>
</Templates>

Man sieht Verweise auf TemplateDescription.xml-Dateien verschiedener Typen in den Unterverzeichnissen. Diese enthalten Anweisungen, was die PLCnext CLI tun soll, wenn diese Vorlage verwendet wird.

Die gezeigten Template-Beschreibungsdateien implementieren die drei Standard-Projektvorlagen, die Sie bereits kennen.

Zusätzliche Vorlagen aktivieren

Es gibt eine „versteckte“ Projektvorlage, die standardmäßig mit der PLCnext CLI installiert wird, aber standardmäßig nicht verfügbar ist:

minimumproject  Entspricht acfproject, aber ohne die Möglichkeit, Port-Variablen im Global Data Space zu erstellen.

Wir können diese Vorlage für die PLCnext CLI verfügbar machen, indem wir die Datei MinimalAcfTemplates.xml – die Sie vielleicht bereits im Templates-Verzeichnis bemerkt haben – zur Template-Locations-Einstellung hinzufügen:

user@machine:~$ plcncli set setting TemplateLocations ./Templates/MinimalAcfTemplates.xml --add

Die neue XML-Datei wurde nun zu den Template-Locations hinzugefügt:

user@machine:~$ plcncli get setting TemplateLocations
{
  "setting": {
    "TemplateLocations": "./Templates/Templates.xml;./Templates/MinimalAcfTemplates.xml"
  }
}

Wenn nun der Befehl plcncli new ausgeführt wird, erscheint minimumproject in der Optionsliste. Diese Vorlage kann jetzt verwendet werden, um ein neues C++-Projekt von der Kommandozeile aus zu erstellen.

Hinweis: Das Hinzufügen einer Projektvorlage zur PLCnext CLI fügt diese nicht automatisch den Projektassistenten in Visual Studio oder Eclipse hinzu.

Eigene PLCnext CLI-Vorlage erstellen

Die Erstellung benutzerdefinierter PLCnext CLI-Vorlagen wird an einem einfachen Beispiel demonstriert. Es wird eine PLCnext CLI-Vorlage erstellt, die eine „Hello World!“-Konsolenanwendung in C++ generiert.

Vorgehensweise:

  1. Erstellen Sie ein Verzeichnis für die neue PLCnext CLI-Projektvorlage.
    Unter Linux:

    user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
  2. Erstellen Sie eine Datei mit C++-Vorlagencode, der als Ausgangspunkt für jedes neue Projekt dieses Typs dient.

    user@machine:~/plcncli/Templates/ExeTemplate$ touch Main.cpp

    Der in diesem Beispiel verwendete C++-Code:

    #include <iostream>
    int main() {
      std::cout << "Hello World!" << std::endl;
      return 0;
    }
  3. Erstellen Sie eine CMake-Vorlagendatei.

    user@machine:~/plcncli/Templates/ExeTemplate$ touch CMakeLists.txt

    Der in diesem Beispiel verwendete CMake-Code:

    cmake_minimum_required(VERSION 3.13)
    project($(name))
    if(NOT CMAKE_BUILD_TYPE)
      set(CMAKE_BUILD_TYPE Release)
    endif()
    ################# Ziel erstellen #######################################################
    file(GLOB_RECURSE Headers CONFIGURE_DEPENDS src/*.h src/*.hpp src/*.hxx)
    file(GLOB_RECURSE Sources CONFIGURE_DEPENDS src/*.cpp)
    add_executable(${CMAKE_PROJECT_NAME} ${Headers} ${Sources})
    #######################################################################################
    ################# Installationsverzeichnisse festlegen #############################################
    string(REGEX REPLACE "^.*\(([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*$" "\\1" _ARP_SHORT_DEVICE_VERSION ${ARP_DEVICE_VERSION})
    set(BIN_INSTALL_DIR ${ARP_DEVICE}_${_ARP_SHORT_DEVICE_VERSION}/${CMAKE_BUILD_TYPE})
    #######################################################################################
    ################# Projekt-Include-Pfade ###############################################
    target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
    #######################################################################################
    ################# ARP CMake-Modulpfad einbinden #######################################
    list(INSERT CMAKE_MODULE_PATH 0 "${ARP_TOOLCHAIN_CMAKE_MODULE_PATH}")
    #######################################################################################
    ################# Link-Optionen festlegen ####################################################
    # WARNUNG: Ohne --no-undefined prüft der Linker nicht, ob alle notwendigen
    # Bibliotheken gelinkt sind. Fehlt eine notwendige Bibliothek,
    # stürzt die Firmware ab, OHNE Hinweis auf den Grund.
    #######################################################################################
    target_link_options(${CMAKE_PROJECT_NAME} PRIVATE LINKER:--no-undefined)
    #######################################################################################
    ################# Link-Ziele hinzufügen ####################################################
    find_package(ArpDevice REQUIRED)
    find_package(ArpProgramming REQUIRED)
    target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ArpDevice ArpProgramming)
    #######################################################################################
    ################# Installation #############################################################
    install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION ${BIN_INSTALL_DIR})
    unset(_ARP_SHORT_DEVICE_VERSION)
    #######################################################################################

    Beachten Sie, dass der CMake-Code den Platzhalter $(name) enthält, der durch den Projektnamen ersetzt wird, der an den Befehl plcncli new übergeben wird.

  4. Optional: Fügen Sie der neuen Vorlagenverzeichnis eine README-Datei hinzu, die auch zum Erstellen einer README-Datei in jedem neuen Projekt verwendet werden kann, das aus dieser Vorlage erstellt wird.

  5. Erstellen Sie eine PLCnext CLI-Projektkonfigurationsdatei.

    Diese Datei speichert Projektkonfigurationsinformationen für die PLCnext CLI, z. B. die Liste der Ziele, für die das Projekt gebaut werden soll.

    Für dieses Beispiel wurde die .proj-Datei aus dem Verzeichnis ConsumableLibraryTemplate kopiert und bearbeitet, um Folgendes zu erzeugen:

    <?xml version="1.0" encoding="utf-8"?>
    <ProjectSettings xmlns="https://www.phoenixcontact.com/schema/cliproject">
      <Type>exeproject</Type>
      <Version>0.1</Version>
      <Name>$(name)</Name>
    </ProjectSettings>

    Das Feld Type sollte den eindeutigen Namen dieser Projektvorlage enthalten, der auch in der Template-Beschreibungsdatei im nächsten Schritt enthalten sein wird.

    Das Feld Name enthält den Platzhalter $(name), der bei der Erstellung jedes neuen Projekts durch den Projektnamen ersetzt wird.

  6. Erstellen Sie eine Template-Beschreibungsdatei.

    Für dieses Beispiel wurde die Datei TemplateDescription.xml aus dem Verzeichnis ConsumableLibraryTemplate kopiert und bearbeitet, um Folgendes zu erzeugen:

    <?xml version="1.0" encoding="utf-8"?>
    <TemplateDescription name="exeproject" isRoot="true" basedOn="baseproject" supportedFirmwareVersions="19.0.0.16199" requiredCliVersion="19.0.0.660" version="1.0" xmlns="https://www.phoenixcontact.com/schema/clitemplates" identifier="ProjectSettingsIdentifier">
      <File name="plcnext.proj" template=".proj"/>
      <File name="CMakeLists.txt" template="CMakeLists.txt"/>
      <File name="README.md" template="README.md"/>
      <File name="$(name)Main.cpp" template="Main.cpp" path="src"/>
      <Description>Erstellt ein neues eigenständiges ausführbares Projekt.</Description>
      <Example>
        <Arguments>
          <Argument name="name" value="MyExe"/>
        </Arguments>
        <Description>erstellt ein neues eigenständiges ausführbares Projekt im Verzeichnis 'MyExe'</Description>
      </Example>
    </TemplateDescription>

    Die Felder in der Template-Beschreibung umfassen:

    • name="exeproject" : Ermöglicht die Erstellung von Projekten aus dieser Vorlage mit dem Befehl plcncli new exeproject.
    • File name="A" template="B" path="C" : Erstellt eine Datei im neuen Projekt im angegebenen Pfad, basierend auf der angegebenen Vorlagendatei. Der Dateiname kann auch Platzhalter wie $(name) enthalten, die bei der Erstellung jedes neuen Projekts durch den Projektnamen ersetzt werden.
    • Description und Example Felder, die in den entsprechenden Abschnitten des plcncli-Hilfesystems angezeigt werden.
  7. Erstellen Sie eine neue Templates-Datei, die der PLCnext CLI unsere neuen Vorlagen mitteilt.

    Für dieses Beispiel wurde die Datei MinimalAcfTemplates.xml im Verzeichnis Templates in eine Datei namens CustomTemplates.xml kopiert und diese bearbeitet, um Folgendes zu erzeugen:

    <?xml version="1.0" encoding="utf-8"?>
    <Templates xmlns="https://www.phoenixcontact.com/schema/clitemplates">
      <Include type="Template">ExeTemplate/TemplateDescription.xml</Include>
    </Templates>
  8. Registrieren Sie die benutzerdefinierten Vorlagen bei der PLCnext CLI:

    user@machine:~$ plcncli set setting TemplateLocations ./Templates/CustomTemplates.xml --add

    Der Pfad ist relativ zum PLCnext CLI-Installationsverzeichnis.

  9. Testen Sie es!

    Die folgende Liste von Bash-Befehlen demonstriert die Funktionen der neuen Vorlage:

    plcncli new                    # Der Hilfetext enthält die neue Vorlage und Beschreibung
    plcncli new exeproject --help  # Zeigt das Beispiel zur Verwendung dieser Vorlage
    plcncli new exeproject --name "HelloWorld"  # Erstellt ein neues Projekt basierend auf der Vorlage
    cd HelloWorld
    plcncli set target -n AXCF2152 -v 2022 --add  # Legt das Build-Ziel fest
    plcncli build                  # Baut das Projekt mit dem Standard-Vorlagencode
    scp bin/AXCF2152_22.0.3.129/Release/HelloWorld admin@192.168.1.10:~  # Kopiert die Executable auf das Gerät
    ssh admin@192.168.1.10 ./HelloWorld  # Führt die Executable aus!

Beitragen

In Zukunft ist geplant, dass Beiträge zum PLCnext CLI Templates-Projekt auf GitHub möglich sein werden. Bis dahin können Sie ein Issue mit Ideen für neue Vorlagen oder mit Beispielen von selbst erstellten Vorlagen eröffnen.

Fragen oder Kommentare?

Posten Sie einen Kommentar unten oder stellen Sie Fragen im PLCnext Community Forum.

Industrietechnik

  1. C++ Klassentemplates meistern: Ein praktischer Leitfaden
  2. C++ Templates: Generische Programmierung meistern
  3. Python XML-Verarbeitung: Leitfaden für interoperable Datenverwaltung
  4. VLAN-Setup auf PLCnext Control per Linux-Terminal optimieren
  5. Sicheren Remote-gRPC-Zugriff mit grpcurl auf PLCnext-Geräten
  6. Alibaba Cloud Connector mit PLCnext integrieren: Schritt-für-Schritt-Anleitung
  7. Sicher auf PLCnext Webserver zugreifen, der per DHCP eine IP erhält
  8. PC per Wake-on-LAN mit PLCnext fernwecken
  9. Cluster-Management auf PLCnext: Kubernetes für die industrielle Automatisierung nutzen
  10. Echtzeit-Monitoring von PLCnext mit Tableau-Dashboards