Einlesen eines Analogwertes über mehrere Sekunden, anschl. speichern und anzeigen

Zuviel Werbung?
-> Hier kostenlos registrieren
Irgendwie sehe ich hier keine kritische Flanke :???:, aber es ist noch früh am Morgen...
vierlagig meinte nur, dass Du das Nullsetzen der MD's von einer Bedingung abhängig machen musst. Das könnte auch eine Flanke sein, muss es aber nicht.
Code:
      U     E      0.5                  //neue Messreihe starten
      SPBN  sp01
      L     0.000000e+000               //wenn neue Messreihe
      T     MD     0                    // 0 in MD0 schreiben
      T     MD     4                    //und MD4 schreiben
      T     MD     8                    //und in MD8 schreiben
      T     MD    12                    //und in MD12 schreiben
      T     MD    16                    //und in MD16 schreiben
sp01: NOP   0
 
Das könnte auch eine Flanke sein, muss es aber nicht.

ich finde die lösung mit dem automatischen rücksetzen bei neuer messreihe eleganter ... aber natürlich kann da auch ein reset von einem HMI kommen ... oder man behält die werte um eine vergleichsmessung machen zu können ... oder man macht es so wie OHGN oder oder oder ... aber von die nullen per HMF* in die CPU zu kloppen würde ich abraten!


*Hammer, Meißel, Flex ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nehme an, das mit der Flankenauswertung und dem überbügeln der 0 meinst Du in dem Kontext des Nullsetzens der 4 gespeicherten Werte am Ende des Prüfzyklus. Das müsste dann so behoben werden können, oder?

Code:
U     E       6.7                  //wenn am TP Schaltfläche für "Neuer Test" gedrückt
FP   M       6.7                  //und dieses Signal hat eine steigende flanke 
L     0.000000e+000           //dann lade 0
T     MD     0                    // 0 in MD0 schreiben
T     MD     4                    //und MD4 schreiben
T     MD     8                    //und in MD8 schreiben
T     MD    12                   //und in MD12 schreiben
T     MD    16                   //und in MD16 schreiben

Wenn Du das nicht gemeint hast, und Du eher an den Code um den FC 105 herum gedacht hast, dann musst Du mir aber erklären wie. Irgendwie sehe ich nämlich gerade so keine Stelle an der ich eine Flankenauswertung reinsetzen sollte.
 
achso, noch was ... du solltest im richtigen format nullen. nicht weil es sonst nicht funktioniert, nur weil es logischer ist und damit die nachvollziehbarkeit unterstützt wird ... also 0.00 in die MDs schreiben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Thema Format: 0.000000e+000 müsste doch das Richtige sein für die MDs
Die Maximal und Minimalwerte in dem FC105 werden ja auch in dem Format gegeben, also müsste der Ausgang des FC105 ja auch dem entsprechen.

Die Geschichte mit der Flankenauswertung sollte dann in etwa so aussehen:

Code:
P602: U     E       6.7                  //wenn am TP Schaltfläche für "Neuer Test" gedrückt
      FP   M       6.7                  //und dieses Signal hat eine steigende flanke 
      SPBN P603 
      L     0.000000e+000           //dann lade 0
      T     MD     0                    // 0 in MD0 schreiben
      T     MD     4                    //und MD4 schreiben
      T     MD     8                    //und in MD8 schreiben
      T     MD    12                   //und in MD12 schreiben
      T     MD    16                   //und in MD16 schreiben
P603: NOP

Oder schmeiss ich wieder Sachen durcheinander? ;)
 
Oder schmeiss ich wieder Sachen durcheinander? ;)

nö, flanke paßt ... wo hab ich denn erst die INT 0 gesehen :confused: *grübel* ...anyway... 0.00 passt natürlich

aber weeßte was, du mußt doch da vier mal das selbe machen, warum bauste dir da nicht einen FB für, den du dann nur noch vier mal aufrufen brauchst und entsprechend beschalten? das fänd ich viiiiieeeel eleganter
 
Einen schönen Montag Morgen allen :ROFLMAO:

Ich habe mir den Code zum Einlesen noch einmal genauer angeschaut eben, so wie OHGN ihn vorgeschlagen hat:

