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

CPUFirmware mínimoModbus TCPOPC-UAObservaciones
CPU 1211C AC/DC/ReléV4.0✓ MB_SERVER50 KB de programa, limitado a un máximo de 50 registros
CPU 1211C CC/CC/CCV4.0
CPU 1212CV4.075 KB de programa
CPU 1212FCV4.0Versión a prueba de fallos
CPU 1214CV4.0100 KB, recomendada para supervisión
CPU 1214FCV4.0A prueba de fallos
CPU 1215CV4.0125 KB, 2 puertos Ethernet
CPU 1217CV4.0150 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

CPUFirmware mínimoModbus TCPOPC-UAObservaciones
CPU 1511-1 PNV2.0✓ V2.0Estándar, 1 Mbit de programa
CPU 1513-1 PNV2.0300 KB de datos
CPU 1515-2 PNV2.02 puertos Ethernet físicos
CPU 1516-3 PN/DPV2.0Profibus DP integrado
CPU 1517-3 PN/DPV2.0Alto rendimiento
CPU 1518-4 PN/DPV2.0Gama alta S7-1500
CPU 1511F-1 PNV2.0A prueba de fallos
ET 200SP CPU 1510SPV2.0Compacta, 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óduloProtocoloObservaciones
CPU 31x con CP 343-1 AdvancedModbus TCP (opción de firmware)Se requiere CP 343-1 IT (6GK7343-1GX31)
CPU 41x con CP 443-1 AdvancedModbus TCPCP 443-1 IT (6GK7443-1GX30)
S7-300 con IM 153-2Modbus RTU a través de pasarela RS-485A través del puerto RS-485 de Eziwan
Todos los S7-300/400S7Comm (no seguro)No recomendado, no compatible con Eziwan
aviso

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

  1. Árbol del proyecto → doble clic en la CPU
  2. Propiedades → pestaña «Interfaz PROFINET [X1]»
  3. «Direcciones Ethernet» → desactivar DHCP, introducir la IP estática
  4. Ejemplo: 192.168.1.10 / 255.255.255.0
  5. 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
aviso

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+

  1. Propiedades de la CPU → «OPC UA»«Servidor» → marcar «Activar servidor OPC UA»
  2. Puerto: 4840 (estándar OPC-UA, o 48010/48020 según las restricciones de la red)
  3. Seguridad: seleccionar «Basic256Sha256 - Sign & Encrypt» (se recomienda el nivel SL2+)
  4. 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:

  1. En el bloque de datos o en las etiquetas del PLC → seleccionar las variables que se desean exponer
  2. Clic con el botón derecho → «Properties» → activar «Accessible from HMI/OPC UA»
  3. 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íntomaCausa probableSolución
Conexión TCP rechazadaPrograma no cargado o CPU en modo STOPPoner la CPU en modo RUN, comprobar que OB1 se está ejecutando
MB_STATUS 0x8090Acceso optimizado a la base de datos activadoDesactivar S7_Optimized_Access
Excepción Modbus 01No se ha llamado a la función FB MB_SERVER en el programaComprobar que MB_SERVER se encuentra en OB1
Excepción Modbus 02Dirección > tamaño de la matriz MB_HOLD_REGAumentar el tamaño de la matriz o comprobar la dirección
Todos los valores a 0Variables de proceso no copiadas en MB_HOLD_REGComprobar la sección de copia en OB1
MB_STATUS 0x80C3ID de conexión ya utilizadaCambiar el ID de conexión en TCON_IP_v4
Valores REAL incorrectosOrden de bytes incorrectoProbar float32_abcd frente a float32_cdab en Eziwan
Desconexión aleatoriaTiempo de espera configurado demasiado cortoAumenta el tiempo de espera en los parámetros de conexión
OPC-UA: certificado rechazadoCertificado de Eziwan no aprobadoAprueba el certificado en TIA Portal > Servidor > Clientes de confianza

👉 Recursos adicionales

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