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

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Hola a todos,

En esta entrada del blog exploraremos tipos de datos simples y complejos en C++ y PLCnext Engineer. Contendrá dos partes distintas: un ejercicio simple y uno complejo.

Este tutorial asume que tienes alguna experiencia con C++ y PLCnext Engineer.

Inicio

Primero necesitarás las herramientas adecuadas para el trabajo: un editor C++, el software PLCnext Engineer y un PLC Phoenix Contact para ejecutar esto. Estos son los materiales que he usado:

He elegido personalmente Visual Studio como mi editor C++, pero Eclipse también puede usarse. Los enlaces a los tutoriales se pueden encontrar aquí:

Para PLCnext Engineer, esto se puede encontrar en nuestra web.

Ejercicio simple

Para este primer ejemplo haremos una pequeña aplicación que comprueba si el número correcto se envía desde el PLC. Primero crea un nuevo proyecto C++. Luego ve al archivo de cabecera, el nombre debería ser algo como [NombreDelProyecto].hpp, también hay archivos con el nombre [nombreDelProyecto]component.hpp que no usaremos. Una vez en el archivo de cabecera habrá un muro de código delante de ti pero no te preocupes, será simple. Primero, definiremos los puertos, uno IN y uno OUT. Pueden definirse así, ten en cuenta que esto es solo para tipos de datos simples:

//#port
//#attributes(input)
//#name(InputTest)
int64 InputTest = 0;

//#port
//#attributes(Output)
//#name(outputTest)
int64 OutputTest = 0;

Luego pasamos al siguiente archivo donde haremos la codificación real. Este debería llamarse [NombreDelProyecto].cpp y no debería contener mucho. Lo cambiaremos pronto. Añadamos algo de código para comprobar números ya sea usando If's o un switch case, eso depende de ti. He usado estructuras if en este:

void PLMProjectReadInputProgram::Execute() {
    if (InputTest == 1) {
        OutputTest = 15;
    }
    if (InputTest == 2) {
        OutputTest = 150;
    }
    if (InputTest == 3) {
        OutputTest = 1500;
    }
    if (InputTest == 4) {
        OutputTest = 15000;
    }
}

Antes de ir a PLCnext Engineer necesitamos convertir este proyecto C++ en una biblioteca para que el PLC la entienda. Esto se hace simplemente haciendo clic en build (compilar) en la parte superior de la pantalla. Esto debería ejecutarse un rato y te dirá cuando la biblioteca esté completa. Si este paso no está claro, te aconsejo encarecidamente que revises los tutoriales listados arriba.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Navega al programa principal en la pestaña componentes bajo programación en la carpeta 'Local' luego selecciona variables dentro de la pantalla principal para ver las variables en el PLC. Aquí podemos elegir un nombre, un tipo de dato y el uso. Los tipos de dato en PLCnext Engineer deben ser los mismos que en el programa C++. Un enlace a los diferentes tipos y sus equivalencias se puede encontrar aquí. El uso definirá si las variables son locales o pueden usarse para enviar y recibir datos de programas o variables externas.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Después de hacer esto empezaremos a conectar las variables después de haber añadido la nueva biblioteca. Esto se puede hacer así:

La biblioteca que hiciste se puede encontrar dentro de la carpeta bin de tu proyecto, cópiala a la carpeta de bibliotecas para PLCnext Engineer. La ubicación es algo así como:

C:\Users\Public\Documents\PLCnext Engineer\Libraries

