Step 7 Maximalwert eines Analogwertes ermitteln und mitloggen

raf77

Level-1
Beiträge
34
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, :p
vorab…. danke an all diejenigen, die sich mit meinem Anliegen beschäftigen!!! Tausend DANK!!

Ich habe bereits nach einer Lösung im Internet, besonders hier in unserem Forum geschaut, allerdings nichts gefunden, was mir direkt weiterhelfen konnte.
Wie ihr aus dem Betreff entnehmen könnt habe ich ein Problem mit der Ermittlung eines Maximalwertes, der über einen bestimmten Zeitraum bzw innerhalb eines bestimmten Ereignisses ermittelt werden soll. Anschließend soll dieser Max- Wert in einem DB gespeichert werden.
Diese ganze Prozedur soll sich beliebig oft (zB.: 100 Mal ) wiederholen um eine Optimierung an einer Anlage vornehmen zu können.
Der Wert kommt von einem Analogsensor, der an einem Linearzylinder den verfahrenen Weg misst.
Beim Überschreiten eines bestimmten Messwerten ( des Max- Wertes ) weiß die Anlage, dass ein Teil richtig aufgepresst wurde.

Folgende Überlegung zur Ermittlung und zum Mitloggen des Maximalwertes:

…. Ich hoffe ihr könnt damit etwas anfangen ;-)


U "Starte_Messung" // Startsignal aus der Schrittkette... dauert nur kurz an
FP #FP_merker // Flankenimpuls
SPBN mk1 // Springe bedingt bei VKE=0 nach mk1
L 0 // lade 0
T #max_wert_temp // und schreibe diese in #max_wert_temp
SPB mk2 // springe bedingt bei VKE=1 nach mk2

mk1: L #PEW_IN // akt. Analogwert laden
L #max_wert_temp // vorherigen Analogwert laden
>I // Vergleiche auf >R
SPBN mk2 // Springe wenn Akt. Wert kleiner // erneut akt. Analogwret laden
TAK // tausche Akku 2 mit Akku 1 / Wert bereitstellen
T #max_wert_temp // vorherigen Analogwert mit akt. Wert überschreibn

mk2: NOP 1

U "Ende_Messung" // wenn Maximalschwellwertmessung beendet
SPBN mk3 // springe wenn Messung noch andauert

L #DBNR_IN // DB- Nummer über INPUT einlesen
T #Nr_DB // transferieren in TEMP
AUF DB [#Nr_DB] // Datenbaustein mit DB-Nummer öffnen
L P#0.0 // Zeigeradresse generieren
T #zeiger // Adresse in "#zeiger"- transferieren

L #max_wert_temp // lade den Maximalmesswert
T DBB [#zeiger] // transferiere Wert in DB an Zeigeradresse
L #zeiger // lade erneut Zeiger
L P#2.0 // lade Zeiger mit neuer Adresse
+D // beide Zeigeradressen addieren
T #zeiger // und in Zeiger speichern

L 0 // lade 0
T #max_wert_temp // und schreibe diese in #max_wert_temp.... wird auch schon im NW1 gemacht

mk3: NOP 1

Danke !!!!!

Gruß :p
Rafael
 
Hallo,
ich würde es so machen ... sieht doch gut aus ...

Gruß
Larry

Ergänzung dazu :
Dein Code geht davon aus, dass alle Maximalwerte immer > 0 sind. Ist dies mal nicht der Fall könntest du deine Variable auch mit einem hohen negativen Wert vorbelegen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,
ich konnte nun endlich mein Teil des Programms zu Max_Wertermittlung ausprobieren. Leider funktioniert es noch nicht ganz.
Der DB wird nur an der ersten Stelle beschrieben P#0.0. Die Zeigeradresse wird demnach nicht hochgezählt.
Vorab, sorry für die Anfängerfragen !!!

AWL:
U "stop_mess_schaltschw"
FP M610.7
SPBN mk3

L #DBNR_IN
T #Nr_DB
AUF DB [#Nr_DB]
L P#0.0
T #zeiger

L #max_wert_temp
T DBD [#zeiger]
L #zeiger
L P#4.0
+D
T #zeiger

L 0
T #max_wert_temp
mk3: NOP 1

Gruß
Rafael
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich bin nach wie vor an meinem Problem Maxwerte in ein DB einzutragen....
leider funtz es nicht so ganz....:(
Das ist das Netzwerk in dem der DB beschreiben werden soll:

L #DBNR_IN
T #Nr_DB
AUF DB [#Nr_DB]
U "stop_mess_schaltschw"
FP M 610.3
SPBN mk2
LAR1 P#0.0
mk2: L 10
loop: T #anzahl

L #max_wert_temp
T DBD [AR1,P#0.0]
+AR1 P#4.0

L #anzahl
LOOP loop

Da wie bereits erkannt der DB nur in die erste Adresse einen Wert eingetragen hat, weil das Initialisieren des Zeigers bei jedem Zyklus statt fand, habe ich versucht dieses zu umgehen. Wie im obigen AWL - code.
Leider steigt die SPS dann mit ienem Fehler aus!
Die Zeigeradresse soll nicht mit jedem Zyklus erhöt werden, sondern abhängig von einem Ereignis zB. einer Endlage eines Zylinders (bei mir die temp => "stop_mess_schaltschw".


Danke im Voaus!
 
In den DB sollten 10 Werte eingetragen werden und dann soll es von vorn losgehen. Deshalb dachte ich man könnte es mit einer Schleife am besten iwie löen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Welche Möglichkeiten habe ich da noch ?
Einfache Spünge habe ich auch schon versucht :( ... ohne Erfolg...
Ich habe da ieinen Gedankenknoten ! :(
 
Zuletzt bearbeitet:
Okay... also im ersten Netzwerk ermittele ich den Maxwert... das klappt bereits.
Im zweiten Netzwerk sollen der Maxwert dann in den DB geschoben werden. Das klappt noch nicht.
Ich werden mir die beiden Themen anschauen und hoffe dass es damit klappt....
Danke für die Antwort!!!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@ vierlagig:

die Maxwertermittlung sieht bei mir so aus....:

U "start_mess_schaltschw"
FP M 610.2
SPBN mk0
L 0
T #max_wert_temp
mk0: L #PEW_IN
L #max_wert_temp
>R
SPBN mk1
TAK
T #max_wert_temp
mk1: NOP 1

Sie funktioniert auch soweit...
 
@ vierlagig:

die Maxwertermittlung sieht bei mir so aus....:

U "start_mess_schaltschw"
FP M 610.2
SPBN mk0
L 0
T #max_wert_temp
mk0: L #PEW_IN
L #max_wert_temp
>R // besser >I
SPBN mk1
TAK
T #max_wert_temp
mk1: NOP 1

Sie funktioniert auch soweit...

real mit word/integer vergleichen ist nicht so doll
 
#max_wert_temp sieht mir so aus wie eine Variable in TEMP --> dann funktioniert die Maxwert-Ermittlung auch nicht sicher.

Ist das bei Dir eigentlich ein FC oder ein FB?
Welchen Datentyp hat Deine Variable? INT oder REAL?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Sorry, ich hätte die Variablentypen angeben sollen.... mein Fehler!!!!
Also:
=> max_wert_temp ist eine Tempvariable vom Typ Real,
=> PEW_IN.. . ist eine Invariable vom Typ Real
und es ist ein FC.

Gruß
 
Zuletzt bearbeitet:
Zurück
Oben