les registres AR1 et AR2

Forum traitant des automates industriels de marque Siemens.
Répondre
Wow400
Première mise en service
Première mise en service
Messages : 59
Enregistré le : 01 oct. 2019, 16:23

les registres AR1 et AR2

Message par Wow400 »

Bonjour à tous.
J'aurai voulu que quelqu’un m'explique les registres d' adresse AR1 AR2
Qu'est ce que c'est ?
endroit de stockage d'adresse ?
Si je peux avoir une explication simple ce serait génial enfin si c'est possible. :D
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: les registres AR1 et AR2

Message par philou77 »

Salut !

Ces registres sont utilisés pour accéder à n'importe quel endroit dans l'automate (n'importe quel type de variable) avec une seule instruction !

si tu dois faire un travail successif avec des données qui changent à chaque fois d'emplacement (lire un tableau par exemple)
Pour une valeur qui change sur un machine pour chaque type de fabrication
- ou tu programmes chaque lecture à la main
(Autant de lignes que de types, si un nouveau type apparait , il faudra le programmer ou prévoir de la réserve)
Si type 1 - > Charger ligne n°1
Si type 2 - > Charger ligne n°2
Si type 3 - > Charger ligne n°3
etc...


Ou tu utilise un pointeur (AR1 ou AR2)
(Ici 2 lignes quelque soit le nombre de type différents)

Charger Pointeur (en fait ce sera le N° de Type)
Charger Ligne n°[Pointeur] (on charge la ligne tableau que pointe le Type )

Ca s'appelle de l'adressage indexé (ou indirect)
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Wow400
Première mise en service
Première mise en service
Messages : 59
Enregistré le : 01 oct. 2019, 16:23

Re: les registres AR1 et AR2

Message par Wow400 »

merci d'avoir pris le temps de répondre.
De ce que je comprends AR1 AR2 sont des paramètres conçus pour faciliter l'indexage ou adressage indirect.
Si on prends un exemple.
Un tableau de recette.
ExerciceAR1AR2.PNG
On crée un Db global avec les paramètres de la recette qui seront utilisé dans le programme.
Un bout de programme tout simple qui vient comparer la valeur analogique avec la valeur inséré dans le DB.
progAR1AR2.PNG
Maintenant comment ferais tu en fonction de la recette choisi pour insérer les valeurs de mon tableau dans les paramètres de mon DB avec AR1 et AR2.
Je suis désolé j'ai lu plein de truc à gauche à droite mais pas assez clair il faut comprendre la notion de pointer, d'accu , le list ect.
Avec cet exemple peut être je comprendrais mieux.

Par contre AR1,AR2 ou pas il faut quand même écrire une ligne avec les paramètres pour la recette ?
Mais cela diminue la taille du programme je suppose.

Merci encore pour l'aide je sais que j'en demande beaucoup. :D
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: les registres AR1 et AR2

Message par philou77 »

Salut

Dans ton exemple
- Chaque recette utilise 10 mots

1ere Recette (N°0) de DBW0 à DBW8
2eme Recette (N°1) de DBW10 à DBW18
3eme Recette (N°2) de DBW20 à DBW28
4eme Recette (N°3) de DBW30 à DBW38
5eme Recette (N°4) de DBW40 à DBW48

L P#0.0
L AR1 (préparer le pointeur à l'adresse 0.0)
L NumRecette
L 20 (10 mots = 20 Octets)
*I
SLD 3 (revient à multiplier par 8 car on ajoute la valeur en nombre de bits)
+AR1 (Adresse de la première valeur à lire 0, 10, 20, 30, 40)

ADB 2 (ouvrir db global si pas ouvert)
L DW [AR1,P#0.0] (charger le dw contenu à l'adresse de AR1 avec le décalage 0.0)
T MW 0
L DW [AR1, P#2.0] (charger le dw contenu à l'adresse de AR1 avec le décalage 2.0)
T MW 2
L DW [AR1, P#4.0] (charger le dw contenu à l'adresse de AR1 avec le décalage 4.0)
T MW 4
L DW [AR1, P#6.0] (charger le dw contenu à l'adresse de AR1 avec le décalage 6.0)
T MW 6
L DW [AR1, P#6.0] (charger le dw contenu à l'adresse de AR1 avec le décalage 8.0)
T MW 8


Ca devrait fonctionner, j'ai pas pu tester avant de poster
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Wow400
Première mise en service
Première mise en service
Messages : 59
Enregistré le : 01 oct. 2019, 16:23

Re: les registres AR1 et AR2

Message par Wow400 »

Merci, je commence à comprendre.
J'ai trouvé ça sur un autre post
AR1.PNG
Donc on a un registre zone mémoire conçu pour enregistré une adresse soit en intrazone soit interzone.

Si je reviens à mon exemple :
Si je prends la recette 1

L P#0.0
Je charge la valeur du pointer 0.0 dans l'ACCU1 soit 0.0 dans ACCU1(zone mémoire permettant d'effectuer des calculs)
LAR1
Je charge la valeur de l'ACCU1 dans AR1 soit 0.0 dans AR1
L 1
Je charge 1 dans ACCU1 (le numéro de la recette 1 si j'ai choisi la 1)
L 20
Je charge 20 dans ACCU1 (20 octets)

Déjà là je comprends pas je charge 1 il comprend 1 ?
je charge 20 il comprend 20 octet ?
Ensuite le *I ???????????????????????????????????????????????????????????????????????????????????????
Le SLD 3 j'ai vu sur un de tes anciens post, décalage de 3 bits à droite donc je suppose que c'est pareil
SLD3.PNG
Continuons
+AR1 10
10 car je suis sur la recette 1. J'ajoute 10 à 0.0 pour créer la première valeur à lire mais j'écris 10 ou 10.0 ? De plus on est pas en automatique comment il sait la valeur à ajouté ? là c'est moi qui la rentre

Vous voyez j'ai pas compris grand chose sur la première partie. :lol:
Par contre la deuxième partie me parait plus simple je pense avoir compris.
Si tu peux insister sur le début que je puisse déchiffrer ce serait super.
Merci :D
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: les registres AR1 et AR2

Message par philou77 »

Salut !

Pas facile a comprendre mais chez siemens, les registres d'adresses ne fonctionnent qu'en ''Octet . Bit''
P# 0.(0 à 7) est correct
P# 0.8 est incorrect car un octet ne contient QUE 8 bits (de 0 à 7)
Donc P# 0.8 est en fait P# 1.0

Petit Rappel
1 Bit est la plus petite information
1 Octet = 8 Bits
1 Mot = 2 Octets = 16 Bits
Mot double = 2 mots = 4 octets = 32 bits

Autre rappel
Le fonctionnement des accumulateurs Accu 1 et Accu 2 chez siemens
quand tu écris L NumRecette
- Le contenu de l'accu 1 est recopié dans accu 2
- Le numrecette et copié dans accu 1
quand tu écris L 20
- Le contenu de l'accu 1 est recopié dans accu 2 (donc dans accu 2 il y a NumRecette)
- Le 20 et copié dans accu 1
*I
- Le contenu de l'accu1 est multiplié par le contenu de l'accu 2
- Le contenu de l'accu 1 est recopié dans accu 2 (donc dans accu 2 il y a 20)
- Le résultat de l'opération est copié dans l'accu 1



L NumRecette (Recette de 1 à 5 soit valeurs de 0 à 4)
L 20 ( chaque recette fait 10 mots soit 20 Octets !!)
*I ( Multiplier la valeur de recette (0 à 4) par le nombre d'octets !
SLD 3 ( Décaler de 3 positions - revient à multiplier par 8 - le résultat de la multiplication)
+AR1 (Ajouter le résultat - en bit - au registre d'adresse 1)


Recette 1 la Valeur NumRecette est 0
(0x20)x8= 0 (soit AR1= 0.0)
Recette 2 - la Valeur NumRecette est 1
(1*20)x8= 160 bits (soit AR1= 10.0 )
Recette 3 la Valeur NumRecette est 2
(2*20)x8 = 320 (soit AR1= 20.0 )

Etc...

Donc arrange toi pour avoir la valeur 0 dans numrecette quand tu es sur la recette 1
Soit directement, soit en retirant 1 avant de calculer l'index

0 , c'est pas rien en informatique !

- tu ecris '+AR1' et c'est tout !
ça veut dire Ajouter à AR1 le contenu de l'accu 1 (lequel est calculé juste avant !)
L'opération se débrouille toute seule pour avoir un registre correct...
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Wow400
Première mise en service
Première mise en service
Messages : 59
Enregistré le : 01 oct. 2019, 16:23

Re: les registres AR1 et AR2

Message par Wow400 »

C'est trop génial avec tout ces détails j'ai presque tout compris reste un truc.
+AR1 (Ajouter le résultat - en bit - au registre d'adresse 1)


Recette 1 la Valeur NumRecette est 0
(0x20)x8= 0 (soit AR1= 0.0)
Recette 2 - la Valeur NumRecette est 1
(1*20)x8= 160 bits (soit AR1= 10.0 )
Recette 3 la Valeur NumRecette est 2
(2*20)x8 = 320 (soit AR1= 20.0 )
AR1 est additionner à l'ACCU1
AR1 0.0 + 160 bits je vois pas comment ça peut faire 10.0
0.0 Octet 1 soit +8 pour 1.0 Octet 2
+8 bits octet 1.0
+16 bits octet 2.0
+24 bits octet 3.0
+32 bits octet 4.0
ect
+64 octet 8.0
+72 octet 9.0
+80 octet 10.0

Et 10.0 est utilisé pour aller sur DB2.DBW10
DBW10qui est fait de l'octet 10 et 11 chez siemens.

Bref une fois de plus je crois que je suis un peu lent :D
mais tout le reste est très clair t inkiet :lol:
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: les registres AR1 et AR2

Message par philou77 »

Re !

Je crois avoir fait une erreur...

Tes recettes font 5 mots soit 10 Octets
%MW0
%MW2
%MW4
%MW6
%MW8

Alors il faut multiplier par 10 et pas par 20.

Sinon, Le reste est bon... et apparemment, tu as compris le principe !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Wow400
Première mise en service
Première mise en service
Messages : 59
Enregistré le : 01 oct. 2019, 16:23

Re: les registres AR1 et AR2

Message par Wow400 »

Merci beaucoup,
c'est énorme le temps que tu as pris pour m'expliquer tout ça.
Vous êtes vraiment super sur ce forum.
J'ai tout bien compris plus qu' à récapituler tout ça pour pouvoir assimiler.
Merci encore.
J'ai plein d'autres questions alors je vais ouvrir d'autres posts. :D
Répondre