# Zur Verfügung gestellter Wert aufspalten und zusammenzählen



## Krumnix (3 April 2010)

Hallo.

Mahte ist schon bissel länger her bei mir 
Ich komme grad nicht darauf, wie man diese Formel nennt oder aufstellt.

Folgendes: Ich bekomme von einem System einen Wert geliefert.
Dieser Wert wird in 5er Schritten in dem Externen System hochgezählt.
Dies geschieht im 60sec-Takt. Jedoch wird das nur gezählt, wenn das
System auch in Automatik läuft.

Nun sollen alle Werte ineinander addiert werden. 
Also sowas, als ob ich alle 60sec den alten Werte mit dem neuen Wert addiere.

Das Problem ist, das ich nur alle 24 Stunden einmal den neuen Wert von dem 
anderen System bekomme.

D.H. 
1. Tag 500
2. Tag 655
etc.

Jetzt war am ersten Tag ja zuerst mal die 0 dann 5, dann 10 ->
5+10+15+20+25+30 etc.
Jedoch die 500 / 5 teilen und dann ne Schleife durchlaufen lassen und
sozusagen mir das intern wieder zusammenbasteln will ich nicht 

Ich suche was mathematisches, mit dem ich das lösen kann.

Jemand eine Idee?


----------



## Larry Laffer (3 April 2010)

Hallo Krumnix,
ich muss dir gestehen, dass ich aus deiner etwas konfusen Beschreibung nicht so richtig schlau geworden bin.
Was ich verstanden habe ist :
Du erhälst von einem externen System jede Minute einen Zwischenwert. Diesen Zwischenwert willst du aufsummieren. Was jetzt noch ? Das ist ja wohl nicht das Problem ...
Außerdem : bekommst du mit dem Zwischenwert einen Trigger, damit du weißt, dass es ein neuer Wert ist ?

Gruß
LL


----------



## Paule (3 April 2010)

Larry Laffer schrieb:


> Hallo Krumnix,
> ich muss dir gestehen, dass ich aus deiner etwas konfusen Beschreibung nicht so richtig schlau geworden bin.


dito

Ich probiere es mal so:
Du bekommst täglich einen aufsummierten Wert (Gesamtsumme) gesendet und willst wissen wie viele das am Vortag waren?

```
U #Neuer Wert bekommen
     FP #Flanke
     SPBN END
     L #Wert von Externer Steuerung
     L #Altwert gespeichert
     -I
     T #Vortageswert
     L 5 (fünfer Schritt)
     /I
     L 60 (Sekunden)
     /I
     T #Takte pro Tag
 
     L #Wert von Externer Steuerung
     T #Altwert gespeichert
End:NOP 0
```


----------



## Krumnix (3 April 2010)

Nein.

Das externe System addiert in sich selbst alle 60sec einen Wert um 5.
Dies geschieht nur, wenn das System in Automatik ist. 
Einmal am Tag bekomme ich den gesamten Wert gesendet.
Also eine Zahl alle 24h. Danach resette das System den Wert wieder.
-> 1. Tag 500, 2. Tag 655, 3. 200 etc....

Nun will der Kunde alle Werte, die das System sich gebildet hat, aufaddiert haben.
Dies soll dann als Gesamtwert angezeigt werden.

D.H. wenn man das Gerät zur Stunde Null in Auto versetzt und 1min ist vorbei
steht in deren internen Variable (hab ich keinen Zugriff drauf) ne 5.
Nach weitern 60sec und Auto ein steht ne 10 drin.
Der Kunde will nun aber, das ich ihm 15 anzeige also 5+10.

Wenn das System mir z.B. 40 sendet, dann muss ich 
5+10+15+20+25+30+35+40 berechnen und anzeigen.

Jedoch will ich das nicht als Schleife machen, weil ich mir sicher bin, das es
dafür auch ne mathematische Formel gibt.


----------



## Rainer Hönle (3 April 2010)

Ich glaube es war der alte Gauß, der hierfür eine Lösung hatte.

n = Endwert / 5
Summe = (n/2) * (n+1) * 5

Achtung: Werte können Nachkommastellen haben.

Beispiel:
Wert = 30
n = 30 / 5 = 6
Summe = (6/2) * (6+1) * 5 = 3 * 7 * 5 = 105

Wert = 35
n = 35 / 5 = 7
Summe = (7/2) * (7+1) * 5 = 3.5 * 8 * 5 = 140

