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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: Analogausgang ansteuern mit 2 Tastern

  1. #1
    Registriert seit
    19.08.2011
    Beiträge
    83
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich stehe etwas auf dem Schlauch und könnte Hilfe von Fachleuten gebrauchen.
    Ich hoffe, dass ich alle relevanten Angaben sofort richtig eingestellt habe.
    Also als neuer S7-User habe ich folgende „Herausforderung:“

    Ich möchte Analoge Ausgänge mit Tastern im Tippbetrieb ansteuern. (keine Regelung)
    Also einen Taster für – am Ende der Nahrungskette – Ventil etwas mehr auf und der andere Taster für Ventil etwas mehr zu.
    Das Ganze dann 3 mal – aber um es nicht zu verkomplizieren erst einmal einfache Variante,
    ich möchte das „verstehen“ nicht die Lösung.

    Ich habe auch schon einige hilfreiche Tipps auf der Siemens Seite gefunden.
    In diesem Fall S7-200 Tip009a.

    Mein Grundgedanke ist, mit dem einen Taster zähle ich einen Merker um Betrag X hoch und
    mit dem anderen Taster zähle ich den Merker um Betrag X runter.
    Den Wert des Merkers übergebe ich an den analogen Ausgang und der steuert mein Ventil (4-20mA).
    Das ich das Ganze dann nachher im Zahlenbereich noch begrenzen muss und Sicherheiten einbauen muss ist alles klar.
    Es geht erst einmal um das GRUNDSÄTZLICHE….

    Sytem:
    S7-200
    CPU 224XP
    Software S7-Micro/WIN

    Allerdings habe ich ein (wahrscheinlich syntax) Problem.
    Hier mal der Quellcode, wobei ich anmerken möchte, dass das alles erst mal auf meinem Schreibtisch als Testversion liegt,
    um überhaupt mal ein Gefühl für S7 zu bekommen.
    Ich weiß, dass man das später mit Unterprogrammen programmieren soll usw.
    Ich habe jetzt damit begonnen, den Tip009a für mich umzubauen, da ich nur positive Flanken nutzen möchte.
    Soweit ist alles klar.

    Code:
      Netzwerk 1 (alle Merker auf Null setzen einmalig 
    mit Sondermerker SM0.1 um defineirte Zustände zu erhalten)
       
      LD     Erst_Zykl_ein:SM0.1         // SM0.1 laden.
      MOVW   +0, Steigende_Flanke:MW1
      MOVW   +0, Fallende_Flanke:MW3
      MOVW   +0, Summe:MW5
       
      Netzwerk 2
      LD     E0.6                        // E0.6 laden.
      EU                                 // Bei einer steigenden
                                         // Flanke an E0.6,
      +I     +1000, Steigende_Flanke:MW1 // MW1 um 1000 erhöhen.
      MOVW   Summe:MW5, Steigende_Flanke:MW1
    Mit LD E0.7 kann ich dann den Merker runterzählen. Usw.

    Wenn ich mir nun die dazugehörige „Programmstatus Tabelle“ anschaue, dann sehe ich, wie LD E0.6 beim Tippen umspringt ABER
    in der Zeile „+I“ – also dort wo ich eigentlich zählen möchte zeigt die Tabelle OP1 = 1000 (was ja meiner Konstanten entspricht) und OP2 bleibt beharrlich auf 0 …..
    Das gleiche eine Zeile tiefer beim Übergeben an den Merker MW5
    (war mal so ein Gedanke, dass ich das Ergebnis erst einem neuen Merker müsste.
    Wobei die ONLINE HILFE ja sagt, dass bei „ +I IN1+OUT=OUT wäre…..)

    Fragen:
    1. Wo ist mein Gedankenfehler?
    2. Welche Größe sollte der Merker haben? Sollte er schon in der Testphase in WORD-Breite sein oder reicht da byte?

    3. Noch ne andere Baustelle:
    Was bedeuten die „#“ Zeichen z.B. in folgender Zeile (Tipp 38 Übergabe an Analog OUT)

    z.B.
    MOVR #OSH:LD6, #Ausgang:LD14 // Berechneten Ausgangswert in Ausgang
    // übertragen


    So ich hoffe, ich habe mich verständlich ausgedrückt bei meinem kleinen Problem.

    Danke für die Hilfe
    Detto

    Nachtrag hab das ganze mal mit Code "verschönert"
    Geändert von Detto (23.08.2011 um 11:43 Uhr)
    Zitieren Zitieren Analogausgang ansteuern mit 2 Tastern  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    So ungefähr,

    Code:
    NETWORK 1
    LD     E0.6
    EU
    +I     +1000, MW1

  3. #3
    Detto ist offline Benutzer
    Themenstarter
    Registriert seit
    19.08.2011
    Beiträge
    83
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Verpolt Beitrag anzeigen
    So ungefähr,

    Code:
    NETWORK 1
    LD     E0.6
    EU
    +I     +1000, MW1

    Hallo Verpolt,
    das steht da ja so....
    Nur ist halt steigende_Flanke dem Merker MW1 in der symbolisierten Sprache zugeordnet.

    So hatte ich mir das ja eigentlich gedacht. die positive Flanke (EU = WAHR)
    sagt: zähle MW1 um 1.000 hoch.

    Nur wird das nciht ind er Tabelle angezeigt.

  4. #4
    Detto ist offline Benutzer
    Themenstarter
    Registriert seit
    19.08.2011
    Beiträge
    83
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo,

    so ich bin einen Schritt weiter:
    (versuche das mal ordentlich mit "CODE" hinzubekommen....
    Code:
    LD     E0.6                        // E0.0 laden.
    EU                                 // Bei einer steigenden
                                       // Flanke an E0.0,
    +I     +3200, Steigende_Flanke:MW1 // MW1 um 1 erhöhen.
    MOVW   Steigende_Flanke:MW1, AAW6
    
    LD     E0.7                        // E0.1 laden.
    EU                                 // Bei einer steigenden 
                                       // Flanke an E0.7,
    +I     -3200, Steigende_Flanke:MW1 // MW1 um 1 erhöhen.
    MOVW   Steigende_Flanke:MW1, AAW6
    Bitte die Kommentare ignorieren....

    Was ich nicht verstehe ist, ich arbeite nur im OB1, d.h. doch ich habe nur globale Variablen oder?

    Wenn ich jetzt LD E0.6 (für höher) und LD E0.7 (für niedriger) in zwei verschiedenen Netzwerken programmiere dann klappt das nicht.

    WIESO???
    Denn nach meinem Verständnis müsste doch der Wert von MW1 in beiden Netzwerken (im OB1) vorhanden sein oder...????


    STOP - vergesst das vorher geschriebene:
    Ich habe das jetzt mal in ein "sauberes" neues Projekt kopiert und siehe da, es geht.
    Zwischen rauf und runter gibt es noch eine Berechnung mit LDW - da liegt wohl der Fehler....




    Der Wert 3200 ist nur so groß, damit ich beim testen was sehe. Jetzt komm ich zum nächsten Problem - der elfte Taster da springt mein Wert ja um auf -10V ....


    Ich würde das jetzt als Unterprogramm anlegen - oder?
    Etwa so:
    LD E0.6 (TASTER) ruft Unterprogramm auf
    Das zählt den Wert hoch
    überprüft diesen und begrenzt Ihn bzw. nachher die Skalierung auch für 4 - 20mA usw.
    Schickt den Wert an den analogen Ausgang
    und springt zurück in den OB1

    Das gleiche dann als eigenständiges Unterprogramm für taster ZU

    Wären dann 6 Unterprogramme für 3 Ventile

    Ist das so ordentlich programmiert??

    Detto
    Geändert von Detto (23.08.2011 um 11:54 Uhr)

  5. #5
    Registriert seit
    30.08.2010
    Ort
    Östereich
    Beiträge
    1.458
    Danke
    502
    Erhielt 217 Danke für 192 Beiträge

    Standard

    was passiert bei Wort mit Vorzeichen wenn du 32.### übersteigst?
    Elektrotechnik und Elektronik funktioniert mit Rauch (Beweis: Tritt Rauch aus, funktioniert auch das Bauteil nicht mehr)

  6. #6
    Registriert seit
    06.08.2011
    Beiträge
    9
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    benutzt du noch andere MW´s neben MW1?
    Vielleicht noch MW0,MW2,MW3,MW4,MW5,...usw.?
    du solltest dir mal die Speicherbelegung ansehen.
    MW0, MW1, MW2...usw überschneiden sich
    verwende MW0,MW2,MW4,MW6...usw.

    mach dir ein unterprogramm das die funktion erfüllt inkl. Parameterübergabe über die Schnittstelle (IN, OUT, IN/OUT).
    ruf es für jedes ventil mit anderen parametern auf.
    Falls deine cpu den parametrierten unterprogrammaufruf nicht unterstützt
    musst du drei unterprogramme verwenden. (CPU224 müsste aber gehen)
    diese drei unterprogramme sind identisch bis auf die "ein- und ausgangsvariablen"
    - sprich für jedes unterprogramm andere tastereingänge und MW´s

  7. #7
    Detto ist offline Benutzer
    Themenstarter
    Registriert seit
    19.08.2011
    Beiträge
    83
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Guten morgen,

    @ Winnmann
    natürlcih springt beim überschreiten der Wert von +10V auf -10V ...
    Die Begrenzung ist ja die nächste Aufgabe....

    @ Sieben
    Die oben aufgeführten Merker sind noch Altlasten und werden in dem Testprogramm nicht benutzt.
    Wie Du am Ende meines Beitrages lesen kannst, habe ich ja schon geschrieben, dass ich 6 Unterprogramme schreiben werde.
    Ist im Prinzip ja nur einmal schreiben udn dann 5 mal mit den passenden Variablen kopieren.....

    @ ALL

    Ich habe jetzt den Tastereingang UND mäßig mit einem Taktmerker, so dass es man den Taster nur betätigen muss und der Ausgang "langsam" Ansteigt....

    Jetzt muss ich nur noch die Begrenzung und den "lebenden Nullpunkt" der 4 - 20mA umsetzen. Weil Regelungstechnikewr ja nciht mit 0-10V arbeiten .... (igitt)

    Grüße
    Detto

  8. #8
    Detto ist offline Benutzer
    Themenstarter
    Registriert seit
    19.08.2011
    Beiträge
    83
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Böse

    Hallo zusammen,

    ich bin jetzt etwas weiter…

    Damit keine Fragen aufkommen:
    - S7 – 200
    - CPU 224 XP

    Ich fasse den jetzigen Stand der Dinge noch mal kurz zusammen

    Ich möchte diverse Stellglieder mit 4..20mA ansteuern.
    Diese sollen über Taster angesteuert werden. Sowohl in positiver als auch negativer Richtung.
    Damit man nicht 200 mal auf den Taster drücken muss, habe ich den Taster mit einem Taktgeber verknüpft.
    Vielen Dank nochmal an "Junior" der Taktgeber ist "coool"
    So sollte der Analogausgang kontinuierlich verändert werden können.
    Also Anlagen-Fahrer drückt und hält den „AUF“ Taster und das Stellglied fährt solange bis der Taster nicht mehr gedrückt wird.

    Bitte keine Diskussionen über den Taktgeber, die Schrittweite usw. Auch das ich unterschiedliche Timer und Merker benutzen muss ist klar.
    Das kommt alles später beim Finetuning, da es sich auch um unterschiedliche Stellglieder handelt. Ich habe mit der Begrenzung ein Verständnisproblem und habe mal den Code beigefügt.
    Darauf ziehlt auch meine Frage:

    Code:
    LD     E1.4
    LDN    T37
    U      E0.0
    TON    T37, 8
    UW>    T37, 4
    =      M5.1
    U      E1.4
    U      M5.1
    +I     +10, MW11
    UW>    MW11, 32000
    MOVW   32000, MW11
    MOVW   MW11, AAW0
    Am Anfang frage ich diverse Taster ab und starte den Timer
    Dann zähle ich den Merker (in diesem Fall MW11) hoch bzw. runter bei MINUS - Danke nochmal für den Tipp mit dem überschneiden der Merker!
    Wobei ich nicht weiß wie man sich den Speicherbereich anschaut
    und jetzt kommt es!!!


    Dann möchte nein MUSS ich das Wort auf den Bereich 6.400 und 32.000 begrenzen.
    Dazu frage ich bei Plus ab ob es größer 32.000 ist und falls JA – also wenn VKE „true“ ist soll der Wert 32.000 in den Merker MW11 übergeben werden (und später in AAW0).

    Falls nicht, also wenn MW11 kleiner 32.000 ist soll er ganz einfach den Wert an den analogen Ausgang AAW0 geben.


    Ich weiß, dass man das sauberer mit einem Aufruf programmieren kann, aber es ist ein sehr
    überschaubares Projekt bis jetzt und es ist auch meine erste S7 Programmierung, von daher erstmal langsam laufen lernen. Das ist ja nicht in STEIN gemeißelt….

    Da die S7 jetzt im Labor ist und ich den restlichen kram im Büro programmiere, also nur auf Papier und aus Büchern frage ich lieber mal, die die sich mit so was auskennen.

    Ich hatte das bis zur +I Zeile schon mal programmiert und auch getestet (siehe OBEN), also das „zählen klappt. Es geht mir um die Begrenzung.

    Besten Dank für alle konstruktiven Tipps und Erklärungen.

    Detto
    Geändert von Detto (07.10.2011 um 07:56 Uhr)

  9. #9
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.568
    Danke
    63
    Erhielt 258 Danke für 218 Beiträge

    Standard

    Zuerst noch ein paar Tipps:

    1. Versuche möglichst, symbolisch zu programmieren. Die absoluten Adressen machen den Code schlecht lesbar. (Dazu in der Variablentabelle aussagekräftige Symbol(-Namen) zuweisen
    2. Merkerwörter sollten nach Möglichkeit IMMER "gerade Adressen" sein. (MW2, MW4, ...) Das verhindert versehentliche Überschneidungen, was ein häufiger Anfängerfehler ist und oft zu kangen Fehlersuchen führt.
    3. Die Begrenzung würde ich schon "vorher" machen:

    Vergleichen ob MW11 <= 31990, dann +10, sonst nicht mehr erhöhen.
    Geändert von Tigerente1974 (07.10.2011 um 09:59 Uhr) Grund: Korrektur
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  10. #10
    Detto ist offline Benutzer
    Themenstarter
    Registriert seit
    19.08.2011
    Beiträge
    83
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Zuerst noch ein paar Tipps:

    1. Versuche möglichst, symbolisch zu programmieren. Die absoluten Adressen machen den Code schlecht lesbar. (Dazu in der Variablentabelle aussagekräftige Symbol(-Namen) zuweisen
    2. Merkerwörter sollten nach Möglichkeit IMMER "gerade Adressen" sein. (MW2, MW4, ...) Das verhindert versehentliche Überschneidungen, was ein häufiger Anfängerfehler ist und oft zu kangen Fehlersuchen führt.
    3. Die Begrenzung würde ich schon "vorher" machen:

    Vergleichen ob MW11 <= 31990, dann +10, sonst nicht mehr erhöhen.
    Hallo Tigerente,

    vielen Dank für die Hinweise.
    zu 1. Ja werde ich machen, jetzt komme ich damit aber noch klar
    zu 2. Das mit den MW wurde vorher schon mal angemerkt und wird
    demnächst von mir beachtet werden. Also MW 10 MW 12 usw....
    zu 3. Das mit dem VORHER Vergleichen ist ein guter Tip. Und wie erwähnt, muss da auch nicht bis auf 32.000 ausgereizt werden....

    Meine Frage ging aber dahin, ob das wirklich so einfach geht, wie ich es im Code ab "+I" geschrieben habe. Ich meine das mit der Begrenzung ...

    Code:
    UW<=    MW11, 31990 
    +I     +10, MW11 
    MOVW   MW11, AAW0
    Detto
    Geändert von Detto (07.10.2011 um 10:45 Uhr)

Ähnliche Themen

  1. Analogausgang mit Rampe ansteuern (S7-200)
    Von sukram1711 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.03.2010, 17:08
  2. Sicherheitsgerichtete Ein/Aus-Schaltung bzw. Umschaltung mit mehreren Tastern
    Von Amaryl im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 0
    Letzter Beitrag: 18.02.2010, 16:29
  3. Analogausgang ansteuern
    Von 00schneider im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 17.12.2009, 23:21
  4. Antworten: 7
    Letzter Beitrag: 14.05.2009, 12:44
  5. Antworten: 1
    Letzter Beitrag: 12.06.2006, 07:25

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •