Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Automation
Automation Forum d'entraide sur l'automatisme, la robotique et l'informatique industrielle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 31/10/2009, 10h55   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 4
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2008
Messages : 4
Points : 2
Points : 2
Par défaut API schneider : Calcul itératif sur flottants

Bonjour

J'ai un petit problème avec mes compteurs horaires codés sur des API schneider (TSX micro, premium, M340)

EN gros, si le moteur est en marche, j'ajoute toute les 36 secondes 0,01 aux compteurs (un centième d'heure = 36 secondes)

Le problèmes est que l'automate ajoute parfois 0,00999999999 à la place
Donc, sur un moteur qui tourne 24h/24, le compte n'est pas juste !!!

J'ai lu dans l'aide PL7 : Il est donc déconseillé de programmer sans précaution des calculs itératifs. Si on souhaite néanmoins programmer ce type de calcul, il appartient à l'applicatif client de gérer les erreurs de troncature.

Si vous avez une idée pour que l'API n'ajoute que 0,01 et pas plus, pas moins !

Je suis preneur

merci
bendangers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2009, 17h13   #2
Responsable outils internes
 
Avatar de Nono40
 
Homme Bruno Guérangé
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 7 605
Détails du profil
Informations personnelles :
Nom : Homme Bruno Guérangé
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : mai 2002
Messages : 7 605
Points : 11 267
Points : 11 267
Ton problème n'a rien à voir avec Schneider : c'est le cas de n'importe quel PC/cpu/calculatrice faisant une somme de flottant.

0.01 n'a pas de repérsentation binaire exacte.

Il te faut travailler sur des entier long et en comptant des secondes ou des centièmes d'heure.

Prend un compteur que tu incrémentes toutes les secondes tant que le moteur est en marche (sur le front de SY6 S6, c'est plus précis qu'une tempo). Tu as ainsi un temps de marche cumulé en seconde sans problème de précision. La seconde sur un DINT va saturer dans 68ans.

Tu transformes en heures à l'affichage par la suite.
__________________
Delphi :
La F.A.Q. , 877 réponses à vos questions !
264 sources à consulter/télécharger !
Nono40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 03h02.


 
 
 
 
Partenaires

Hébergement Web