On crée un DB de travail dont voici la structure :
Code : Tout sélectionner
DATA_BLOCK "maTable"
TITLE =
VERSION : 0.1
STRUCT
Index : INT ; //Index table
tab : ARRAY [0 .. 127 ] OF INT := 0; // Table
END_STRUCT ;
BEGIN
END_DATA_BLOCK
A chaque top (a définir) on vient transférer une valeur dans la table à l'adresse définie par l'index (calcul).
On remplit la table au fur et a mesure, au début adresse DBW0 puis 2 puis 4 ..... jusqu'a 256 puis on reboucle à 0.
Voici le code:
Code : Tout sélectionner
UN M 0.1
R M 1.0
// Condition d'execution de la boucle sur front montant de M0.1
U M 0.1
UN M 1.0
S M 1.0
SPBN fin
// Ouverture de la DB de travail
AUF "maTable"
// Chargement et contrôle Index >=0
L DBW 0
L 0
<I
SPB init
// Chargement et contrôle Index <=127
L DBW 0
L 127
>I
SPB init
SPA suit
//Initialisation Index si hors plage
init: L 0
T DBW 0
// Chargement index
// on a une table de 127 mots simple (W)
// l'index évolue de 1 en 1
// mais l'adressage lui, évolue de 2 en 2
// (si c'était des rééls par exemple on ferait de 4 en 4)
// décalage à gauche de 3 bits pour mise au format pointeur (SLW suffit si l'index ne dépasse pas 32767 sinon il faudrait utiliser SLD)
// format octet.bit (cf doc aide Step7 sur Type POINTER - touche F1)
// Chargement du registre d'adresse AR1
suit: L DBW 0
L 2
*I
SLW 3
LAR1
// Chargement de la donnée à ranger dans le tableau et
// Transfert à l'adresse indirecte à partir de DBW 2 (P#2.0)+ adresse chargée dans AR1
// DBW 0 étant l'adresse de l'index
// exemple si index DBW 0 = 57
// 57 * 2 = 114
// AR1 = 114.0
// adresse finale : 114.0 + 2.0 = 116.0
L #maDonnee
T DBW [AR1,P#2.0]
//Chargement et incrémentation de l'index
L DBW 0
L 1
+I
T DBW 0
fin: NOP 0