Sélection de points aléatoires sur un M221

Forum traitant des automates industriels de marque Schneider - Telemecanique
ChrisLBQ
Asservi son premier moteur
Asservi son premier moteur
Messages : 26
Enregistré le : 13 mars 2016, 16:11

Re: Sélection de points aléatoires sur un M221

Message par ChrisLBQ »

Alors tout d'abord merci à tous,

Et effectivement pour lever le doute, nous allons clairement pas inventer des choses qui ne peuvent pas être, et en effet, il faut que cela soit ALÉATOIRE et non pas HASARDEUX, et c'est la que tout prend son sens,
Donc la solution de piocher dans une tempo est une bonne solution en soi

@Itasoft
Merci pour ta solution, je vais l'essayer, mon collègue s'est penché sur un peu le même type de fonctionnement, en prenant sur des tempo en millisec.

@Mantysse

En effet, nous espérons que le client ne sera pas tatillon sur la question, sinon nous devront plutôt nous orienter vers leur pc de supervision qui est en com avec l'automate. On pensait se servir de ce pc de supervision pour générer une petite fonction random. Enfin, c'est vraiment si le client est tatillon... :oops:
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: Sélection de points aléatoires sur un M221

Message par steph68 »

hello,

voici la fonction aléatoire utilisée par la librairie standard du C (chez Micro$oft) :

Code : Tout sélectionner

seed = seed * 214013 + 2531011;	// graine sur 32 bits
result = SHR(seed, 16) AND 32767;		// décalage de 16 bits vers la droite de la graine = résultat "aléatoire" sur 15 bits
il s'agit d'un générateur congruentiel linéaire : https://fr.wikipedia.org/wiki/G%C3%A9n% ... %C3%A9aire

c'est une simple fonction affine mais les coefficients ne sont pas choisis au hasard (à cause du dépassement de capacité des variables, le motif ne se répétera que le plus tardivement possible)

généralement la graine est initialisée (uniquement une seule fois, au démarrage de l'appli) avec une valeur dépendante du temps (date / heure par ex) mais une constante fonctionnera bien aussi (ta date de naissance :mrgreen: ) sauf quand tu rebootes l'automate (la graine doit être rémanente dans ce cas).

si tu veux le top du top, tu peux regarder du côté du générateur Mersenne-Twister : https://fr.wikipedia.org/wiki/Mersenne_Twister

c'est bcp plus lourd à programmer mais ça reste faisable sur de l'automate industriel.
On pensait se servir de ce pc de supervision pour générer une petite fonction random
ton PC de supervision ne fera pas mieux que la fonction affine ci-dessus.
ton client ne pourra pas contester ce choix.
Donc la solution de piocher dans une tempo est une bonne solution en soi
sauf si ton test a un temps de cycle "stable" (peu probable mais ça peut arriver ; ça dépend du process), dans ce cas tu vas retrouver régulièrement la même séquence.

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

Re: Sélection de points aléatoires sur un M221

Message par itasoft »

@steph68,
sauf si ton test a un temps de cycle "stable" (peu probable mais ça peut arriver), dans ce cas tu vas retrouver régulièrement la même séquence.

C’est des tempos bestiales, pas des horloges atomiques au césium (qui dérivent de 1s tous les 100 millions d’années), LOL
La précision des ces tempos est inversement proportionnelle à la base de temps et à la valeur de présélection
Je veux dire par là, que plus la base de temps est grande et la valeur de présélection petite, plus la tempo dérive.
De ce fait, dans mon exemple à cause de la dérive, même si le temps de cycle est stable, tu obtiendra jamais la même chose pendant un certain temps
(qui sera surement < à un million d'années)LOL
Automaticien privé (de tout)
itasoft@free.fr
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: Sélection de points aléatoires sur un M221

Message par steph68 »

@itasoft :

je n'avais même pas étudier ton exemple donc je n'étais pas en train de le critiquer :mrgreen:

je disais simplement que si le process du test est toujours le même, il y a de forte chance que son temps de cycle soit très régulier (à la ms près)
j'ai déjà fais l'expérience de mesurer des courses de vérin pneumatique dont le temps de mesure d'un échantillon à l'autre était presque toujours le même à la milliseconde près (la dérive est sur le long terme donc entre un échantillon N et N + 1000 par exemple mais pas entre N et N + 1)
C’est des tempos bestiales, pas des horloges atomiques au césium (qui dérivent de 1s tous les 100 millions d’années), LOL
tu ne sais pas comment sont implémentés les tempos dans l'automate
c'était sûrement vrai à l'époque sur du PL7-Pro par exemple

la plupart des tempos de nos jours sont basés sur le compteur absolu de millisecondes du système (%SD18 ou %SD20 de mémoire sur Unity, CodeSys a le même équivalent via un appel de bloc).
ce compteur s'incrémente à chaque millisecondes écoulées (même en cours d'exécution du cycle, donc pas de dérive possible)
la tempo se base sur le delta entre la valeur actuelle du compteur et celle mémorisée au démarrage de la tempo
donc il y a de forte chance que ta tempo "bestiale" soit une tempo d' "horloger"

je n'ai pas de source, pas d'essais à l'appui, c'est peut-être des conneries ce que je dis (juste une intuition), mais dans le doute j'éviterai de me baser sur ce "concept"...

le credo de l'automate industriel c'est justement d'être très "déterministe" (à l'époque, les docs des automates contenaient des longs tableaux en annexe avec le temps d'exécution de chaque instruction ...)

enfin bref, on s'égare du sujet principal ; il y a l'embarras du choix pour répondre à la question initiale

@+
Répondre