Home > Forum > Bedienterminals (Weintek) > Steuerung von Öfen für Wärmebehandlungen
-
AutorPost
-
Februar 10, 2016 bei 3: 32 pm #35937StefanoPartecipante
Ich suche nach Vorschlägen, um zu überprüfen, ob ich beauftragt wurde. Ich würde gerne verstehen, ob es nur mit einem Bedienfeld (ich dachte an einen MT6050iP) und einem möglichen verwendbaren "Trick" machbar ist.
Ich habe zwei Öfen mit einem installierten PID-Temperaturregler, der über MODBUS RTU an 485 angeschlossen werden kann. Über Modbus kann ich die momentane Temperatur ablesen und die verschiedenen Parameter wie Sollwert, PID, maximale Leistung einstellen. Ich muss konfigurierbare Heizprogramme automatisieren. Grundsätzlich gibt es zwei Arten von Programmen:
zuerst:
1) Heizt mit maximaler Leistung X auf Temperatur A auf
2) erreichte Temperatur für C Minuten halten
3) Heizt mit maximaler Leistung Y auf Temperatur D auf
4) Fuge bei Temperatur D für E Minuten halten
5) Heizt mit maximaler Leistung Z auf Temperatur F auf
6) Verbindung bei Temperatur F für G Minuten halten
7) EndeZweitens (was nichts anderes als ein Teil des ersten ist):
1) Heizt mit maximaler Leistung X auf Temperatur A auf
2) erreichte Temperatur für C Minuten halten
3) EndeMeine Idee war es, ein einziges Panel zu verwenden und die beiden Temperaturregler an einen 485-Bus anzuschließen. Verwalten Sie anschließend die Parameter mit den Rezepten und wechseln Sie mit Makros und Scheduler zwischen den Schritten. Die beiden Öfen müssen unabhängig voneinander und mit manuellem oder vorprogrammiertem Start zu einer bestimmten Zeit arbeiten können.
Februar 10, 2016 bei 5: 23 pm #39359Sergio BertanaAdministrator des ForumsJa, natürlich ist es möglich, dass Sie ein zyklisches Zeitmakro verwalten, das alle Operationen für Sie ausführt, möglicherweise mithilfe einer Zustandsmaschine mit dem Bediener Fall auswählen.
Select Case [variable]
Case [value]
[Statements]
breakend Select
Ihren Zyklus zu machen scheint mir die beste Lösung zu sein. Natürlich haben Sie zwei unterschiedliche, aber vollkommen identische Makros, die sich auf Modbus-Variablen beziehen, die von den beiden PID-Reglern gelesen werden. Verwenden Sie zum Lesen der Register den Operanden GetData um ihnen den Operanden zu schreiben SetData.
November 7, 2017 bei 3: 50 pm #40009StefanoPartecipanteIch nehme diesen alten Beitrag wieder auf. Das Projekt funktioniert auf einem MT6070iP (EB8000) schon seit einiger Zeit einwandfrei. Die Betreiber haben mir jedoch gerade einige Anomalien gemeldet. Die erste Anomalie bezieht sich auf das folgende Makro:
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 subEin Wert in Zehntelsekunden wird an das Sub übergeben, und diese Prozedur schreibt ihn in zwei Register, die Minuten und Sekunden darstellen. Mein Versehen war es, "unsigned int" für "Minuten" und "Sekunden" zu verwenden, also schreibt "SetData" zwei benachbarte Register und nicht das, was ich erwartet hatte. Dies macht mich schmutzige Register für andere Dinge verwendet, zum Glück nur in der Anzeige. Meine Idee ist einfach, nicht signierte kurze Minuten, Sekunden zu deklarieren, aber ich würde gerne verstehen, ob es mögliche Kürzungsprobleme gibt. Das heißt, würde das Makro die Berechnung in einer 32-Bit-Variablen durchführen und sie dann auf 16 abschneiden (was für mich in Ordnung wäre), oder würde es die 32-Bit-Variable abschneiden, um die Berechnung in der 16-Bit-Variablen durchzuführen?
Eine weitere sehr merkwürdige Frage bezieht sich auf diesen 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)
wendDer Bediener drückt eine Taste, die das Makro aktiviert, das diesen Code enthält. Das Makro vergeht einige Zeit und aktualisiert zwei Register, die einen Countdown anzeigen. Dieser Code funktioniert perfekt. Wenn ich das Bedienfeld jedoch länger als einen Monat eingeschaltet lasse und der Bediener das Makro aktiviert, wird die while-Schleife sofort beendet (sicherlich wird eine Schleife ausgeführt, da der korrekte Anfangswert des Countdowns angezeigt wird). Das Intervall wird normalerweise nach 30 Minuten (30 * 600) initialisiert. Dies geschieht, bis ich das Panel aus- und wieder einschalte. An diesem Punkt funktioniert alles wieder richtig. Ich kann nicht verstehen, was es beeinflussen kann. Gibt es bekannte Fehler in der Verwaltung des LW-9030 (32-Bit-Systemzeiteinheit: 0.1 Sekunden)?
November 23, 2017 bei 10: 12 #40010Sergio BertanaAdministrator des ForumsErster Punkt
Es wäre richtig, kurz zu verwenden, aber Vorsicht, alle Operationen würden dann bei 16bit stattfinden.Zweiter Punkt
Für eine genaue Überprüfung würde es das ganze Makro benötigen, aber als ein Vorschlag könnte es verifiziert werden, dass LW9030 bei der Rückkehr zu 0 überläuft.November 23, 2017 bei 10: 30 #40012StefanoPartecipante1 - Könnte ich die Berechnungen für Variablen bei 32 durchführen und sie dann bei 16 abschneiden? Gibt es einen bestimmten Befehl zum Abschneiden oder kann ich einfach den Wert einer 32-Bit-Variablen einer 16 zuweisen?
2 - Ich kann auch den Rest des Makros posten, aber es werden keine Timing-Werte oder LW9030 berührt. Alles wird in der von mir geposteten Schleife erledigt. Ich frage, ob es bekannte Fehler in der Firmware gibt, weil es ziemlich anomal ist. Im LW9030-Handbuch wird es als 32-Bit-Systemzeit in Zehntelsekunden bezeichnet. Sie sollte daher nach 4294967295 Zehntelsekunden, etwa 13 Jahren, nicht nach ein paar Monaten Null erreichen. Selbst wenn LW9030 die Anzahl auf 0 zurücklief, würde das Verhalten darauf hinweisen, dass LW9030 nach dem Überlauf auf Null bleibt, ohne weiter zuzunehmen, denn selbst wenn ich das Makro unterbreche und es erneut ausführe, bleibt das gleiche Problem bestehen, solange ich das Panel nicht aus- und wieder einschalte.
November 24, 2017 bei 8: 50 #40013Sergio BertanaAdministrator des ForumsFür den 1-Punkt ist es möglich, alle Berechnungen zu 32bit durchzuführen, am Ende ist es möglich, das Ergebnis in der Variablen an das 16-Bit zu übergeben, das den Rest abschneidet.
Für den 2 Punkt, sobald ich einen Moment finde, überprüfe ich das Verhalten des LW9030.April 11, 2018 bei 10: 33 #40075StefanoPartecipanteIch kontaktierte Weintek, der nach monatelangen Überprüfungen bestätigte, dass es einen Fehler in der Firmware gab, der mit LW9030 zusammenhängt.
-
AutorPost
- Sie müssen angemeldet sein, um auf dieses Thema antworten zu können.