Dominar definiciones y conexiones complejas de puertos GDS en programación IEC
Resumen
En este artículo explicaré cómo definir puertos GDS complejos como estructuras de datos en C++ y conectarlos a puertos GDS en código IEC.
Estructuras de datos
Cómo declarar estructuras de datos. Veamos C++.
#pragma once
#include "Arp/System/Core/Arp.h"
#include "Arp/Plc/Commons/PlcTypes.h"
namespace MyComponent {
class MyData {
public:
MyData() = default;
~MyData() = default;
public:
Arp::boolean Valid = false;
Arp::int16 IntegerValue = 0;
Arp::Plc::Commons::Gds::StaticString<80> StringValue = "";
Arp::uint8 Data[8] = {0x00};
};
} // namespace MyComponent
Y en el Header de la clase del programa, este tipo ahora puede definirse como Puerto GDS.
#pragma once
...
#include "MyData.hpp"
namespace MyComponent {
//#program
//#component(MyComponent::MyComponent)
class MyProgramm ... {
...
public:
//#port
//#name(TheData)
//#attributes(Input)
MyData GdsPortMyData;
};
} // namespace MyComponent
Para poder conectar el Puerto GDS a un Puerto GDS en código IEC, la variable en el código IEC tiene que ser del mismo tipo. Esto significa que la estructura IEC tiene que tener el mismo diseño de datos que el tipo de datos C++. Además, todos los nombres de elementos tienen que coincidir con los elementos en el tipo C++.
TYPE UDT_PROJECT_MY_DATA : STRUCT
Valid : BOOL;
IntegerValue : INT;
StringValue : STRING;
Data : ARRAY [0..7] OF BYTE;
END_STRUCT
END_TYPE
Un Puerto GDS de Salida (Out Port) del tipo UDT_PROJECT_MY_DATA ahora puede conectarse al Puerto GDS de Entrada (In Port) TheData del programa C++.
Nota especial sobre STRING
Una nota especial sobre el tipo de dato STRING. Tenga en cuenta que el código IEC por ahora no es consciente de la codificación UTF-8. Los literales de cadena están usando codificación ISO-8859-1. Así que puede ser necesario convertirlos a UTF-8 antes de compararlos con literales de cadena en código C++. Puede usar la biblioteca boost-locale para convertir entre ISO-8859-1 a UTF-8 y viceversa.
Arp::String toUtf8(const Arp::String& s) {
return boost::locale::conv::to_utf<char>(s.CStr(), "ISO-8859-1");
}
Tecnología Industrial
- Evite errores costosos: 7 errores clave en picking y packing y soluciones probadas
- Evite estos seis errores logísticos comunes para el éxito fluido de la cadena de suministro
- Mejorando las Cadenas de Suministro de EE. UU.: El Rol Estratégico de los Puertos Interiores
- Superando los 7 principales desafíos de la última milla: Soluciones probadas para envíos más rápidos y rentables
- Cuatro tipos de ciberataques – Estrategias de prevención probadas
- Tres desafíos clave en la entrega de última milla y estrategias probadas para superarlos
- Evite los Errores de Envío: 7 Fallos Comunes y Soluciones Comprobadas
- 4 causas principales de fallo en switchgear y estrategias de prevención probadas
- Identificando causas clave de fallo de máquina y estrategias para evitar tiempo de inactividad
- Interoperabilidad explicada: Cómo tu empresa puede lograr una integración fluida
- Conecte su Haas CNC a PC o Portátil: Guía Paso a Paso