# Bit bei Max einer Zahl setzen



## MK_Auto (10 Dezember 2010)

Hallo zusammen,
gibt es eine Möglichkeite den Spitzen wert einer Zahl zu speichern bevor sie wieder fällt ??
bzw das ganze anders herum den min Wert speichern bis er wieder steig.
Sinn des ganzen ist einen wert von einem Analogsensor auszulesen.
da sich der Wertändert beim durchfahren der Teile.
Das ewige Leide mit den Mechanikern.
MfG
Micha


----------



## Corosop15 (10 Dezember 2010)

Einen Neu-/Altwert durchführen.

Kurz für Vergleich maximum:
L #Neuwert
L #Altwert
<= R
SPB =Next
L #Neuwert
T #Altwert
Next: ....

Kurz für Vergleich minimum:
L #Neuwert
L #Altwert
>= R
SPB =Next
L #Neuwert
T #Altwert
Next: ....


----------



## Zefix (10 Dezember 2010)

Leg dir eine Variable an in die du den Maxwert schiebst.
wenn der eingelesene Wert höher als der alte Maxwert ist schiebst wieder in Maxwert.
Für Min genauso nur halt andersrum 

Edit:Upss war einer schneller ;-)


----------



## borromeus (10 Dezember 2010)

Maximum

```
L #PV //aktueller Wert
L #Maxwert //aktueller Spitzenwert
>R
SPBN =W1
L #PV
T #Maxwert
W1: U #Reset //Rückstellung
SPBN =W2
L 0.0
T #Maxwert
W2: NOP 0
```
 
Minimum

```
L #PV //aktueller Wert
L #Minwert //aktueller Minimumwert
<R
SPBN =W1
L #PV
T #Minwert
W1: U #Reset //Rückstellung
SPBN =W2
L 9999999.9
T #Minwert
W2: NOP 0
```


----------



## argv_user (10 Dezember 2010)

Zusätzlich zu den zwei Variablen, ich nenne sie XXMin und XXMax, solltest Du für die  Zweifler noch den Timestamp spendieren, (OB1) das macht die Geschichte dann zeitlich nachvollziehbar. Also immer wenn sich Maxi oder Mini ändern den Wert und auch gleich noch Datum und Uhrzeit speichern.


----------



## MK_Auto (10 Dezember 2010)

Danke schon mal für die Infonur denke ich habe ich mich vieleicht falsch ausgerückt
Habe einen Analoggeber an einer 300er CPU der liefert einen Wert von anfangs sage ich mal 28000 als int und fällt bis zu einen gewissen punkt (min) wenn er dann steigt brauche ich den letzten wert  also das minimum
MfG
MK Auto 
Micha


----------



## Corosop15 (10 Dezember 2010)

Ne, ist schon in Ordnung. Dann nimmst Du eben nur den Teil Minimum-Auswertung und ersetzt bei Vergleichen "R" durch "I".


----------



## MK_Auto (10 Dezember 2010)

Also läfft die schleife durch bis er nicht mehr kleiner wird sehe ich das richtig THX Micha


----------



## Corosop15 (10 Dezember 2010)

Da wird keine Schleife im herkömmlichen Sinn von Loop/Next durchlaufen, sondern eine Auswertung pro Zyklus. Es wird in jedem Zyklus durch den Vergleich überprüft, ob der aktuelle Istwert größer/gleich dem zuletzt weggespeicherten Minimalwert ist. Wenn der aktuelle Istwert kleiner dem letztem gespeicherten Minimalwert ist, wird der aktuelle Istwert im Minimalwert weggespeichert.

Edit:
Nimm aber die Variante von borromeus, da er schon ein Löschen des Minimalwerts (manuell, wie eine Resttaste) in seinem Beispiel berücksichtigt hat.


----------



## MK_Auto (10 Dezember 2010)

Nein denke das meine ich nicht so brauche nur nen bit wenn der wert nicht mehr fällt habe sage ich malnen sinus wenn ich messe und brauche den unteren punkt


----------



## Corosop15 (10 Dezember 2010)

MK_Auto schrieb:


