Real Höchstwert innerhalb 1 sec

Sepple

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde gerne 1 sekunde lang einen realwert messen und ihn dann weiterverarbeiten. danach den höchstwert nullen und wieder 1 sek messen usw..
Wie ich zu den Höechstwert komme ist mir eigentlich klar, der Rest leider nicht.

Code:
L #Messwert
L #Hoechstwert
<R    
SPB GO     
L #Messwert    
T #Hoechstwert  
GO:NOP 0
Will mir jemand helfen ?

Danke im Voraus.
 
Ich würde gerne 1 sekunde lang einen realwert messen und ihn dann weiterverarbeiten. danach den höchstwert nullen und wieder 1 sek messen usw..
Wie ich zu den Höechstwert komme ist mir eigentlich klar, der Rest leider nicht.
Vielleicht so:
Code:
     UN M1.0
     L S5 T#1S
     SE T1
     U T 1
     = M 1.0
     U M1.0
     SPB NULL
     L #Messwert
     L #Hoechstwert
     <R 
     SPB GO 
     L #Messwert 
     T #Hoechstwert 
GO:NOP 0
     SPA ENDE
NULL:L 0.0
     T #Hoechstwert
ENDE:NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht so:
Code:
     UN M1.0
     L S5 T#1S
     SE T1
     U T 1
     = M 1.0
     U M1.0
     SPB NULL
     L #Messwert
     L #Hoechstwert
     <R 
     SPB GO 
     L #Messwert 
     T #Hoechstwert 
GO:NOP 0
     SPA ENDE
NULL:L 0.0
     T #Hoechstwert
ENDE:NOP 0


danke, das sieht gut aus.

Zwei Fragen noch:
Ist solch ein Code auch ohne Merker möglich ?

Ist dieser Codeteil der Übersicht halber oder auch funktional ?

Code:
GO:NOP 0  
NULL:    
ENDE:NOP 0
 
Zwei Fragen noch:
Ist solch ein Code auch ohne Merker möglich ?
Ohne Merker ja, aber nicht ohne Speicherzelle.
Sprich Merker , Globaldatenbit (DB1.DBX0.0), oder bei einem FB ein statisches Bit.
Ist dieser Codeteil der Übersicht halber oder auch funktional ?
Code:
GO:NOP 0  
     [B][COLOR=red]SPA ENDE[/COLOR][/B]
NULL: [B][COLOR=red]L 0.0[/COLOR][/B] 
      [COLOR=red][B]T #Hoechstwert[/B][/COLOR]
ENDE:NOP 0
Wenn die rot markierte Anweisung noch dabei steht, sollte es funktionieren.
 
Ohne Merker ja, aber nicht ohne Speicherzelle.
Sprich Merker , Globaldatenbit (DB1.DBX0.0), oder bei einem FB ein statisches Bit.

Wenn die rot markierte Anweisung noch dabei steht, sollte es funktionieren.

Danke.

dass das rotmarkiert rein muss war mir schon klar. mir sagen "GO", "NULL", "ENDE" nichts. sind das Befehle ?

...einem FB ein statisches Bit.
In einem FB also einfach eine beliebige Bool Variable ?!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mir sagen "GO", "NULL", "ENDE" nichts. sind das Befehle ?
Nein, keine Befehle.
Das "GO" kommt doch sogar von dir. ;)
Das sind einfach nur Namen für Sprungmarken.
Leider können nur (immer noch, seit S5) 4 "Nichtssagende" Zeichen eingegeben werden.
In einem FB also einfach eine beliebige Bool Variable ?!
Ja, diese muss aber im "Statischen" Bereich deklariert werden, nicht im Temp-Bereich.
 
da hast du natürlich recht. :wink:

aber so richtig habe ich es glaub doch noch nicht verstanden:


Code:
     UN M1.0
     L S5 T#1S
     SE T1
     U T 1
     = M 1.0
     U M1.0
     [COLOR=Red]SPB NULL  [/COLOR]
     L #Messwert 
     L #Hoechstwert
     <R 
     SPB GO 
     L #Messwert 
     T #Hoechstwert 
GO:NOP 0
     SPA ENDE
NULL:L 0.0
     T #Hoechstwert
ENDE:NOP 0
//Hier springen wenn VKE "1" ist und nulle den hoechstwert. wie wird dann der hoechstwert gemessen, wenn man ihn ja jeden zyklus 0.0 zuweist ? Zudem wird ja nachdem 0.0 transferiert wurde nicht mehr nach oben gesprungen, aber komischerweise funktioniert dein Code. :)
Ist es möglich dass ich trotzdem für einen Zyklus 0.0 als Hoechstwert habe, oder liegt einfach der Messwert nicht konstant an ?
 
