Zum Inhalt springen

Siemens S7-Konnektor

Der Siemens S7-Konnektor ermöglicht die direkte Kommunikation mit Siemens S7-Serie SPSen ohne OPC UA oder andere Middleware.

Konnektor-Typen:

  • S7Reader - Daten von S7-SPSen lesen
  • S7Writer - Daten auf S7-SPSen schreiben

Unterstützte SPSen:

  • 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"
}
]
}

SPS-IP-Adresse und Port (Standardport ist 102):

{
"endpoint": "192.168.0.1:102"
}

Physische Position des CPU-Moduls:

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

Häufige Konfigurationen:

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

Für Reader Intervall in Millisekunden:

{
"pollingRate": 1000
}

Häufigster Bereich für strukturierte Daten:

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

Erfordert blockNumber zur Angabe, welcher DB.

Allzweckspeicher:

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

Physische Eingangssignale (nur lesen):

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

Physische Ausgangssignale (lesen/schreiben):

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

Zählerwerte:

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

Boolescher Wert:

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

8-bit unsigned integer (0-255):

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

16-bit unsigned integer (0-65535):

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

32-bit unsigned integer:

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

16-bit signed integer (-32768 bis 32767):

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

32-bit signed integer:

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

32-bit floating point:

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

ASCII-Zeichen:

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

S7-SPSen verwenden standardmäßig Big Endian-Byte-Reihenfolge:

{
"bitOrder": "BigEndian"
}

Vollständige Variablendefinition:

{
"key": "temperature", // Meddle-Payload-Schlüssel
"dataType": "Real", // S7-Datentyp
"memoryArea": "DB", // Speicherbereich
"blockNumber": 1, // DB-Nummer (für DB-Bereich)
"startIdx": 0, // Start-Byte-Offset
"size": 4, // Größe in Bytes
"bitOrder": "BigEndian" // Byte-Reihenfolge
}
{
"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"
}
]
}
{
"type": "S7Reader",
"config": {
"endpoint": "192.168.1.10:102",
"pollingRate": 500,
"rack": 0,
"slot": 2
},
"variables": [
{
"key": "emergency_stop",
"dataType": "Bool",
"memoryArea": "I",
"startIdx": 0,
"size": 1,
"bitOrder": "BigEndian"
},
{
"key": "motor_running",
"dataType": "Bool",
"memoryArea": "Q",
"startIdx": 0,
"size": 1,
"bitOrder": "BigEndian"
}
]
}

Lösungen:

  • SPS-IP-Adresse und Port überprüfen
  • Netzwerkkonnektivität prüfen: ping [plc-ip]
  • Sicherstellen, dass SPS externe Verbindungen erlaubt (SPS-Konfiguration prüfen)
  • Rack- und Slot-Nummern mit SPS-Konfiguration abgleichen
  • Firewall-Regeln prüfen (Port 102)

Lösungen:

  • SPS-Schutzeinstellungen prüfen
  • Sicherstellen, dass PUT/GET-Kommunikation in der SPS aktiviert ist
  • Prüfen, ob SPS keinen Passwortschutz hat
  • Prüfen, ob SPS im RUN-Modus ist (einige Operationen erfordern STOP-Modus)

Lösungen:

  • startIdx (Byte-Offset) überprüfen
  • size mit Datentyp abgleichen
  • blockNumber für DB-Bereiche bestätigen
  • bitOrder überprüfen (sollte BigEndian für S7 sein)
  • TIA Portal oder STEP 7 zur Überprüfung des Speicherlayouts verwenden

Lösungen:

  • pollingRate erhöhen, um Frequenz zu reduzieren
  • Aufeinanderfolgende Speicheradressen gruppieren
  • Anzahl der Variablen reduzieren
  • Netzwerklatenz prüfen
  1. Datenbausteine verwenden: Daten in DBs für bessere Struktur organisieren
  2. Speicherlayout dokumentieren: Karte der DB-Struktur führen
  3. Aufeinanderfolgende Adressen: Effizienter als verstreute Lesungen
  4. STOP-Modus: Sicherer für erste Tests
  5. Datentypen: Genau mit SPS-Programmtypen abgleichen