Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

PLCnext CLI Sjablonen: Stroomlijn Uw C++ Ontwikkeling

Dit artikel is van toepassing op PLCnext CLI versie 22.0.0 LTS.


Als u PLCnext Control apparaten programmeert met C++, heeft u waarschijnlijk al code-sjablonen gebruikt die geïnstalleerd worden met de PLCnext CLI.

In Visual Studio en Eclipse moet u het projectsjabloon kiezen dat u wilt gebruiken bij het aanmaken van een nieuw project met de PLCnext projectwizard (geïnstalleerd met de PLCnext IDE extensie).

Bij het genereren van een nieuw C++ project op de commandoregel met de PLCnext CLI, moet u ook een projectsjabloon specificeren.

De drie standaard projectsjablonen zijn:

project De projectsjabloon voor gebruikersprogramma's. Deze worden beheerd door de PLM (Program Library Manager).
acfproject De acfproject sjabloon is voor component-gebaseerd platformontwikkeling. De resulterende component wordt beheerd door de ACF (Application Component Framework).
consumablelibrary De consumable library sjabloon creëert een bibliotheek die door andere projecten kan worden gebruikt. 

De bovenstaande informatie is zichtbaar door het plcncli new commando uit te voeren. Meer informatie over deze projecttypen vindt u in het PLCnext Info Center:

  • Afbakening van ACF en PLM
  • Gedeelde bibliotheken aanmaken en gebruiken

Dit artikel beschrijft hoe u extra projectsjablonen activeert en gebruikt die standaard met de PLCnext CLI worden geïnstalleerd, en hoe u uw eigen projectsjabloon kunt aanmaken en gebruiken.

Maar laten we eerst kijken hoe het PLCnext CLI Sjabloonsysteem werkt.

Het PLCnext CLI Sjabloonsysteem

De PLCnext CLI bevat een standaardinstelling genaamd TemplateLocations, die aangeeft waar code-sjablonen te vinden zijn. U kunt de waarde van deze instelling zien met het volgende commando:

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

Het pad naar het XML-bestand is relatief ten opzichte van het plcncli installatiepad.

Als u bladert naar de ./Templates directory, ziet u het Templates.xml bestand en een aantal subdirectories.

De inhoud van het Templates.xml bestand tonen...

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>

... ziet u dat er referenties zijn naar TemplateDescription.xml bestanden van verschillende typen in de directories onder de Templates directory. Deze bevatten instructies die de PLCnext CLI vertellen wat te doen wanneer die sjabloon wordt gebruikt.

De boven getoonde sjabloonbeschrijvingsbestanden implementeren de drie standaard projectsjablonen die u al kent.

Extra Sjablonen Activeren

Er is standaard één "verborgen" projectsjabloon geïnstalleerd met de PLCnext CLI, die niet standaard beschikbaar is:

minimumproject Dit is hetzelfde als acfproject, maar zonder de mogelijkheid om poortvariabelen in de Global Data Space aan te maken. 

We kunnen deze sjabloon beschikbaar maken voor de PLCnext CLI door het MinimalAcfTemplates.xml bestand - dat u misschien al in de Templates directory heeft opgemerkt - toe te voegen aan de sjabloonlocaties instelling:

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

Het nieuwe XML-bestand is nu toegevoegd aan de sjabloonlocaties:

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

... en wanneer het plcncli new commando wordt uitgevoerd, verschijnt minimumproject nu in de lijst met opties. Deze sjabloon kan nu worden gebruikt om een nieuw C++ project aan te maken vanaf de commandoregel.

Let op: Het toevoegen van een projectsjabloon aan de PLCnext CLI voegt de projectsjabloon niet automatisch toe aan de Visual Studio of Eclipse projectwizards.

Uw Eigen PLCnext CLI Sjabloon Maken

Het maken van aangepaste PLCnext CLI sjablonen wordt gedemonstreerd met een eenvoudig voorbeeld. Er wordt een PLCnext CLI sjabloon aangemaakt die een "Hello World!" console applicatie in C++ genereert.