> Hallo zusammen,
> *gibt es eine Möglichkeite den Spitzen wert einer Zahl zu speichern bevor sie wieder fällt ??*
> *bzw das ganze anders herum den min Wert speichern bis er wieder steig.*
> Sinn des ganzen ist einen wert von einem Analogsensor auszulesen.
> ...


 
Das war doch Deine Ursprungsfrage, oder?


----------



## Approx (10 Dezember 2010)

MK_Auto schrieb:


> Nein denke das meine ich nicht so brauche nur nen bit wenn der wert nicht mehr fällt habe sage ich malnen sinus wenn ich messe und brauche den unteren punkt


Auch wenn mir bei Deiner Satzstellung beim Lesen schlecht wird:
Willst Du ein binäres Signal haben, wenn sich der aktuelle Wert nicht mehr weiter vermindert als der gespeicherte Min-Wert, dann geht das nur über eine zeitliche Betrachtung. Also mache das Min-Wert abspeichen wie von Corosop vorgeschlagen. Jetzt brauchst Du nur noch die zeitliche Komponente mit einbringen. Wenn also der aktuelle Wert und der gespeicherte Min-Wert für die Zeit x gleich groß sind, dann setze das verfluchte Bit..

Approx


----------



## MK_Auto (10 Dezember 2010)

Nein ich habe keinen gespeicherten wert 
mein wert fällt immer bis zu nen Punkt  woer dann wieder steigt diesen punkt brauche ich als bitaber der punkt ist immer verschieden und ich kenne ihn nicht
also der wert fängt an bei 28000 int und wird imer kleiner und ich brauche den punkt wenn er wieder anfängt zu steigen


----------



## vierlagig (10 Dezember 2010)

wir nannten es noch schleppzeiger


----------



## MK_Auto (10 Dezember 2010)

Gibt es da auch ne systemfunktion für oder so ?


----------



## Larry Laffer (10 Dezember 2010)

Nein ... es gibt dafür nicht fertiges.
Ich würde das Beispiel von Borromeus (z.B.) umsetzen.
Wenn du es etwas konfortabler brauchst dann könntest du es noch erweitern in dem du dir ein FIFO baust in das du die Werte der Reihe nach reinschreibst und durchschiebst. Aus den jeweils letzten Werte bildest du einen Mittelwert und aus diesem bildest du dann wieder bezogen auf den letzten Mittelwert eine Steigung. Ist die Steigung = 1 oder negativ dann fällt deine Aufzeichnung noch - ist die Steigung positiv, dann hattest du den Wendepunkt beim letzten Wert.
Das kannst du dann auch entsprechend für den oberen Peak verwenden.

Gruß
Larry


----------



## Corosop15 (10 Dezember 2010)

Also, noch einmal und ganz langsam.

Ich erlaube mir, den Code von borromeus zu kopieren.

*L #PV //aktueller Wert*
*L #Minwert //aktueller Minimumwert*
*<R*
*SPBN =W1*
Hier prüfst Du, ob Dein aktueller Sensorwert kleiner Deinem minimalsten Wert ist. Ist dies nicht der Fall, springst Du zur Marke *W1*. Wenn doch,
geht es hier weiter.

*L #PV //aktueller Wert*
*T #Minwert //aktueller Minimumwert*
Da Dein aktueller Wert kleiner ist, speicherst Du ihn hier weg.

*W1: U #Reset //Rückstellung*
*SPBN =W2*
*L 9999999.9*
*T #Minwert*
*W2: NOP 0*
Hier kannst Du dann den Wert gespeicherten, minimalsten Wert wieder löschen, indem Du den Wert 9999999.9 in Dein Speicherwort schreibst. Das machst Du auch am Anfang und hast so Deinen ersten gespeicherten Wert.


----------



## vierlagig (10 Dezember 2010)

http://sps-forum.de/showpost.php?p=226346&postcount=3


----------



## D-DNRN (10 Dezember 2010)

Meint er vielleicht das Bit soll in dem Zeitpunkt kommen wenn der Wert wieder steigt? 

Das könnte bei langsamer Wertänderung natürlich schwierig werden wenn die Messgenauigkeit nicht so besonders hoch ist. Sollte der Wert nur langsam fallen und die Messwerte ein wenig flackern kriget man das "jetzt gehts wieder rauf" -Bit ja öfters obwohl im nächsten Zyklus noch ein tieferer Wert auftauchen könnte.  

