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

Ergebnis 1 bis 8 von 8

Thema: Schieberegister mit S7-200

  1. #1
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich möchte gerne ein Schieberegister mit unten aufgelisteten Eigenschaften programmieren, habe aber keine Idee, wie !

    - Mit 2 Ausgängen (z.B.: A0.0 u A0.1) solle 4 Zustände dargestellt werden:
    A1 A0
    0 0
    1 0
    0 1
    1 1

    Für A0 soll also ein SR mit dem Wert 0011 und für A1 mit dem Wert 0101 programmiert werden.
    Ich möchte diese beiden Werte auch rückwärts laufen lassen können. Ich verwende zum Programmieren Step7/Win32 Software und eine S7-200.
    Kann mir jemand helfen ???

    Besten Dank,
    Christoph
    Zitieren Zitieren Gelöst: Schieberegister mit S7-200  

  2. "
    Zitat Zitat von christoph
    AWL:
    LD E0.0 // den habe ich als "Taktgeber bei pos. Flanke" genutzt
    Wie das ? Meiner Meinung nach gibt das solange true, wahr oder 1, wie der E0.0 eingeschaltet ist. Oder gibt es bei der 200 so etwas, dass man eine Flankenerkennung als Eigenschaft des Eingangs parametrieren kann?
    Wenn nicht, würde ich sagen, das schreibt in jedem Zyklus wieder 85 rein und rotiert es um 1 solange der Eingang ansteht.
    Das Ergebnis ist immer 2*85.
    Wenn Du jetzt den Eingang wegnimmst, lädt es weder den Wert
    noch rotiert es etwas und das Ergebnis des vorigen Zyklus bleibt im Speicher.
    Was Du willst ist wahrscheilich folgendes:
    1. Lade beim Start einen Anfangswert
    Code:
    LD SM0.1  // nur im 1. Zyklus 1 wenn ich mich recht erinnere
     // sonst Handbuch  
    MOV 85,VB2
    2. Rotiere bei positiver Flanke an E0.0
    2a: Erkennen der Flanke:
    Code:
    LD E0.0
    AN M0.0  // voriger Zustand von E0.0
    ST M0.1  // nur 1 bei pos Flanke
    LD E0.0
    ST M0.0  // fürs nächste Mal merken
    2b: bei Flanke rotieren:
    Code:
    LD M0.1
    RLB VB2,1
    Das muss nicht ganz exakt soo funktionieren, hatte selten mit der 200 zu tun. Daher weiß ich jetzt nich ob man im V-Bereich bits ansprechen kann. Wenn ja
    Code:
    LD VB2.0
    ST A0.0
    Wenn nicht über MB als Zwischenspeicher
    Code:
    MOV VB2.0, MB2.0 //oder was frei ist
    LD M2.0 
    ST A0.0
    "


  3. #2
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Da die Ausgangskombinationen ja Binärzahlen sind, geht es
    einfacher:
    Code:
    ADD zaehler,1
    mov zaehler,mb0
    ld m0.0
    st a0.0
    ld m0.1
    st a0.1
    (Hoffe, das ist so richtig, habe nicht oft mit der 200 zu tun)
    Im prinzip wird also laufend der Zähler erhöht und die untersten bits auf die Ausgänge kopiert.
    So passiert es einmal pro Zyklus.
    Wenn Du das von einem Takt abhängig machen, wilst, nur bei einer Flanke des Takts aus führen.
    Rückwärtslauf: statt 1 -1 addieren
    Hier wir noch ausgenutzt ,das sich die unteen 2 bit immer wiederholen, egal wie hoch der Zaähler steht. Soll er nur 4 Zustände (0-3) durchlaufen, kannst Du auf 4 testen und wenn ja, dann auf 0 setzen.
    Beliebige Muster (nach Art programmierbarer Lauflichter) lassen sich am einfachsten über eine Tabelle realisieren.
    Prinzip:
    der Zähler läuft durch.
    Wenn er auf 3 steht, kopierst Du das Muster im 3. Eintrag der Tabelle in die Ausgänge usw.
    Das ist flexibler als Schieberegister.[/code]

  4. #3
    Registriert seit
    22.06.2003
    Beiträge
    242
    Danke
    9
    Erhielt 19 Danke für 19 Beiträge

    Standard

    Hallo
    "Zottel" hat recht (wie immer). Dein Ausgangsmuster ist weniger Schieberegister, sondern eher Zähler.
    Schieben /Rotieren (in S7-200 "slang": SHL_B, SHR_B, ROR_B, ROL_B) besagt das der im Accu vorhandene Wert (Byte, Wort, DW) jeweils um x_Stellen bewegt wird - und beim Schieben "von hinten" mit NULLEN aufgefüllt wird. Beim Rotieren kommt hinten wieder rein was vorne rausfliegt :=> natürlich je nach Richtung.
    Gesetzt den Fall du lädts Bitmuster 10110000 (dec_176, hex_0xB0) und rotierst links hättest du im Ausgangszustand A0.0 = 0, Danach A0.0 = 1, dann wieder 0, nächtesmal 1 etc. Und das müsstest du auf alle vier Bits programmieren. So'n Schieberegister ist mehr was fürn "Lauflicht", oder zum Multiplizieren /Dividieren. - Aber gehen würde das aUCH:
    ***)Dabei werden bei der S7-200 nur die physikalisch vorhandenen Ausgänge angesprochen ... das ist etwas komisch da das PAA eigentlich 128 Bit verwaltet. Wenn du also e.g. nur 4 Ausgänge an der CPU hast und schiebst /rotierst 8mal (ein Byte), biste 2 mal rum !!! ich hab' auch gestaunt. hier ist das bei 'ner 221 jedenfalls so ... (***

    Einfacher gehts noch mit INC (inkrementieren). INC_B. Du lädts "0" und erhöhst jeweils (pro Zeitakt, oder Zählerstufe) um 1.



    mfg
    tobias

  5. #4
    Anonymous Gast

    Standard

    Vielen Dank für eure Mühe, aber das ist alles noch etwas schwierig für mich, da ich noch ein "Frischling" bin...
    Also ich habe jetzt mal die Funktion "Byte links rotieren" ausprobiert und stoße nun auf folgendes Problem:

    AWL:
    LD E0.0 // den habe ich als "Taktgeber bei pos. Flanke" genutzt
    MOVB 85, VB2 // lädt Byte85 (also: 0101 0101) in Speicher VB2
    RLB VB2, 1 // soll das Byte um 1 nach links rotieren lassen.

    Wenn ich das Programm reinlade, steht im Speicher VB2->0000 0000.
    Betätige ich nun meinen Schalter an E0.0 steht 1010 1010im Speicher. Schön und gut bisher. Aber wenn ich jetzt meinen Schalter aus und dann wieder ein schalte, sollte doch nun eigentlich das Muster -> 0101 0101im Speicher stehen, da um "1" nach links rotiert wurde. Es tut sich aber nichts. Warum rotiert der Wert denn nur einmal. er sollte doch eigentlich bei jedem einschalten jeweils um "1" rotieren, oder?

    Zweite Frage:
    Wie kann ich den Wert z.B. des ersten Bits an A0.0 darstellen, also A0.0 =1 und dann wieder A0.0=0 usw....

    Vielen Dank im Voraus
    Christoph

  6. #5
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von christoph
    AWL:
    LD E0.0 // den habe ich als "Taktgeber bei pos. Flanke" genutzt
    Wie das ? Meiner Meinung nach gibt das solange true, wahr oder 1, wie der E0.0 eingeschaltet ist. Oder gibt es bei der 200 so etwas, dass man eine Flankenerkennung als Eigenschaft des Eingangs parametrieren kann?
    Wenn nicht, würde ich sagen, das schreibt in jedem Zyklus wieder 85 rein und rotiert es um 1 solange der Eingang ansteht.
    Das Ergebnis ist immer 2*85.
    Wenn Du jetzt den Eingang wegnimmst, lädt es weder den Wert
    noch rotiert es etwas und das Ergebnis des vorigen Zyklus bleibt im Speicher.
    Was Du willst ist wahrscheilich folgendes:
    1. Lade beim Start einen Anfangswert
    Code:
    LD SM0.1  // nur im 1. Zyklus 1 wenn ich mich recht erinnere
     // sonst Handbuch  
    MOV 85,VB2
    2. Rotiere bei positiver Flanke an E0.0
    2a: Erkennen der Flanke:
    Code:
    LD E0.0
    AN M0.0  // voriger Zustand von E0.0
    ST M0.1  // nur 1 bei pos Flanke
    LD E0.0
    ST M0.0  // fürs nächste Mal merken
    2b: bei Flanke rotieren:
    Code:
    LD M0.1
    RLB VB2,1
    Das muss nicht ganz exakt soo funktionieren, hatte selten mit der 200 zu tun. Daher weiß ich jetzt nich ob man im V-Bereich bits ansprechen kann. Wenn ja
    Code:
    LD VB2.0
    ST A0.0
    Wenn nicht über MB als Zwischenspeicher
    Code:
    MOV VB2.0, MB2.0 //oder was frei ist
    LD M2.0 
    ST A0.0

  7. #6
    Registriert seit
    22.06.2003
    Beiträge
    242
    Danke
    9
    Erhielt 19 Danke für 19 Beiträge

    Standard

    Hallo

    >>LD E0.0 // den habe ich als "Taktgeber bei pos. Flanke" genutzt

    Also 'ne positive Flanke muss anders ausgewertet werden. Aus KOP rausgekupfert sieht die (auf die Schnelle) so aus:

    LD E0.0
    EU
    = A0.0
    (so ergibts zwar keinen Sinn - aber EU _muss_ sein)
    eU:= up (pos. Flanke)
    eD:= down (neg. Flanke) // was "E" heisst weiss ich nicht mehr.

    Mit dieser Flanke (Wischer für einen Zyklus) musst du eigentlich einen Zähler/ Zeit bedienen - um einen Taktgeber zu erzeugen; das geht aber in S7-200 auch direkt.
    Wenn du's ohne EU versuchst schiebt/ rotiert die Mimik wohl auch - nur eben als Maschinengewehr und das wird dann wahrscheinlich nur am Oszilloskop sichtbar sein.

    Ich bin mir aus dem Stand nicht sicher ob da noch was fehlt - aber "EU" ist richtig. (In KOP ist das "P" in der Kontaktauswahl).
    mfg
    tobias

  8. #7
    Anonymous Gast

    Standard

    Zu Zottel:

    Ich habe deine AWL- Befehle eingegeben und teilweise geringfügig geändert. Wie Tobias schon mal sagte: Du hast Recht(wie immer)....
    ... es funktioniert einwandfrei. Dafür schonmal Danke. Den V-Bereich kann man auch ansprechen. Anstatt VB0= A0.0 muss man nur den Bitwert nehmen, also V0.0 bis V0.7 = A0.0, je nachdem welches Bit man haben möchte. Das nur so zur Info.

    Zu Tobias:

    LD E0.0
    EU -------> Das meinte ich eigentlich mit pos. Flanke. Damit arbeite ich
    auch die ganze Zeit. Mit deiner Beschreibung hast du vollkommen recht.


    Ich werde jetzt mal weiter tüfteln, dabei treten bestimmt noch mehr Fragen auf. Werde sie dann wieder hier posten. Danke nochmal.

    MfG

    Christoph

  9. #8
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    Fällt mir grad ein:
    Habe hier 'ne (fast vergessene) 221 als Lichtschalter mitlaufen. Das entstand da ich sonntagsfrüh nur noch einen Taster in der Kiste fand - um damit jede GaragenLaterne einzeln zu schalten. Seit über zwei Jahren läuft das - weils kurz vor der Kirche "mal eben" entstand ists sicherlich nicht die hohe Programmierschule - zudem unkommentiert bekomme ich den gesamten Sinn einzelner Networks so auch nicht mehr zusammen.

    Das macht folgendes mit 1 Taster:=
    kurz drücken der ElTakko der Hauptlampe (Ein/Aus)
    etwas festhalten zählt es alle (16 da 221 mit 4 Ausgängen) Möglichkeiten zeitgetaktet durch. Und wenn der Taster "ganz lange" gedrückt ist geht alles aus - weils bei 0000 0000 stehen bleibt bis der Taster losgelassen wird.

    Ist vielleicht'n bischen lang um es hier zu verewigen - wenn du es haben willst (MicroWin 3.1 /Spk2 - CPU22x) musste es sagen.

    Gruss
    tobias

Ähnliche Themen

  1. B&R Schieberegister?
    Von Anaconda55 im Forum CODESYS und IEC61131
    Antworten: 20
    Letzter Beitrag: 07.09.2009, 02:05
  2. Schieberegister mit S7-300
    Von Spag im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 06.08.2008, 13:06
  3. Schieberegister
    Von Schenker im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 08.10.2007, 11:09
  4. Schieberegister
    Von Mütze im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 22.10.2006, 06:01
  5. Schieberegister
    Von Anonymous im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 30.01.2006, 08:47

Lesezeichen

Berechtigungen

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