Code:
      U     E      0.4                  //Prüfen ob noch in Endlage
      SPBN  P401
      CALL  FC   105
       IN     :=PEW6                    //angenommen es wäre dieser Analog-Eingang
       HI_LIM :=2.000000e+001           //Maxwert ist 20kN
       LO_LIM :=0.000000e+000           //Minwert ist 0kN
       BIPOLAR:=FALSE
       RET_VAL:=MW50
       OUT    :=MD0                     //normierter Wert
      L     MD     0                    //normierter Wert
      L     MD     4                    //max Speicherwert
      <R                                //wenn neuer Wert grösser als alter wert
[B]SPB   P402[/B]
      TAK   
      T     MD     4                    //dann neuen Wert in MD 4 schreiben
      SPA   P402
P401: L     0.000000e+000               //wenn nicht mehr in Endlage
      T     MD     0                    // 0 in MD0 schreiben
      T     MD     4                    //und MD4 schreiben
P402: NOP   0

Dabei ist mir allerdings etwas aufgefallen, so in etwa in der Mitte (fett geschrieben). Insgesamt würde diese Variante dann bedeuten dass er den Wert einliest, mit dem gespeicherten Maximalwert vergleicht, und wenn der aktuelle Wert grösser ist als der Maximalwert, dann Sprung zu P402 ohne vorher den aktuellen Wert als neuen Maximalwert zu speichern für den nächsten Zyklus.

Da es mir aber darum geht, am Ende in MD 4 den höchsten Wert gespeichert zu haben, der während der ganzen Zeit gemessen wurde, wäre es da nicht sinnvoller das Fettgedruckte durch

Code:
SPBN P402

zu ersetzen?

Weil das <R vergleicht ja ob MD4 < MD0 und wenn ja (VKE=1) dann sollte er doch die nächsten beiden Zeilen

Code:
      TAK   
      T     MD     4                    //dann neuen Wert in MD 4 schreiben

auch gleich umsetzen, da diese ja dann den (höheren) Wert von MD0 in MD4 schreiben, und sich somit ein neuer Maximalwert ergibt für den nächsten Zyklus.

Oder habe ich die <R Anweisung falsch verstanden?
 
Guten Morgen Praktikant,

der Vergleich <R ergibt, wie Du schon gemerkt hast, VKE = 1 wenn
der neue Wert kleiner ist als der gespeicherte Altwert.

Grüße
Gebs
 
Zuletzt bearbeitet:
Gleich soviele Antworten. Danke, aber ich bin jetzt noch immer etwas verwirrt...

Also es bleibt mit

Code:
L MD 0
L MD 4
<R

ja jetzt dabei dass VKE = 1 wenn MD0 < MD4 ?

Soweit ich das weiss wird ja bei zwei Ladeoperationen hintereinander der zuerst geladene Wert automatisch in AKKU 2 verschoben wenn der zweite geladen wird?
 
Zuletzt bearbeitet:
Ja, so ist es richtig.
Die Step 7-Hilfe sagt:
Beschreibung

L <Operand> lädt den Inhalt des adressierten Bytes, Wortes oder Doppelwortes in AKKU 1, nachdem zuvor der alte Inhalt von AKKU 1 in AKKU 2 gespeichert wurde und AKKU 1 auf "0" zurückgesetzt wurde.
Grüße
Gebs
 
RET_VAL enthält die Fehler- und Betriebsinfos des FC105, nachzulesen in der Bausteindoku des Bausteins. diese wird in deinem fall im MW50 gespeichert.

notwendig ist die angabe eines operanden, da der skalierungsbaustein eine funktion ist, wäre es ein funktionsbaustein (FB) könnte dieser ausgang unbeschaltet bleiben
 
RET_VAL Ausgang WORD E, A, M, D, L, P Gibt den Wert W#16#0000 aus, wenn die Operation fehlerfrei ausgeführt wird. Wird ein anderer Wert ausgegeben, entnehmen Sie der Fehlerinformation nähere Informationen hierzu.

Cursor auf FC105 --> "F1"
 
Zurück
Oben