Page 1 sur 1

Calculer le nombre d'impulsion sur entrée TOR

Posté : 18 juin 2016, 10:39
par topaze67
Bonjour,

J'ai un petit souci, disons que je ne vois pas comment programmer la chose,

j'ai une entrée TOR et je dois contrôler le nombre d'impulsion par minute (environ 40 à 50). avant de déclencher une alarme, la première minute pas de souci, j'additionne le nombre d'impulsion durant 1 minute, par contre après, je ne sais pas comment faire, je ne vais pas remettre ma tempo à zéro est recommencer, je m'explique

de 0 à 1 minute j'ai 40 impulsion (les 40 premiers seconde j'ai eu par exemple 30 impulsion et le 20 secondes suivant j'ai eu 10 impulsion) donc je suis Ok sur une minute
par contre de la seconde 40 à la seconde 100, je voudrais être certain que j'ai bien le nombre d'impulsions sur 1 minutes, en clair je ne veux pas seulement contrôler de 0 à 59 secondes puis de 60 à 119 secondes.

si vous avez une idée merci d'avance

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 18 juin 2016, 11:58
par itasoft
slts,
Slts,
Disons que pour avoir le nombre d’impulsion par minutes on peut faire toutes les minutes
Nombre_impulsions_minute = Compteur-Compteur_à_N-1
EX :

cliquer dessus pour agrandir
compteur.JPG

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 28 juin 2016, 14:28
par topaze67
Salut,


Merci pour ton aide, j'ai finalement opté pour une autre solution,

je compte deux impulsions, et je regarde le temps, le temps qui est en milliseconde. Je mémorise ce temps dans une variable.
Ensuite sur un front montant,
je le transforme en real, je divise ce temps par 2 qui me donne le résultat pour une impulsion,

ensuite 60 0000/par le real pour une impulsion, et la j'ai le nombre d'impulsion sur 60 secondes, cela me permet de calculer le temps en continuer quasiment

Merci de ton aide, si lors de la mise en service, cela ne convient pas, j’essayais ta méthode

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 28 juin 2016, 17:08
par itasoft
slts,
pourquoi faire simple quand on peux faire compliqué,
LOL

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 28 juin 2016, 20:01
par foley
Salut,
je penses avoir compris pourquoi il a fait si compliquer, il avait besoin d'une réactivité supérieure et de compter sur une minute mais en continu et non sur LA minute. Enfin, je penses pas être bien plus clair, j'aurais essayé :D

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 28 juin 2016, 21:21
par itasoft
slts,
j'ai pas compris exactement quand déclencher une alarme, sur trop d'impulsions ou pas assez ??

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 29 juin 2016, 06:45
par philou77
Salut,

Sans vouloir flooder, il y a pas une fonction fréquence sur entrée tor ?
c'est simple et ça répondrai à sa demande non ?

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 29 juin 2016, 10:04
par polishglider
Salut

Ou faire une pile FIFO d'une longueur 60, alimentée toutes les secondes avec le nombre d'impulsions ... et tu calcules le nombre d'impulsions total indiqué dans ta pile.

J'ai utilisé ce système pour avoir le nombre de démarrage de 2 pompes sur heure glissante et ca fonctionne nickel.

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 29 juin 2016, 21:31
par itasoft
slts,
oui le FIFO c'est pas mal,
ça donnerait un truc dans ce genre :

cliquer dessus pour agrandir l'image
sum.JPG

Re: Calculer le nombre d'impulsion sur entrée TOR

Posté : 30 juin 2016, 01:03
par kosbor
bsr,

J'ai testé avec un simple buffer de timestamp (heure des impuls tor)
ça fonctionne si j'ai bien compris ce que tu veux avec un delta t de 60s

-testé avec une frequence de 950ms et un nombre de 60 impuls le defaut viens bien!
-testé avec une frequence de 1050ms et un nombre de 60 impuls le defaut viens pas!
fait en boucle asynchrone

script

Code : Tout sélectionner

HeureActuelle:=ARINT_TO_DT (ArrayOfTimeStampINT);
ImplusionTOR :=TON_Trigger.Q;
 
TON_Trigger (IN:= Not TON_Trigger.Q, PT:=t#950ms) ;

IF ImplusionTOR THEN 
  i:=MOD (i, 60);
  ArrayOfTimeStamp[i]:=ARINT_TO_DT (ArrayOfTimeStampINT);
  INC(i);
END_IF;


j:=MOD (j, 60);
IF j=0 THEN
  ImplusionTORCounter:=0;
END_IF;

IF (ArrayOfTimeStamp[j])>(SUB_DT_TIME(HeureActuelle, t#60s)) THEN
  INC(ImplusionTORCounter);
  IF ImplusionTORCounter>=60 THEN
    defaut:=true  ;;(*Setter le défaut ici*)
  END_IF;
END_IF;

INC(j);
variable

Code : Tout sélectionner

ArrayOfTimeStamp	%Mw4500	ARRAY[0..60] OF DT		
i		INT		
ArrayOfTimeStampINT	%SW50	ARRAY[0..3] OF INT		
ImplusionTOR		BOOL		
j		INT		
ArrTimeFormat		TIME		
HeureActuelle		DT		
ImplusionTORCounter		INT		
defaut		BOOL		
TON_8		TON		
TON_9		TON		
TON_Trigger		TON