Objetivo y entorno
El objetivo de este artículo es comunicar dos fabricantes distintos usando un estándar común: CODESYS actuará como servidor OPC UA y un PLC Siemens S7-1500 actuará como cliente OPC UA.
La idea es: preparar un SoftPLC en Windows, cargarle un programa básico con variables que cambian, publicar esas variables por OPC UA y leerlas desde el PLC de Siemens usando Cliente OPC UA.
Entorno usado en la prueba:
- CODESYS Development System 64 3.5.22.20 como IDE de desarrollo.
- CODESYS Control Win V3 / Control Win SL como SoftPLC en Windows.
- PC servidor CODESYS: IP de prueba 192.168.1.133.
- Cliente Siemens: S7-1500 en TIA Portal, descargado sobre PLCSIM Advanced.
- Puerto OPC UA:
4840, con endpointopc.tcp://192.168.1.133:4840. - UA Expert: cliente OPC UA usado para validar que el servidor CODESYS está publicando correctamente.
La documentación oficial de CODESYS Development System indica que el instalador incluye el entorno de desarrollo y una versión demo del SoftPLC CODESYS Control Win SL. CODESYS también documenta que, con el add-on de comunicación instalado, el runtime puede exponer un servidor OPC UA para que un cliente lea la interfaz de variables del controlador.
Instalación de CODESYS y Control Win
El primer paso es instalar el IDE desde la página oficial de CODESYS Development System V3.
Dentro del instalador o del gestor de paquetes buscamos CODESYS Control Win. Este componente es el runtime SoftPLC para Windows. Es decir, convierte el PC en el controlador donde descargaremos el proyecto de prueba.
Una vez instalado, arrancamos el runtime. CODESYS Control Win queda corriendo en Windows y listo para recibir la descarga del proyecto desde el IDE.
Un detalle importante: el SoftPLC usará la red del PC donde está ejecutándose. En esta prueba el PC tiene la IP 192.168.1.133, por lo que ese será el endpoint que después buscarán UA Expert y el cliente Siemens.
Programa básico en CODESYS
Creamos variables globales y las vamos cambiando de forma cíclica.
VAR_GLOBAL
Bool_Test : BOOL := FALSE;
Int_Test : DINT := 0;
Real_Test : REAL := 0.0;
END_VAR
En el programa principal podemos usar un temporizador de un segundo y un flanco para cambiar los valores de forma ordenada:
VAR
T_Pulse : TON;
R_Pulse : R_TRIG;
END_VAR
T_Pulse(IN := NOT T_Pulse.Q, PT := T#1s);
R_Pulse(CLK := T_Pulse.Q);
IF R_Pulse.Q THEN
GVL_Test.Bool_Test := NOT GVL_Test.Bool_Test;
GVL_Test.Int_Test := GVL_Test.Int_Test + 1;
GVL_Test.Real_Test := GVL_Test.Real_Test + 0.5;
IF GVL_Test.Int_Test >= 100 THEN
GVL_Test.Int_Test := 0;
GVL_Test.Real_Test := 0.0;
END_IF;
END_IF;
Publicar variables por OPC UA
Para que el cliente OPC UA vea las variables, no basta con tenerlas en el programa. Hay que exponerlas desde la configuración de símbolos. En CODESYS abrimos la configuración, seleccionamos las variables que queremos servir y generamos la configuración.
En este caso se publican Bool_Test, Int_Test y Real_Test. La selección debe descargarse al runtime junto con la aplicación, porque el servidor OPC UA se alimenta de esa interfaz publicada.
Si en tu versión estás usando la configuración explícita de OPC UA desde el árbol del proyecto, revisa también el objeto de servidor OPC UA o Communication Manager. En esta prueba se usa OPC UA sin seguridad para simplificar el laboratorio y comprobar la comunicación entre fabricantes de forma directa.
Si queremos trabajar sin usuario y contraseña para pruebas, accedemos a las políticas de seguridad del runtime.
Activamos el acceso anónimo para que UA Expert y el cliente Siemens puedan conectarse en modo de prueba.
Descarga al SoftPLC
Con el runtime arrancado y la configuración preparada, descargamos la aplicación al SoftPLC. Si la comunicación entre el IDE y el runtime está bien, CODESYS detectará el dispositivo local o el runtime de la IP correspondiente.
Después de la descarga, el programa debe quedar en ejecución. A partir de ese momento el servidor OPC UA ya puede exponer las variables seleccionadas.
Validación con UA Expert
Antes de ir a Siemens conviene comprobar el servidor con UA Expert. Esto nos evita mezclar dos problemas: uno de servidor CODESYS y otro de cliente Siemens.
El endpoint usado en la prueba es:
opc.tcp://192.168.1.133:4840
Si UA Expert puede navegar las variables y ver valores vivos, el servidor está listo.
PLC Siemens como cliente OPC UA
La parte Siemens sigue el mismo enfoque que ya se explicó en el artículo Cliente OPC UA Siemens S7-1500: lectura y escritura en TIA Portal, pero cambiando el servidor: aquí el servidor no es otro Siemens, sino el SoftPLC CODESYS.
Siemens documenta la funcionalidad en la ayuda de STEP 7 para usar una CPU S7-1500 como cliente OPC UA, y en su página general de OPC UA en Siemens.
Resumen de pasos en TIA Portal:
- Activar la funcionalidad de OPC UA Client en la CPU compatible.
- Seleccionar la licencia OPC UA que corresponda a la CPU.
- Crear una Client interface.
- Configurar el endpoint
opc.tcp://192.168.1.133:4840. - Entrar online contra el servidor CODESYS y crear una Read list.
- Compilar con Rebuild all para que TIA Portal genere el DB de interfaz.
- Ejecutar la lectura desde el programa con los bloques compactos, por ejemplo OPC_UA_ReadList_C.
Si además necesitas escribir desde Siemens hacia CODESYS, el planteamiento es el mismo: preparar una Write list, dar permisos de escritura a las variables publicadas y llamar al bloque de escritura correspondiente. Para esta prueba nos centramos en lectura, porque es el camino mínimo para validar la interoperabilidad.
Prueba final online
Con el cliente descargado en el PLC Siemens, nos ponemos online y observamos el DB generado por la interfaz de cliente. Los valores que vienen del SoftPLC CODESYS aparecen ya dentro del proyecto Siemens.
En la captura se ve el resultado de la lectura:
- Bool_Test: llega como booleano y cambia entre TRUE y FALSE.
- Int_Test: llega como DINT y se actualiza con el contador de CODESYS.
- Real_Test: llega como REAL y conserva el valor decimal.
Con esto queda validado el circuito completo: CODESYS ejecuta el programa, CODESYS publica por OPC UA, Siemens conecta como cliente y TIA Portal muestra los datos recuperados.
Artículos relacionados
La conclusión es sencilla: OPC UA permite que un SoftPLC CODESYS y un PLC Siemens se entiendan sin depender de un driver propietario entre ambos. Para laboratorio podemos dejarlo abierto y rápido; para planta real, el mismo flujo debe cerrarse con autenticación, certificados y cifrado.