Dafür müsst man noch so eine Art "Glättung" einplanen und die Zeit zur Erkennung des Richtungswechsels würde halt um diesen Faktor steigen!

Ich hoffe ich hab jetzt nicht alles falsch verstanden, der Starter könnte dazu ja mal seinen Senf geben


----------



## Corosop15 (10 Dezember 2010)

Hallo D-DNRN,

ich sehe es mittlerweile genauso wie Du. Aber wir können nur Rätsel raten, da der TE nach jedem Vorschlag seinen Wunsch abwandelt. Vielleicht sollte er sich mal detailiert dazu äußern, was er genau will.
Auch bei einem Int-Wert 0 bis -32768 (bedeutet eine Änderung von 1/32768stel) kann man die Abfrage und die anschließende Auswertung auf Umkehr nicht so einfach erledigen.


----------



## borromeus (10 Dezember 2010)

Ich habe mal eine Routine geschrieben, wo ich Messwerte alle 3s in einen DB eingetragen habe und dann eine laufende Auswertung über Amplitude und Frequenz (war ein pulsierender Druck) gefahren bin. Da erinner ich mich, habe ich auch eine Auswertung über Tiefpunkt und Hochpunkt gemacht (zwecks Amplitudenbestimmung).
das habe ich (habe das Programm leider nicht zur Hand) so gemacht, dass ich in einer Schleife durch den DB immer den Wert suche, dessen beiseitig fünf Nachbarn kleiner (->Hochpunkt) oder größer (->Tiefpunkt) sind.

Wenn Dein Prozess so ist dass der Messwert sinkt und dann ab dem Zeitpunkt wieder steigt und nicht mehr abfällt kann eine vereinfachte Methode zur Anwendungen gelangen. Du machst es so wie vorher beschrieben und wartest dass bei den folgenden zB 3 Messwerten der gemerkte Min-Wert überschritten wird.... dann kannst Du Dein Tiefpunktbit setzen. 
Abtastzeit musst Du Dir überlegen, weiters auch ob eine Plausibilitätskontrolle notwendig ist: ich habe den Wert zB nicht eingetragen wenn der Folgewert mehr als ein einstellbares Fenster vom letzten Wert abgewichen ist. Glättung kannst Du auch probieren, einfach ein PT1- Glied davorschalten.

lG
Karl


----------



## PN/DP (10 Dezember 2010)

Auch ein bischen Rätsel-rate:
Falls die Minwert- und Maxwert-Impulse für eine Periodendauer- oder Frequenzmessung genutzt werden sollen:
Das macht man normalerweise nicht zwischen den Min-/Maxpunkten der (Sinus-)Kurve (weil der Wert sich da über einige Zeit nur wenig ändert und man wegen der Meßungenauigkeit eine gewisse Glättung vornehmen muß) sondern bei den Nulldurchgängen der Kurve durch die X-Achse bzw. in der Mitte zwischen Min- und Maxwert, weil die Kurve da am steilsten ist (diese Zeitpunkte sind genauer bestimmbar).

Harald


----------



## Paule (11 Dezember 2010)

Also ich habe das so verstanden:


```
L #Aktualwert
   L #Altwert
   <I
   S M 1.0 // Wert fällt
 
   L #Aktualwert
   L #Altwert
   >I
   U M 1.0 // Wert fällt
   = M 2.0 // Wert steigt wieder
   R M 1.0
 
   L #Aktualwert
   T #Altwert
```


----------



## borromeus (11 Dezember 2010)

PN/DP schrieb:


