Definición de Arreglos Personalizados en Bloques de Función Nativos: Guía Práctica
¿Por qué esta publicación?
De hecho, esta publicación se creó porque cuando estaba desarrollando el Bloque de Función Nativo (Native Function Block), descubrí que era imposible usar un arreglo de estructuras personalizadas. O para decirlo de otra manera, es una lástima que el GitHub oficial de PLCnext no tenga tutoriales de este tipo. Si usa el tutorial de C# para crear un arreglo personalizado en Bloque de Función Nativo, descubrirá que no puede compilarlo exitosamente, o configurar los valores del arreglo en PLCnext Engineer no tiene respuesta. El ejemplo en el caso sucede que está relacionado con la base de datos, eso es todo.
Descripción de la demostración
- El siguiente ejemplo usa el Bloque de Función Nativo para crear una interfaz de Arreglo definida por el usuario con la cadena de herramientas PLCncli
- El Arreglo consiste en 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 usa ToolChain 23.6 para fines de demostración.
- Familiarizado con el proceso básico de establecer un Bloque de Función Nativo.
- Visual Studio 2019 o 2022 con complementos (add-in plugins) de ToolChain
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)
PASO 1
- Cree un nuevo proyecto usando Visual Studio, seleccione el tipo de proyecto "Shared Native Function Block" y nombre el proyecto "ArrayTest".
- Luego, dentro del proyecto ArrayTest en Visual Studio, cree un nuevo Bloque de Función Nativo llamado "ArrayCplus".
PASO 2
- Copie ese código a ArrayCplus.cs
- Debido a que hay algunos problemas de visualización al incluir el código fuente directamente aquí, como & y >, proporcioné un enlace en su lugar.
- Por ejemplo, el & se codificará como
&en este html.....
ArrayCplus.cs
PASO 3
Abra la terminal en la carpeta ArrayTestCpp e ingrese lo siguiente.
$ plcncli generate code
Después de generar el código, localice los archivos ArrayTest-cli32.h y ArrayTest-cli64.h en el directorio src, y encuentre los lugares donde se indica #error.
Necesitamos quitar los comentarios y mejorar el código. Haga clic para navegar a InArrayFB-cli.cpp y modifique la implementación.
IntArrayFB-cli.cpp
PASO 4
En ArrayCplus.cpp, ingrese el siguiente código. Los contenidos que contienen cadenas deben inicializarse en el proceso en lugar de en la región Init; inicializarlos en la región Init no funcionará, resultando en la imposibilidad de escribir valores en sName y sAttribute a través de Engineer.
ArrayCplus-cli.cpp
PASO 5
Abra la terminal en la carpeta ArrayTestCpp e ingrese lo siguiente.
$ plcncli build all
$ plcncli deploy
PASO 6
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 contenido que contiene IecString o String definido por el usuario en void PInvoke ArrayTest::ArrayCplus::Process() en lugar de en void PInvoke ArrayTest::ArrayCplus::Init()? No funciona si pongo el código en void PInvoke ArrayTest::ArrayCplus::Init().
- Está claro que no hay tutorial correspondiente sobre arreglos definidos por el usuario para Bloques de Función Nativos en GitHub. ¿Alguien puede complementarlo y mejorarlo? (la forma en que el arreglo Userdefine de Csharp no funciona en el bloque de función nativo)
- Un último punto que también me confunde es por qué, independientemente de si es IecString, String definido por el usuario, o IecStringEx*, si contienen cadenas, deben estar en la forma de 【InOut】en código CSharp cuando se usan como Bloque de Función Nativo?
Nota:
El Makers Blog muestra aplicaciones e historias de usuarios de miembros de la comunidad que no son probadas ni revisadas por Phoenix Contact. Úselas bajo su propio riesgo.
Tecnología Industrial
- Unidad 3: Dominar la Regla de Senos para Medición Precisa de Ángulos
- Guía Experta: 11 Consejos Probados para Elegir PCBs Personalizados – 10 Años de Experiencia en la Industria
- Variadores de velocidad: manteniendo alimentos, medicinas y más fríos en refrigeración industrial
- Aprovechar el Big Data en Manufactura: Desbloquear Valor de Negocio e Innovación
- Mejora Continua Lean: Impulsores, Principios y Beneficios Potenciados por IA
- IA decodifica preferencias de neuronas de corteza visual, revelando cómo eligen imágenes
- ¿Son Realmente Sostenibles las Luces LED? Descubriendo el Impacto Real
- Del soporte remoto al mantenimiento predictivo: Cómo IoT eleva el M2M en fabricación
- Cómo las Baterías Convierten Química en Electricidad
- Cableado Interruptor SPDT 101: Guía Experta para Propietarios
- Tiristores Controlados por Efecto Campo: Dispositivos MOS-Gated y MOS-Controlados