Plantillas de CLI de PLCnext
Este artículo se aplica a PLCnext CLI versión 22.0.0 LTS.
Si programa dispositivos de control PLCnext con C++, probablemente haya utilizado plantillas de código que se instalan con la CLI de PLCnext.
En Visual Studio y Eclipse, debe elegir la plantilla de proyecto que desea usar al crear un nuevo proyecto con el asistente de proyecto PLCnext (instalado con la extensión IDE de PLCnext).
Al generar un nuevo proyecto de C++ en la línea de comandos con la CLI de PLCnext, también debe especificar una plantilla de proyecto.
Las tres plantillas de proyecto predeterminadas son:
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.
La información anterior se puede ver ejecutando plcncli new
dominio. Puede encontrar más información sobre este tipo de proyectos en el centro de información de PLCnext:
- Delimitación de ACF y PLM
- Creación y uso de bibliotecas compartidas
Este artículo describe cómo activar y utilizar plantillas de proyecto adicionales que se instalan con la CLI de PLCnext y cómo crear y utilizar su propia plantilla de proyecto.
Pero primero, veamos cómo funciona el sistema de plantillas CLI de PLCnext.
El sistema de plantillas PLCnext CLI
La CLI de PLCnext incluye una configuración predeterminada llamada TemplateLocations
, que le indica dónde encontrar plantillas de código. Puede ver el valor de esta configuración con el siguiente comando:
user@machine:~$ plcncli get setting TemplateLocations
{
"setting": {
"TemplateLocations": "./Templates/Templates.xml"
}
}
La ruta al archivo xml es relativa al plcncli
ruta de instalación.
Si navega hasta el ./Templates
directorio, verá el Templates.xml
archivo y varios subdirectorios.
Listado del contenido del Templates.xml
archivo ...
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>
... puedes ver que hay referencias a TemplateDescription.xml
archivos de varios tipos en los directorios debajo del Templates
directorio. Estos contienen instrucciones que le indican a la CLI de PLCnext qué hacer cuando se usa esa plantilla.
Los archivos de descripción de plantilla que se muestran arriba implementan las tres plantillas de proyecto predeterminadas con las que ya está familiarizado.
Cómo activar plantillas adicionales
Hay una plantilla de proyecto "oculta" instalada de forma predeterminada con la CLI de PLCnext, que no está disponible de forma predeterminada:
minimumproject This is the same as acfproject, but without the capability to create
Port variables in the Global Data Space.
Podemos hacer que esta plantilla esté disponible para la CLI de PLCnext agregando el MinimalAcfTemplates.xml
archivo - que puede que ya hayas notado en el Templates
directorio - a la configuración de ubicaciones de plantilla:
user@machine:~$ plcncli set setting TemplateLocations ./Templates/MinimalAcfTemplates.xml --add
El nuevo archivo XML ahora se ha agregado a las ubicaciones de la plantilla:
user@machine:~$ plcncli get setting TemplateLocations
{
"setting": {
"TemplateLocations": "./Templates/Templates.xml;./Templates/MinimalAcfTemplates.xml"
}
}
... y cuando el plcncli new
se ejecuta el comando, minimumproject
ahora aparece en la lista de opciones. Esta plantilla ahora se puede usar para crear un nuevo proyecto C++ desde la línea de comando.
Cómo crear su propia plantilla CLI de PLCnext
La creación de plantillas CLI de PLCnext personalizadas se demostrará mediante un ejemplo simple. Se creará una plantilla CLI de PLCnext que generará un "¡Hola mundo!" aplicación de consola en C++.
El procedimiento es el siguiente:
-
Cree un directorio para la nueva plantilla de proyecto PLCnext CLI.
En Linux:
user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
-
Cree un archivo que contenga código C++ de plantilla, que se puede utilizar como punto de partida para cada nuevo proyecto de este tipo.
user@machine:~/plcncli/Templates/ExeTemplate$ touch Main.cpp
El código C++ utilizado en este ejemplo es:
#include int main() { std::cout << "Hello World!" << std::endl; return 0; }
-
Cree un archivo fuente cmake de plantilla.
user@machine:~/plcncli/Templates/ExeTemplate$ touch CMakeLists.txt
El código CMake utilizado en este ejemplo es:
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) #######################################################################################
Tenga en cuenta que el código CMake incluye el marcador de posición
$(name)
, que se reemplazará con el nombre del proyecto que se pasa alplcncli new
comando. -
Opcional:agregue un archivo LÉAME al nuevo directorio de plantillas, que también se puede usar para crear un archivo LÉAME en cada nuevo proyecto creado a partir de esta plantilla.
-
Cree un archivo de configuración de proyecto CLI de PLCnext.
Este archivo se utiliza para almacenar información de configuración del proyecto para la CLI de PLCnext, p. la lista de objetivos para los que se debe construir el proyecto.
Para este ejemplo, el
.proj
el archivo fue copiado delConsumableLibraryTemplate
directorio y editado para producir lo siguiente:<?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>
El
Type
El campo debe contener el nombre único de esta plantilla de proyecto, que también se incluirá en el archivo de descripción de la plantilla en el siguiente paso.El
Name
el campo contiene el marcador de posición$(name)
, que se sustituirá por el nombre del proyecto durante la creación de cada nuevo proyecto. -
Cree un archivo de descripción de plantilla.
Para este ejemplo, el
TemplateDescription.xml
el archivo fue copiado delConsumableLibraryTemplate
directorio y editado para producir lo siguiente:<?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>
Los campos en la descripción de la plantilla incluyen:
name="exeproject"
:permite crear proyectos a partir de esta plantilla usando el comandoplcncli new exeproject
.File name="A" template="B" path="C"
:crea un archivo en el nuevo proyecto, en la ruta especificada, en función del archivo de plantilla especificado. El nombre del archivo también puede incluir marcadores de posición como$(name)
, que se sustituirá por el nombre del proyecto durante la creación de cada nuevo proyecto.Description
yExample
campos, que se muestran en las secciones relevantes delplcncli
sistema de ayuda.
-
Cree un nuevo archivo de Plantillas, que se usará para informar a la CLI de PLCnext sobre nuestras nuevas plantillas.
Para este ejemplo, el
MinimalAcfTemplates.xml
archivo en elTemplates
el directorio fue copiado a un archivo llamadoCustomTemplates.xml
, y ese archivo fue editado para producir lo siguiente:<?xml version="1.0" encoding="utf-8"?> <Templates xmlns="http://www.phoenixcontact.com/schema/clitemplates"> <Include type="Template">ExeTemplate/TemplateDescription.xml</Include> </Templates>
-
Registre las plantillas personalizadas con PLCnext CLI
user@machine:~$ plcncli set setting TemplateLocations ./Templates/CustomTemplates.xml --add
La ruta es relativa al directorio de instalación de PLCnext CLI.
-
¡Pruébalo!
La siguiente lista de comandos bash demuestra las funciones de la nueva plantilla:
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!
Contribuir
En el futuro, está previsto que sea posible realizar contribuciones al proyecto PLCnext CLI Templates en Github. Hasta entonces, puede abrir una edición con ideas para nuevas plantillas o con ejemplos de plantillas que haya creado usted mismo.
¿Preguntas o comentarios?
Publique un comentario a continuación o haga preguntas en el foro de la comunidad de PLCnext.
Tecnología Industrial
- Plantillas de clase de C++
- Plantillas C++
- Python - Procesamiento XML
- Configuración de VLAN en PLCnext Technology
- gRPC remoto usando grpcurl
- Cómo utilizar el conector de la nube de Alibaba
- Acceso al servidor web PlcNext en DHCP
- Utilice PLCnext para WakeOnLan (WoL) en su PC
- ¿Gestión de clústeres en PLCnext?
- Tablero PLCnext de Tableau
- Informes de PLCnext Power BI