Vous êtes sur la page 1sur 28

1

5 Instructions Complexes
a / Opérations List. - Page: 02 à 05
b / Opérations de calculs. - Page: 06 à 07
c / Gestions Programme et Décalage. - Page: 08 à 109

d / Opérations sur Mots. - Page: 10 à 10

e / Opérations sur l’accumulateur. - Page: 11 à 14

f / Chargement / transfert. - Page: 15 à 15

g / Le Mot d’état. - Page: 16 à 17

h / Adressage Indirect. - Page: 18 à 28

Aforest PH.Février/05 Maintenance S7 T 104 264 20


a/ Opérations List Le Combinatoire sur Bits... 2

Instructions logiques:
z O( OU d’une expression
z O OU
z ON OU NON
z ON( OU PAS d’une expression.
z U( ET d’une expression
z U ET
z UN ET NON
z UN( ET PAS d’une expression
z X( OU EXCLUSIF d’une expression
z X OU EXCLUSIF
z XN OU EXCLUSIF NON
z XN( OU NON EXCLUSIF d’une expression
z ) Fermer la parenthèse d’une expression.

Instructions et RLG: Sorties et RLG:


z CLR: Mettre le RLG à 0. z = Mettre à 1.
z SET: Mettre le RLG à 1. z R Mettre à 0 sur front
z SAVE: Sauver le RLG dans le RB. z S Mettre à 1 sur front
z NOT: Inversion du RLG.
z FN: Front Descendant.
z FP: Front Montant.
a/ Opérations List LES CONVERTIONS ... 3

Instructions Conversion, inversion,…:


z BTI :BCD_I : Convertir un nombre DCB en un entier de 16 bits.
z ITB :I_BCD : Convertir un entier de 16 bits en un nombre DCB.
z ITD :I_DI : Convertir un entier de 16 bits en un nombre entier de 32 bits.
z BTD :BCD_DI: Convertir un nombre DCB en un entier de 32 bits.
z DTB :DI_BCD: Convertir un nombre entier de 32 bits en un nombre DCB.
z DTR :DI_R : Convertir un nombre entier de 32 bits en un nombre réel.
z INVI :INV_I : Complément à 1 d’un entier de 16 bits.
z INVD :INV_DI: Complément à 1 d’un entier de 32 bits.
z NEGI :NEG_I : Complément à 2 d’un entier de 16 bits.
z NEGD :NEG_DI: Complément à 2 d’un entier de 32 bits.
z NEGR :NEG_R : Inverser le signe d’un réel.
z RND :ROUND: Arrondir le nombre.
z TRUNC :TRUNC : Former un nombre entier.
z RND+ :OEIL : Arrondir à l’entier supérieur.
z RND- :FLOOR : Arrondir à l’entier inférieur.

EN CONT EN LIST

Rq :
a/ Opérations List Les Blocs de Données 4

Instructions Appel, chargement,…


z AUF: Ouvrir un bloc de données.
z L DBLG: Charger longueur de DB global dans l’accumulateur 1.
z L DBNO: Charger le numéro de DB global dans l’accumulateur 1.
z L DILG: Charger longueur de DB d’instance dans l’accumulateur 1
z L DINO: Charger le numéro de DB d’instance dans l’accumulateur 1
z TDB: Permuter le DB global et le DB d’instance.

Exemple:
AUF DB 10 // Ouvrir le bloc de données DB10 comme bloc de données global.
L DBW 35 // Charger dans l’accumulateur 1-L la valeur du mot DBW35
T MW 22 // Transférer le contenu de l’accumulateur dans la mémoire MW22.

AUF DI 20 // Ouvrir le bloc DB20 comme bloc de données d’instance.


L DIB 12 // Charger dans l’ACCU 1-L l’octet DIB12 du DB d’instance ouvert.
T DBB 37 // Transfert le contenu de l’ACCU 1-L dans l’octet 37 du DB global
ouvert.
a/ Opérations List Les Opérations de Sauts 5

Instructions de saut,…
z LOOP: Boucle de programme.
z SPA: Saut Inconditionnel.
z SPB: Saut si le RLG=1 (Conditionnel).
z SPBB: Saut si le RLG=1 avec RB (Conditionnel).
z SPBI: Saut si le RB=1 (Conditionnel).
z SPBIN: Saut si le RB=0 (Conditionnel).
z SPBN: Saut si le RLG=0 (Conditionnel).
z SPBNB: Saut si le RLG=0 avec RB (Conditionnel).
z SPL: Saut vers liste (Conditionnel).
z SPM: Saut si moins (Conditionnel).
z SPMZ: Saut si <= 0 (Conditionnel).
z SPN: Saut si différent de 0 (Conditionnel).
z SPO: Saut si DEB =1 (Conditionnel).
z SPP: Saut si Plus (Conditionnel).
z SPPZ: Saut si >= 0 (Conditionnel).
z SPS: Saut si DM = 1 (Conditionnel).
z SPU: Saut si Illicite (Conditionnel).
z SPM: Saut si moins (Conditionnel).
z SPZ: Saut si = 0 (Conditionnel).

Rq : RB et DM sont des bits qui proviennent du mot d’état.


b/ Calcul NOMBRES ENTIERS 6

Opérations Arithmétiques
z + I :ADD_I : Addition de deux nombres entiers de 16 bits.
z - I :SUB_I : Soustraction de deux nombres entiers de 16 bits.
z * I :MUL_I : Multiplication de deux nombres entiers de 16 bits.
z / I :DIV_I : Division de deux nombres entiers de 16 bits.
z + D :ADD_DI: Addition de deux nombres entiers de 32 bits.
z - D :SUB_DI: Soustraction de deux nombres entiers de 32 bits.
z * D :MUL_DI: Multiplication de deux nombres entiers de 32 bits.
z / D :DIV_DI: Division de deux nombres entiers de 32 bits.
z MOD :MOD_DI: Reste de division (32 bits).

Exemple en LIST:
U E 0.0 // Si l’entrée est activée.
L MW 100 // Charger dans ACCU 1-L la valeur du mot MW100
L MW 102 // Charger dans ACCU 1-L la valeur du mot MW102
// L’ancien contenu de l’ACCU1 est chargé dans l’ACCU2.
* I // Multiplication de ACCU2 avec ACCU1, résultat dans ACCU1
T MW 104 // Charger la valeur de l’ACCU1 vers la mémoire MW104.

Exemple en CONTACT:
b/ Calcul NOMBRES REELS 7

Opérations Arithmétiques et trigonométriques:


z + R :ADD_R : Addition de deux nombres réels.
z - R :SUB_R : Soustraction de deux nombres réels.
z * R :MUL_R : Multiplication de deux nombres réels.
z / R :DIV_R : Division de deux nombres nombres réels.
z ABS :ABS : Valeur absolue d’un nombre réel.
z SQRT :SQRT : Racine carré.
z SQR :SQR : Carré.
z LN :LN : Logarithme naturel.
z EXP :EXP : Exposant.
z SIN :SIN : Sinus.
z COS :COS : Cosinus.
z TAN :TAN : Tangente.
z ASIN :ASIN : Arc Sinus.
z ACOS :ACOS : Arc Cosinus.
z ATAN :ATAN : Arc Tangente.

Exemple en LIST:
L MD 100 // Charger dans ACCU 1 la valeur du mot MD100
L MD 104 // Charger dans ACCU 1 la valeur du mot MD104
// L’ancien contenu de l’ACCU1 est chargé dans l’ACCU2.
* R // Multiplication de ACCU2 avec ACCU1, résultat dans ACCU1
T MD 108 // Charger la valeur de l’ACCU1 vers la mémoire MD108.
c/ Gestion LECTURE DE PROGRAMME 8

Instructions sur les blocs programme:


z BE : Fin de bloc.
z BEA : Fin de bloc inconditionnelle.
z BEB : Fin de bloc conditionnelle.
z CALL : Appel de Bloc.
z UC : Appel de Bloc inconditionnel.
z CC : Appel de bloc conditionnel.
z MCR( : Sauvegarder RLG dans pile MCR, début de zone MCR.
z )MCR : Fin de zone MCR.
z MCRA : Activer la zone MCR.
z MCRD : Désactiver la zone MCR.

Exemple en LIST:
U E 0.0 // Si l’entrée E0.0 est activée.
CALL FC 1 // Appel du bloc Fonction FC1.

U E 0.1 // Si l’entrée E0.1 est à 1.


BEB // Fin du traitement du bloc, même si il existe en dessous des lignes
de programme.On retourne au bloc d’appel.
c/ Gestion DECALAGE / ROTATION 9

Opérations Arithmétiques
z SSI :SHR_I : Décalage vers la droite d’un nombre entier de 16 bits.
z SSD :SHR_DI: Décalage vers la droite d’un nombre entier de 32 bits.
z SLW :SHL_W : Décalage vers la gauche de 16 bits.
z SRW :SHR_W: Décalage vers la droite de 16 bits.
z SLD :SHL_DW: Décalage vers la gauche de 32 bits.
z SRD :SHR_DW: Décalage vers la droite de 32 bits.
z RLD :ROL_DW: Rotation vers la gauche de 32 bits.
z RRD :ROR_DW: Rotation vers la droite de 32 bits.

Exemple en LIST:
L MW 100 // Charger dans ACCU 1 la valeur du mot MW100
L MW 102 // Charger dans ACCU 1 la valeur du mot MW102
// L’ancien contenu de l’ACCU1 est chargé dans l’ACCU2.
* SRW // Décalage vers la droite de 16 bits
T MD 104 // Charger la valeur de l’ACCU1 vers la mémoire MW104.

Exemple en CONTACT:

N
d/ Les Mots OPERATIONS LOGIQUES 10

Fonctions Masque, Auto-maintien, Inversion:


z UW :WAND_W : Opération ET sur 16 bits.
z OW :WOR_W : Opération OU sur 16 bits
z XOW :XOW : Opération OU EXCLUSIF sur 16 bits
z UD :WAND_DW : Opération ET sur 32 bits
z OD :WOR_DW : Opération OU sur 32 bits
z XOD :WXOR_DW : Opération OU EXCLUSIF sur 32 bits

Exemple en LIST:
L MD 100 // Charger dans ACCU 1 la valeur du mot MD100
L MD 104 // Charger dans ACCU 1 la valeur du mot MD104
// L’ancien contenu de l’ACCU1 est chargé dans l’ACCU2.
* UD // ET logique entre ACCU2 et ACCU1
T MD 108 // Charger la valeur de l’ACCU1 vers la mémoire MD108.

Exemple en CONTACT:
e/ Accumulateurs TRANSFERTS 11

Instructions sur les Accumulateurs:


z BLD : Opération de composition d’image (opération nulle).
z DEC : Décrémenter l’accumulateur 1-L-L.
z INC : Incrémenter l’accumulateur 1-L-L.
z NOP 0 : Opération nulle (RLG à 0).
z NOP 1 : Opération nulle (RLG à 1).
z POP : Copies inverse de ACCU4=>3, 3=>2, 2=>1.
z PUSH : Copies de ACCU1=>2, 2=>3, 3=>4.
z TAK : Permuter ACCU1 et ACCU2.
z ENT : Copies de ACCU2=>3, 3=>4.
z LEAVE : Copies de ACCU4=>3, 3=>2.
z +AR1 : Additionner ACCU1 au registre d’adresse 1.
z +AR2 : Additionner ACCU1 au registre d’adresse 2.

PUSH

ENT
A C C U 1 A C C U 2 A C C U 3 A C C U 4
TAK LEAVE

POP
e/ Accumulateurs PERMUTATIONS 12

Instructions sur les Accumulateurs:


z TAW : Opération qui permet d’inverser l’ordre des octets 1-L-H et 1-L-L.

1-H-H 1-H-L 1-L-H 1-L-L

A C C U 1 TAW
1-H-H 1-H-L 1-L-H 1-L-L

z TAD : Permutation des octets de l’ACCU1, l’ACCU2 n’étant pas affecté.


1-H-H 1-H-L 1-L-H 1-L-L

A C C U 1 TAD

1-H-H 1-H-L 1-L-H 1-L-L


e/ Accumulateurs ROTATION 13

Instructions sur les Accumulateurs:


z RLDA : Rotation vers la gauche des 32 bits de l’ACCU1.

BI 1 1-H 1-L BI 1

Y Y X X

z RRDA : Rotation vers la droite des 32 bits de l’ACCU1.

BI 1 1-H 1-L BI 1

Y Y X X
e/ Accumulateurs Chargement et Transfert 14

Instructions de Chargement:
z TAR : Permuter Registre d’adresse 1 avec Registre d’Adresse 2.
z L : Charger.
z L STW: Charger mot d’état dans l’accumulateur 1.
z LAR1: Charger Accumulateur1 => Registre d’adresse1.
z LAR1 <d>: Charger pointeur de 32 bits dans Registre d’adresse1.
z LAR1 AR2: Charger Registre d’adresse 2 => Registre d’adresse1.
z LAR2: Charger Accumulateur1 => Registre d’adresse 2.
z LAR2 <d>: Charger pointeur de 32 bits dans Registre d’adresse 2.

Instructions de Transfert:
z TAR : Permuter Registre d’adresse 1 avec Registre d’Adresse 2.
z T : Transférer.
z T STW: Transférer l’accumulateur 1 dans mot d’état.
z TAR1: Transférer Registre d’adresse1 => Accumulateur1.
z TAR1 <d>: Transférer Registre d’adresse1 à l’adresse de destination ( 32 bits).
z TAR1 AR2: Transférer Registre d’adresse1 => Registre d’adresse 2.
z TAR2: Transférer Registre d’adresse 2 => Accumulateur1.
z TAR2 <d>: Transférer Registre d’adresse 2 à l’adresse de destination (32 bits).
f/ Chargement TRANSFERT 15

MW 100:

0
L MW100 STANDARD ACCU2

23 14
0 23
0 23
MW 200: 23 TAK 0
T MW200
MW 200:

LAR1 A R 1 +AR1
+AR1 P#x.y
STANDART TAR1
TAR
A C C U 1 LAR2
+AR2
A R 2 +AR2 P#x.y
TAR2
g/ Mot d’état DESCRIPTIONS 16

Mot d’état:
Le mot d’état est un registre dans la mémoire de votre CPU contenant des bits auxquels
vous pouvez accéder dans les opérandes de combinaisons sur bits et sur mots.
Structure du mot d’état :

Bits du Mot d’état:


Les opérations sur bits d’état sont des opérations combinatoires sur bits qui utilisent les
bits du mot d’état. Chacune de ces opérations réagit à l’une des conditions suivantes
indiquées par un ou plusieurs bits du mot d’état :
z Le bit de résultat binaire (BIE ---I I---) est à 1 (son état de signal est égal à 1).
z Un débordement (OV ---I I---) s’est produit lors d’une opération arithmétique ou un
débordement mémorisé (OS ---I I---).
z Le résultat d’une opération arithmétique est illicite (UO ---I I---).
z Le résultat d’une opération arithmétique par rapport à 0 est :== 0, <> 0, > 0, < 0, >= 0, <= 0
Vous pouvez évaluer les bits avec les opérations sur les nombres entiers et à virgules
flottantes.
g/ Mot d’état BITS DU MOT 17
h/ Ad. Indirect EN MEMOIRE 18

Exemple d ’un Pointeur en Format Mot :


z Ajout de la valeur d ’un mot (index) à une adresse donnée:

U E0.0
L S5T#3s Si MW100= 0 Alors on travaille avec SE T0
Si MW100= 1 Alors on travaille avec SE T1
SE T[MW100] Si MW100= 10 Alors on travaille avec SE T10

Exemple d ’un Pointeur en Format Double Mot :

L P#8.7 Charger la valeur du pointeur dans l‘ACCU 1.

T MD2 Transférer le pointeur dans MD2.

U E [MD2] Interroger l'état du signal à l'entrée E 8.7 et

= A [MD2] Transférer cet état de signal à la sortie A 8.7


h/ Ad. Indirect EN MEMOIRE 19

Exemple d ’adressage Indirect en Mémoire :

z Effectuer une combinaison selon la table de vérité ET avec le bit d'entrée.


L'adresse figure dans le double mot de mémento MD2.

U E [MD 2]
z Affecter l'état de signal du bit RLG au bit de données d'instance. L'adresse
figure dans le double mot de données DBD2.

= DIX [DBD 2]
z Charger l'octet d'entrée dans l'accumulateur 1. L'adresse figure dans le double
mot d'instance DID4.

L EB [DID 4]
z Ouvrir le bloc de données. Le numéro du bloc de données figure dans le mot de
données locales LW2.

AUF DB [LW 2]
h/ Ad. Indirect REGISTRE 20

Exemple 1 :

z Charger la valeur du pointeur avec code de zone dans l'accumulateur 1.

L P# E8.7
z Sauvegarder la zone de mémoire E et l'adresse 8.7 dans AR1.

LAR1
z Charger la valeur du pointeur avec code de zone dans l'accumulateur 1.
L P# A8.7
z Sauvegarder la zone de mémoire A et l'adresse 8.7 dans AR2.

LAR2
z Interroger l'état de signal à l'entrée E 8.7 (P#0.0 sert à décaler).

U [AR1, P#0.0]
z Le calcul découle de l'addition de 8.7 (AR2) + 1.1 (décalage). Le résultat égale 10.0
et non pas 9.8 (raisonne octal).

= [AR2, P#1.1]
h/ Ad. Indirect REGISTRE 21

Exemple 2:
U E 0.0
SPB M002
L P#M10.0 Charger Valeur du pointeur dans ACCU1.

LAR1 Sauvegarder M et l'adresse 10.0 dans AR1.

SPA M001
M002: L P#A0.3 Charger Valeur du pointeur dans ACCU1.

LAR1 Sauvegarder A et l'adresse 0.3 dans AR1.

M001: U E 0.4
= [AR1, P#0.1]

E 0.0 détermine le pointeur qui sera utilisé pour cette instruction.


Rq : L'état de signal en E 0.4 est affecté soit au mémento M10.1 soit à la sortie
A0.4.
h/ Ad. Indirect REGISTRE 22

Exemple 3:

z Effectuer une combinaison selon la table de vérité ET d'un bit. L'adresse est
calculée par l'addition du contenu de AR1 + 4 octets + 3 bits. La zone de mémoire
du bit est indiquée dans les bits 24, 25 et 26 du registre AR1.

U [AR1,P#4.3]
z Affecter au bit l'état de signal du bit RLG. L'adresse figure dans le registre AR2.
La zone de mémoire du bit est indiquée dans les bits 24, 25 et 26 du registre AR2.

= [AR2, P#0.0]
z Charger un octet dans l'accumulateur 1. L'adresse est calculée par l'addition du
contenu de AR1 + 10 octets. La zone de mémoire du bit figure dans les bits 24, 25
et 26 du registre AR1.

L B [AR1, P#10.0]
z Transférer le contenu de l'accumulateur 1 dans un double mot. L'adresse est
calculée par l'addition du contenu de AR2 + 53 octets. La zone de mémoire du bit
figure dans les bits 24, 25 et 26 du registre AR2.

T D [AR2,P#53.0]
h/ Ad. Indirect REGISTRE 23

Exemple 4 :

z Charger la valeur du pointeur dans l‘ACCU 1.

L P#8.7
z Charger le pointeur de l'accumulateur 1 dans AR1.

LAR1
z Interroger l'état de signal à l'entrée E 8.7 , P#0.0 permet d’effectuer un
décalage ou offset.

U E [AR1, P#0.0]
z L'adresse exacte 8.7 se trouve dans AR1.
L'adresse exacte 10.0 est calculée par l'addition de 8.7 (AR1) plus 1.1 (Pointeur de
décalage). Le résultat égale 10.0 et non pas 9.8 (numération octale).

= A [AR1, P#1.1]
h/ Ad. Indirect REGISTRE 24

Exemple 5 :

z Effectuer une combinaison selon la table de vérité ET avec le bit d'entrée.


L'adresse est calculée par l'addition du contenu de AR1 + 4 octets + 3 bits.

U E [AR1,P#4.3]
z Affecter l'état de signal du bit RLG au bit de données d'instance. L'adresse
figure dans AR2.

= DIX [AR2, P#0.0]


z Charger l'octet d'entrée dans l'accumulateur 1. L'adresse est calculée par
l'addition du contenu de AR1 + 10 octets.

L EB [AR1, P#10.0]
z Transférer le contenu de l'accumulateur 1 dans le double mot de données locales.
L'adresse est calculée par l'addition du contenu de AR2 + 53 octets.

T LD [AR2,P#53.0]
h/ Ad. Indirect ADRESSAGE INDIRECT 25

But :
z Permet un accès à toute la zone mémoire à partir de quelques lignes d’instructions.

Partie déclarative

Partie
Programme

Si MW100= 0 on charge DB10.DBB0 => MB102


Si MW100= 1 on charge DB10.DBB1 => MB102
Si MW100= 10 on charge DB10.DBB10 => MB102
z Le Pointeur permet de décaler:
Ö P#0.0 permet de travailler sur tous les bits.
Rq : Ö P#1.0 permet de travailler sur tous les Bytes (B).
Ö P#2.0 permet de travailler sur tous les Mots (W).
Ö P#4.0 permet de travailler sur tous les Double Mots (D).
Notes: 26

Aforest PH.Février/05 Maintenance S7 T 104 264 20


Notes: 27

Aforest PH.Février/05 Maintenance S7 T 104 264 20


Notes: 28

Aforest PH.Février/05 Maintenance S7 T 104 264 20