aber komischerweise funktioniert dein Code
Freut mich :ROFLMAO:
Hier springen wenn VKE "1" ist und nulle den hoechstwert. wie wird dann der hoechstwert gemessen, wenn man ihn ja jeden zyklus 0.0 zuweist ?
Es wird nicht bei jedem Zyklus 0.0 geschrieben, sondern nur jede Sekunde einmal, der Merker 1.0 ist nur jede Sekunde ein Zyklus High
Zudem wird ja nachdem 0.0 transferiert wurde nicht mehr nach oben gesprungen
Das macht doch der OB1, sprich das zyklische Programm.
Ist es möglich dass ich trotzdem für einen Zyklus 0.0 als Hoechstwert habe, oder liegt einfach der Messwert nicht konstant an ?
Ja, zum Zeitpunkt des 1.0 hast du den Höchstwert von einer Sekunde und dieser gespeicherte Wert wird dann auf "Null" gesetzt.
So war doch die Aufgabenstellung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es wird nicht bei jedem Zyklus 0.0 geschrieben, sondern nur jede Sekunde einmal, der Merker 1.0 ist nur jede Sekunde ein Zyklus High

danke für's erklären. mich regt nur auf dass ich nicht selbst drauf gekommen bin, so schwer ist's ja nicht. und wie ein "SE" funzt hätte ich auch wissen können.:rolleyes:

Ja, zum Zeitpunkt des 1.0 hast du den Höchstwert von einer Sekunde und dieser gespeicherte Wert wird dann auf "Null" gesetzt.
So war doch die Aufgabenstellung.

So war die Aufgabestellung, in der Tat. Aber anders wäre es schon geschickter.
reicht es wenn ich nachdem ich 0.0 zugwiesen habe, einfach wieder raufspringen und in dem zyklus auch gleich wieder eine Höchstwert messe ?


Code:
     UN M1.0
     L S5 T#1S
     SE T1
     U T 1
     = M 1.0
     U M1.0
     SPB NULL
     [COLOR=Red]SPA Paul [/COLOR] 
     L #Messwert 
     L #Hoechstwert
     <R 
     SPB GO 
     L #Messwert 
     T #Hoechstwert 
GO:NOP 0
     SPA ENDE
NULL:L 0.0
     T #Hoechstwert
     [COLOR=Red]SPA Paul[/COLOR]
ENDE:NOP 0
 
Ich würde gerne 1 sekunde lang einen realwert messen und ihn dann weiterverarbeiten. danach den höchstwert nullen und wieder 1 sek messen usw..
[Klugscheißmodus]

Obwohl von Sepple so gewünscht, ist das "Nullen" des Höchstwertes nach Ablauf der 1 Sekunde Meßzeit genau
genommen nicht korrekt. Der Höchstwert müßte statt auf 0.0 auf den aktuellen Meßwert gesetzt werden.
Weiter wäre noch die Frage interessant, was aus den ermittelten 1-Sekunden-Höchstwerten werden soll.
Aus der Art der Weiterverarbeitung ergibt sich dann, wie genau die 1-Sekunden-Meßzeit sein muß.
Bei Erzeugung der 1-Sekunden-Meßzeit mit einem normalen Timer liegen in einer Minute höchstens 59 Meßzeiten.
Code:
      UN   T1
      L    S5T#1S
      SE   T1

      U    T1
      SPBN COMP

      L    #Hoechstwert
      T    #Weiterverarbeitung
      SPA  NEUH

COMP: L    #Messwert
      L    #Hoechstwert
      >R
      SPBN ENDE

NEUH: L    #Messwert
      T    #Hoechstwert

ENDE: NOP 0
[/Klugscheißmodus]

Harald
 
Sprungmarke haste vergessen.

Code:
     UN M1.0
     L S5 T#1S
     SE T1
     U T 1
     = M 1.0
     U M1.0
     SPB NULL
[COLOR=Red]Paul: NOP 0[/COLOR]
     L #Messwert 
     L #Hoechstwert
     <R 
     SPB GO 
     L #Messwert 
     T #Hoechstwert 
GO:NOP 0
     SPA ENDE
NULL:L 0.0
     T #Hoechstwert
     [COLOR=Red]SPA Paul[/COLOR]
ENDE:NOP 0

