Exemple de fonctions de communication
(Traduction du document original anglais)
Présentation
Vous pouvez accéder aux SDO en utilisant les fonctions de communication READ_VAR et WRITE_VAR.
Trois représentations sont possibles :
Représentation en FBD
Les représentations en FBD des fonctions de communication sont les suivantes :
Représentation en Ladder
Les représentations en Ladder des fonctions de communication sont les suivantes :
Représentation en IL
La fonction de communication respecte la syntaxe suivante :
ADDM(
IN := '0.0.2.2'
)
ST %MW2100:8
LD 50
ST %MW2182 (* Timeout 5 secondes *)
LD 2
ST %MW2183 (* Longueur *)
(* Lire l'objet « ID vendeur », esclave @2, réseau CANopen *)
READ_VAR (
ADR := %MW2100:8,
OBJ := 'SDO',
NUM := 16#00011018,
NB := 0,
GEST := %MW2120:4,
RECP := %MW2110:4
)
(* Ecrire la valeur 16#FFFF, sorties esclave @2, réseau CANopen *)
LD 16#ffff
ST %MW2200
WRITE_VAR (
ADR := %MW2100:8
OBJ := 'SDO',
NUM := 16#00016300,
NB := 0,
EMIS := %MW2200:1,
GEST := %MW2180:4
)
NOTE : le paramètre offset doit être réglé sur 0.
NOTE : le paramètre subindex : index est codé dans un mot simple (subindex est l'octet de poids fort).
Description des paramètres de la fonction WRITE_VAR
Le tableau suivant décrit les différents paramètres de la fonction WRITE_VAR :
Paramètre
Description
ADDM('r.m.c.node')
Adresse de l'entité destinataire de l'échange :
  • r : numéro de rack du processeur
  • m : emplacement du processeur dans le rack (0)
  • c : voie (n'utilisez que la voie 2 pour CANopen)
  • node : identifiant de l'équipement émetteur sur le bus CANopen
'SDO'
Type d'objet SDO.
subindex:index
Mot double ou valeur immédiate identifiant l'index ou le sous-index du SDO CANopen :
Le mot de poids fort du mot double contient le sous-index, tandis que le mot de poids faible contient l'index.
Exemple : si vous utilisez le mot double subindex:index :
  • les 16 bits de poids fort contiennent le sous-index ;
  • les 16 bits de poids faible contiennent l'index.
EMIS
Table de mots contenant la donnée SDO à envoyer (%MW200:2).
Le buffer de réception de la fonction WRITE_VAR doit être supérieur au SDO. La longueur du SDO est indiquée dans la documentation de l'équipement.
GEST
Table de mots avec 4 entrées (%MW210:4).
Description des paramètres de la fonction READ_VAR
Le tableau suivant décrit les différents paramètres de la fonction READ_VAR :
Paramètre
Description
ADDM('r.m.c.node')
Adresse de l'entité destinataire de l'échange :
  • r : numéro de rack du processeur
  • m : emplacement du processeur dans le rack (0)
  • c : voie (n'utilisez que la voie 2 pour CANopen)
  • node : identifiant de l'équipement destinataire sur le bus
'SDO'
Type d'objet SDO.
subindex:index
Mot double ou valeur immédiate identifiant l'index ou le sous-index du SDO CANopen :
Le mot de poids fort du mot double contient le sous-index, tandis que le mot de poids faible contient l'index.
Exemple : si vous utilisez le mot double subindex:index :
  • les 16 bits de poids fort contiennent le sous-index ;
  • les 16 bits de poids faible contiennent l'index.
GEST
Table de mots avec 4 entrées (%MW210:4).
RECP
Table de mots avec au moins une entrée pour recevoir la donnée SDO reçue (%MW200:16).
Le buffer de réception de la fonction READ_VAR doit être supérieur au SDO. La longueur du SDO est indiquée dans la documentation de l'équipement.
Description des mots du bloc de commande
Le tableau ci-après décrit les différents mots du bloc de commande :
Champs
Mot
Type
Description
Octet de commande
0 (poids faible)
BYTE
Bit 0 = bit d'activité
Bit 1 = bit d'annulation
ID échange
0 (poids fort)
BYTE
Numéro unique, identifiant de l'échange
ComState
1 (poids faible)
BYTE
0x00 = Echange terminé
0x01 = Timeout
0x02 = Echange annulé par l'utilisateur
0x03 = Format d'adresse incorrect
0x04 = Adresse de destination incorrecte
0x06 = Paramètres Com Fb incorrects
0x07 = Interruption d'émission générique
0x09 = Buffer de réception insuffisant
0x0B = Pas de ressources système
0xFF = Erreur d'échange réseau
ExchState
1 (poids fort)
BYTE
Si ComState = 0x00
0x00 : Requête traitée
0x01 : Traitement impossible
0x02 : Réponse incorrecte
Si ComState = 0xFF
0x07 : Erreur détectée - Echange générique
0x0B : Ressources insuffisantes sur l'équipement destinataire
0x0D : Impossible d'atteindre l'équipement
0x2B : Erreur détectée - Echange SDO
Timeout
2
WORD
Valeur timeout (x 100 ms)
Longueur
3
WORD
Longueur en octets
Exemple en langage ST
(* Lire le SDO du nœud 5, index 1 018, sous-index 3 *)
if (%M400) then
subindex_index := 16#00031018 ;
%MW1052 := 50; (* timeout 5 secondes *)
READ_VAR(ADDM('0.0.2.5'),'SDO',subindex_index,0,%MW1050:4,%MW1100:2);
%M400:= 0;
end_if;
(* Ecrire le SDO du nœud 31, index 203C, sous-index 2 *)
if (%M401) then
subindex_index := 16#0002203C;
%MW1152 := 50; (* Timeout 5 secondes *)
%MW1153 := 2; (* Longueur 2 octets *)
%MW1200 := 16#03E8; (* Valeur de l'objet *)
WRITE_VAR(ADDM('0.0.2.31'),'SDO',subindex_index,0, %MW1200:1,%MW1150:4);
%M401:= 0;
end_if;