Lecture/écriture de données acycliques via PROFIBUS DP V1
Présentation
Pour les accès acycliques DP V1, un mécanisme basé sur l’emplacement/index et l’adressage de longueur est mis en œuvre dans le contrôleur LTMR.
L’accès aux variables se fait tous les 10 registres. Vous ne pouvez pas accéder aux registres situés entre deux sous-groupes. Si l’accès est impossible, aucun accès aux registres n’a lieu et une valeur d’erreur détectée (par exemple, « tous les registres n’ont pas été trouvés ») est renvoyée via DP V1.
Lecture de données acycliques (DS_Read)
Avec la fonction
DS_Read
, le primaire PROFIBUS DP peut lire les données du secondaire.
Le tableau suivant illustre le contenu d’une trame DS_Read.
|
Octet |
Syntaxe |
|---|---|
|
0 [Numéro de fonction] |
0x5E [fonction |
|
1 [Numéro d’emplacement] |
Valeur constante = 1 |
|
2 [Index] |
Adresse du registre / 10 L’accès courant aux registres se fait tous les 10 registres. L’index est toujours arrondi à l’entier inférieur. |
|
3 [Longueur] |
Longueur des blocs de données en octets (Nombre de registres) x 2 Nombre maximal de registres = 20 (40 octets) La longueur peut être comprise entre 2 et 40 octets. |
|
4 à (longueur + 3) |
Octets de blocs de données à lire. |
Exemple DS_Read
Exemple : lecture des registres d’identification 50 à 62
|
Octet |
Valeur |
|---|---|
|
0 [Numéro de fonction] |
0x5E [fonction |
|
1 [Numéro d’emplacement] |
1 |
|
2 [Index] |
5 [50/10] |
|
3 [Longueur] |
26 [(50 à 62 = 13) x 2] |
|
4 à 29 |
Valeur des registres 50 à 62 |
Envoi de données acycliques (DS_Write)
Avec la fonction
DS_Write
, le primaire PROFIBUS DP peut envoyer les données du secondaire.
Avant d’écrire un bloc de données, il est conseillé d’en lire un afin de protéger les données non concernées. La totalité du bloc sera écrite uniquement si vous possédez des droits d’écriture, qui seront vérifiés dans chaque tableau de registres de la section Groupes de variables de communication. L’en-tête de la troisième colonne indique les variables en lecture seule ou en lecture/écriture.
Le tableau suivant illustre le contenu d’une trame DS_Write.
|
Octet |
Syntaxe |
|---|---|
|
0 [Numéro de fonction] |
0x5F [fonction |
|
1 [Numéro d’emplacement] |
Valeur constante = 1 |
|
2 [Index] |
Adresse du registre / 10 L’accès courant aux registres se fait tous les 10 registres. L’index est toujours arrondi à l’entier inférieur. |
|
3 [Longueur] |
Longueur des blocs de données en octets (Nombre de registres) x 2 Nombre maximal de registres = 20 (40 octets) La longueur peut être comprise entre 2 et 40 octets. |
|
4 à (longueur + 3) |
Octets de blocs de données à écrire. |
Exemple DS_Write : Description du processus
Exemple : Réarmement d’un déclenchement en définissant le bit 704.3 sur 1
1. Lire 700 à 704.
|
Octet |
Valeur |
|---|---|
|
0 [Numéro de fonction] |
0x5E [fonction |
|
1 [Numéro d’emplacement] |
1 |
|
2 [Index] |
70 [700/10] |
|
3 [Longueur] |
10 [(700 à 704 = 5) x 2] |
|
4 à 13 |
Valeurs courantes des registres 700 à 704 |
2. Définition du bit 3 du registre 704 à 1
3. Ecriture des registres 700 à 704
|
Octet |
Valeur |
|---|---|
|
0 [Numéro de fonction] |
0x5F [fonction |
|
1 [Numéro d’emplacement] |
1 |
|
2 [Index] |
70 [700/10] |
|
3 [Longueur] |
10 [(700 à 704 = 5) x 2] |
|
4 à 13 |
Nouvelles valeurs des registres 700 à 704 |
Réponse en cas d’erreur détectée
Si l’accès est impossible, aucun accès aux registres n’a lieu et une valeur d’erreur détectée est renvoyée via DP V1.
Si une erreur est détectée, les 4 premiers octets de la réponse envoyée au DP sont les suivants :
|
Octet |
Valeur |
Signification |
|---|---|---|
|
0 |
0xDE/ 0xDF |
pour DS_Read / DS_Write |
|
1 |
0x80 |
indiquant DP V1 |
|
2 |
0xB6 |
classe d’erreur détectée + code d’erreur détectée 1 = accès refusé |
|
3 |
0xXX |
code d’erreur détectée 2, spécifique au LTMR (voir le tableau suivant) |
Voici le code d’erreur détectée 2, spécifique au LTMR :
|
Code d’erreur détectée 2 |
Signification |
|---|---|
|
01 |
Demande de pile interne complète |
|
03 |
Registre non géré ou droits d’accès de superutilisateur requis |
|
06 |
Registre défini mais non écrit |
|
07 |
Tous les registres n’ont pas été trouvés |
|
08 |
Interdiction d’écrire dans les registres |
|
10 |
Valeur écrite en dehors de la plage du registre, valeur du mot trop élevée |
|
11 |
Valeur écrite en dehors de la plage du registre, valeur du mot trop faible |
|
12 |
Valeur écrite en dehors de la plage du registre (valeur MSB trop élevée) |
|
13 |
Valeur écrite en dehors de la plage du registre (valeur MSB trop faible) |
|
14 |
Valeur écrite en dehors de la plage du registre (valeur LSB trop élevée) |
|
15 |
Valeur écrite en dehors de la plage du registre (valeur LSB trop faible) |
|
16 |
Valeur écrite non valide |
|
20 |
Refus du module, retourne une trame d’erreur détectée |
|
255 |
Erreur interne détectée |
La présentation d’un code d’erreur détectée et d’une classe d’erreur détectée à la logique de l’utilisateur dépend de la mise en œuvre du primaire (par exemple, l’automate).
Ce mécanisme permet uniquement d’accéder aux blocs de paramètres commençant par un paramètre dédié (adresse MB), ce qui signifie que l’accès a également lieu pour les paramètres inutilisés (adresses MB). La valeur lue à partir de ces paramètres est 0x00 ; mais en cas d’écriture, il n’est pas nécessaire d’écrire la valeur 0x00 dans ces paramètres. Sinon, l’accès en écriture totale sera refusé.
Registres internes TeSys T
Pour plus d’informations sur les registres internes TeSys T, reportez-vous à la section Communication Variables tables.