Archivage Sur S7-1200 (TIA V13)

Forum traitant des automates industriels de marque Siemens.
mhdaip
Asservi son premier moteur
Asservi son premier moteur
Messages : 29
Enregistré le : 09 nov. 2015, 13:05

Archivage Sur S7-1200 (TIA V13)

Message par mhdaip »

Bonjour,
je suis à la recherche d'une solution qui me permet d'archiver certaines données (en format Entier ou réel) dans un DB, et ce, à chaque top de 10 ou 15 min, j'ai déjà vue ça sur des S7-300 avec Step7 5.5 en utilisant l'adressage indirect et des registre à décalage, sauf que dans TIA et surtout avec le 1200 les fonction d'adressage indirect et les décalage ne peuvent pas être utilisée (d’après ma petite expérience).

alors si quelqu'un a une idée je suis preneur.
merci d'avance
@+
Avatar du membre
Mantysse
Dieu du process
Dieu du process
Messages : 752
Enregistré le : 20 oct. 2015, 08:17
Localisation : MiP

Re: Archivage Sur S7-1200 (TIA V13)

Message par Mantysse »

Bonjour,

Alors l'adressage indirect sur S7-1200 est disponible au format PL7-PRO
Exemple:
%MW10 = %MW[%MW0];
Alors c'est possible faudrait que je retrouve l'email exemple que j'avais reçu a l'époque.

Bref grosso modo Siemens a développé une "boite fonction" permettant les équations arithmétiques d'un seul tenant (Comme avec PL7-PRO).

