Ir al contenido

Conector Siemens S7

El conector Siemens S7 permite la comunicación directa con PLCs de la serie S7 de Siemens sin requerir OPC UA u otro middleware.

Tipos de Conector:

  • S7Reader - Leer datos de PLCs S7
  • S7Writer - Escribir datos en PLCs S7

PLCs Soportados:

  • S7-300
  • S7-400
  • S7-1200
  • S7-1500
{
"type": "S7Reader",
"config": {
"endpoint": "192.168.0.1:102",
"pollingRate": 1000,
"rack": 0,
"slot": 2
},
"variables": [
{
"key": "temperature",
"dataType": "Real",
"memoryArea": "DB",
"blockNumber": 1,
"startIdx": 0,
"size": 4,
"bitOrder": "BigEndian"
},
{
"key": "counter",
"dataType": "Dint",
"memoryArea": "DB",
"blockNumber": 1,
"startIdx": 4,
"size": 4,
"bitOrder": "BigEndian"
}
]
}
{
"type": "S7Writer",
"config": {
"endpoint": "192.168.0.1:102",
"rack": 0,
"slot": 2
},
"variables": [
{
"key": "setpoint",
"dataType": "Real",
"memoryArea": "DB",
"blockNumber": 1,
"startIdx": 100,
"size": 4,
"bitOrder": "BigEndian"
}
]
}

Dirección IP del PLC y puerto (el puerto por defecto es 102):

{
"endpoint": "192.168.0.1:102"
}

Ubicación física del módulo CPU:

{
"rack": 0,
"slot": 2
}

Configuraciones comunes:

  • S7-300: rack=0, slot=2
  • S7-400: rack=0, slot=2 o 3
  • S7-1200: rack=0, slot=1
  • S7-1500: rack=0, slot=1

Para lectores, intervalo en milisegundos:

{
"pollingRate": 1000
}

Área más común para datos estructurados:

{
"key": "temperature",
"dataType": "Real",
"memoryArea": "DB",
"blockNumber": 1,
"startIdx": 0,
"size": 4
}

Requiere blockNumber para especificar qué DB.

Memoria de propósito general:

{
"key": "flag_value",
"dataType": "Word",
"memoryArea": "M",
"startIdx": 0,
"size": 2
}

Señales de entrada físicas (solo lectura):

{
"key": "sensor_input",
"dataType": "Bool",
"memoryArea": "I",
"startIdx": 0,
"size": 1
}

Señales de salida físicas (lectura/escritura):

{
"key": "motor_output",
"dataType": "Bool",
"memoryArea": "Q",
"startIdx": 0,
"size": 1
}

Valores de contadores:

{
"key": "production_count",
"dataType": "Word",
"memoryArea": "C",
"startIdx": 0,
"size": 2
}

Valor booleano:

{
"dataType": "Bool",
"size": 1
}

Entero sin signo de 8 bits (0-255):

{
"dataType": "Byte",
"size": 1
}

Entero sin signo de 16 bits (0-65535):

{
"dataType": "Word",
"size": 2
}

Entero sin signo de 32 bits:

{
"dataType": "Dword",
"size": 4
}

Entero con signo de 16 bits (-32768 a 32767):

{
"dataType": "Int",
"size": 2
}

Entero con signo de 32 bits:

{
"dataType": "Dint",
"size": 4
}

Punto flotante de 32 bits:

{
"dataType": "Real",
"size": 4
}

Carácter ASCII:

{
"dataType": "Char",
"size": 1
}

Los PLCs S7 usan orden de bytes Big Endian por defecto:

{
"bitOrder": "BigEndian"
}

Definición completa de variable:

{
"key": "temperature", // Clave de carga de Meddle
"dataType": "Real", // Tipo de datos S7
"memoryArea": "DB", // Área de memoria
"blockNumber": 1, // Número de DB (para área DB)
"startIdx": 0, // Desplazamiento de byte inicial
"size": 4, // Tamaño en bytes
"bitOrder": "BigEndian" // Orden de bytes
}
{
"type": "S7Reader",
"config": {
"endpoint": "192.168.1.10:102",
"pollingRate": 1000,
"rack": 0,
"slot": 2
},
"variables": [
{
"key": "machine_status",
"dataType": "Word",
"memoryArea": "DB",
"blockNumber": 10,
"startIdx": 0,
"size": 2,
"bitOrder": "BigEndian"
},
{
"key": "production_count",
"dataType": "Dint",
"memoryArea": "DB",
"blockNumber": 10,
"startIdx": 2,
"size": 4,
"bitOrder": "BigEndian"
},
{
"key": "cycle_time",
"dataType": "Real",
"memoryArea": "DB",
"blockNumber": 10,
"startIdx": 6,
"size": 4,
"bitOrder": "BigEndian"
}
]
}
{
"type": "S7Writer",
"config": {
"endpoint": "192.168.1.10:102",
"rack": 0,
"slot": 2
},
"variables": [
{
"key": "temperature_setpoint",
"dataType": "Real",
"memoryArea": "DB",
"blockNumber": 20,
"startIdx": 0,
"size": 4,
"bitOrder": "BigEndian"
},
{
"key": "enable_process",
"dataType": "Bool",
"memoryArea": "M",
"startIdx": 0,
"size": 1,
"bitOrder": "BigEndian"
}
]
}

Soluciones:

  • Verifica la dirección IP del PLC y el puerto
  • Verifica la conectividad de red: ping [ip-plc]
  • Asegúrate de que el PLC permita conexiones externas (verifica la configuración del PLC)
  • Verifica que los números de rack y slot coincidan con la configuración de tu PLC
  • Verifica las reglas del firewall (puerto 102)

Soluciones:

  • Verifica la configuración de protección del PLC
  • Verifica que la comunicación PUT/GET esté habilitada en el PLC
  • Asegúrate de que no haya protección por contraseña en el PLC
  • Verifica si el PLC está en modo RUN (algunas operaciones requieren modo STOP)

Soluciones:

  • Verifica que startIdx (desplazamiento de byte) sea correcto
  • Verifica que size coincida con el tipo de datos
  • Confirma blockNumber para áreas DB
  • Verifica bitOrder (debería ser BigEndian para S7)
  • Usa TIA Portal o STEP 7 para verificar el diseño de memoria
  1. Usa Bloques de Datos: Organiza datos en DBs para mejor estructura
  2. Documenta el Diseño de Memoria: Mantén un mapa de tu estructura DB
  3. Agrupa Direcciones Consecutivas: Más eficiente que lecturas dispersas
  4. Prueba Primero en Modo STOP: Más seguro para pruebas iniciales
  5. Usa Tipos de Datos Apropiados: Coincide exactamente con los tipos de datos del programa del PLC