Rücksprünge sind aber ein guter Weg sich eine Schleife zu bauen die im blödesten Moment zuschlägt. Wann immer möglich Rücksprünge vermeiden (ist eigentlich immer möglich)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Höchstwert müßte statt auf 0.0 auf den aktuellen Meßwert gesetzt werden.
Das sehe ich absolut nicht so:
1. Wird im neuen Zyklus der Wert sowieso auf den aktuellen Messwert gesetzt.
2. Nach Deiner Variante hast Du im neuen Zyklus den aktuellen Messwert vom letzten Zyklus (den gespeicherten) was aber wenn der Messwert im neuen Zyklus kleiner ist?
Wo ich Dir allerdings Recht gebe und was auch sinnvoll ist, das "Wegschreiben" ( T #Weiterverarbeitung ) des Sekundenwertes.
 
Der Höchstwert müßte statt auf 0.0 auf den aktuellen Meßwert gesetzt werden.
Das sehe ich absolut nicht so:
1. Wird im neuen Zyklus der Wert sowieso auf den aktuellen Messwert gesetzt.
Man müßte definieren, ob der OB1-Zyklus, in dem der Timer abläuft, noch zum alten Meßzeitraum gehört oder schon zum neuen Meßzeitraum (ich zähle ihn zum neuen, weil die Sekunde da ja schon abgelaufen ist, aus dem dieser Meßwert stammt - und weil es einfacher zu programmieren ist).
In Deiner Programmvariante ist es jedenfalls so, daß in genau dem OB1-Zyklus der Meßwert völlig ignoriert wird (weder für den alten noch für den neuen Meßzeitraum berücksichtigt wird).

Wo ich Dir allerdings Recht gebe und was auch sinnvoll ist, das "Wegschreiben" ( T #Weiterverarbeitung ) des Sekundenwertes.
Wenn der Wegschreib-Code etwas umfangreicher ist, kann das T #Weiterverarbeitung auch gerne ein
Code:
      CALL "Hoechstwertspeichern"
       Wert:=#Hoechstwert
sein.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Deiner Programmvariante kann es genauso vorkommen (wenn der letzte Wert der höchste ist), dass genau in dem Moment der neue Höchstwert ermittelt wird wenn der letzte gespeichert wird, und das kann falsch sein.
Der Höchstwert müßte statt auf 0.0 auf den aktuellen Meßwert gesetzt werden.
Code:
      L    #Hoechstwert
      T    #Weiterverarbeitung
      [COLOR=red]SPA  NEUH[/COLOR]
 
COMP: L    #Messwert
      L    #Hoechstwert
      >R
      SPBN ENDE
 
[COLOR=red]NEUH[/COLOR]: L    #Messwert
      T    #Hoechstwert
 
ENDE: NOP 0

Nicht unbedingt. Falls in einem Meßzeitraum nur negative Meßwerte kommen, dann wäre die gesetzte 0.0 der Höchstwert.

Harald
Das ist ein klasse Argument und das lasse ich gerne so stehen, aber nur mit der Anmerkung dass es in Deiner Variante auch nicht geht.
 
In Deiner Programmvariante kann es genauso vorkommen (wenn der letzte Wert der höchste ist), dass genau in dem Moment der neue Höchstwert ermittelt wird wenn der letzte gespeichert wird, und das kann falsch sein.
Ich schrieb ja bereits, daß man definieren müßte, zu welchem Meßzeitraum der Meßwert gehören soll, der genau in dem OB1-Zyklus gemessen wurde, in dem der Timer abläuft. Bei mir wird dieser Meßwert für den neuen Meßzeitraum berücksichtigt.

Nicht unbedingt. Falls in einem Meßzeitraum nur negative Meßwerte kommen, dann wäre die gesetzte 0.0 der Höchstwert.

Harald
Das ist ein klasse Argument und das lasse ich gerne so stehen, aber nur mit der Anmerkung dass es in Deiner Variante auch nicht geht.
Meine Variante müßte auch mit negativen Werten funktionieren (hab's aber nicht getestet). Ich sehe jetzt nicht, wieso es nicht gehen sollte. :confused:

Harald
 
Meine Variante müßte auch mit negativen Werten funktionieren (hab's aber nicht getestet). Ich sehe jetzt nicht, wieso es nicht gehen sollte. :confused:
Bin es noch mal durchgegangen, ja Du bist da ein Zyklus schneller dran, darum sollte es passen.
[Klugscheißmodus] berechtigt! ;)
 
Zurück
Oben