> Auch ein bischen Rätsel-rate:
> Falls die Minwert- und Maxwert-Impulse für eine Periodendauer- oder Frequenzmessung genutzt werden sollen:
> Das macht man normalerweise nicht zwischen den Min-/Maxpunkten der (Sinus-)Kurve (weil der Wert sich da über einige Zeit nur wenig ändert und man wegen der Meßungenauigkeit eine gewisse Glättung vornehmen muß) sondern bei den Nulldurchgängen der Kurve durch die X-Achse bzw. in der Mitte zwischen Min- und Maxwert, weil die Kurve da am steilsten ist (diese Zeitpunkte sind genauer bestimmbar).
> 
> Harald


 
Nein, das ist bei einer Dichtstromförderung (Pfropfenförderung):
da wird im Prinzip in einer Rohrleitung Granulat schonend gefördert, indem immer einzelne Pfropfen immer ein Stückchen weitergefördert werden (im Vergleich zu einer Flugförderung).
Es stellst sich ein pulsierender Druck ein, der natürlich keinen 0-Durchgang hat. Damit die Förderung optimal funktioniert braucht es aber eine bestimme Differenz des Druckes während der Förderphasen und der Druckaufbauphasen.... der Druckverlauf ähnelt einem Sinus nur entfernt....
Die Periodendauer liegt im zig-Sekunden Bereich....


----------



## MK_Auto (17 Dezember 2010)

So war länger nicht hier 
Versuche mich mal nochgenauer auszudrücken.
Ein Analogtaster im Wertbereich  26000-16000
Es werden damit Teile gemessen das hat sich der Maschienenbauer ausgedacht.
Die Teile ( Rohrstückchen ) Rutschen nacheineander am Analogtaster vorbei.
Daduch fällt der Wert bis zu dem Punlkt wo das Teil mittig unter dem Taster liegt und wenn es weiter rutscht steigt er dann wieder.
Es gibt 3 Teile 24000, 20000, 16000.
Diese müssen nach grösse erkannt werden und die falschen ausgeblasen werden.
Da dieses im Fluß geshieht und auch kein Trigger vorhanden ist ist mein Gedanke immer den niedrigsten Wert zu vergleichen.
THX Micha


----------



## Paule (17 Dezember 2010)

Hallo Micha,
ich sehe jetzt keinen Grund warum das mit meiner Variante nicht gehen würde.


----------



## Sockenralf (17 Dezember 2010)

Hallo,

definiere mal ".. rutschen am Sensor vorbei ..."

Wie lange sieht der Sensor die Teile?
Schon mal mit der Zykluszeit gegengerechnet?




MfG


----------



## MK_Auto (20 Dezember 2010)

Das mit der Zykluszeit ist kein Prob 
nur verstehe ich nicht wo Paule den Altwert hernimmt.
meine er ändert sich doch immer wenn muss das doch inner schleife laufen oder ??
THX Micha


----------



## winnman (20 Dezember 2010)

vielleicht hilft es ja die aktuellen Messwerte mit Vergleichswerten zu vergleich nach folgendem Schema:

Wenn Teil >= X und X nicht kleiner als Y, dann ist das Teil 1

Wenn Teil >= Z und nicht kleiner als W, dann ist Teil 2

Wenn Teil >= W und nicht kleiner als F, dann ist Teil 3

Wenn Teil <F, dann Ausschuss


----------



## MK_Auto (20 Dezember 2010)

Ja sehe das so das man da eine schleife nehmen muss 
oder bin ich aufm holzweg ?


----------



## Paule (20 Dezember 2010)

MK_Auto schrieb:


> Ja sehe das so das man da eine schleife nehmen muss
> oder bin ich aufm holzweg ?


Die Schleife ergibt sich doch durch den SPS-Zyklus.


----------



## Corosop15 (20 Dezember 2010)

Siehe Beitrag #9.


----------



## Paule (20 Dezember 2010)

Corosop15 schrieb:


> Siehe Beitrag #9.


 
Stimmt,
ich habe nur die Antwort wiederholt weil Micha direkt eine Frage zu meinem Vorschlag hatte:
http://sps-forum.de/showpost.php?p=300686&postcount=28


----------



## MK_Auto (20 Dezember 2010)

hm da war es wieder meine awl schwäche 
ok also die schleife ergibt sich aus dem zyklus und dann muss ich den ja wieder den anfang finden denn wenn der wert steigt kommt irgendwo der strat wo er wieder fällt


----------



## Corosop15 (20 Dezember 2010)

Hallo Paule,

das war auch nicht auf Dich gemünzt.

