Definición de matrices personalizadas en bloques de funciones nativos:una guía práctica
¿Por qué esta publicación?
De hecho, esta publicación se creó porque cuando estaba desarrollando el bloque de funciones nativas, descubrí que era imposible usar una variedad de estructuras personalizadas. O dicho de otra manera, es una lástima que el GitHub oficial de PLCnext no tenga tutoriales de este tipo. Si utiliza el tutorial de C# para crear una matriz personalizada en el bloque de funciones nativo, encontrará que no puede compilarlo correctamente o que la configuración de los valores de la matriz en PLCnext Engineer no tiene respuesta. Resulta que el ejemplo del caso está relacionado con la base de datos, eso es todo.
Descripción de la demostración
- El siguiente ejemplo utiliza el bloque de funciones nativo para crear una interfaz de matriz definida por el usuario con la cadena de herramientas PLCncli
- La matriz consta de 21 elementos, cada uno de los cuales es una estructura. La estructura contiene dos IecString80 y una enumeración, como se muestra en el siguiente diagrama.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Requisitos
- Asegúrese de que la versión de ToolChain sea 23.0 o superior. Este ejemplo utiliza ToolChain 23.6 con fines de demostración.
- Familiarizado con el proceso básico de establecimiento de un bloque de funciones nativo.
- Visual Studio 2019 o 2022 con complementos complementarios ToolChain
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)
PASO1
- Cree un nuevo proyecto usando Visual Studio, seleccione el tipo de proyecto "Bloque de funciones nativas compartidas" y asigne al proyecto el nombre "ArrayTest".
- Luego, dentro del proyecto ArrayTest en Visual Studio, cree un nuevo bloque de funciones nativo llamado "ArrayCplus".
PASO2
-
Copie ese código en ArrayCplus.cs
-
Debido a que hay algunos problemas de visualización al incluir directamente el código fuente aquí, como &y>, proporcioné un enlace en su lugar.
-
por ejemplo, &se codificará como
&en este html.....
ArrayCplus.cs
PASO3
Abra la terminal en la carpeta ArrayTestCpp e ingrese lo siguiente.
$ plcncli generate code
Después de generar el código, localice el ArrayTest-cli32.h y ArrayTest-cli64.h archivos en el directorio src y busque los lugares donde se indica #error.
Necesitamos eliminar los comentarios y mejorar el código. Haga clic para navegar a InArrayFB-cli.cpp y modificar la implementación.
IntArrayFB-cli.cpp
PASO4
En ArrayCplus.cpp , ingresa el siguiente código. Los contenidos que contienen cadenas deben inicializarse en el proceso y no en la región Init; inicializarlos en la región Init no funcionará, lo que resultará en la imposibilidad de escribir valores en sName y sAttribute a través de Engineer.
ArrayCplus-cli.cpp
PASO5
Abra la terminal en la carpeta ArrayTestCpp e ingrese lo siguiente.
$ plcncli build all
$ plcncli deploy
PASO6
Abra PLCnext Engineer y cargue el ArrayTest.pcwlx agregue una variable al ArrayTest llamada arr
Ahora puede funcionar
Preguntas
- Aunque este método funciona en la práctica, ¿por qué es necesario inicializar el contenido que contiene IecString o una cadena definida por el usuario en void PInvoke ArrayTest::ArrayCplus::Process() en lugar de en el void PInvoke ArrayTest::ArrayCplus::Init() ? no funciona si coloco el código en void PInvoke ArrayTest::ArrayCplus::Init() .
- Está claro que no existe un tutorial correspondiente sobre matrices definidas por el usuario para bloques de funciones nativas en GitHub. ¿Alguien puede complementarlo y mejorarlo? (la forma en que la matriz Csharp Userdefine no funciona en el bloque de funciones nativo)
- Un último punto que también me confunde es por qué, independientemente de si es IecString, User-Defined String o IecStringEx*, si contienen cadenas, deben tener el formato 【InOut. 】¿en código CSharp cuando se utiliza como bloque de funciones nativo?
Nota:
El Makers Blog muestra aplicaciones e historias de usuarios de miembros de la comunidad que Phoenix Contact no prueba ni revisa. Úselos bajo su propio riesgo.
Tecnología Industrial
- Solución Minterm vs Maxterm
- Cómo los fabricantes pueden usar Analytics para una mejor experiencia del cliente
- Calculadora de kVA a amperios:¿cómo convertir kVA a amperios?
- Haga crecer sus operaciones con el mantenimiento agrícola
- La importancia de un plan HACCP para los fabricantes de alimentos
- Algunos consejos geniales para fundir piezas
- Parámetros de tubo
- Actualización más reciente en el foro de UID de 2013
- ¿Qué es la fresadora? - Partes, operación, diagrama
- La Conferencia Anual de Ejecutivos de Manufactura atrae a una multitud que solo está de pie
- Los 10 métodos principales para reducir los costos laborales