Lettura/scrittura dati aciclici tramite PROFIBUS DP V1
Panoramica
Per l'accesso aciclico DP V1, nel controller LTMR è implementato un meccanismo basato su slot/indice e indirizzamento lunghezza.
L'accesso alle variabili avviene ogni 10 registri. Non è possibile accedere ai registri che si trovano tra due sottogruppi. Se l'accesso è impossibile, non è possibile accedere ad alcun registro e viene restituito un valore di errore rilevato (es. "impossibile trovare tutti i registri") tramiteDP V1.
Lettura dei dati aciclici (DS_Read)
Con la funzione
DS_Read
, il PROFIBUS
DP principale può leggere i dati dal secondario. La tabella
seguente illustra il contenuto di un frame DS_Read.
Byte |
Sintassi |
---|---|
0 [numero funzione] |
0x5E [Funzione |
1 [numero slot] |
Valore costante = 1 |
2 [indice] |
Indirizzo registro / 10 L'accesso comune ai registri avviene ogni 10 registri. L'indice è sempre arrotondato per difetto al numero intero. |
3 [lunghezza] |
Lunghezza dei blocchi di dati in byte (Numero di registri) x 2 Numero massimo dei registri = 20 (40 byte) È possibile qualsiasi lunghezza compresa tra 2 e 40 byte. |
da 4 a (lunghezza + 3) |
Blocco di byte di dati da leggere. |
DS_Read Esempio
Esempio: Lettura dei registri di identificazione da 50 a 62
Byte |
Valore |
---|---|
0 [numero funzione] |
0x5E [Funzione |
1 [numero slot] |
1 |
2 [indice] |
5 [50/10] |
3 [lunghezza] |
26 [(da 50 a 62 = 13) x 2] |
Da 4 a 29 |
Valore dei registri da 50 a 62 |
Invio di dati aciclici (DS_Write)
Con la funzione
DS_Write
, il PROFIBUS
DP principale può inviare dati a quello secondario.
Prima di scrivere un blocco di dati si raccomanda di procedere alla sua lettura, in modo da proteggere i dati che non vengono coinvolti dal processo di scrittura. L'intero blocco verrà scritto solo se si dispone dell'autorizzazione di scrittura, da verificare all'interno di ciascuna tabella dei registri nella sezione Gruppi di variabili di comunicazione. Le intestazioni della colonna 3 indicano se le variabili in ciascuna tabella sono di sola lettura o lettura/scrittura.
La tabella seguente illustra il contenuto di un frame DS_Write.
Byte |
Sintassi |
---|---|
0 [numero funzione] |
0x5F [funzione |
1 [numero slot] |
Valore costante = 1 |
2 [indice] |
Indirizzo registro / 10 L'accesso comune ai registri avviene ogni 10 registri. L'indice è sempre arrotondato per difetto al numero intero. |
3 [lunghezza] |
Lunghezza dei blocchi di dati in byte (Numero di registri) x 2 Numero massimo dei registri = 20 (40 byte) È possibile qualsiasi lunghezza compresa tra 2 e 40 byte. |
da 4 a (lunghezza + 3) |
Blocco di byte di dati da scrivere. |
DS_Write Esempio: Descrizione del processo
Esempio: Reimpostazione di un disinnesto impostando il bit 704.3 a 1
1. Leggere 700 con 704.
Byte |
Valore |
---|---|
0 [numero funzione] |
0x5E [Funzione |
1 [numero slot] |
1 |
2 [indice] |
70 [700/10] |
3 [lunghezza] |
10 [(da 700 a 704 = 5) x 2] |
Da 4 a 13 |
Valore corrente dei registri da 700 a 704 |
2. Impostazione del bit 3 del registro 704 a 1.
3. Scrittura dei registri da 700 a 704.
Byte |
Valore |
---|---|
0 [numero funzione] |
0x5F [funzione |
1 [numero slot] |
1 |
2 [indice] |
70 [700/10] |
3 [lunghezza] |
10 [(da 700 a 704 = 5) x 2] |
Da 4 a 13 |
Nuovo valore dei registri da 700 a 704 |
Feedback in caso di errore rilevato
Se l'accesso non è possibile, non è possibile accedere ad alcun registro e viene restituito un valore di errore rilevato tramite DP V1.
I primi 4 byte della risposta su DP in caso di errore rilevato sono:
Byte |
Valore |
Significato |
---|---|---|
0 |
0xDE/ 0xDF |
per DS_Read / DS_Write |
1 |
0x80 |
indicazione DP V1 |
2 |
0xB6 |
classe di errore rilevata + codice di errore rilevato 1 = accesso negato |
3 |
0xXX |
codice di errore rilevato 2, LTMR specifico (vedere tabella seguente) |
Segue il codice di errore rilevato 2, LTMR specifico:
Codice di errore rilevato 2 |
Significato |
---|---|
01 |
Stack interno richieste pieno |
03 |
Registro non gestito o necessità di diritti di accesso da superutente |
06 |
Registro definito ma non scritto |
07 |
Impossibile trovare tutti i registri |
08 |
Registri non autorizzati alla scrittura |
10 |
Valore scritto fuori dal range del registro, valore parola troppo ampio (troppo alto) |
11 |
Valore scritto fuori dal range del registro, valore parola troppo piccolo (troppo basso) |
12 |
Valore scritto fuori dal range del registro, (valore MSB troppo ampio) |
13 |
Valore scritto fuori dal range del registro, (valore MSB troppo piccolo) |
14 |
Valore scritto fuori dal range del registro, (valore LSB troppo ampio) |
15 |
Valore scritto fuori dal range del registro, (valore LSB troppo piccolo) |
16 |
Valore scritto non valido |
20 |
Rifiuto da parte del modulo, restituzione di un frame di errore rilevato |
255 |
Errore interno rilevato |
Il tipo di codice e classe di errore rilevato presentati alla logica utente dipendono dall'implementazione del primario (ad esempio il PLC).
Il meccanismo accede solo a blocchi di parametri che iniziano ad un parametro dedicato (indirizzo MB). Questo significa che si accede anche a parametri (indirizzi MB) non utilizzati. Il valore dei dati letti da questi parametri è 0x00. In caso di scrittura, è necessario scrivere su questi parametri il valore 0x00. Diversamente l'accesso in scrittura verrà negato.
Registri interni TeSys T
Per maggiori dettagli sui registri interni TeSys T, consultare Communication Variables tables.