Definindo matrizes personalizadas em blocos funcionais nativos – um guia prático
Por que esta postagem?
Na verdade, este post foi criado porque quando eu estava desenvolvendo o Native Function Block, descobri que era impossível usar um array de estruturas customizadas. Ou dito de outra forma, é uma pena que o GitHub oficial do PLCnext não possua tutoriais deste tipo. Se você usar o tutorial C# para criar um array personalizado no Native Function Block, você descobrirá que não pode compilá-lo com sucesso ou definir os valores do array no PLCnext Engineer não tem resposta. O exemplo do caso está relacionado ao banco de dados, só isso.
Descrição da demonstração
- O exemplo a seguir usa o Native Function Block para criar uma interface Array definida pelo usuário com o conjunto de ferramentas PLCncli
- O Array consiste em 21 elementos, cada um dos quais é uma estrutura. A estrutura contém dois IecString80 e uma enumeração, conforme mostrado no diagrama a seguir.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Requisitos
- Certifique-se de que a versão do ToolChain seja 23.0 ou superior. Este exemplo usa o ToolChain 23.6 para fins de demonstração.
- Familiarizado com o processo básico de estabelecimento de um bloco de função nativo.
- Visual Studio 2019 ou 2022 com plug-ins complementares ToolChain
05PASSO 1
- Crie um novo projeto usando o Visual Studio, selecione o tipo de projeto "Shared Native Function Block" e nomeie o projeto como "ArrayTest".
- Em seguida, dentro do projeto ArrayTest no Visual Studio, crie um novo Bloco de Função Nativo chamado "ArrayCplus".
PASSO2
-
Copie esse código para ArrayCplus.cs
-
Como há alguns problemas de exibição ao incluir diretamente o código-fonte aqui, como &e>, forneci um link.
-
por exemplo, o &será codificado como04neste html.....
ArrayCplus.cs
PASSO3
Abra o terminal na pasta ArrayTestCpp e digite o seguinte.
14
Após gerar o código, localize o ArrayTest-cli32.h e ArrayTest-cli64.h arquivos no diretório src e encontre os locais onde #error é indicado.
Precisamos remover os comentários e melhorar o código. Clique para navegar até InArrayFB-cli.cpp e modificar a implementação.
IntArrayFB-cli.cpp
PASSO 4
Em ArrayCplus.cpp , insira o seguinte código. O conteúdo que contém strings deve ser inicializado no processo e não na região Init; inicializá-los na região Init não funcionará, resultando na incapacidade de gravar valores em sName e sAttribute por meio do Engineer.
ArrayCplus-cli.cpp
PASSO5
Abra o terminal na pasta ArrayTestCpp e digite o seguinte.
22PASSO 6
Abra o PLCnext Engineer e carregue o ArrayTest.pcwlx adicione uma variável ao ArrayTest chamada arr
Agora pode funcionar
Perguntas
- Embora este método funcione na prática, por que é necessário inicializar o conteúdo contendo IecString ou String definida pelo usuário no void PInvoke ArrayTest::ArrayCplus::Process() em vez de void PInvoke ArrayTest::ArrayCplus::Init() ? não funciona se eu colocar o código em void PInvoke ArrayTest::ArrayCplus::Init() .
- Está claro que não há tutorial correspondente sobre matrizes definidas pelo usuário para blocos de funções nativas no GitHub. Alguém pode complementá-lo e melhorá-lo? (a maneira como o array Csharp Userdefine não funciona no bloco de função nativo)
- Um último ponto que também me confunde é por que, independentemente de ser IecString, String definida pelo usuário ou IecStringEx*, se contiverem strings, devem estar na forma de 【InOut 】no código CSharp quando usado como um bloco de função nativo?
Observação:
O Makers Blog mostra aplicativos e histórias de usuários de membros da comunidade que não foram testados ou revisados pela Phoenix Contact. Use-os por sua própria conta e risco.
Tecnologia industrial
- 5 benefícios do compartilhamento de conhecimento no setor
- Conheça a RT100XF da Guhring:uma broca de metal duro de alto desempenho desenvolvida para metais resistentes
- Soluções CAD/CAM integradas:é certo para você?
- O que é um designador de referência e como o usamos na montagem?
- Quais são as consequências de não seguir as instruções de trabalho?
- Como o balanceamento de ferramentas aumenta a vida útil e a produtividade da ferramenta
- Como a IA e a robótica estão aumentando a qualidade e a eficiência da fabricação?
- O que é Logística da Cadeia de Suprimentos? Uma Definição e Análise dos Desafios e Benefícios da Logística da Cadeia de Suprimentos
- Material útil relacionado a inversores multinível
- O Gaudio transforma o design do fone de ouvido intra-auricular com o Fusion 360