Modèles CLI PLCnext
Cet article s'applique à PLCnext CLI version 22.0.0 LTS.
Si vous programmez des équipements PLCnext Control en C++, vous avez probablement utilisé des modèles de code installés avec la CLI PLCnext.
Dans Visual Studio et Eclipse, vous devez choisir le modèle de projet que vous souhaitez utiliser lors de la création d'un nouveau projet avec l'assistant de projet PLCnext (installé avec l'extension IDE PLCnext).
Lors de la génération d'un nouveau projet C++ en ligne de commande avec la CLI PLCnext, vous devez également spécifier un modèle de projet.
Les trois modèles de projet par défaut sont :
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.
Les informations ci-dessus peuvent être vues en exécutant le plcncli new
commande. Vous trouverez plus d'informations sur ces types de projets dans le centre d'informations PLCnext :
- Délimitation entre ACF et PLM
- Créer et utiliser des bibliothèques partagées
Cet article décrit comment activer et utiliser des modèles de projet supplémentaires installés avec la CLI PLCnext, et comment créer et utiliser votre propre modèle de projet.
Mais d'abord, regardons comment fonctionne le système PLCnext CLI Template.
Le système de modèles CLI PLCnext
La CLI PLCnext inclut un paramètre par défaut appelé TemplateLocations
, qui lui indique où trouver les modèles de code. Vous pouvez voir la valeur de ce paramètre avec la commande suivante :
user@machine:~$ plcncli get setting TemplateLocations
{
"setting": {
"TemplateLocations": "./Templates/Templates.xml"
}
}
Le chemin vers le fichier xml est relatif au plcncli
chemin d'installation.
Si vous naviguez jusqu'au ./Templates
répertoire, vous verrez le Templates.xml
file, et un certain nombre de sous-répertoires.
Lister le contenu du Templates.xml
fichier ...
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>
... vous pouvez voir qu'il y a des références à TemplateDescription.xml
fichiers de différents types dans les répertoires sous le Templates
annuaire. Ceux-ci contiennent des instructions qui indiquent à PLCnext CLI ce qu'il faut faire lorsque ce modèle est utilisé.
Les fichiers de description de modèle présentés ci-dessus implémentent les trois modèles de projet par défaut que vous connaissez déjà.
Comment activer des modèles supplémentaires
Il existe un modèle de projet "caché" installé par défaut avec la CLI PLCnext, qui n'est pas disponible par défaut :
minimumproject This is the same as acfproject, but without the capability to create
Port variables in the Global Data Space.
Nous pouvons mettre ce modèle à disposition de la CLI PLCnext en ajoutant le MinimalAcfTemplates.xml
fichier - que vous avez peut-être déjà remarqué dans le Templates
répertoire - vers le paramètre d'emplacement des modèles :
user@machine:~$ plcncli set setting TemplateLocations ./Templates/MinimalAcfTemplates.xml --add
Le nouveau fichier XML a maintenant été ajouté aux emplacements des modèles :
user@machine:~$ plcncli get setting TemplateLocations
{
"setting": {
"TemplateLocations": "./Templates/Templates.xml;./Templates/MinimalAcfTemplates.xml"
}
}
... et quand le plcncli new
la commande est exécutée, minimumproject
apparaît maintenant dans la liste des options. Ce modèle peut maintenant être utilisé pour créer un nouveau projet C++ à partir de la ligne de commande.
Remarque : L'ajout d'un modèle de projet à la CLI PLCnext n'ajoute pas automatiquement le modèle de projet aux assistants de projet Visual Studio ou Eclipse.
Comment créer votre propre modèle CLI PLCnext
La création de modèles CLI PLCnext personnalisés sera démontrée à l'aide d'un exemple simple. Un modèle PLCnext CLI sera créé et générera un "Hello World!" application console en C++.
La procédure est la suivante :
-
Créez un répertoire pour le nouveau modèle de projet PLCnext CLI.
Sous Linux :
user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
-
Créez un fichier contenant le modèle de code C++, qui peut être utilisé comme point de départ pour chaque nouveau projet de ce type.
user@machine:~/plcncli/Templates/ExeTemplate$ touch Main.cpp
Le code C++ utilisé dans cet exemple est :
#include int main() { std::cout << "Hello World!" << std::endl; return 0; }
-
Créez un modèle de fichier source cmake.
user@machine:~/plcncli/Templates/ExeTemplate$ touch CMakeLists.txt
Le code CMake utilisé dans cet exemple est :
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) #######################################################################################
Notez que le code CMake inclut l'espace réservé
$(name)
, qui sera remplacé par le nom du projet passé auplcncli new
commande. -
Facultatif :ajoutez un fichier README au nouveau répertoire de modèles, qui peut également être utilisé pour créer un fichier README dans chaque nouveau projet créé à partir de ce modèle.
-
Créez un fichier de configuration de projet PLCnext CLI.
Ce fichier est utilisé pour stocker les informations de configuration du projet pour PLCnext CLI, par ex. la liste des cibles pour lesquelles le projet doit être construit.
Pour cet exemple, le
.proj
le fichier a été copié depuis leConsumableLibraryTemplate
répertoire et modifié pour produire ce qui suit :<?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>
Le
Type
Le champ doit contenir le nom unique de ce modèle de projet, qui sera également inclus dans le fichier de description du modèle à l'étape suivante.Le
Name
le champ contient l'espace réservé$(name)
, qui sera remplacé par le nom du projet lors de la création de chaque nouveau projet. -
Créez un fichier de description de modèle.
Pour cet exemple, le
TemplateDescription.xml
le fichier a été copié depuis leConsumableLibraryTemplate
répertoire et modifié pour produire ce qui suit :<?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>
Les champs de la description du modèle incluent :
name="exeproject"
:Permet de créer des projets à partir de ce modèle à l'aide de la commandeplcncli new exeproject
.File name="A" template="B" path="C"
:Crée un fichier dans le nouveau projet, dans le chemin spécifié, basé sur le fichier modèle spécifié. Le nom du fichier peut également inclure des espaces réservés comme$(name)
, qui sera remplacé par le nom du projet lors de la création de chaque nouveau projet.Description
etExample
champs, qui sont affichés dans les sections pertinentes duplcncli
système d'aide.
-
Créez un nouveau fichier Templates, qui sera utilisé pour informer la PLCnext CLI de nos nouveaux templates.
Pour cet exemple, le
MinimalAcfTemplates.xml
fichier dans leTemplates
répertoire a été copié dans un fichier nomméCustomTemplates.xml
, et ce fichier a été modifié pour produire ce qui suit :<?xml version="1.0" encoding="utf-8"?> <Templates xmlns="http://www.phoenixcontact.com/schema/clitemplates"> <Include type="Template">ExeTemplate/TemplateDescription.xml</Include> </Templates>
-
Enregistrez les modèles personnalisés avec la CLI PLCnext
user@machine:~$ plcncli set setting TemplateLocations ./Templates/CustomTemplates.xml --add
Le chemin est relatif au répertoire d'installation PLCnext CLI.
-
Essayez-le !
La liste suivante de commandes bash illustre les fonctionnalités du nouveau modèle :
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!
Contribuer
A l'avenir, il est prévu que des contributions au projet PLCnext CLI Templates sur Github soient possibles. En attendant, vous pouvez ouvrir un ticket avec des idées de nouveaux modèles ou avec des exemples de modèles que vous avez créés vous-même.
Questions ou commentaires ?
Postez un commentaire ci-dessous ou posez des questions sur le forum de la communauté PLCnext.
Technologie industrielle