TIA Problem mit stündlicher Datenerfassung

S_Liner

Level-2
Beiträge
365
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, ich habe ein kleines Problem mit meiner stündlichen Datenerfassung. Der Sinn ist, den stündlichen Verbrauch einer Flüssigkeit zu ermitteln.
Dazu gehe ich wie folg vor:

NW1-3.PNG

Bei einem Neuanlauf der CPU oder einem Fasswechsel wird im FC1 der aktuelle Messwert der Messzelle in den DB Startwert geschrieben.

Im FC2 ermittel ich den nächsten Messwert wenn ein Fasswechsel begonnen wird oder der Impuls des Stundenwechsel erfolgt.

Zum Fasswechel ist zusagen, dass dies noch nicht genutzt wird.

Im FC 3 ist denke ich gut zu sehen was dort passiert.

NW4.jpg

Im FC 4 erfolgt dann die Berechnung des stündlichen Verbrauchs.


Hier noch die Art und weise wie ich den Stundenwechsel erzeuge.

Wechsel.PNG

Da das Netzwerk zu groß ist um alles zuzeigen, habe ich nur den unteren Teil ausgeschnitten. Es wird immer zur vollen Stunde ein Impuls erzeugt.

So nun zu meinem Problem. Ab und zu Speichert er nicht. Mal schreibt er um 4 nicht, dann eine ganze Schicht jede Stunde, dann wieder 15 Uhr nicht, dann aber den Rest des Tages. Oder mal 2 Stunden hintereinander nicht.

Ich denke das Problem liegt irgendwie beim Stundenwechsel. Denn wenn er speichert und die Berechnung durchführt, ändert er ja den Startwert, was er aber nicht tut wenn er nicht speichert. Das sehe ich daran, dass ich den Verbrauch für 2 Stunden in meine Tabelle eingetragen bekomme.

Das noch zu Abschluss, ich lasse mir den Stundenverbrauch in eine Exceltabelle eintragen, was, wenn er nicht speichert, auch nicht passiert. Da alles von diesem Impuls abhängt.

Könnt Ihr vielleicht sehen was das Problem sein könnte? Oder ist die Art und Weise wie ich den Impuls für den Stundenwechsel erzeuge nicht gut?

Ich nutze eine CPU 1511-1 PN (6ES7 511-1AK02-0AB0) und Programmiere mit dem TIA V16.


Vielen Dank und beste Grüße
 
Zuletzt bearbeitet:
Wenn Du die Uhrzeit mit einer TOD mit Millisekunden auf = vergleichst, dann muß der Vergleich auch jede Millisekunde gemacht werden - sprich die Zykluszeit darf höchstens 1 ms sein. Den Gefallen wird Dir das SPS-Programm aber wohl kaum machen ;)
Du könntest das "Stundenwechsel"-Signal dann machen wenn die Stunde der Uhrzeit wechselt (wie es der Name schon sagt :cool: ) und/oder die Minute und die Sekunde = 0 ist (wenn der Stundenwechsel nur genau zur vollen Stunde signalisiert werden soll), am besten noch verriegelt mit einer Ausschaltverzögerung von ca. 1 Minute falls eine Uhrzeitsynchronisation auch mal zufällig genau beim Stundenwechsel die Uhr ein paar Sekunden zurückstellt.

PS: man muß nicht mit 24 Uhrzeiten vergleichen, ein einfacherer Vergleich auf Minute = 0 und Sekunde = 0 liefert auch 24 mal am Tag true.

Harald
 
Zuletzt bearbeitet:
Für den "Stundenwechsel" wäre es am einfachsten, man merkt sich den Stundenwert und vergleicht ihn mit dem aktuellen Wert. Das erspart nebenbei auch eine Impulsbildung.

Stundenwechsel.jpg
 
Nur die Stunden vergleichen hat aber einen Effekt, der möglicherweise nicht gewünscht ist: Wenn die SPS über einen Stundenwechsel hinweg (z.B. über Nacht oder übers WE) ausgeschaltet oder in STOP ist, dann wird sofort bei Einschalten zu irgendeiner "krummen" Zeit der Puls "Stundenwechsel" gebildet. Deshalb mein Hinweis auch noch (oder nur) Minute + Sekunde zum Vergleich heranzuziehen. Eine schlecht implementierte Uhrzeitsynchronisation könnte sogar den Effekt haben, daß innerhalb weniger Sekunden dreimal "Stundenwechsel" signalisiert wird. Deshalb mein Hinweis noch eine Ausschaltverzögerung mit zu verknüpfen.

Harald
 
Wenn die SPS über einen Stundenwechsel hinweg (z.B. über Nacht oder übers WE) ausgeschaltet oder in STOP ist, dann wird sofort bei Einschalten zu irgendeiner "krummen" Zeit der Puls "Stundenwechsel" gebildet.

Genau, aber dagegen setze ich im OB100 ein Bit, was dann am Ende des OB1 wieder zurückgesetzt wird. Ist dieses Bit gesetzt, wird kein Impuls beim Stundenwechsel erzeugt.


Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau, aber dagegen setze ich im OB100 ein Bit, was dann am Ende des OB1 wieder zurückgesetzt wird. Ist dieses Bit gesetzt, wird kein Impuls beim Stundenwechsel erzeugt.
"Stunde_Alt := Stunde_Jetzt;" muß aber trotzdem ausgeführt werden, sonst hat man das Problem eben im zweiten Zyklus, falls "Stunde_Alt := Stunde_Jetzt;" nur bei erkanntem/signalisiertem Stundenwechsel ausgeführt wird (entspricht merken der Stunde des letzten signalisierten Stundenwechsels). Noch komplizierter wird es, wenn die Stundenwechsel-Erkennung in einem Weckalarm ausgeführt wird... Wie man sieht, ist die Bildung von Stundenwechsel-Signalen nicht ganz so simpel wie es scheint und muß ein bisschen durchdacht werden "was soll passieren wenn..."

Harald
 
So vielleicht?
Code:
// Impuls nur beim "VorwärtsZählen" min 59 -> 0 (auch ohne dass Stunde wechselt, z.B. bei Umstellung SommerZeit -> WinterZeit)
// ( geeignet für ZyklusZeiten bis 59 s ;o)
DoSomething := MinuteJetzt = 0 AND MinuteZuvor = 59 ;
MinuteZuvor := MinuteJetzt ;

DoItOnce := DoSomething AND NOT TOFx.Q ;
TOFx ( IN := DoSomething, PT:= T#90s ) ;   // nachtriggerbare Zeit, in der keine weiteren Impulse weitergegeben werden

//  "Entprellung" mit AusschaltVerzögerung:

// <-n->|1|<-n->|1|<- - n - -> Zyklen

//  ____|=|_____|=|__________  IN DoSomething

//        |-----> |----->      PT ( 90 s ... 20 min ??? )

//  ____|=|__________________  DoItOnce

//  ____|===============|____  TOFx.Q
Oder ist das auch zu verkompliziert gedacht/gemacht?
 
Zurück
Oben