Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Tecnologia industrial

Modelos de CLI PLCnext


Este artigo se aplica ao PLCnext CLI versão 22.0.0 LTS.


Se você programa os dispositivos PLCnext Control usando C++, provavelmente já usou modelos de código que são instalados com o PLCnext CLI.

No Visual Studio e Eclipse, você deve escolher o modelo de projeto que deseja usar ao criar um novo projeto com o assistente de projeto PLCnext (instalado com a extensão PLCnext IDE).

Ao gerar um novo projeto C++ na linha de comando com a PLCnext CLI, você também deve especificar um modelo de projeto.

Os três modelos de projeto padrão são:
  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.

As informações acima podem ser vistas executando o plcncli new comando. Mais informações sobre estes tipos de projetos podem ser encontradas no PLCnext Info Center:

Este artigo descreve como ativar e usar modelos de projeto adicionais que são instalados com o PLCnext CLI e como criar e usar seu próprio modelo de projeto.

Mas antes, vejamos como funciona o sistema PLCnext CLI Template.

O sistema PLCnext CLI Template


O PLCnext CLI inclui uma configuração padrão chamada TemplateLocations , que informa onde encontrar modelos de código. Você pode ver o valor dessa configuração com o seguinte comando:
user@machine:~$ plcncli get setting TemplateLocations

{
  "setting": {
    "TemplateLocations": "./Templates/Templates.xml"
  }
}

O caminho para o arquivo xml é relativo ao plcncli caminho de instalação.

Se você navegar até o ./Templates diretório, você verá o Templates.xml arquivo e vários subdiretórios.

Listando o conteúdo do Templates.xml Arquivo ...
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>

... você pode ver que há referências a TemplateDescription.xml arquivos de vários tipos nos diretórios abaixo do Templates diretório. Eles contêm instruções que informam ao PLCnext CLI o que fazer quando esse modelo é usado.

Os arquivos de descrição de modelo mostrados acima implementam os três modelos de projeto padrão com os quais você já está familiarizado.

Como ativar modelos adicionais


Existe um modelo de projeto "oculto" instalado por padrão com o PLCnext CLI, que não está disponível por padrão:
  minimumproject    This is the same as acfproject, but without the capability to create 
	                Port variables in the Global Data Space.

Podemos disponibilizar este template para o PLCnext CLI adicionando o MinimalAcfTemplates.xml arquivo - que você já deve ter notado no Templates diretório - para a configuração de locais do modelo:
user@machine:~$ plcncli set setting TemplateLocations ./Templates/MinimalAcfTemplates.xml --add

O novo arquivo XML agora foi adicionado aos locais do modelo:
user@machine:~$ plcncli get setting TemplateLocations

{
  "setting": {
    "TemplateLocations": "./Templates/Templates.xml;./Templates/MinimalAcfTemplates.xml"
  }
}

... e quando o plcncli new comando é executado, minimumproject agora aparece na lista de opções. Este modelo agora pode ser usado para criar um novo projeto C++ a partir da linha de comando.

Observação: Adicionar um modelo de projeto à CLI do PLCnext não adiciona automaticamente o modelo de projeto aos assistentes de projeto do Visual Studio ou Eclipse.

Como criar seu próprio template PLCnext CLI


A criação de templates personalizados PLCnext CLI será demonstrada através de um exemplo simples. Será criado um template PLCnext CLI que gera um "Hello World!" aplicativo de console em C++.

O procedimento é o seguinte:

  1. Crie um diretório para o novo modelo de projeto PLCnext CLI.

    No Linux:
    user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
    

  2. Crie um arquivo contendo código C++ de modelo, que pode ser usado como ponto de partida para cada novo projeto desse tipo.
    user@machine:~/plcncli/Templates/ExeTemplate$ touch Main.cpp
    

    O código C++ usado neste exemplo é:
    #include 
    
    int main() {
       std::cout << "Hello World!" << std::endl;
       return 0;
    }   
    

  3. Crie um arquivo de origem cmake de modelo.
    user@machine:~/plcncli/Templates/ExeTemplate$ touch CMakeLists.txt
    

    O código CMake usado neste exemplo é:
    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)
    
    #######################################################################################	
    

    Observe que o código CMake inclui o espaço reservado $(name) , que será substituído pelo nome do projeto que é passado para o plcncli new comando.

  4. Opcional:Inclua um arquivo README no novo diretório de modelo, que também pode ser usado para criar um arquivo README em cada novo projeto criado a partir desse modelo.

  5. Crie um arquivo de configuração do projeto PLCnext CLI.

    Este arquivo é usado para armazenar informações de configuração do projeto para o PLCnext CLI, ex. a lista de alvos para os quais o projeto deve ser construído.

    Para este exemplo, o .proj o arquivo foi copiado do ConsumableLibraryTemplate diretório e editado para produzir o seguinte:
    <?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>
    

    O Type O campo deve conter o nome exclusivo deste modelo de projeto, que também será incluído no arquivo de descrição do modelo na próxima etapa.

    O Name campo contém o espaço reservado $(name) , que será substituído pelo nome do projeto durante a criação de cada novo projeto.

  6. Crie um arquivo de descrição de modelo.

    Para este exemplo, o TemplateDescription.xml o arquivo foi copiado do ConsumableLibraryTemplate diretório e editado para produzir o seguinte:
    <?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>
    

    Os campos na descrição do modelo incluem:
    • name="exeproject" :permite que projetos sejam criados a partir deste modelo usando o comando plcncli new exeproject .
    • File name="A" template="B" path="C" :cria um arquivo no novo projeto, no caminho especificado, com base no arquivo de modelo especificado. O nome do arquivo também pode incluir espaços reservados como $(name) , que será substituído pelo nome do projeto durante a criação de cada novo projeto.
    • Description e Example campos, que são exibidos nas seções relevantes do plcncli sistema de ajuda.

  7. Crie um novo arquivo de Templates, que será usado para informar ao PLCnext CLI sobre nosso(s) novo(s) template(s).

    Para este exemplo, o MinimalAcfTemplates.xml arquivo no Templates diretório foi copiado para um arquivo chamado CustomTemplates.xml , e esse arquivo foi editado para produzir o seguinte:
    <?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 os templates personalizados com o PLCnext CLI
    user@machine:~$ plcncli set setting TemplateLocations ./Templates/CustomTemplates.xml --add
    

    O caminho é relativo ao diretório de instalação do PLCnext CLI.

  9. Experimente!

    A seguinte lista de comandos bash demonstra os recursos do novo modelo:
    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


No futuro, está previsto que contribuições para o projeto PLCnext CLI Templates no Github sejam possíveis. Até lá, você pode abrir um problema com ideias para novos modelos ou com exemplos de modelos que você mesmo criou.

Perguntas ou comentários?


Poste um comentário abaixo ou faça perguntas no Fórum da Comunidade PLCnext.

Tecnologia industrial

  1. Modelos de classe C++
  2. Modelos C++
  3. Python - Processamento XML
  4. Configuração de VLAN em PLCnext Technology
  5. gRPC remoto usando grpcurl
  6. Como usar o Alibaba Cloud Connector
  7. Acesso ao servidor web PlcNext em DHCP
  8. Use PLC ao lado de WakeOnLan (WoL) Seu PC
  9. Clustermangement no PLCnext?
  10. Painel PLCnext Tableau