incrémentation dans un DB

Forum traitant des automates industriels de marque Siemens.
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 782
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: incrémentation dans un DB

Message par djé »

Bon Voici un exemple fonctionnel à adapter à ta situation:

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

Donc c'est un Index en DBW0 et une table de 128 variables de type Integer qui commence à l'adresse DBW2 et se termine à l'adresse DBW256

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
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Lamasspacho
Code sa première boucle
Code sa première boucle
Messages : 11
Enregistré le : 11 mars 2019, 16:14
Localisation : Les Andelys

Re: incrémentation dans un DB

Message par Lamasspacho »

Bonjour,

Voici mon code actuel.
Sans titre.png
Le temps, c'est de l'argent. Ça n'a jamais été aussi vrai qu'en bourse.
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 782
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: incrémentation dans un DB

Message par djé »

Salut,

Code : Tout sélectionner

L 0
SLW3
LAR1
Tu créées une registre d'adresse (AR1) toujours égal à 0.0 donc quand tu transferts plus loin DBW [AR1, P#0.0] tu écris toujours à l'adresse 0.0 !
Et ce malgré le +AR1 à la fin.

Regarde le code que j'ai posté plus haut et simule le.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Lamasspacho
Code sa première boucle
Code sa première boucle
Messages : 11
Enregistré le : 11 mars 2019, 16:14
Localisation : Les Andelys

Re: incrémentation dans un DB

Message par Lamasspacho »

J'avais essayé de bloquer ce passage là, avec un SPB si j'avais mon E0.0 à 1, mais ça me créait un défaut, donc je l'ai enlevé avant de faire le screen.

J'essaye ta solution demain, toutes les consoles sont prises :cry:
Le temps, c'est de l'argent. Ça n'a jamais été aussi vrai qu'en bourse.
Avatar du membre
josé
Codeur fou
Codeur fou
Messages : 263
Enregistré le : 20 oct. 2015, 17:02

Re: incrémentation dans un DB

Message par josé »

Bonsoir,
ce sujet n'a pas déja été évoqué ?
viewtopic.php?f=4&t=3392
Créateur de pannes ...
Répondre