Tagessummen

willirt

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich soll , sofern ein Durchfluss stattgefunden hat , eine Tagessumme bilden.
Das ganze soll zu Monatssummen und Jahressummen zusammengerechnet
werden .
Diese Werte sollen auf einem ProFace-Panel angezeigt werden.
Time und Date sollen mit angezeigt werden.
Mein Problem ist , wie löse ich die Berechnungen aus.
 
Ja, wenn der Tag zu Ende ist, oder?
Nimm die Tageszeit aus der S7 (OB1-Var-Tabelle oder SFC1), bau dir ein Vergleichsfenster. Wenn deine Zeit im Vergleichsfenster ist, setzt du einen Merker, dieser löst über eine Flanke die Berechnung aus. Ist die Zeit ausßerhalb des Vergleichsfensters, setzt du den Merker zurück. Würde ja eventuel sogar reichen, die Tagesstunde aus dem OB1 zu nehmen.
 
Irgendwo muß ja, über den Tag hinweg, die Durchflußsumme hingeschreiben worden sein. Wenn nichts war steht da eine Null? Also wird dann ebend wochenlang täglich einmal eine Null aufaddiert.
Schau mal hier:

http://www.sps-forum.de/showthread.php?t=9600&highlight=OB1+Date

In Volkers Beitrag findest du den Aufbau der Zeit im OB1. Mit dem Byte für Stunde könntest du das machen. Außerdem gebt es noch Bytes für Monat und Jahr, für die anderen Berechnungen. Wenn also dein Stundenbyte 0 wird (Vergleicher) machst du eine Flanke daraus und addierst auf. Für Monat und Jahr solltest du den alten Wert (Monat, Jahr) speichern und darauf vergleichen, ob sich dieser Wert ändert. Dann Durchflußsumme berechnen, "neuen Monat" in "alten Monat", bzw. "neues Jahr" in "altes Jahr", auf nächste Änderung warten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich mache so etwas zu ersten Mal.
Wie muss ich meinen Wert(INT) auf die zeit scalieren damit es im OB35
funktioniert. Daß ich den wert in Real umsetzen muss ist klar.
Für lösungsvorschläge wäre ich außerordentlich dankbar.
 
Ich will meinen Eingangswert (liter/sec) in m^3/min und in eine Realzahl
wandeln. Dann habe ich meinen momentanen Durchflusswert. Diesen muss
ich dann mit meiner aufgelaufenen Menge seit dem Beginn des Überlaufs
addieren.Beginn und Ende habe ich mit einem Merker definiert.
Beim Ende des Überlaufs will ich die aufsummierte Menge in einen DB schieben.
Das Ergebniss eines vorherigen Überlaufs schiebe ich nach unten.
Soweit ist mir das Ganze verständlich.
Mein Problem liegt Hauptsächlich im scalieren der Zeit.
Bisher hatte ich beim Berechnen mit Taktmerker einen fürchterlichen Überlauf.
Ich denke das Hauptproblem lag schon beim Eingangswert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erkläre bitte mal genau, was du für Eingangswerte hast und was dann genau herauskommen soll. Wenn ich dich richtig verstanden habe hast du:

1. einen sich ändernden Eingangswert (INT) in l/sec
2. einen Merker, den du bei Beginn des Überlaufes setzt
3. einen Merker, der bei Ende des Überlaufs gesetz wird

Ist das richtig so?
Ändert sich der Eingangswert ständig?
Ist dein OB35-Intervall schon festgelegt oder kannst du es, je nach Notwendigkeit, selbst festlegen?

Mein Problem liegt Hauptsächlich im scalieren der Zeit.
Na ja, damit bist du ja in trauter Gemeinschaft mit Leuten, wie Einstein, Heisenberg u.a. :ROFLMAO:

Wenn du schon l/sec hast, könntest du den OB35 ja auf ein Interval von 1 Sek. stellen, dann kannst du den Durchflußwert direkt aufaddieren. In Real würde ich erstmal nur wandeln, wenn eine DINT vom Wertebereich her nicht ausreicht (Genauigkeit!).
 
Zuletzt bearbeitet:
Welche CPU?
Wieviele Werte?

Das ist- glaube mir- nicht sehr schwierig.

Es gibt Zeit-OB's- für Tage, Wochen, Monate, Jahre....
Voraussetzung, die CPU wird von irgendwo synchronisiert.

Wir haben fürs PCS7 mal einen Baustein geschrieben der so was ähnliches macht.

Physikalisch muss Dir klar sein, dass Du einen Wert aufintegrieren musst.
 
Wieso skalieren der Zeit?

Ein ganz ganz einfacher Weg:

OB35 in HW-Konfig mit 1000ms einstellen
Wenn die l/sec schon REAL sind:

Code:
L Menge_in_L
L L_Sec
+R
T Menge_in_L

Zu deinen Restlichen Funktionen sollte hier im Forum sehr viel unter FIFO und Daten hin und herschieberei zu finden sein.
Ein Stichwort ist der SFC20

Zu Bedenken ist natürlich das du bei deinem RÜB? natürlich sehr schnell ziemlich beträchtliche Mengen bekommst.
Also evtl den Literzähler noch mit m³ Zählern kaskadieren.

Mfg
Manuel
 
Welche CPU?
Wieviele Werte?

Das ist- glaube mir- nicht sehr schwierig.

Es gibt Zeit-OB's- für Tage, Wochen, Monate, Jahre....
Voraussetzung, die CPU wird von irgendwo synchronisiert.

Wir haben fürs PCS7 mal einen Baustein geschrieben der so was ähnliches macht.

Physikalisch muss Dir klar sein, dass Du einen Wert aufintegrieren musst.

Wie Komme ich an die Zeit-OB's- für Tage , Wochen , Monate , Jahre?
 
Ein Überlauf tritt nur sehr selten auf.
Wenn es passiert ist das Ganze jedoch Hochdynamisch.
Bisher habe nur Maschinen programmiert , daher bin ich mit der
Aufgabenstellung , wie sie hier vorliegt , nicht sonderlich vertraut.
Eure Hilfe ist außerordendlich wertvoll.
 
Da das bei einer 312er nix wird mit den Alarm-OB's:

In Anlehnung an Ralle's Vorschlag...

Code:
      L     LB    12                    //Jahr
      L     DB3.DBB    0
      <>I   
      S     M      2.0                  //das Jahr hat sich geändert
      L     LB    12
      T     DB3.DBB    0
 
      L     LB    13                    //Monat
      L     DB3.DBB    1
      <>I   
      S     M      2.1                  //das Monat hat sich geändert
      L     LB    13
      T     DB3.DBB    1
 
      L     LB    14                    //Tag
      L     DB3.DBB    2
      <>I   
      S     M      2.2                  //der Tag hat sich geändert
      L     LB    14
      T     DB3.DBB    2
 
      L     LB    19
      L     W#16#F
      UW                                //Wochentag, 1=Sonntag
      L     2                           //zB. für Montag
      ==I   
      S     M      2.3                  //neue Woche

Wenn Du das als Beispiel im OB 1 aufrufst, dort stehen in den LB12-LB19 date_and_time kann man diese entsprechend auswerten.
Hier habe ich einen DB3 als Altwertspeicher verwendet, kannst aber auch ein Merkerbyte nehmen sofern frei.
Die Merker 2.0 - 2.3 zeigen einen Wechsel an. Nach dessen Auswertung, zB umschlichten von Daten musst Du die wieder zurücksetzen.
 
Zuletzt bearbeitet:
Zurück
Oben