Después volvemos a PLCnext Engineer para añadir la biblioteca a nuestro programa. Navegaremos a la pestaña componentes, abriendo el cuadro de bibliotecas y haciendo clic derecho en bibliotecas. Luego haz clic en 'add user library' (añadir biblioteca de usuario), esto te llevará a la carpeta de bibliotecas a la que fuimos antes. Elige la biblioteca que quieras usar y continúa.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Una vez hecho esto, necesitaremos añadir el programa a las tareas lo cual se hace de la siguiente manera. En el lado izquierdo de la pantalla dentro del área plant haz doble clic en PLCnext. Debería abrirse en el medio. Luego ve a la pestaña 'tasks and events' (tareas y eventos) y añade un nuevo programa después del MainInstance. Esto se puede hacer de dos formas, ya sea seleccionando el tipo de programa o arrastrándolo desde el área de componentes bajo 'PLCnext Components & Programs'.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Entonces las variables deberían aparecer en la pestaña 'Port list' (lista de puertos) que se encuentra junto a la pestaña 'tasks and events'. Ábrela para ser recibido por todas tus variables de C++ y PLCnext. Debería verse algo así:

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Si lo hiciste todo correctamente deberías poder conectar los puertos OUT de tu PLC al puerto IN del programa C++, al revés también es posible, y debería verse algo así. Si esto no funciona intenta comprobar tus tipos de datos.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Para añadir un valor dummy a nuestra variable vayamos al programa principal en la pestaña componentes luego selecciona code dentro de la pantalla principal para ver el código y añadir algo del nuestro. Solo estableceremos la variable que sale a un valor numérico, en este caso 1.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Ahora despleguemos el proyecto en el PLC y deberíamos obtener 15 como respuesta del código C++. Puedes ver las variables en la 'Ports List' de antes.

Ejercicio complejo

Para este ejemplo, haremos una pequeña aplicación que enviará un array de structs hacia y desde el PLC. Primero crea un nuevo proyecto C++. Luego ve al archivo de cabecera, el nombre debería ser algo como [NombreDelProyecto].hpp, también hay archivos con el nombre [nombreDelProyecto]component.hpp que no usaremos. Una vez en el archivo de cabecera habrá un muro de código delante de ti pero no te preocupes, será simple. Primero, necesitaremos hacer un struct para este ejemplo haremos un struct para un coche. Esto se hace así:

public: // typedefs
    struct StrCar{
        StaticString<80> sbrand;
        int16 iHorsepower;
        int16 iYear;
        boolean xInsured;
    };

¡IMPORTANTE! ¡Los nombres y tipos en C++ y PLCnext Engineer deben ser los mismos! Los tipos de datos se pueden encontrar aquí.

Luego definiremos los puertos, uno IN y uno OUT porque serán listas de datos, hazlos como tales. También es importante hacerlos una lista de 'coches'. Esto se hace así:

//#port
//#attributes(Input)
//#name(CarIn)
StrCar CarToC[2];

//#port
//#attributes(Output)
//#name(CarOut)
StrCar CarFromC[2];

Luego pasamos al siguiente archivo donde haremos la codificación real. Este debería llamarse [NombreDelProyecto].cpp y no debería contener mucho. Lo cambiaremos pronto. Aquí cambiaremos los valores del coche uno y coche dos.

// Establecer el primer miembro de la lista de coches igual al coche del PLC
CarFromC[0].sbrand = CarToC[1].sbrand;
CarFromC[0].iHorsepower = CarToC[1].iHorsepower;
CarFromC[0].iYear = CarToC[1].iYear;
CarFromC[0].xInsured = CarToC[1].xInsured;

// Añadir valores dummy al segundo miembro
CarFromC[1].sbrand = CarToC[0].sbrand;
CarFromC[1].iHorsepower = CarToC[0].iHorsepower;
CarFromC[1].iYear = CarToC[0].iYear;
CarFromC[1].xInsured = CarToC[0].xInsured;

Antes de ir a PLCnext Engineer necesitamos convertir este proyecto C++ en una biblioteca para que el PLC la entienda. Esto se hace simplemente haciendo clic en build en la parte superior de la pantalla. Esto debería ejecutarse un rato y te dirá cuando la biblioteca esté completa. Si este paso no está claro, te aconsejo encarecidamente que revises los tutoriales listados arriba.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Ahora antes de poder crear variables en PLCnext Engineer necesitaremos crear un tipo de dato propio, en este caso un struct coche y una lista de coches. Para esto necesitaremos un archivo de tipos de dato y se puede encontrar y crear aquí:

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Abre este archivo si no lo ha hecho ya, luego podemos empezar a crear nuestro propio struct como sigue:

TYPE
    StrCar:
    STRUCT
        sBrand: STRING;
        iHorsepower: INT;
        iYear: int;
        xInsured: BOOL;
    END_STRUCT
END_TYPE

¡IMPORTANTE! ¡Los nombres y tipos en C++ y PLCnext Engineer deben ser los mismos! Los tipos de datos se pueden encontrar aquí.

