Salta ai contenuti

Connettore Siemens S7

Il connettore Siemens S7 abilita la comunicazione diretta con PLC della serie Siemens S7 senza richiedere OPC UA o altri middleware.

Tipi Connettore:

  • S7Reader - Leggi dati da PLC S7
  • S7Writer - Scrivi dati su PLC S7

PLC Supportati:

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

Indirizzo IP PLC e porta (porta default è 102):

{
"endpoint": "192.168.0.1:102"
}

Posizione fisica del modulo CPU:

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

Configurazioni comuni:

  • 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

Per i reader, intervallo in millisecondi:

{
"pollingRate": 1000
}

Area più comune per dati strutturati:

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

Richiede blockNumber per specificare quale DB.

Memoria general-purpose:

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

Segnali di ingresso fisici (solo lettura):

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

Segnali di uscita fisici (lettura/scrittura):

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

Valori contatori:

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

Valore booleano:

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

Intero senza segno 8-bit (0-255):

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

Intero senza segno 16-bit (0-65535):

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

Intero senza segno 32-bit:

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

Intero con segno 16-bit (-32768 a 32767):

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

Intero con segno 32-bit:

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

Floating point 32-bit:

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

Carattere ASCII:

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

I PLC S7 usano ordine byte Big Endian per default:

{
"bitOrder": "BigEndian"
}

Definizione variabile completa:

{
"key": "temperature", // Chiave payload Meddle
"dataType": "Real", // Tipo dati S7
"memoryArea": "DB", // Area memoria
"blockNumber": 1, // Numero DB (per area DB)
"startIdx": 0, // Offset byte iniziale
"size": 4, // Dimensione in byte
"bitOrder": "BigEndian" // Ordine byte
}
{
"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"
}
]
}

Soluzioni:

  • Verifica indirizzo IP PLC e porta
  • Controlla connettività di rete: ping [plc-ip]
  • Assicurati che il PLC permetta connessioni esterne (controlla configurazione PLC)
  • Verifica che i numeri rack e slot corrispondano alla configurazione PLC
  • Controlla regole firewall (porta 102)

Soluzioni:

  • Controlla impostazioni protezione PLC
  • Verifica che la comunicazione PUT/GET sia abilitata nel PLC
  • Assicurati che non ci sia protezione password sul PLC
  • Controlla se il PLC è in modalità RUN (alcune operazioni richiedono modalità STOP)

Soluzioni:

  • Verifica che startIdx (offset byte) sia corretto
  • Controlla che size corrisponda al tipo dati
  • Conferma blockNumber per aree DB
  • Verifica bitOrder (dovrebbe essere BigEndian per S7)
  • Usa TIA Portal o STEP 7 per verificare layout memoria

Soluzioni:

  • Aumenta pollingRate per ridurre frequenza
  • Raggruppa indirizzi memoria consecutivi
  • Riduci numero variabili
  • Controlla latenza di rete
  1. Usa Data Block: Organizza dati in DB per migliore struttura
  2. Documenta Layout Memoria: Mantieni una mappa della struttura DB
  3. Raggruppa Indirizzi Consecutivi: Più efficiente di letture sparse
  4. Testa Prima in Modalità STOP: Più sicuro per test iniziali
  5. Usa Tipi Dati Appropriati: Abbina esattamente i tipi dati del programma PLC