Entfall der Nachkommastellen durch  Umformen:

Summe = 5 * (Wert/5 + 1) * (Wert/5/2) = (Wert + 5) * Wert / 10

In diesem Fall den möglichen Überlauf des Wertebereiches beachten


----------



## Larry Laffer (3 April 2010)

OK ... verstanden ...
Die Berechnung, mit der du das verwechselt nennt sich Fakultät. Diese Multipliziert allerdings die Vorgängerwerte und ist m.E. auch keine Funktion von Step 7. Das, was du da hast, ist allerdings genau das, wie du es darstellst - nämlich eine Schleifen-Funktion - auch dann wenn du es vielleicht Integral nennen möchtest. Deine Routine wäre dann also :
	
	



```
Summe := 0 ;
for i:= 5 to Endwert by 5 do
   summe := summe + i ;
end_for ;
```
... hier mal als SCL-Script dargestellt.
Was spricht dagegen, das so (oder von mir aus auch in einem AWL-Pendant) auszurechnen ? Hast du Angst, dass dir deine Zykluszeit wegen der Berechnung um 5ms in dem Berechnungs-Zyklus ansteigt ?

Gruß
LL


----------



## Rainer Hönle (3 April 2010)

@LL: 
Ich denke meine Formel ist einfacher (und hat nichts mit Fakultät zu tun).


----------



## Thomas_v2.1 (3 April 2010)

Rainer Hönle schrieb:


> Ich glaube es war der alte Gauß, der hierfür eine Lösung hatte.


Der alte? Das war doch der "kleine Gauß"


----------



## Rainer Hönle (3 April 2010)

Thomas_v2.1 schrieb:


> Der alte? Das war doch der "kleine Gauß"



Ich dachte, im Alter wird man wieder kleiner.


----------



## Kai (3 April 2010)

Rainer Hönle schrieb:


> n = Endwert / 5
> Summe = (n/2) * (n+1) * 5
> 
> Achtung: Werte können Nachkommastellen haben.
> ...


 
Wenn man in der Formel die Division mit 2 erst zum Schluss durchführt, bekommt man keine Nachkommastellen:


```
n = Wert / 5
 
    n * (n + 1) 
S = ----------- * 5
         2
 
Wert = 30
 
n = 30 / 5 = 6
 
    6 * (6 + 1)
S = ----------- * 5 = 105
         2 
 
Wert = 35
 
n = 35 / 5 = 7
 
    7 * (7 + 1) 
S = ----------- * 5 = 140
         2
```
 


Rainer Hönle schrieb:


> Entfall der Nachkommastellen durch Umformen:
> 
> Summe = 5 * (Wert/5 + 1) * (Wert/5/2) = (Wert + 5) * Wert / 10
> 
> In diesem Fall den möglichen Überlauf des Wertebereiches beachten


 
Trotzdem kann man natürlich in die Formel den Wert einzufügen und die Formel entsprechend umformen:


```
n = Wert / 5
 
    n * (n + 1) 
S = ----------- * 5
         2
 
    Wert    Wert    
    ---- * (---- + 1)
     5       5        
S = ----------------- * 5
            2
 
    Wert    Wert   5 
    ---- * (---- + -)
     5       5     5
S = ----------------- * 5
            2
 
    Wert    Wert + 5 
    ---- * (--------)
     5         5   
S = ----------------- * 5
            2
 
    Wert   
    ---- * (Wert + 5)
     25     
S = ----------------- * 5
            2
 
    Wert * (Wert + 5)     
S = ----------------- * 5
           50
 
    Wert * (Wert + 5)     
S = -----------------
           10
```
 
Gruß Kai


----------



## Rainer Hönle (4 April 2010)

Und was ist jetzt der Unterschied zu (Wert + 5) * Wert / 10 ?


----------



## Krumnix (4 April 2010)

Rainer Hönle schrieb:


> Ich glaube es war der alte Gauß, der hierfür eine Lösung hatte.
> 
> n = Endwert / 5
> Summe = (n/2) * (n+1) * 5
> ...


 
Danke, genau den alten Gaus hab ich gesucht.

Ich wusste, das es da mal was gab, aber ist zu lange her 

Und die Steuerung, in der ich arbeite ist keine Siemens, sondern kommt
von Phoenix 

Frohe Ostern


----------