De procedure is als volgt:

  1. Maak een directory voor de nieuwe PLCnext CLI projectsjabloon.

    Op Linux:

    user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
    
  2. Maak een bestand met sjabloon C++ code, dat als uitgangspunt kan dienen voor elk nieuw project van dit type.

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

    De C++ code die in dit voorbeeld wordt gebruikt:

    #include <iostream>
    int main() {
        std::cout << "Hello World!" << std::endl;
        return 0;
    }
    
  3. Maak een sjabloon CMake bronbestand.

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

    De CMake code die in dit voorbeeld wordt gebruikt:

    cmake_minimum_required(VERSION 3.13)
    project($(name))
    if(NOT CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE Release)
    endif()
    ################# doel aanmaken #######################################################
    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})
    #######################################################################################
    ################# installeer directories instellen #############################################
    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})
    #######################################################################################
    ################# project include-paden ###############################################
    target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
    #######################################################################################
    ################# arp cmake module pad opnemen #######################################
    list(INSERT CMAKE_MODULE_PATH 0 "${ARP_TOOLCHAIN_CMAKE_MODULE_PATH}")
    #######################################################################################
    ################# link opties instellen ####################################################
    # WAARSCHUWING: Zonder --no-undefined zal de linker niet controleren of alle benodigde
    # bibliotheken gelinkt zijn. Wanneer een benodigde bibliotheek niet gelinkt is,
    # zal de firmware crashen en er zal GEEN indicatie zijn waarom het crashte.
    #######################################################################################
    target_link_options(${CMAKE_PROJECT_NAME} PRIVATE LINKER:--no-undefined)
    #######################################################################################
    ################# link doelen toevoegen ####################################################
    find_package(ArpDevice REQUIRED)
    find_package(ArpProgramming REQUIRED)
    target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ArpDevice ArpProgramming)
    #######################################################################################
    ################# installeren #############################################################
    install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION ${BIN_INSTALL_DIR})
    unset(_ARP_SHORT_DEVICE_VERSION)
    #######################################################################################
    

    Let op dat de CMake code de placeholder $(name) bevat, die wordt vervangen door de naam van het project die aan het plcncli new commando wordt doorgegeven.

  4. Optioneel: Voeg een README bestand toe aan de nieuwe sjabloon directory, wat ook kan worden gebruikt om een README bestand in elk nieuw project dat vanuit deze sjabloon wordt aangemaakt, te creëren.

  5. Maak een PLCnext CLI projectconfiguratiebestand.

    Dit bestand wordt gebruikt om projectconfiguratie-informatie op te slaan voor de PLCnext CLI, bijvoorbeeld de lijst met targets waarvoor het project gebouwd moet worden.

    Voor dit voorbeeld werd het .proj bestand gekopieerd uit de ConsumableLibraryTemplate directory en bewerkt om het volgende te produceren:

    <?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>
    

    Het Type veld moet de unieke naam van deze projectsjabloon bevatten, die ook in het sjabloonbeschrijvingsbestand in de volgende stap zal worden opgenomen.

    Het Name veld bevat de placeholder $(name), die tijdens het aanmaken van elk nieuw project wordt vervangen door de projectnaam.

  6. Maak een sjabloonbeschrijvingsbestand.

    Voor dit voorbeeld werd het TemplateDescription.xml bestand gekopieerd uit de ConsumableLibraryTemplate directory en bewerkt om het volgende te produceren:

    <?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>Maak een nieuwe standalone uitvoerbaar project.</Description>
    <Example>
    <Arguments>
    <Argument name="name" value="MyExe"/>
    </Arguments>
    <Description>creëert een nieuw standalone uitvoerbaar project in de directory 'MyExe'</Description>
    </Example>
    </TemplateDescription>
    

    De velden in de sjabloonbeschrijving omvatten:

    • name="exeproject" : Maakt het mogelijk om projecten aan te maken vanuit deze sjabloon met het commando plcncli new exeproject.
    • File name="A" template="B" path="C" : Creëert een bestand in het nieuwe project, in het gespecificeerde pad, gebaseerd op het gespecificeerde sjabloonbestand. De bestandsnaam kan ook placeholders zoals $(name) bevatten, die tijdens het aanmaken van elk nieuw project worden vervangen door de projectnaam.
    • Description en Example velden, die worden weergegeven in de relevante secties van het plcncli help-systeem.
  7. Maak een nieuw Templates bestand, dat wordt gebruikt om de PLCnext CLI te informeren over onze nieuwe sjabloon(s).

    Voor dit voorbeeld werd het MinimalAcfTemplates.xml bestand in de Templates directory gekopieerd naar een bestand genaamd CustomTemplates.xml, en dat bestand bewerkt om het volgende te produceren:

    <?xml version="1.0" encoding="utf-8"?>
    <Templates xmlns="https://www.phoenixcontact.com/schema/clitemplates">
    <Include type="Template">ExeTemplate/TemplateDescription.xml</Include>
    </Templates>
    
  8. Registreer de aangepaste sjablonen bij de PLCnext CLI

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

    Het pad is relatief ten opzichte van de PLCnext CLI installatie directory.

  9. Test het!

    De volgende lijst met bash commando's demonstreert de functies van de nieuwe sjabloon:

    plcncli new # De helptekst bevat de nieuwe sjabloon en beschrijving
    plcncli new exeproject --help # Toont het voorbeeld hoe deze sjabloon te gebruiken
    plcncli new exeproject --name "HelloWorld" # Maakt een nieuw project gebaseerd op de sjabloon
    cd HelloWorld
    plcncli set target -n AXCF2152 -v 2022 --add # Stelt het build target in
    plcncli build # Bouwt het project met de standaard sjablooncode
    scp bin/AXCF2152_22.0.3.129/Release/HelloWorld admin@192.168.1.10:~ # Kopieert de uitvoerbare naar het apparaat
    ssh admin@192.168.1.10 ./HelloWorld # Voert de uitvoerbare uit!
    

Bijdragen

In de toekomst is het gepland dat bijdragen aan het PLCnext CLI Templates project op Github mogelijk zullen zijn. Tot dan kunt u een issue openen met ideeën voor nieuwe sjablonen, of met voorbeelden van sjablonen die u zelf heeft aangemaakt.

Vragen of Opmerkingen?

Plaats een reactie hieronder, of stel vragen in het PLCnext Community Forum.

Industriële technologie

  1. VLAN-instelling Op PLCnext Control Stroomlijnen Met Linux Terminal-opdrachten
  2. Veilige Remote gRPC Toegang Met grpcurl Op PLCnext Apparaten
  3. Alibaba Cloud Connector Integreren met PLCnext: Stapsgewijze Handleiding
  4. Veilig Toegang tot PLCnext Webserver met DHCP-toegewezen IP
  5. Uw PC Opwekken op Afstand met PLCnext via Wake-on-LAN
  6. Clusterbeheer op PLCnext: Kubernetes Benutten voor Industriële Automatisering
  7. Real-time PLCnext-monitoring met Tableau-dashboards
  8. Power BI-dashboards maken vanuit PLCnext-clouddata
  9. C++ Class Templates Beheersen: Een Praktische Gids
  10. C++ Templates Beheersen: Gids voor Generisch Programmeren
  11. Python XML Verwerking: Gids voor Interoperabele Databeheer