Ich verstehe nur nicht, welche Probleme der TE immer noch hat. Es ist ihm doch alles gut erklärt worden.
Beim allerersten Vergleich hat er natürlich keinen Altwert, sondern muß in der Variable "Altwert" einen Anfangswert definieren.
Aber bei den wenigen Informationen können wir doch keine weitere Hilfestellung leisten (was wir doch gerne möchten).


----------



## winnman (20 Dezember 2010)

Details, Details, Details = Hilfe


----------



## Paule (20 Dezember 2010)

MK_Auto schrieb:


> ok also die schleife ergibt sich aus dem zyklus und dann muss ich den ja wieder den anfang finden denn wenn der wert steigt kommt irgendwo der strat wo er wieder fällt


Ja, wenn der Wert wieder steigt musst du just in diesem Augenblick die Länge ermitteln.
Ist die Länge falsch > ausblasen.
Wenn das Teil dann vom Sensor weg ist wirst du ja einen definierten Analogwert haben und mit diesem Wert wird der Merker wieder gelöscht > Neustart der Routine.


----------



## MK_Auto (20 Dezember 2010)

OK dann noch mal mehr details
es gibt kein Defaultwert mein Wert fällt wenn ein Teil erkannt wird also das kleine rohr unter dem sensor erscheint je nach grösse und wenn der mittelpunkt überschritten ist steigt er 
da die gemessenen größen nicht sehr stark abweichen brauche ich den Wert bevor er wieder ansteigt zwecks dann zu vergleichen und dann immer wieder den punkt wert steigt nach fallen merken vergleichen


----------



## Corosop15 (20 Dezember 2010)

Was wird denn bei dem Rohr gemessen?
Länge?
Durchmesser?
Wandstärke?
Gibt es Toleranzgrenzen?


----------



## MK_Auto (20 Dezember 2010)

Alos genaugenommen ne Buchse 
da wird praktisch die höhe ermittelt 18 mm 20mm 24mm 28 mm
aber durch das vorbeirutschen des sensors schwankt der wert sehr


----------



## Corosop15 (20 Dezember 2010)

Es werden demnach 4 Buchsenvarianten auf Höhenschwankungen geprüft?
Welcher Art ist denn der Sensor und welchen Wert liefert er?


----------



## MK_Auto (20 Dezember 2010)

Nicht höhenschwankungen sondern ob die richtigen durchlaufen 
also nach vorwahl der Höhe
es ist ne Analoglichtschranke 20mA
ca 24000 wenn kein Teil drunter ist aber er schwankt ein wenig duch vibration 
und der unterschie der Buchsen schätze ich mal im Fenster knapp 1000


----------



## Corosop15 (20 Dezember 2010)

Ich hoffe, ich habe jetzt alles richtig verstanden.

Kurze Zusammenfassung:

In Deinem Betrieb werden Buchsen angefertigt. Es gibt gibt 4 verschiedene Sorten, welche sich in der Höhe unterscheiden (18, 20, 24 und 28 mm). Diese sollen auf Ausschuß überprüft werden, indem die Höhe vermessen wird. Entspricht der gemesse Wert nicht den Vorgaben, soll das entsprechende Teil aussortiert (ausgeblasen) werden. Soweit richtig?

Wieviele Buchsen durchlaufen den Sensor denn in einer bestimmten Zeiteinheit? 10 pro Sekunde? 100 pro Minute?


----------



## MK_Auto (20 Dezember 2010)

Ja genau du hast mich verstanden 
ca 2-3 sekunden pro buchse


----------



## Paule (20 Dezember 2010)

Corosop15 schrieb:


> In Deinem Betrieb werden Buchsen angefertigt. Es gibt gibt 4 verschiedene Sorten, welche sich in der Höhe unterscheiden (18, 20, 24 und 28 mm).


 


MK_Auto schrieb:


> Es gibt 3 Teile 24000, 20000, 16000.
> Diese müssen nach grösse erkannt werden und die falschen ausgeblasen werden.
> Da dieses im Fluß geshieht und auch kein Trigger vorhanden ist ist mein Gedanke immer *den niedrigsten Wert zu vergleichen*.


Warum denn den niedrigsten? 
Das wäre doch das Buchsenloch.


----------



## MK_Auto (20 Dezember 2010)

