Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Tecnología Industrial

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:

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.

Nota: Agregar una plantilla de proyecto a la CLI de PLCnext no agrega automáticamente la plantilla de proyecto a los asistentes de proyectos de Visual Studio o Eclipse.

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:

  1. Cree un directorio para la nueva plantilla de proyecto PLCnext CLI.

    En Linux:

    user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
    
  2. 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;
    }   
    
  3. 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 al plcncli new comando.

  4. 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.

  5. 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 del ConsumableLibraryTemplate 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.

  6. Cree un archivo de descripción de plantilla.

    Para este ejemplo, el TemplateDescription.xml el archivo fue copiado del ConsumableLibraryTemplate 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 comando plcncli 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 y Example campos, que se muestran en las secciones relevantes del plcncli sistema de ayuda.
  7. 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 el Templates el directorio fue copiado a un archivo llamado CustomTemplates.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>
    
  8. 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.

  9. ¡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

  1. Plantillas de clase de C++
  2. Plantillas C++
  3. Python - Procesamiento XML
  4. Configuración de VLAN en PLCnext Technology
  5. gRPC remoto usando grpcurl
  6. Cómo utilizar el conector de la nube de Alibaba
  7. Acceso al servidor web PlcNext en DHCP
  8. Utilice PLCnext para WakeOnLan (WoL) en su PC
  9. ¿Gestión de clústeres en PLCnext?
  10. Tablero PLCnext de Tableau
  11. Informes de PLCnext Power BI