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:
Maak een directory voor de nieuwe PLCnext CLI projectsjabloon.
Op Linux:
user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplateMaak 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.cppDe C++ code die in dit voorbeeld wordt gebruikt:
#include <iostream> int main() { std::cout << "Hello World!" << std::endl; return 0; }Maak een sjabloon CMake bronbestand.
user@machine:~/plcncli/Templates/ExeTemplate$ touch CMakeLists.txtDe 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 hetplcncli newcommando wordt doorgegeven.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.
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
.projbestand gekopieerd uit deConsumableLibraryTemplatedirectory 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
Typeveld moet de unieke naam van deze projectsjabloon bevatten, die ook in het sjabloonbeschrijvingsbestand in de volgende stap zal worden opgenomen.Het
Nameveld bevat de placeholder$(name), die tijdens het aanmaken van elk nieuw project wordt vervangen door de projectnaam.Maak een sjabloonbeschrijvingsbestand.
Voor dit voorbeeld werd het
TemplateDescription.xmlbestand gekopieerd uit deConsumableLibraryTemplatedirectory 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 commandoplcncli 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.DescriptionenExamplevelden, die worden weergegeven in de relevante secties van hetplcnclihelp-systeem.
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.xmlbestand in deTemplatesdirectory gekopieerd naar een bestand genaamdCustomTemplates.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>Registreer de aangepaste sjablonen bij de PLCnext CLI
user@machine:~$ plcncli set setting TemplateLocations ./Templates/CustomTemplates.xml --addHet pad is relatief ten opzichte van de PLCnext CLI installatie directory.
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
- VLAN-instelling Op PLCnext Control Stroomlijnen Met Linux Terminal-opdrachten
- Veilige Remote gRPC Toegang Met grpcurl Op PLCnext Apparaten
- Alibaba Cloud Connector Integreren met PLCnext: Stapsgewijze Handleiding
- Veilig Toegang tot PLCnext Webserver met DHCP-toegewezen IP
- Uw PC Opwekken op Afstand met PLCnext via Wake-on-LAN
- Clusterbeheer op PLCnext: Kubernetes Benutten voor Industriële Automatisering
- Real-time PLCnext-monitoring met Tableau-dashboards
- Power BI-dashboards maken vanuit PLCnext-clouddata
- C++ Class Templates Beheersen: Een Praktische Gids
- C++ Templates Beheersen: Gids voor Generisch Programmeren
- Python XML Verwerking: Gids voor Interoperabele Databeheer