Conexión de Siemens S7-1200 / S7-1500 a la nube a través de Eziwan
Esta guía describe la configuración completa para conectar un controlador Siemens S7-1200 o S7-1500 a la plataforma Eziwan. Incluye las configuraciones Modbus TCP (S7-1200 y S7-1500) y OPC-UA (solo S7-1500), las particularidades de cada modelo de CPU y la resolución de problemas habituales.
Tabla de compatibilidad por modelo
Siemens S7-1200
| CPU | Firmware mínimo | Modbus TCP | OPC-UA | Observaciones |
|---|---|---|---|---|
| CPU 1211C AC/DC/Relé | V4.0 | ✓ MB_SERVER | ✗ | 50 KB de programa, limitado a un máximo de 50 registros |
| CPU 1211C CC/CC/CC | V4.0 | ✓ | ✗ | — |
| CPU 1212C | V4.0 | ✓ | ✗ | 75 KB de programa |
| CPU 1212FC | V4.0 | ✓ | ✗ | Versión a prueba de fallos |
| CPU 1214C | V4.0 | ✓ | ✗ | 100 KB, recomendada para supervisión |
| CPU 1214FC | V4.0 | ✓ | ✗ | A prueba de fallos |
| CPU 1215C | V4.0 | ✓ | ✗ | 125 KB, 2 puertos Ethernet |
| CPU 1217C | V4.0 | ✓ | ✗ | 150 KB, E/S de alta velocidad |
Recomendación: para proyectos que requieran una supervisión intensiva (> 50 variables, sondeo cada 1 s), utilice una CPU 1214C o superior. La CPU 1211C, con sus 50 KB de programa, deja poco espacio para los bloques de funciones MB_SERVER y los datos.
Siemens S7-1500
| CPU | Firmware mínimo | Modbus TCP | OPC-UA | Observaciones |
|---|---|---|---|---|
| CPU 1511-1 PN | V2.0 | ✓ | ✓ V2.0 | Estándar, 1 Mbit de programa |
| CPU 1513-1 PN | V2.0 | ✓ | ✓ | 300 KB de datos |
| CPU 1515-2 PN | V2.0 | ✓ | ✓ | 2 puertos Ethernet físicos |
| CPU 1516-3 PN/DP | V2.0 | ✓ | ✓ | Profibus DP integrado |
| CPU 1517-3 PN/DP | V2.0 | ✓ | ✓ | Alto rendimiento |
| CPU 1518-4 PN/DP | V2.0 | ✓ | ✓ | Gama alta S7-1500 |
| CPU 1511F-1 PN | V2.0 | ✓ | ✓ | A prueba de fallos |
| ET 200SP CPU 1510SP | V2.0 | ✓ | ✓ | Compacta, para armarios pequeños |
Ventaja de OPC-UA frente al S7-1500: no hay FB en el programa, ni bases de datos con acceso absoluto. Las variables se publican directamente a través del espacio de nombres OPC-UA, lo que resulta más sencillo de configurar y más robusto.
Siemens S7-300 y S7-400 (modelos antiguos)
| Módulo | Protocolo | Observaciones |
|---|---|---|
| CPU 31x con CP 343-1 Advanced | Modbus TCP (opción de firmware) | Se requiere CP 343-1 IT (6GK7343-1GX31) |
| CPU 41x con CP 443-1 Advanced | Modbus TCP | CP 443-1 IT (6GK7443-1GX30) |
| S7-300 con IM 153-2 | Modbus RTU a través de pasarela RS-485 | A través del puerto RS-485 de Eziwan |
| Todos los S7-300/400 | S7Comm (no seguro) | No recomendado, no compatible con Eziwan |
Eziwan no admite el protocolo S7Comm (puerto 102) de los S7-300/400 por motivos de seguridad: S7Comm carece de autenticación y está expuesto a ataques conocidos. Utilice Modbus TCP a través de CP 343-1 o Modbus RTU por RS-485.
Configuración de Modbus TCP en el S7-1200
Requisitos previos de red
- Dirección IP estática en el puerto X1 de la CPU
- La pasarela Eziwan en la misma subred (o enrutamiento entre VLAN si las VLAN están separadas)
- Puerto TCP 502 no bloqueado entre la pasarela y la CPU
Paso 1 — Configurar la dirección IP de la CPU en TIA Portal
- Árbol del proyecto → doble clic en la CPU
- Propiedades → pestaña «Interfaz PROFINET [X1]»
- «Direcciones Ethernet» → desactivar DHCP, introducir la IP estática
- Ejemplo:
192.168.1.10 / 255.255.255.0 - Dejar la puerta de enlace en blanco si no hay enrutamiento entre VLAN
Paso 2 — Crear el bloque de datos para MB_SERVER
Crear un nuevo bloque de datos en TIA Portal:
// Parámetros de la base de datos
Nom : "Eziwan_DB"
Número: automático (p. ej., DB10)
Type : Global DB
Acceso optimizado: DESACTIVADO ← CRÍTICO
El acceso optimizado debe desactivarse. En las propiedades de la base de datos, desmarca «Optimized block access». Si no lo haces, el acceso absoluto por dirección de memoria (necesario para MB_SERVER) no funcionará. Esta es la causa principal de los errores que se producen durante la primera integración.
Estructura de la base de datos:
DATA_BLOCK "Eziwan_DB"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
// Área de registros de holding (500 palabras de 16 bits)
// Accesible en Modbus FC=03, direcciones del 0 al 499
MB_HOLD_REG : ARRAY [0..499] OF WORD;
// Variables internes (non accessibles en Modbus)
MBStatus : WORD;
MBError : BOOL;
NewData : BOOL;
END_VAR
Paso 3 — Añadir MB_SERVER en OB1
// Bloque de conexión TCP (en un FC o directamente en OB1)
// Tipo: TCON_IP_v4 (instanciar como variable estática en un FB
// o como base de datos de conexión estática)
"ConnectDB".InterfaceId := 64; // Puerto X1 = siempre 64 en el S7-1200
"ConnectDB".ID := W#16#0001; // ID de conexión (de 1 a 0xFFF)
"ConnectDB".ConnectionType := 11; // 11 = TCP
"ConnectDB".ActiveEstablished := FALSE; // Servidor: a la espera de conexión
"ConnectDB".RemoteAddress.ADDR[1] := 0; // Aceptar todas las direcciones IP
"ConnectDB".RemoteAddress.ADDR[2] := 0;
"ConnectDB".RemoteAddress.ADDR[3] := 0;
"ConnectDB".RemoteAddress.ADDR[4] := 0;
"ConnectDB".RemotePort := 0; // Port source quelconque
"ConnectDB".LocalPort := 502; // Port Modbus TCP
// Llamada al FB MB_SERVER (instancia en una base de datos de instancias)
"MB_SERVER_DB"(
DISCONNECT := FALSE, // TRUE para cerrar la conexión
MB_HOLD_REG := "Eziwan_DB".MB_HOLD_REG,
CONNECT := "ConnectDB",
NDR => "Eziwan_DB".NewData, // TRUE si se han recibido nuevos datos
DR => #DataReady,
ERROR => "Eziwan_DB".MBError,
STATUS => "Eziwan_DB".MBStatus
);
Paso 4 — Introducir datos en los registros desde el programa
// En OB1 o en un OB cíclico (OB30, OB35...)
// Convenio recomendado:
// Registres 0-49 : variables analogiques
// Registros 50-99: contadores y acumuladores
// Registros 100-127: estados y códigos de error (campos de bits)
// Valores analógicos (×10 por cada decimal)
"Eziwan_DB".MB_HOLD_REG[0] := REAL_TO_UINT("GVL_Process".Temperature_Four * 10.0);
"Eziwan_DB".MB_HOLD_REG[1] := REAL_TO_UINT("GVL_Process".Debit_Ligne * 100.0);
"Eziwan_DB".MB_HOLD_REG[2] := REAL_TO_UINT("GVL_Process".Presión * 100,0);
// Número flotante de 32 bits en 2 registros (si la precisión decimal es suficiente con ×10 como se ha indicado anteriormente)
// Utilizar MOVE para copiar los bytes
"Eziwan_DB".MB_HOLD_REG[10] := WORD("GVL_Analog".Debit_MSW); // Poids fort
"Eziwan_DB".MB_HOLD_REG[11] := WORD("GVL_Analog".Debit_LSW); // Poids faible
// Campo de bits de estado (16 valores booleanos en un solo registro)
"Eziwan_DB".MB_HOLD_REG[100] := 0; // Reset
IF "GVL_Status".Pompe_1_Marche THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0001; END_IF;
IF "GVL_Status".Pompe_2_Marche THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0002; END_IF;
IF "GVL_Alarms".Defaut_Thermique THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0004; END_IF;
IF "GVL_Status".Arret_Urgence THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0008; END_IF;
// Contador de producción (int32 en 2 registros)
"Eziwan_DB".MB_HOLD_REG[50] := INT_TO_WORD("GVL_Count".Pieces_SHR 16); // MSW
"Eziwan_DB".MB_HOLD_REG[51] := INT_TO_WORD("GVL_Count".Pieces_AND 16#FFFF); // LSW
Configuración de OPC-UA en el S7-1500 (recomendado)
La ventaja de OPC-UA sobre S7-1500: no hay FB en el programa. Las variables se publican directamente desde el espacio de nombres OPC-UA sin necesidad de modificar el código del autómata.
Activar OPC-UA en TIA Portal V16+
- Propiedades de la CPU → «OPC UA» → «Servidor» → marcar «Activar servidor OPC UA»
- Puerto: 4840 (estándar OPC-UA, o 48010/48020 según las restricciones de la red)
- Seguridad: seleccionar «Basic256Sha256 - Sign & Encrypt» (se recomienda el nivel SL2+)
- Autenticación: activar «Nombre de usuario/Contraseña» o «Certificado» (desactivar «Anónimo»)
Configurar las variables expuestas
En TIA Portal, crear puntos de acceso OPC UA:
- En el bloque de datos o en las etiquetas del PLC → seleccionar las variables que se desean exponer
- Clic con el botón derecho → «Properties» → activar «Accessible from HMI/OPC UA»
- Las variables aparecen en el espacio de direcciones OPC UA bajo
ns=3;s=<NomVariable>
Configuración en Eziwan para OPC-UA
En el panel de control, crea el equipo S7-1500 con el protocolo OPC-UA:
equipement:
protocole: opc_ua
endpoint: "opc.tcp://192.168.1.10:4840"
securite: "Basic256Sha256"
authentification: "username"
identifiant: "eziwan"
mot_de_passe: "votre-mot-de-passe"
Prueba de conexión Modbus TCP
Prueba rápida desde Python
from pymodbus.client import ModbusTcpClient
# Test S7-1200 avec MB_SERVER
client = ModbusTcpClient("192.168.1.10", port=502, timeout=3)
if client.connect():
# ID de unidad = 1 para S7-1200 con MB_SERVER
result = client.read_holding_registers(address=0, count=10, slave=1)
if not result.isError():
print(f"✓ Connexion OK. Registres 0-9 : {result.registers}")
else:
print(f"✗ Erreur Modbus : exception_code={getattr(result, 'exception_code', '?')}")
else:
print("✗ Conexión TCP imposible — comprobar la IP y que el programa S7 esté en marcha")
client.close()
Comprobación del estado de MB_SERVER
En TIA Portal, supervisar las variables de estado de la base de datos:
"Eziwan_DB".MBStatus = ?
Valeur Signification
0x0000 No se ha establecido ninguna conexión (en espera)
0x7002 Conexión establecida, a la espera de una solicitud
0x7003 Solicitud en proceso de tramitación
0x8XYZ Erreur (voir tableau codes erreur TIA Portal)
Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| Conexión TCP rechazada | Programa no cargado o CPU en modo STOP | Poner la CPU en modo RUN, comprobar que OB1 se está ejecutando |
| MB_STATUS 0x8090 | Acceso optimizado a la base de datos activado | Desactivar S7_Optimized_Access |
| Excepción Modbus 01 | No se ha llamado a la función FB MB_SERVER en el programa | Comprobar que MB_SERVER se encuentra en OB1 |
| Excepción Modbus 02 | Dirección > tamaño de la matriz MB_HOLD_REG | Aumentar el tamaño de la matriz o comprobar la dirección |
| Todos los valores a 0 | Variables de proceso no copiadas en MB_HOLD_REG | Comprobar la sección de copia en OB1 |
| MB_STATUS 0x80C3 | ID de conexión ya utilizada | Cambiar el ID de conexión en TCON_IP_v4 |
| Valores REAL incorrectos | Orden de bytes incorrecto | Probar float32_abcd frente a float32_cdab en Eziwan |
| Desconexión aleatoria | Tiempo de espera configurado demasiado corto | Aumenta el tiempo de espera en los parámetros de conexión |
| OPC-UA: certificado rechazado | Certificado de Eziwan no aprobado | Aprueba el certificado en TIA Portal > Servidor > Clientes de confianza |
- Cómo conectar un S7 de forma remota sin abrir puertos — arquitectura VPN y seguridad
- Guía de Modbus TCP/IP — estructura de tramas y código Python
- Soporte técnico → — respuesta en un plazo de 4 horas laborables
Preguntas frecuentes
¿En qué se diferencian el S7-1200 y el S7-1500 en cuanto a la conexión a la nube?
Ambos admiten Modbus TCP y OPC-UA (servidor OPC-UA nativo en el S7-1500; licencia de tiempo de ejecución en el S7-1200, según el firmware). El S7-1500 ofrece más nodos OPC-UA simultáneos; para una simple transmisión de datos, Modbus TCP es suficiente en ambos.
¿Hay que activar PUT/GET en TIA Portal?
Solo para comunicaciones S7 nativas. Para Modbus TCP a través de los bloques MB_SERVER o para OPC-UA, no es necesario utilizar PUT/GET; de hecho, es preferible por motivos de seguridad.
¿Modbus TCP u OPC-UA? ¿Cuál elegir con un S7?
Modbus TCP es más sencillo de implementar (asignación de bases de datos a registros); OPC-UA aporta tipado, estructura y seguridad mediante certificados. Para un proyecto nuevo en S7-1500, se recomienda OPC-UA; para una adaptación rápida, Modbus TCP.
¿Es posible acceder a TIA Portal de forma remota?
Sí, a través del túnel VPN de la pasarela: el puesto de ingeniería se conecta a la red del equipo y TIA Portal funciona como si fuera local (en línea, diagnóstico, carga), sin exponer el controlador a Internet.
Recursos relacionados
- Acceso remoto al controlador Siemens S7 — TIA Portal remoto seguro
- Conectar un S7 a la nube — el artículo paso a paso
- Integración OPC-UA — Configuración detallada de servidor/cliente
- OPC UA a la nube industrial — La solución de recopilación de datos OPC-UA
- Conectar un controlador lógico a la nube — todas las marcas compatibles