Hallo Paule 
nein die Buchsen liegen und je grösser die Buchse im Durchmesser ist umso kleiner wird der wert


----------



## borromeus (20 Dezember 2010)

Corosop15 schrieb:


> _Der Anfang vom Themenstarter:_
> Hallo zusammen,
> gibt es eine Möglichkeite den Spitzen wert einer Zahl zu speichern bevor sie wieder fällt ??
> bzw das ganze anders herum den min Wert speichern bis er wieder steig.
> ...


 
Sry, aber einen Weihnachtsschmunzler ist das wert...
;-)


----------



## MK_Auto (20 Dezember 2010)

Hoffe ich blamiere mich nicht zu sehr 
bin eher der Graph  und Kop Programmierer


----------



## Paule (20 Dezember 2010)

borromeus schrieb:


> Sry, aber einen Weihnachtsschmunzler ist das wert...
> ;-)


*ACK*



MK_Auto schrieb:


> nein die Buchsen liegen und je grösser die Buchse im Durchmesser ist umso kleiner wird der wert


 

```
[FONT=Courier New]     | <= Sensor[/FONT]
[FONT=Courier New]     |[/FONT]
 
[FONT=Courier New]    ---[/FONT]
[FONT=Courier New]   / O \      <= Buchse[/FONT]
[FONT=Courier New]--/     \----[/FONT]
[FONT=Courier New]-------------------------------- <= Band[/FONT]
```
 
Und nochmal:

http://sps-forum.de/showpost.php?p=300168&postcount=26


----------



## MK_Auto (20 Dezember 2010)

also soll es so gehen wie du geschrieben hast


----------



## Paule (20 Dezember 2010)

Ein bisschen was selber machen musst schon noch, aber hier mal eine kleine Erweiterung:

```
L #Aktualwert
   L #Altwert
   <I
   S M 1.0 // Wert fällt
 
   L #Aktualwert
   L #Altwert
   >I
   U M 1.0 // Wert fällt
   = M 2.0 // Wert steigt wieder
   R M 1.0
 
   L #Aktualwert
   T #Altwert
 
   U M 2.0 // Wert steigt
   SPBN yyy
   O(
   L #Aktualwert
   L 20000     // Wert OK
   ==I 
   )
   O(
   L #Aktualwert
   L 22000
   ==I    
   ) 
....
   SPB yyy
   SET 
   S M 3.0 // Ausblasen
yyy:NOP 0
    U M 3.0
    L S5#T1S
    SV T1
    U T 1
    = A Blasen
    R M 3.0
```


----------



## MK_Auto (20 Dezember 2010)

OK danke Paule solangsam verstehe ich es 
muss halt bur den letzten wert vorm steigen in nen merker schieben damit ich ihn vergleichen kann weil er sich in Fenstern bewegen mussund ich awl nur ein wenig blicke


----------



## Corosop15 (20 Dezember 2010)

MK_Auto schrieb:


> So war länger nicht hier
> Versuche mich mal nochgenauer auszudrücken.
> Ein Analogtaster im Wertbereich 26000-16000
> Es werden damit Teile gemessen das hat sich der Maschienenbauer ausgedacht.
> ...


 


MK_Auto schrieb:


> Hallo Paule
> nein die Buchsen liegen und je grösser die Buchse im Durchmesser ist umso kleiner wird der wert


 
Hallo Paule,
er geht von dem Gedanken aus:

Ist das Band leer, hat er den höchsten Wert (26000). Kommt ein Teil, ist der Wert dem entsprechend niedriger. Deswegen will er den niedrigsten Wert vergleichen.


----------



## Paule (20 Dezember 2010)

Corosop15 schrieb:


> er geht von dem Gedanken aus:
> 
> Ist das Band leer, hat er den höchsten Wert (26000). Kommt ein Teil, ist der Wert dem entsprechend niedriger. Deswegen will er den niedrigsten Wert vergleichen.


Jep,
Deine Aufgabenbeschreibung und die Tatsache dass die Buchse liegt brachten Licht ins dunkle.


----------



## MK_Auto (20 Dezember 2010)

genau dann fällt der wert und wenn die mitte der buchse überschritten ist fällt er wieder


----------

