Ogni messaggio IEC 60870-5-101 o 104 che trasporta dati contiene un'ASDU, ossia un'unità dati del servizio applicativo. L'ASDU indica come è codificato il valore (tipo), perché è stato inviato (causa di trasmissione), la stazione o il dispositivo logico (indirizzo comune) e il punto (indirizzo dell'oggetto informativo). Gli errori di mappatura nascono spesso dal considerare uno solo di questi elementi: un IOA corretto sotto l'indirizzo comune sbagliato, un numero in virgola mobile letto come intero scalato oppure una risposta a un'interrogazione registrata come evento.
I campi
IEC 60870-5-101 definisce l'identificatore dell'unità dati all'inizio di ogni ASDU. IEC 60870-5-104 usa lo stesso identificatore con dimensioni dei campi fisse.
| Campo | Contenuto | Dimensione in IEC 104 | Opzioni in IEC 101 |
|---|---|---|---|
| Identificazione del tipo | Codifica degli oggetti informativi | 1 byte | 1 byte |
| Qualificatore di struttura variabile | Numero di oggetti, da 0 a 127 (bit da 1 a 7), e bit SQ (bit 8) | 1 byte | 1 byte |
| Causa di trasmissione | Causa, da 0 a 63 (bit da 1 a 6), bit P/N (bit 7) e bit T (bit 8) | 1 byte | 1 byte |
| Indirizzo dell'originatore | Stazione di controllo che ha causato il messaggio, 0 se non utilizzato | 1 byte | 0 o 1 byte |
| Indirizzo comune (CA) | Stazione o dispositivo logico | 2 byte | 1 o 2 byte |
| Indirizzo dell'oggetto informativo (IOA) | Punto | 3 byte per oggetto | 1, 2 o 3 byte |
| Elementi informativi | Valore, qualità ed eventuale marca temporale | Dipende dal tipo | Dipende dal tipo |
In IEC 101 le dimensioni della causa, dell'indirizzo comune e dell'indirizzo dell'oggetto sono parametri di sistema nell'elenco di interoperabilità: le due estremità devono concordarle. Una dimensione errata sposta tutti i byte successivi. Rinumerare i punti non risolve il problema.
Il bit SQ cambia la disposizione degli oggetti. Con SQ = 0, ogni oggetto porta il proprio IOA. Con SQ = 1, l'ASDU porta un solo IOA, seguito dagli elementi di quell'indirizzo e degli indirizzi successivi in ordine. Un'ASDU di tipo 13 con SQ = 1, 10 oggetti e IOA 2001 porta i valori degli IOA da 2001 a 2010 usando solo 3 byte di indirizzo. Un decodificatore che si aspetta un IOA prima di ogni valore interpreta i byte dei float come indirizzi; tutti i valori dopo il primo risultano errati.
Il bit T segnala un messaggio di prova. Non memorizzare un valore con T = 1 come dato di processo. L'indirizzo dell'originatore identifica la stazione di controllo che ha inviato un comando e vale 0 quando non è utilizzato. Se due centri di controllo condividono una stazione periferica, ciascuno può impostare il proprio indirizzo di originatore. La stazione periferica lo copia nelle conferme, così ogni centro può associarle ai propri comandi.
Una trama sulla linea
Questa trama I IEC 104 trasporta una potenza attiva di 2.340,5 kW dall'indirizzo comune 12, IOA 1001, inviata perché il valore è cambiato:
68 12 00 00 00 00 0D 01 03 00 0C 00 E9 03 00 00 48 12 45 00
| Byte | Campo | Decodifica |
|---|---|---|
| 68 | Byte iniziale | Inizio di una trama IEC 104 |
| 12 | Lunghezza | Seguono 18 byte |
| 00 00 00 00 | Campo di controllo | Formato I, numeri di sequenza di invio e ricezione pari a 0 |
| 0D | Identificazione del tipo | 13, M_ME_NC_1 |
| 01 | Qualificatore di struttura variabile | SQ = 0, 1 oggetto |
| 03 | Causa di trasmissione | 3, spontanea; P/N = 0, T = 0 |
| 00 | Indirizzo dell'originatore | 0, non utilizzato |
| 0C 00 | Indirizzo comune | 12 |
| E9 03 00 | IOA | 1001 (0x0003E9) |
| 00 48 12 45 | Float corto | 0x45124800, 2.340,5 |
| 00 | Descrittore di qualità | 0, nessun indicatore di qualità impostato |
Ogni campo di più byte viene trasmesso con il byte meno significativo per primo. Se un decodificatore legge i campi nell'ordine opposto ottiene l'indirizzo comune 3.072 (0x0C00) e l'IOA 15.270.656 (0xE90300). Interpreta il float come 6,6 × 10⁻³⁹, un valore che uno storico può memorizzare senza segnalare errori. Il convertitore IEEE 754 mostra i byte di qualsiasi valore. La guida a marche temporali e qualità spiega i bit di qualità e la marca temporale.
Identificazione del tipo
Il tipo stabilisce come decodificare gli elementi informativi. La clausola 7.3 di IEC 60870-5-101 definisce ogni tipo. Alcuni tipi comuni:
| Tipo | Nome | Contenuto |
|---|---|---|
| 1 | M_SP_NA_1 | Stato a punto singolo: 0 spento, 1 acceso |
| 3 | M_DP_NA_1 | Stato a doppio punto: 1 spento, 2 acceso, 0 intermedio, 3 indeterminato |
| 9 | M_ME_NA_1 | Valore misurato, normalizzato (16 bit) |
| 11 | M_ME_NB_1 | Valore misurato, scalato (16 bit) |
| 13 | M_ME_NC_1 | Valore misurato, virgola mobile corta (32 bit) |
| 15 | M_IT_NA_1 | Totali integrati (contatori) |
| 30, 31, 36, 37 | M_SP_TB_1, M_DP_TB_1, M_ME_TF_1, M_IT_TB_1 | Tipi 1, 3, 13 e 15 con marca temporale CP56Time2a |
| 45, 46 | C_SC_NA_1, C_DC_NA_1 | Comandi singoli e doppi |
| 50 | C_SE_NC_1 | Comando di setpoint in virgola mobile corta |
| 100 | C_IC_NA_1 | Comando di interrogazione generale |
| 101 | C_CI_NA_1 | Comando di interrogazione dei contatori |
| 103 | C_CS_NA_1 | Comando di sincronizzazione dell'orologio |
Il prefisso M indica dati di monitoraggio inviati dalla stazione periferica. Il prefisso C indica comandi diretti a essa. IEC 104 usa solo la marca temporale CP56Time2a di 7 byte. I tipi IEC 101 con marca temporale CP24Time2a di 3 byte, come 2, 4 e 14, non sono presenti in IEC 104.
I tipi 9 e 11 trasportano un intero con segno a 16 bit, non un valore fisico. Per il tipo 9, dividi l'intero per 32.768 per ottenere una frazione da -1 a +0,99997, poi moltiplicala per il valore di fondo scala. Con un fondo scala di 1.000 kW, il valore grezzo 16.384 equivale a 0,5, cioè 500 kW. Per il tipo 11, l'intero è il valore moltiplicato per un fattore concordato: 2.340,5 kW con fattore 10 vengono trasmessi come 23.405. Nessuno dei due tipi trasporta il proprio fondo scala o fattore. Un ricevitore con il fattore sbagliato produce un numero plausibile ma errato.
Neppure un tipo in virgola mobile trasporta l'unità. Un valore di 2.340,5 nel tipo 13 potrebbe essere in kW, kVA o A. L'unità, la convenzione del segno e il punto di misura devono figurare nell'elenco dei punti concordato tra le parti.
Causa di trasmissione
Cause di trasmissione comuni:
| Causa | Significato |
|---|---|
| 1 | Periodica o ciclica |
| 3 | Spontanea: il valore è cambiato |
| 5 | Richiesta |
| 6 | Attivazione: un comando |
| 7 | Conferma dell'attivazione |
| 8, 9 | Disattivazione e relativa conferma |
| 10 | Termine dell'attivazione: il comando è terminato |
| 11, 12 | Informazione di ritorno causata da un comando remoto o locale |
| 20 | Risposta a un'interrogazione generale della stazione |
| Da 21 a 36 | Risposta a un'interrogazione dei gruppi da 1 a 16 |
| 37 | Risposta a un'interrogazione generale dei contatori, per i totali integrati |
| 44 | Identificazione del tipo sconosciuta |
| 45 | Causa di trasmissione sconosciuta |
| 46 | Indirizzo comune sconosciuto |
| 47 | Indirizzo dell'oggetto informativo sconosciuto |
Leggi la causa insieme al tipo e al bit P/N. La causa 7 con P/N = 1 è una conferma negativa: la stazione periferica ha rifiutato il comando. La guida ai comandi segue un comando attraverso le varie cause.
Indirizzi
Un punto è identificato dall'indirizzo comune e dall'indirizzo dell'oggetto informativo insieme, su una connessione. Il tipo non fa parte dell'indirizzo. L'IOA 1001 può esistere sotto l'indirizzo comune 12 e sotto l'indirizzo 13, oltre che su ogni RTU di un parco impianti. L'indirizzo IP (IEC 104) o l'indirizzo di collegamento (IEC 101) identifica la connessione, non il punto.
Una connessione IEC 104 può servire più indirizzi comuni. Il valore più alto, 65535 con un campo di 2 byte oppure 255 con un campo di 1 byte, è l'indirizzo globale. Una stazione di controllo lo usa per funzioni estese all'intera stazione, come l'interrogazione generale, e ogni indirizzo comune risponde con il proprio indirizzo. Non tutte le funzioni possono usarlo. La stazione periferica lib60870 rifiuta un comando di lettura (tipo 102), un comando di prova (tipi 104 e 107) o un comando di acquisizione del ritardo (tipo 106) inviato all'indirizzo globale, con causa 46.
L'elenco di interoperabilità specifica anche se l'IOA è strutturato o non strutturato. Alcuni strumenti ed elenchi di punti dei fornitori mostrano un IOA strutturato come tre ottetti decimali. L'IOA 1001 è 0x0003E9. Può apparire come 0.3.233 in uno strumento e come 233.3.0 in un altro. Converti entrambi gli elenchi in un unico intero prima di confrontarli.
Esempio di voce in un elenco dei punti:
| Campo | Valore |
|---|---|
| Connessione | RTU della sottostazione A, 10.40.1.20 porta 2404 |
| Indirizzo comune | 12 |
| IOA | 1001 |
| Tipo | 13, M_ME_NC_1 (float corto, senza marca temporale) |
| Significato | Potenza attiva al punto di connessione alla rete |
| Unità e segno | kW, importazione positiva |
| Banda morta | 50 kW |
| Cause attese | 3 (spontanea, quando la variazione supera la banda morta), 20 (interrogazione generale) |
Assegna righe distinte alla potenza misurata, al setpoint di potenza e alla lettura di ritorno del setpoint attivo, anche se i nomi sono simili. La potenza misurata è M_ME_NC_1 nella direzione di monitoraggio. Il setpoint è C_SE_NC_1, tipo 50, nella direzione di comando; la sua conferma arriva sullo stesso IOA con causa 7. La lettura di ritorno del setpoint è un altro punto monitorato, con un IOA proprio.
Verificare il rifiuto oltre all'accettazione
Durante la messa in servizio verifica almeno un punto per ogni tipo presente nell'elenco dei punti. Confronta il tipo decodificato, l'indirizzo comune, l'IOA, la causa, l'unità e il valore con l'elenco concordato.
Poi collega un simulatore di stazione master IEC 104 al posto del sistema di controllo e invia comandi che la stazione periferica deve rifiutare. Esegui queste prove durante il collaudo, prima che la stazione periferica comandi l'impianto in esercizio.
- Invia un tipo di comando non supportato dalla stazione periferica. Attendi la causa 44.
- Invia un comando supportato con causa 3 invece di 6. Attendi la causa 45.
- Invia un comando a un indirizzo comune non servito. Attendi la causa 46.
- Invia un comando a un IOA non configurato. Attendi la causa 47.
Una stazione periferica che risponde restituisce la richiesta con la nuova causa e il bit P/N impostato. Il comportamento con un indirizzo comune sconosciuto varia. La stazione periferica lib60870 restituisce la causa 46 solo se l'applicazione comunica alla libreria quali indirizzi comuni esistono. Alcune stazioni scartano la richiesta e non rispondono. Registra il risultato atteso di ogni caso nell'elenco di interoperabilità e conserva insieme la revisione dell'elenco dei punti e i risultati delle prove.
Telecontrollo e sistemi EpiSensor
Edge non implementa IEC 60870-5-101 né IEC 60870-5-104. In un sito con un collegamento di telecontrollo, la RTU o il gateway di sottostazione trasporta i punti del gestore di rete e un sistema EpiSensor misura il sito a valle. La guida a IEC 101 e 104 spiega dove si trova questo confine.
Domande frequenti
Che cos'è un'ASDU in IEC 60870-5-104?
L'unità dati del servizio applicativo è la parte del messaggio che trasporta dati di telecontrollo. Inizia con un identificatore dell'unità dati (tipo, qualificatore di struttura variabile, causa di trasmissione, indirizzo dell'originatore e indirizzo comune), seguito da uno o più oggetti informativi con indirizzo e valore.
Che cosa significa la causa di trasmissione 3?
Spontanea: la stazione periferica ha inviato il valore perché è cambiato. La causa 20 indica una risposta a interrogazione generale e la causa 1 una trasmissione periodica o ciclica.
Che cos'è un IOA in IEC 104?
L'indirizzo dell'oggetto informativo è un numero di 3 byte che identifica un punto o una funzione all'interno di un indirizzo comune. Viene trasmesso con il byte meno significativo per primo: l'IOA 1001 appare sulla linea come E9 03 00. Lo stesso IOA può esistere sotto un altro indirizzo comune o su un'altra connessione.
Che cos'è M_ME_NC_1?
È l'identificazione del tipo 13: un valore misurato in virgola mobile corta (32 bit), con un descrittore di qualità e senza marca temporale. La stessa misura con una marca temporale CP56Time2a è M_ME_TF_1, tipo 36.