[SoMachine] Variable de fonctions dans biblio

Forum traitant des automates industriels de marque Schneider - Telemecanique
Avatar du membre
pach30
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 116
Enregistré le : 26 mars 2019, 14:20
Localisation : ben le Sud de ?

[SoMachine] Variable de fonctions dans biblio

Message par pach30 »

bonjour,

je souhaite me créer une bibliothèque contenant certaines fonctions que j'utilise de façon récurrentes mais j'ai un comportement avec les variables que je ne comprends pas

la la partie déclaration
//----------------------------------------------------------------------
FUNCTION RegLin : CoeffRegLineaire
VAR_INPUT
TabData : ARRAY [0..10]OF point ;
END_VAR
VAR
n :INT; // nombre de point
fSumX :REAL ; // somme des X
fSumY :REAL; //somme des Y
fSumXY :REAL; //sommme des XY
fSumX2 :REAL; //somme des X²

i: INT;
END_VAR
//--------------------------------------------------------------------
la partie code
//---------------------------------------------------------------------
n:=SIZEOF(TabData)/SIZEOF (Point) ;
fSumX := 0.0 ;
fSumY := 0.0 ;
fSumXY := 0.0 ;
fSumX2 := 0.0 ;

FOR i:=0 TO n -1 DO
fSumX := fSumX + TabData.x ;
fSumy := fSumy + TabData.y;
fSumXY := fSumXY + ( TabData.x * tabData.y);
fsumX2:= fsumX2 + (TabData.x * TabData.x ) ;
END_FOR
regLin.a := ((fSumx*fSumY )- n*fSumXY)/((fSumX * fSumX) - (n * fsumX2));


Quand j'exécute ce code , mes variables fSum* qui sont supposées contenir la sommation de valeurs ne contient que la derniere valeur .
quand je prends en mode "pas à pas" , même à la l'intérieur de la boucle FOR , c'est le comportement que j'observe .
Ces variables sont definies commes de variables locales mais pour obtenir un résultat , il faut que je les déclare en VAR_STAT ce qui est un non sens !!
Quelqu'un a une idée ?
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7807
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: [SoMachine] Variable de fonctions dans biblio

Message par itasoft »

slts,
il faut mettre un mouchard et voir la valeur de X en sortie de la boucle EX:
--------
X:INT;
i: INT;
END_VAR
//--------------------------------------------------------------------
la partie code
//---------------------------------------------------------------------
n:=SIZEOF(TabData)/SIZEOF (Point) ;
fSumX := 0.0 ;
fSumY := 0.0 ;
fSumXY := 0.0 ;
fSumX2 := 0.0 ;
X:=0;

FOR i:=0 TO n -1 DO
X:=X+1;
fSumX := fSumX + TabData.x ;
fSumy := fSumy + TabData.y;
fSumXY := fSumXY + ( TabData.x * tabData.y);
fsumX2:= fsumX2 + (TabData.x * TabData.x ) ;
END_FOR
Automaticien privé (de tout)
itasoft@free.fr
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: [SoMachine] Variable de fonctions dans biblio

Message par philou77 »

Salut !

Puisque c’est une boucle pour parcourir les éléments d’un tableau, je vois pas d’index sur le tabdata, je me trompe ?
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7807
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: [SoMachine] Variable de fonctions dans biblio

Message par itasoft »

philou77 a écrit : 27 août 2021, 12:51 Salut !
Puisque c’est une boucle pour parcourir les éléments d’un tableau, je vois pas d’index sur le tabdata, je me trompe ?
----------
exact , ça devrait donner une erreur ????????
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
pach30
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 116
Enregistré le : 26 mars 2019, 14:20
Localisation : ben le Sud de ?

Re: [SoMachine] Variable de fonctions dans biblio

Message par pach30 »

non, je vous vous rassure tabdata est bien indexé

Code : Tout sélectionner

n:=SIZEOF(TabData)/SIZEOF (Point) ; 
fSumX := 0.0 ; 
fSumY := 0.0 ; 
fSumXY := 0.0 ; 
fSumX2 := 0.0 ; 

FOR i:=0 TO n -1    DO 
	fSumX :=  fSumX + TabData[i].x ;
	fSumy :=  fSumy + TabData[i].y;
	fSumXY := fSumXY + ( TabData[i].x * tabData[i].y);
	fsumX2:=  fsumX2 + (TabData[i].x * TabData[i].x ) ;
END_FOR
regLin.a := ((fSumx*fSumY )- n*fSumXY)/((fSumX * fSumX) - (n * fsumX2));

j'ai fait le test de coller cette fonction directement dans un prog et ça fonctionne en variable locale . je ne vois donc pas pourquoi le comportement serait différent à partir du moment ou on la colle dans une librairie !!

edition : l'indexage est supprimé ( certainement interprété ) par PHPBB quand on colle
[ i ] et que l'on n'est pas dans un bloc !!
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 932
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: [SoMachine] Variable de fonctions dans biblio

Message par Bruce33 »

Bonjour,

Quelle est la définition du type Point ? Et où se trouve sa déclaration ?
Avatar du membre
pach30
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 116
Enregistré le : 26 mars 2019, 14:20
Localisation : ben le Sud de ?

Re: [SoMachine] Variable de fonctions dans biblio

Message par pach30 »

@bruce33 -> point structure de 2 reels x et y

(et fait partie de la librairie)
Avatar du membre
pach30
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 116
Enregistré le : 26 mars 2019, 14:20
Localisation : ben le Sud de ?

Re: [SoMachine] Variable de fonctions dans biblio

Message par pach30 »

Le même code , l'un est dans une fonction du programme , l'autre dans une librairie !!
le coeffpompe ( la fonction dans le prog) est correct
CaptureCOEFF.JPG
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7807
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: [SoMachine] Variable de fonctions dans biblio

Message par itasoft »

slts
tu as mis le mouchard ??
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
pach30
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 116
Enregistré le : 26 mars 2019, 14:20
Localisation : ben le Sud de ?

Re: [SoMachine] Variable de fonctions dans biblio

Message par pach30 »

@itasoft
pas besoin d'un mouchard , je fais du pas à pas et je vois bien , via la librairie, que la sommation ne se fait pas , comme si à chaque itération de la boucle , il réadressait les variables locales !

Bizarre cette différence de traitement entre une fonction dans le programme et la même fonction dans une librairie !!
Répondre