Je sais que ça existe, je sais juste plus ou ça se trouve XD (Comme d'hab quoi ^^)

A+
Mant'
"Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément." Nicolas Boileau

L'urgence, c'est fait!
L'impossible, c'est en cours!
Pour les miracles, il faut prévoir un délai!
mhdaip
Asservi son premier moteur
Asservi son premier moteur
Messages : 29
Enregistré le : 09 nov. 2015, 13:05

Re: Archivage Sur S7-1200 (TIA V13)

Message par mhdaip »

bonjour, merci pour la réponse, et ça serai chic de ta part si tu pouvais me le refilé, ou même juste me donner une idée comment faire un truc dans le genre, car je projette d’utiliser des 1200 pour de la télégestion, et sans archivage local sur automate ça ne serait pas intéressant.

@+.
Avatar du membre
Mantysse
Dieu du process
Dieu du process
Messages : 752
Enregistré le : 20 oct. 2015, 08:17
Localisation : MiP

Re: Archivage Sur S7-1200 (TIA V13)

Message par Mantysse »

L'email que j'ai reçu d'un distributeur Siemens est le suivant:
Voici la syntaxe du pointeur pour un S7-1200
La voici donc:

"tableau".TEMP["index"]

tableau est le nom du DB
TEMP le nom de l'array dans le DB
index nom d'une variable API (mémento) déclaré en Int
A priori c'est utilisable a peu prêt n'importe ou dans le code, On a testé sur une fonction "Move" ça fonctionnait
Reste plus qu'a faire tourner le pointeur
"Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément." Nicolas Boileau

L'urgence, c'est fait!
L'impossible, c'est en cours!
Pour les miracles, il faut prévoir un délai!
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7151
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Archivage Sur S7-1200 (TIA V13)

Message par itasoft »

slts,
en PL7-PRO ça s'écris comme ça:

(* Décalage de la table de 1000 mots %MW0 à %MW999 *)
%MW1:999:=%MW0:999;
(* Enregistrement de la valeur en haut de la table *)
%MW0:=valeur
Automaticien privé (de tout)
itasoft@free.fr
mhdaip
Asservi son premier moteur
Asservi son premier moteur
Messages : 29
Enregistré le : 09 nov. 2015, 13:05

Re: Archivage Sur S7-1200 (TIA V13)

Message par mhdaip »

Merci Itasoft, mais ça ne m'avance pas trop , ce que je cherche c'est de programmer un décalage dans un DB à chaque Top d'une tempo par exemple

@+
dehell
Codeur fou
Codeur fou
Messages : 242
Enregistré le : 19 janv. 2016, 09:24
Localisation : Alès

Re: Archivage Sur S7-1200 (TIA V13)

Message par dehell »

Bonjour,
J'avais créé un FB qui réalise ce que tu souhaites . Il enregistre un réel dans un DB soit sur changement d'état soit sur requete. C'est écrit en SCL. Pour l'importer, il faut aller dans "source externe" =>Ajouter nouveau fichier externe.

Code : Tout sélectionner

FUNCTION_BLOCK "FB209_RECORD_REAL"
TITLE = 'RECORD_REAL'
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : DEHELL
FAMILY : DIAG
NAME : REC_REAL
VERSION : 1.0
   VAR_INPUT 
      VALEUR : Real;   // On peut changer en REAL ou DINT
      NUM_DB : Int;   // Numéro bloc de donnée
      DEBUT_DB : DInt;   // Adresse de début du DB
      NBRE_MOT : DInt;   // Nbre de capture
      RESET_TBL : Bool;   // Commande Raz du tableau
      TOP_RECORD : Bool;   // A chaque Top on enregistre "VALEUR" dans un DB
      MODE_CHANGE : Bool;   // si=1 alors "VALEUR" est stocké à chaque changement de la valeur de la variable   Si=0 la valeur est stocké à chaque top record
   END_VAR

   VAR 
      INDICE : DInt;   // indice de boucle
      VAL_MEMO : Real;   // valeur mémorisé en mode enregistrement sur changement de variable
      Valeur_Nulle : Real;   // Valeur nulle
      DB_NR : DInt;   // Numéro DB
   END_VAR


BEGIN
	
	#DB_NR:= INT_TO_DINT(#NUM_DB);
	#Valeur_Nulle:=0.0;
	
	IF #INDICE>=(#NBRE_MOT-#DEBUT_DB) THEN #INDICE:=0;END_IF;
	//Enregistrement de valeur en mode top
	IF #TOP_RECORD=TRUE AND NOT #MODE_CHANGE AND NOT #RESET_TBL THEN
	  POKE(area:=16#84,dbNumber:=#DB_NR,byteOffset:=(#DEBUT_DB+#INDICE),value:=#VALEUR);
	    #INDICE:=#INDICE+4;
	END_IF;    
	//Enregistrement de valeur en mode changement de valeur
	IF #TOP_RECORD=FALSE AND #MODE_CHANGE AND #VALEUR <> #VAL_MEMO AND NOT #RESET_TBL THEN
	    POKE(area:=16#84,dbNumber:=#DB_NR,byteOffset:=(#DEBUT_DB+#INDICE),value:=#VALEUR);
	    #INDICE:=#INDICE+4;
	    #VAL_MEMO:=#VALEUR;
	END_IF;    
	
	//Raz de la table de valeur
	IF #RESET_TBL= TRUE THEN #INDICE:=0;
	    FOR 
	    #INDICE:=0 TO #NBRE_MOT BY 4 DO
	    POKE(area:=16#84,dbNumber:=#DB_NR,byteOffset:=(#DEBUT_DB+#INDICE),value:=#Valeur_Nulle);
	    END_FOR;
	    END_IF;
	 
	   
END_FUNCTION_BLOCK


Test le bloc en mode simulation.
Attention, ce bloc ne gère pas les erreurs d'adressage du DB et de longueur du DB.
Cordialement.
steph68
Codeur fou
Codeur fou
Messages : 269
Enregistré le : 21 oct. 2015, 08:23

Re: Archivage Sur S7-1200 (TIA V13)

Message par steph68 »

hello,

au lieu de déplacer un certain volume de données, fais plutôt un "buffer" (tableau) circulaire.

tu gères un pointeur (un indice de tableau par ex) qui indique la position de la nouvelle donnée à archiver.
tu gères un autre pointeur (ou une taille de tableau) qui indique le début des données archivées.

à chaque enregistrement, tu incrémentes tes pointeurs (le pointeur de début uniquement si le buffer est plein) et tu fais un modulo de la taille du tableau pour reboucler.

c'est tout simple et beaucoup plus efficace.

le seul avantage à décaler les données (et non les pointeurs) c'est quand les données sont plus souvent lues séquentiellement qu'écrites.

@+
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7151
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Archivage Sur S7-1200 (TIA V13)

Message par itasoft »

slts,
mais l'avantage du décalage est que tu as toutes les données a même endroit et t'as pas besoin de pointeur,
surtout que c'est la machine qui les décale et t'as pas besoin de faire d'efforts musculaires.
LOL
Automaticien privé (de tout)
itasoft@free.fr
steph68
Codeur fou
Codeur fou
Messages : 269
Enregistré le : 21 oct. 2015, 08:23

Re: Archivage Sur S7-1200 (TIA V13)

Message par steph68 »

mouais, mais la boucle pour le déplacement il faut quand même l'écrire (avec un pointeur :mrgreen: )

oui oui je sais PL7-Pro ... avec un adressage direct suivi de ":" ... c'est fini ça (équivalent de BLK_MOVE sur SIEMENS)
même sur unity il faut faire une boucle

tout dépend du volume de données, du temps de cycle acceptable ...

après on peut aussi faire ça :

Code : Tout sélectionner

tableau[0] := tableau[1];
tableau[1] := tableau[2];
...
avec un copier/coller on ne se fatigue pas trop ... ok je sors
Répondre