Accueil > Forum > Terminaux d'opérateurs (Weintek) > Contrôle des fours pour les traitements thermiques
- Ce sujet a 6 réponses, 2 participants et a été mis à jour pour la dernière fois il y a 6 ans da Stefano.
-
auteurPost
-
Février 10, 2016 à 3: pm 32 #35937StefanoPartecipante
Je cherche quelques suggestions pour vérifier que j'ai été commissionné. Je voudrais comprendre si cela n'est faisable qu'avec un panneau opérateur (je pensais à un MT6050iP) et une possible "astuce" utilisable.
J'ai deux fours avec installé un régulateur de température PID qui peut être interfacé via MODBUS RTU sur 485. Via modbus je peux lire la température actuelle et régler les différents paramètres tels que consigne, PID, puissance maximale. Je dois automatiser les programmes de chauffage paramétrables. Les programmes sont essentiellement de deux types:
Prénom:
1) Chauffe jusqu'à la température A avec une puissance maximale X
2) à la température garder pour C minutes
3) Chauffe à la température D avec une puissance maximale Y
4) à la température D pendant E minutes
5) Chauffe jusqu'à la température F avec une puissance maximale Z
6) Joint de température F pour G minutes
7) EndDeuxième (qui n'est autre qu'une partie du premier):
1) Chauffe jusqu'à la température A avec une puissance maximale X
2) à la température garder pour C minutes
3) EndMon idée était d'utiliser un seul panneau et de connecter les deux régulateurs de température sur un bus 485. Puis gérer les paramètres avec les recettes et la transition entre les étapes avec la macro et le planificateur. Les deux fours doivent pouvoir fonctionner indépendamment et avec démarrage manuel ou préprogrammé à un moment précis.
Février 10, 2016 à 5: pm 23 #39359Sergio BertanaAdministrateur du forumOui, bien sûr, il est possible que vous puissiez gérer une macro de temps cyclique qui effectue toutes les opérations pour vous, peut-être en utilisant une machine à états avec l'opérateur Choisir un cas.
Select Case [variable]
Case [value]
[Statements]
breakend Select
Faire votre cycle me semble la meilleure solution. Bien sûr, vous aurez deux macros distinctes mais parfaitement identiques qui feront référence aux variables Modbus lues par les deux contrôleurs PID. Pour lire les registres, utilisez l'opérande GetData écrire l'opérande SetData.
Novembre 7, 2017 à 3: pm 50 #40009StefanoPartecipanteJe reprends cet ancien post. Le projet fonctionne bien depuis un certain temps sur un MT6070iP (EB8000). Cependant, les opérateurs viennent de me signaler quelques anomalies. La première anomalie concerne le morceau de macro suivant:
sub CalcTimer(unsigned int time)
unsigned int minutes, seconds
minutes = time / 600
seconds = (time % 600) / 10
SetData(minutes, "Local HMI", "F2_MINREM", 1)
SetData(seconds, "Local HMI", "F2_SECREM", 1)
end subUne valeur en dixièmes de seconde est passée au sous et cette procédure l'écrit dans deux registres représentant les minutes et les secondes. Mon oubli était d'utiliser "unsigned int" pour "minutes" et "secondes", donc "SetData" écrit deux registres adjacents et non celui que j'attendais. Cela va aux registres sales utilisés pour d'autres choses, heureusement seulement en affichage. Mon idée est simplement de déclarer des minutes, secondes courtes non signées mais j'aimerais comprendre s'il y a des problèmes de troncature possibles. Autrement dit, la macro effectuerait-elle le calcul dans une variable de 32 bits, puis la tronquerait à 16 (ce qui me conviendrait), ou tronquerait-elle la variable de 32 bits pour effectuer le calcul dans la 16?
Une autre question très étrange est liée à ce morceau de code:
unsigned int tick, prevtick, interval, elapsed, remaining
GetData(prevtick, "Local HMI", LW, 9030, 1)
interval = record[hold] * 600<
elapsed = 0while elapsed <= interval
GetData(tick, "Local HMI", LW, 9030, 1)
elapsed = tick - prevtickif elapsed > interval then<
remaining = 0
else
remaining = interval - elapsed
end ifCalcTimer(remaining)
DELAY(250)
wendL'opérateur appuie sur une touche qui active la macro qui contient ce code. La macro passe un certain temps et met à jour deux registres qui affichent un compte à rebours. Ce morceau de code fonctionne parfaitement. Cependant, si je laisse le panneau allumé pendant plus d'un mois, lorsque l'opérateur active la macro, il arrive que la boucle while se termine immédiatement (sûrement une boucle est effectuée car la valeur initiale correcte du compte à rebours est affichée). L'intervalle s'initialise généralement à 30 minutes (30 * 600). Cela se produit jusqu'à ce que j'éteigne et rallume le panneau. À ce stade, tout recommence à fonctionner correctement. Je ne comprends pas ce que cela peut affecter. Y a-t-il des bogues connus sur le panneau dans la gestion du LW-9030 (unité de temps système 32 bits: 0.1 seconde)?
Novembre 23, 2017 à 10: 12 am #40010Sergio BertanaAdministrateur du forumPremier point
Il serait correct d'utiliser court, mais attention, toutes les opérations auraient lieu à 16bit.Deuxième point
Pour une vérification précise, il faudrait toute la macro, mais comme une suggestion que la vérification pourrait être LW9030 compter débordement il y a le retour à 0.Novembre 23, 2017 à 10: 30 am #40012StefanoPartecipante1 - Puis-je faire les calculs sur les variables à 32 et les tronquer à 16. Y a-t-il une commande spécifique pour la troncature ou puis-je simplement attribuer la valeur d'une variable 32 bits à un 16?
2 - Je peux aussi poster le reste de la macro mais aucune valeur de timing ou LW9030 n'est touchée, tout se fait dans la boucle que j'ai postée. Je demande s'il y a des bogues connus dans le firmware car il est assez anormal. Dans le manuel LW9030, on parle de temps système 32 bits en dixièmes de seconde. Il devrait donc atteindre zéro après 4294967295 dixièmes de seconde, environ 13 ans, pas après quelques mois. De plus, même LW9030 a débordé le compte retournant à 0, le comportement indiquerait qu'après le débordement, LW9030 reste à zéro sans augmenter davantage, car même si j'interromps la macro et la réexécute, le même problème persiste tant que je n'éteins pas et ne rallume pas le panneau.
Novembre 24, 2017 à 8: 50 am #40013Sergio BertanaAdministrateur du forumPour le point 1 il est possible d'effectuer tous les calculs en 32bit, à la fin il est possible de passer le résultat dans une variable bit 16 qui tronque le reste.
Pour le point 2, dès que je trouve un moment, je vérifie le comportement du LW9030.Avril 11, 2018 à 10: 33 am #40075StefanoPartecipanteJ'ai contacté Weintek qui, après des mois de vérification, m'a confirmé qu'il y avait un bug dans le firmware lié au LW9030.
-
auteurPost
- Vous devez être connecté pour répondre à ce sujet.