PLCnext CLI-sjablonen
Dit artikel is van toepassing op PLCnext CLI versie 22.0.0 LTS.
Als u PLCnext Control-apparaten met C++ programmeert, heeft u waarschijnlijk codesjablonen gebruikt die met de PLCnext CLI zijn geïnstalleerd.
In Visual Studio en Eclipse moet u de projectsjabloon kiezen die u wilt gebruiken bij het maken 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 opdrachtregel met de PLCnext CLI, moet u ook een projectsjabloon opgeven.
De drie standaard projectsjablonen zijn:
project The project is a template for user programs.
They are managed by the PLM (Program Library Manager).
acfproject The acfproject is a template for component based platform development.
The resulting component will be managed by the ACF
(Application Component Framework).
consumablelibrary The consumable library is a template, that creates a library
which can be used by other projects.
De bovenstaande informatie kan worden bekeken door het uitvoeren van de plcncli new
opdracht. Meer informatie over dit soort projecten vindt u in het PLCnext Info Center:
- Afbakening van ACF en PLM
- Gedeelde bibliotheken maken en gebruiken
In dit artikel wordt beschreven hoe u aanvullende projectsjablonen activeert en gebruikt die met de PLCnext CLI zijn geïnstalleerd, en hoe u uw eigen projectsjabloon maakt en gebruikt.
Maar laten we eerst eens kijken hoe het PLCnext CLI Template-systeem werkt.
Het PLCnext CLI Template-systeem
De PLCnext CLI bevat een standaardinstelling genaamd TemplateLocations
, dat vertelt waar codesjablonen 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 aan de plcncli
installatiepad.
Als u bladert naar de ./Templates
directory, ziet u de Templates.xml
bestand, en een aantal submappen.
De inhoud van de Templates.xml
. weergeven bestand ...
user@machine:~/plcncli/Templates$ cat Templates.xml
<?xml version="1.0" encoding="utf-8"?>
<Templates xmlns="http://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>
... je kunt zien dat er verwijzingen zijn naar TemplateDescription.xml
bestanden van verschillende typen in de mappen onder de Templates
map. Deze bevatten instructies die de PLCnext CLI vertellen wat te doen als dat sjabloon wordt gebruikt.
De hierboven getoonde sjabloonbeschrijvingsbestanden implementeren de drie standaard projectsjablonen waarmee u al bekend bent.
Hoe extra sjablonen te activeren
Er is standaard één "verborgen" projectsjabloon geïnstalleerd met de PLCnext CLI, die niet standaard beschikbaar is:
minimumproject This is the same as acfproject, but without the capability to create
Port variables in the Global Data Space.
We kunnen dit sjabloon beschikbaar stellen aan de PLCnext CLI door de MinimalAcfTemplates.xml
. toe te voegen bestand - wat je misschien al is opgevallen in de Templates
directory - naar de instelling voor sjabloonlocaties:
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 de plcncli new
commando wordt uitgevoerd, minimumproject
verschijnt nu in de lijst met opties. Deze sjabloon kan nu worden gebruikt om een nieuw C++-project te maken vanaf de opdrachtregel.
Opmerking: Het toevoegen van een projectsjabloon aan de PLCnext CLI voegt de projectsjabloon niet automatisch toe aan de Visual Studio- of Eclipse-projectwizards.
Hoe u uw eigen PLCnext CLI-sjabloon maakt
Het maken van aangepaste PLCnext CLI-sjablonen wordt gedemonstreerd aan de hand van een eenvoudig voorbeeld. Er wordt een PLCnext CLI-sjabloon gemaakt die een "Hello World!" genereert. console-applicatie in C++.
De procedure is als volgt:
-
Maak een directory aan voor de nieuwe PLCnext CLI-projectsjabloon.
Op Linux:
user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
-
Maak een bestand met sjabloon C++-code, dat kan worden gebruikt als startpunt voor elk nieuw project van dit type.
user@machine:~/plcncli/Templates/ExeTemplate$ touch Main.cpp
De C++-code die in dit voorbeeld wordt gebruikt, is:
#include int main() { std::cout << "Hello World!" << std::endl; return 0; }
-
Maak een sjabloon-cmake-bronbestand.
user@machine:~/plcncli/Templates/ExeTemplate$ touch CMakeLists.txt
De CMake-code die in dit voorbeeld wordt gebruikt, is:
cmake_minimum_required(VERSION 3.13) project($(name)) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() ################# create target ####################################################### 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}) ####################################################################################### ################# set install directories ############################################# 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-paths ############################################### target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE $) ####################################################################################### ################# include arp cmake module path ####################################### list(INSERT CMAKE_MODULE_PATH 0 "${ARP_TOOLCHAIN_CMAKE_MODULE_PATH}") ####################################################################################### ################# set link options #################################################### # WARNING: Without --no-undefined the linker will not check, whether all necessary # # libraries are linked. When a library which is necessary is not linked, # # the firmware will crash and there will be NO indication why it crashed. # ####################################################################################### target_link_options(${CMAKE_PROJECT_NAME} PRIVATE LINKER:--no-undefined) ####################################################################################### ################# add link targets #################################################### find_package(ArpDevice REQUIRED) find_package(ArpProgramming REQUIRED) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ArpDevice ArpProgramming) ####################################################################################### ################# install ############################################################# install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION ${BIN_INSTALL_DIR}) unset(_ARP_SHORT_DEVICE_VERSION) #######################################################################################
Merk op dat de CMake-code de tijdelijke aanduiding
$(name)
. bevat , die zal worden vervangen door de naam van het project dat wordt doorgegeven aan deplcncli new
commando. -
Optioneel:voeg een README-bestand toe aan de nieuwe sjabloonmap, die ook kan worden gebruikt om een README-bestand te maken in elk nieuw project dat met deze sjabloon wordt gemaakt.
-
Maak een PLCnext CLI-projectconfiguratiebestand.
Dit bestand wordt gebruikt om projectconfiguratie-informatie voor de PLCnext CLI op te slaan, b.v. de lijst met doelen waarvoor het project moet worden gebouwd.
Voor dit voorbeeld is de
.proj
bestand is gekopieerd van deConsumableLibraryTemplate
directory en bewerkt om het volgende te produceren:<?xml version="1.0" encoding="utf-8"?> <ProjectSettings xmlns="http://www.phoenixcontact.com/schema/cliproject"> <Type>exeproject</Type> <Version>0.1</Version> <Name>$(name)</Name> </ProjectSettings>
De
Type
veld moet de unieke naam van deze projectsjabloon bevatten, die ook zal worden opgenomen in het sjabloonbeschrijvingsbestand in de volgende stap.De
Name
veld bevat de tijdelijke aanduiding$(name)
, die tijdens het maken van elk nieuw project wordt vervangen door de projectnaam. -
Maak een sjabloonbeschrijvingsbestand.
Voor dit voorbeeld is de
TemplateDescription.xml
bestand is gekopieerd van deConsumableLibraryTemplate
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="http://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>Create a new stand-alone executable project.</Description> <Example> <Arguments> <Argument name="name" value="MyExe"/> </Arguments> <Description>creates a new stand-alone executable project in the directory 'MyExe'</Description> </Example> </TemplateDescription>
De velden in de sjabloonbeschrijving omvatten:
name="exeproject"
:Hiermee kunnen projecten worden gemaakt op basis van deze sjabloon met het commandoplcncli new exeproject
.File name="A" template="B" path="C"
:Maakt een bestand in het nieuwe project, in het opgegeven pad, op basis van het opgegeven sjabloonbestand. De bestandsnaam kan ook tijdelijke aanduidingen bevatten, zoals$(name)
, die zal worden vervangen door de projectnaam tijdens het maken van elk nieuw project.Description
enExample
velden, die worden weergegeven in de relevante secties van deplcncli
helpsysteem.
-
Maak een nieuw Templates-bestand aan, dat zal worden gebruikt om de PLCnext CLI te informeren over onze nieuwe template(s).
Voor dit voorbeeld is de
MinimalAcfTemplates.xml
bestand in deTemplates
directory is gekopieerd naar een bestand met de naamCustomTemplates.xml
, en dat bestand is bewerkt om het volgende te produceren:<?xml version="1.0" encoding="utf-8"?> <Templates xmlns="http://www.phoenixcontact.com/schema/clitemplates"> <Include type="Template">ExeTemplate/TemplateDescription.xml</Include> </Templates>
-
Registreer de aangepaste sjablonen met de PLCnext CLI
user@machine:~$ plcncli set setting TemplateLocations ./Templates/CustomTemplates.xml --add
Het pad is relatief aan de installatiemap van PLCnext CLI.
-
Probeer het uit!
De volgende lijst met bash-commando's demonstreert de functies van de nieuwe sjabloon:
plcncli new # The help text includes the new template and description plcncli new exeproject --help # Displays the example showing how to use this template plcncli new exeproject --name "HelloWorld" # Creates a new project based on the template cd HelloWorld plcncli set target -n AXCF2152 -v 2022 --add # Sets the build target plcncli build # Builds the project with the default template code scp bin/AXCF2152_22.0.3.129/Release/HelloWorld [email protected]:~ # Copies the executable to the device ssh [email protected] ./HelloWorld # Runs the executable!
Bijdragen
Het is de bedoeling dat in de toekomst bijdragen aan het PLCnext CLI Templates-project op Github mogelijk zullen zijn. Tot die tijd kun je een uitgave openen met ideeën voor nieuwe sjablonen, of met voorbeelden van sjablonen die je zelf hebt gemaakt.
Vragen of opmerkingen?
Plaats hieronder een reactie of stel vragen op het PLCnext Community Forum.
Industriële technologie
- C++-klassesjablonen
- C++-sjablonen
- Python - XML-verwerking
- VLAN-configuratie in PLCnext Technology
- Externe gRPC met behulp van grpcurl
- Hoe Alibaba Cloud Connector te gebruiken?
- Toegang tot PlcNext webserver op DHCP
- Gebruik PLCnext to WakeOnLan (WoL) Uw pc
- Clusterbeheer op PLCnext?
- PLCnext Tableau-dashboard
- PLCnext Power BI-rapporten