Después de crear el struct necesitamos crear un array de este tipo y se hace así y en el mismo archivo en el que estamos actualmente:

TYPE
    carList: ARRAY[0..1] OF StrCar;
END_TYPE

Para crear una variable con el tipo 'carList' navega al programa principal en la pestaña componentes bajo 'programación' luego dentro de la carpeta 'Programas' luego selecciona variables dentro de la pantalla principal para ver las variables en el PLC. Aquí podemos elegir un nombre, un tipo de dato y el uso. Como tipo de dato selecciona nuestro personalizado:

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Después de hacer esto empezaremos a conectar las variables después de haber añadido la nueva biblioteca. Esto se puede hacer así:

La biblioteca que hiciste se puede encontrar dentro de la carpeta bin de tu proyecto, cópiala a la carpeta de bibliotecas para PLCnext Engineer. La ubicación es algo así como:

C:\Users\Public\Documents\PLCnext Engineer\Libraries

Después volvemos a PLCnext Engineer para añadir la biblioteca a nuestro programa. Navegaremos a la pestaña componentes, abriendo el cuadro de bibliotecas y haciendo clic derecho en bibliotecas. Luego haz clic en 'add user library' esto te llevará a la carpeta de bibliotecas a la que fuimos antes. Elige la biblioteca que quieras usar y continúa.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Una vez hecho esto, necesitaremos añadir el programa a las tareas lo cual se hace de la siguiente manera. En el lado izquierdo de la pantalla dentro del área plant haz doble clic en PLCnext. Debería abrirse en el medio. Luego ve a la pestaña 'tasks and events' y añade un nuevo programa después del MainInstance. Esto se puede hacer de dos formas, ya sea seleccionando el tipo de programa o arrastrándolo desde el área de componentes bajo 'PLCnext Components & Programs'.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Entonces las variables deberían aparecer en la pestaña 'Port list' que se encuentra junto a la pestaña 'tasks and events'. Ábrela para ser recibido por todas tus variables de C++ y PLCnext. Debería verse algo así.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Si lo hiciste todo correctamente deberías poder conectar los puertos OUT de tu PLC al puerto IN del programa C++, al revés también es posible, y debería verse algo así. Si esto no funciona comprueba los tipos de datos y nombres de tus variables.

Domina tipos de datos simples y complejos en C++ con PLCnext Engineer

Para añadir un valor dummy a nuestra variable vayamos al programa principal en la pestaña componentes luego selecciona code dentro de la pantalla principal para ver el código y añadir algo del nuestro. Solo estableceremos la variable que sale a algunas especificaciones de coche. Estas pueden elegirse al azar pero necesitarán coincidir con los tipos de datos. (dependiendo de lo que elijas, usa strings donde usaste strings, etc.)

CarToC[0].sBrand := 'Audi';
CarToC[0].iHorsepower := 200;
CarToC[0].iYear := 2020;
CarToC[0].xInsured := TRUE;

CarToC[1].sBrand := 'Mazda';
CarToC[1].iHorsepower := 120;
CarToC[1].iYear := 2001;
CarToC[1].xInsured := FALSE;

Una vez desplegamos este ejemplo, la lista que sale debería estar intercambiada en la lista entrante. Puedes ver las variables en la 'Ports List' de antes.

Tecnología Industrial

  1. Análisis avanzado de circuitos DC reactivos con condiciones iniciales no nulas
  2. Redacción de procedimientos digitales: Simple, eficiente y fiable
  3. Acceso Remoto Seguro gRPC con grpcurl en Dispositivos PLCnext
  4. Desarrollar una aplicación de consola PLCnext usando C#: Guía para principiantes
  5. Instala el gestor de paquetes APT en PLCnext Linux: Guía paso a paso
  6. Estructuras vs Clases en C++: Guía práctica para desarrolladores embebidos
  7. Expandiendo horizontes cloud: Nuevas zonas, contenedores y estrategias multicloud
  8. Fundamentos de C#: Entrada y salida esenciales
  9. Clases y Objetos en C++: Guía Práctica de Programación Orientada a Objetos
  10. Punteros y arrays en C++: dominando su relación
  11. Guía Completa de Fecha y Hora en C++