Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Page 1 of 5 123 ... LastLast
Results 1 to 10 of 41

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

  1. #1
    Join Date
    12.11.2008
    Posts
    65
    Danke
    43
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich habe folgendes Problem: Ich soll mit meiner CPU314C-2PtP einen Analogwert über mehrere Sekunden einlesen, den Maximalwert dieser Zeit speichern und am Ende des Tests (es werden insgesamt vier verschiedene Analogwerte über diesen Kanal gemessen) sollen dann die vier Werte separat angezeigt werden auf einem TP177B.

    Als Praktikant der gerade mal eine Woche mit AWL in S7-300 programmiert bis ich jetzt natürlich total überfordet.

    Ich habe das Forum nach "Analogwert einlesen" durchforstet und bin diesem FC105 Baustein begegnet. Hier zunächst die erste Frage:

    Wie kriege ich den Wert vom Messverstärker in die CPU? Resp. wie soll meine Programmierung dabei aussehen?

    Laut Siemens-Ausbildungsunterlage sollte ich folgendes tun:

    U E 0.4 //Sensor meldet "Endposition erreicht"
    CC FC105 //Bausteinaufruf

    Wundersamerweise gibt die Unterlage aber nirgends an wo und wie man von welchem Eingang aus einliest, also gehe ich davon aus dass noch mehr dahinter steckt.

    Eingang in diesem Fall ist ein Kraftsensor 0...20kN mit dafür kalibriertem Messverstärker der 0...+10V ausgibt (und dann in den entsprechenden Analogeingang meiner CPU gesteckt wird)

    Und am Ende möchte ich dann von den vier verschiedenen Messungen jeweils den Maximalwert separat gespeichert haben und dann auf dem TP177B anzeigen lassen.

    Mit Gebastel und Raten könnte es irgendwie so aussehen:

    U E 0.4 //Sensor meldet "Endposition erreicht"
    CC FC105 //Bausteinaufruf
    L PEW 6 //Ist dies der richtige (erste) Eingang der CPU314C-2PtP?
    ???

    Wie gesagt ich habe danach gesucht hier, ich habe auch alle Threads durchgesehen die mir angezeigt wurden, aber so 100% Durchblick habe ich noch immer nicht. Bloss Links zu anderen Threads posten hilft mir wahrscheinlich nicht weiter

    Danke im Voraus,
    Euer (verzweifelter) Praktikant
    Reply With Quote Reply With Quote Einlesen eines Analogwertes über mehrere Sekunden, anschl. speichern und anzeigen  

  2. #2
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    fangen wir mal ganz langsam an. die FAQ zu dem thema hast du ja schon gelesen. da steht dann auch drinnen, wo du die adresse deines analogwertes findest, nämlich in der HW-konfig deiner station.

    den aufruf des FC105 würd ich mit CALL machen.

    die freigabe des einlesens ist soweit fast ok, bedingen kannst du den aufruf allerdings nur mit einem sprung, also:

    Code:
    *
          U     E      0.4                  //Sensor meldet "Endposition erreicht"
          SPBNB _001
          CALL  FC   105                    //Bausteinaufruf
          ...
    _001: NOP   0
    verstehe ich das richtig, dass du nur den maximalwert brauchst? da brauchst du dann zwei variablen, den wert des aktuellen zyklusses und denvergleichswert äqu. maximalwert. diesen letzten setzt du vor dem einlesen auf null. dann vergleichst du den aktuellen wert mit diesem maximalwert, wenn der aktuelle größer als der maximalwert ist, diesen dann umkopieren.

    ich denke, mit der einstellung der dauer der aufzeichnung gibt es erstmal keine probleme!?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Join Date
    12.11.2008
    Posts
    65
    Danke
    43
    Erhielt 0 Danke für 0 Beiträge

    Default

    Danke. Gute Idee den aktuellen Wert immer mit dem Maximalwert zu vergleichen und diesen zu überschreiben wenn der Erste grösser ist, da wäre ich jetzt auf Anhieb nicht darauf gekommen.

    Die Aufzeichnung beginnt wenn die Endposition erreicht ist ( U E 0.4 ) und endet wenn diese verlassen wird ( UN E 0.4 ).

    Aber irgendwie brauche ich dann doch noch eine Art Schleife weil ich während dieser Zeit ja wiederholt einlese?

    Irgendwas in der Art

    ...
    L 0 //0 in AKKU 1 laden
    T MD1 //0 nach Merkerdoppelwort 1 transferieren
    P000:U E 0.4 //Prüfen ob noch in Endlage
    SPBNB P001
    CALL FC 105
    L MD1
    L PEW 6 //angenommen es wäre dieser Analog-Eingang
    <I //wenn neuer Wert grösser als alter wert
    T MD1 //dann neuen Wert in MD1 schreiben
    SPA P000 //zurück zur Marke P000

    P001: NOP 0
    ...

    Und für die drei anderen Messungen dann genau der gleiche Vorgang, nur MD2 , MD3, und MD4 anstelle von MD1
    Last edited by DerPraktikant; 04.12.2008 at 11:41.

  4. #4
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    ohoh, wir haben noch viel zu tun

    als erstes: code-tags wären nett! danke...

    die schleife hast du durch die zyklische bearbeitung des programms, solange die wertskalierung aktiviert ist, wird diese jeden zyklus ausgeführt. zur freigabe der messung gehört dann noch die dauer der freigabe.

    das setzen auf null solltest du nur beim start der messung machen - stichwort flankenauswertung.

    MD1, MD2, MD3, MD4 ... owei owei ... schau dir auf jeden fall nochmal das speicherkonzept an!
    ein kurzer abriß:

    ein bit ist bestandteil von byte, word und dword
    8 bits sind ein byte
    2 byte sind ein word
    2 word sind ein dword

    und das schöne daran, sie sind bereichsübergreifend

    also das MD0 besteht aus MB0...MB3 ... also wäre das nächste freie dword das MD4, denn MD2 z.b. besteht aus MB2, MB3 (welche ja schon im MD0 drinnen sind), MB4 und MB5 bzw. MW2 und MW4 ... desweiteren empfehle ich dir immer durch zwei teilbar zu adressieren, das rechnet sich einfacher
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    DerPraktikant (04.12.2008)

  6. #5
    Join Date
    21.11.2007
    Posts
    226
    Danke
    200
    Erhielt 24 Danke für 21 Beiträge

    Default

    Hallo Praktikant,

    meines wissens hat der FC 105 eine EN (Freigabe zum bearbeiten des Baustens) benutz doch diesen eingang in verbindung mit dem Sensor.

    Sensor da.... Baustein FC 105 freigegeben.
    Sensor weg.. Baustein FC 105 gesperrt.

    vll hilfts dir.

    Gruß Johannes

  7. #6
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    Quote Originally Posted by Roos View Post
    meines wissens hat der FC 105 eine EN (Freigabe zum bearbeiten des Baustens) benutz doch diesen eingang in verbindung mit dem Sensor.
    nichts anderes machen wir mit dem sprung. schau dir mal deinen KUP-bausteinaufruf in AWL an
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Roos (04.12.2008)

  9. #7
    Join Date
    21.11.2007
    Posts
    226
    Danke
    200
    Erhielt 24 Danke für 21 Beiträge

    Default

    stimmt und durch die zyklische bearbeitung des Programmes springt er bei Änderung des Sensors zur Sprungmarke _001!

    Gruß

  10. #8
    Join Date
    12.11.2008
    Posts
    65
    Danke
    43
    Erhielt 0 Danke für 0 Beiträge

    Default

    Aaah eben dachte ich noch ich hätte es begriffen
    Ich erlaube mir mal Deinen Beitrag auseinander zu pflücken.

    ohoh, wir haben noch viel zu tun

    als erstes: code-tags wären nett! danke...
    Meinst Du so?

    Code:
    U E O.O
    S A 4.5
    die schleife hast du durch die zyklische bearbeitung des programms, solange die wertskalierung aktiviert ist, wird diese jeden zyklus ausgeführt. zur freigabe der messung gehört dann noch die dauer der freigabe.
    Verstehe ich das richtig dass das ganze Programm eh immer durchlaufen wird bis die Abbruchbedingung kommt? Wie gesagt, für zwei der Messungen kann ich nur schwer eine Dauer festlegen, da ein Hydraulikylinder solange an einer Schubstange zieht bis die Motorkupplung an der Schubstange durchdreht. Das dauert länger bei neuen Motoren als bei alten nehme ich an.

    das setzen auf null solltest du nur beim start der messung machen - stichwort flankenauswertung.
    Habe ich doch versucht, oder? Also zumindest war es so geplant, da die Sprungmarke ja unter dem Laden des Wertes 0 in AKKU 1 steht.

    MD1, MD2, MD3, MD4 ... owei owei ... schau dir auf jeden fall nochmal das speicherkonzept an!
    ein kurzer abriß:

    ein bit ist bestandteil von byte, word und dword
    8 bits sind ein byte
    2 byte sind ein word
    2 word sind ein dword

    und das schöne daran, sie sind bereichsübergreifend

    also das MD0 besteht aus MB0...MB3 ... also wäre das nächste freie dword das MD4, denn MD2 z.b. besteht aus MB2, MB3 (welche ja schon im MD0 drinnen sind), MB4 und MB5 bzw. MW2 und MW4 ... desweiteren empfehle ich dir immer durch zwei teilbar zu adressieren, das rechnet sich einfacher
    Ja, definitiv, wer lesen kann ist klar im Vorteil Das heisst ich sollte dann eher MD0, MD4, MD8 und MD12 zum Abspeichern meiner Maximalwerte?

  11. #9
    Join Date
    29.09.2008
    Location
    Land der Frühaufsteher
    Posts
    104
    Danke
    6
    Erhielt 22 Danke für 21 Beiträge

    Default

    Hallo
    Quote Originally Posted by DerPraktikant View Post
    L 0 //0 in AKKU 1 laden
    T MD1 //0 nach Merkerdoppelwort 1 transferieren
    P000:U E 0.4 //Prüfen ob noch in Endlage
    SPBNB P001
    CALL FC 105
    L MD1
    L PEW 6 //angenommen es wäre dieser Analog-Eingang
    <I //wenn neuer Wert grösser als alter wert
    SPB P000
    T MD1 //dann neuen Wert in MD1 schreiben
    SPA P000 //zurück zur Marke P000

    P001: NOP 0
    Transfer ist vom VKE unabhängig, du hättest immer PEW 6 ins MD 1 geschrieben.
    Generell wird diese Schleife nicht funktionieren! Wenn du nur 2s in der Endlage stehst wird deine Zykluszeit über 2000ms lang --> da ist die SPS schon längst im Stop.
    MfG
    FrankW

    ....Wer lesen kann ist klar im Vorteil.....

  12. #10
    Join Date
    08.04.2008
    Location
    Köln
    Posts
    846
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Praktikant,

    mit diesem Code schickst Du die SPS garantiert mit Zykluszeitüberschreitung in STOPP!

    Quote Originally Posted by DerPraktikant View Post
    L 0 //0 in AKKU 1 laden
    T MD1 //0 nach Merkerdoppelwort 1 transferieren
    P000:U E 0.4 //Prüfen ob noch in Endlage
    SPBNB P001
    CALL FC 105
    L MD1
    L PEW 6 //angenommen es wäre dieser Analog-Eingang
    <I //wenn neuer Wert grösser als alter wert
    T MD1 //dann neuen Wert in MD1 schreiben
    SPA P000 //zurück zur Marke P000

    P001: NOP 0
    Du springst immer wieder zur Marke P000 zurück. Da sich das PAE aber innerhalb eines Zykluses
    nicht ändert, kommst Du bei E 0.4 = 1 nie zur Marke P001!

    Besser wäre:
    Code:
    U E 0.4 //Prüfen ob noch in Endlage
    SPBN P001
    CALL FC 105
    L MD 0
    L PEW 6 //angenommen es wäre dieser Analog-Eingang
    <I //wenn neuer Wert grösser als alter wert
    SPB P001
    T MD 0 //dann neuen Wert in MD 0 schreiben
    
    P001: NOP 0
    Jetzt wird einmal pro Zyklus verglichen, ob sich der Wert geändert hat.

    Grüße
    Gebs

  13. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    DerPraktikant (04.12.2008)

Similar Threads

  1. Glättung eines Analogwertes
    By hank12 in forum Simatic
    Replies: 23
    Last Post: 27.11.2014, 21:49
  2. Replies: 25
    Last Post: 05.11.2014, 13:55
  3. Replies: 11
    Last Post: 19.05.2014, 10:35
  4. Suche Tool zur Darstellung eines Analogwertes
    By bludie in forum Suche - Biete
    Replies: 4
    Last Post: 22.08.2012, 15:06
  5. REAL Wert einlesen und speichern
    By Franzmann in forum Simatic
    Replies: 70
    Last Post: 19.06.2008, 10:41

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •