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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 29

Thema: For-Schleife und IF-Anweisung

  1. #11
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also erstmal sollte Dir bewußt sein, daß alles binär gespeichert und verarbeitet wird, egal in welcher Form du es angibst.

    1.:
    Bei L 55 steht also nicht 0.055 im Accu, sondern 0000 0000 0011 0111 (PS: was dann im Adressregister als 6.7 interpretiert wird).
    Nach dem Linksschieben ist's dann 0000 0001 1011 1000 (was dann im Adressregister als 55.0 interpretiert wird).
    War noch nicht wirklich falsch, aber man sollte wissen, was man macht.

    2.:
    Dann lädst Du 0 in den Accu, damit steht dort 0000 0000 0000 0000.
    Das willst Du dem Ausgang A0.0 zuweisen (und danach A0.1, A0.2 ...) wie sollen denn in das eine Bit 16 Bitstellen passen?
    Du hast zwei Möglichkeiten - entweder Du bringst das VKE auf 0, z.B. mit CLR und weist dies den Ausgängen zu:
    Code:
    CLR
    = A 0.0
    = A 0.1
    PS2: Funktioniert zwar so, ist aber programmiertechnisch nicht schön - Zuweisungen von Ausgängen sollten nur an einer Stelle im Programm gemacht werden und nicht mehrfach, wie es hier wahrscheinlich nötig wäre.

    oder Du transferierst die 0 auf das Ausgangsbyte/-word:
    Code:
    L 0
    T AB 0

    3.:
    Mit z.B. "Anfang:" kann AWL nichts anfangen. Wenn es für Dich ein Kommentar sein soll, dann mußt Du es durch // für AWL kennzeichnen.
    Soll's 'ne Sprungmarke sein:
    Zitat Zitat von F1
    Die Sprungmarke kennzeichnet das Ziel einer Sprungoperation. Es besteht aus 4 Zeichen - erstes Zeichen: Buchstabe; restliche Zeichen: Buchstaben oder Zahlen; z.B. CAS1.

    Reicht mir erst mal an Hinweisen. Schau Dir bitte wirklich erstmal die von verpolt PS: bzw. die von SoftMachine angegebenen Beispiele und Lernunterlagen an.
    Geändert von hucki (26.06.2012 um 22:26 Uhr) Grund: PS

  2. #12
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    Zitat Zitat von Verpolt Beitrag anzeigen
    Nicht ganz. Simatic hat unter beispielprojekte hilfe. F1 auch.
    Siemens im www ausbildungsunterlagen zu awl.
    Zitat Zitat von matthias Beitrag anzeigen

    Ich hab gerade mal nach den Ausbildungsunterlagen gesucht aber leider nichts gefunden.

    MfG Matthias
    Zitat Zitat von hucki Beitrag anzeigen
    ...
    Reicht mir erst mal an Hinweisen. Schau Dir bitte wirklich erstmal die von verpolt angegebenen Beispiele und Lernunterlagen an.

    Matthias,schau vielleicht mal hier:

    http://www.automation.siemens.com/mc...n/Default.aspx
    kind regards
    SoftMachine

  3. #13
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.648
    Danke
    789
    Erhielt 654 Danke für 497 Beiträge

    Standard

    ups wurde ja alles schon gesagt.

  4. #14
    Registriert seit
    06.01.2012
    Ort
    Papenburg
    Beiträge
    114
    Danke
    25
    Erhielt 27 Danke für 13 Beiträge

    Standard

    Hey,

    deine Steuerung wird dein Programm aber nicht verarbeiten könne. Bei den 1200er Steuerungen wird kein AWL unterstüzt!
    Schau mal hier: Auszug S7-1200_transition_manual.pdf

    SCL wird mitlerweile unterstützt...

    Gruß
    Sascha
    Geändert von Zersch (27.06.2012 um 10:52 Uhr)

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

    Standard

    Zitat Zitat von Zersch Beitrag anzeigen
    Hey,

    deine Steuerung wird dein Programm aber nicht verarbeiten könne. Bei den 1200er Steuerungen wird kein AWL unterstüzt!
    Solange man mit der S7-1200 auch irgendwie If Anweisungen umsetzen kann ist es nicht schlimm.
    Primär geht es mir um die Übertragung von der C7 zu der S7.

    Noch eine Frage:
    Die gesamte C7-621 ist mit FUP programmiert. Kann ich da einfach ein Stück AWL enfügen?
    _________________________

  6. #16
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Hallo Verpolt,

    soweit ich das im Kopf hab ist die C7-621 doch eigentlich eine S7-300.

    Korrigiert mich wenn ich da falsch gewickelt bin.
    mfG Aventinus

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

    Standard

    Zitat Zitat von Aventinus Beitrag anzeigen
    Hallo Verpolt,

    soweit ich das im Kopf hab ist die C7-621 doch eigentlich eine S7-300.

    Korrigiert mich wenn ich da falsch gewickelt bin.
    Bin deiner Meinung.

    Wollte nur Zersch zeigen, daß es um die "S7-300" geht und nicht mehr um die 1200er

  8. #18
    Registriert seit
    06.01.2012
    Ort
    Papenburg
    Beiträge
    114
    Danke
    25
    Erhielt 27 Danke für 13 Beiträge

    Standard

    Wer lesen kann ist klar im Vorteil
    Sorry!!
    Theorie ist, wenn man alles weiß aber nichts funktioniert. Praxis ist, wenn alles funktioniert aber keiner weiß warum.
    Bei mir ist Theorie und Praxis vereint. Nichts funktioniert und keiner weiß warum.



  9. #19
    Registriert seit
    26.06.2012
    Beiträge
    36
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So Versuch NR.2

    EDIT:
    1. Sprungmarken berichtigt
    2. Für das Setzen der Ausgänge eine 0 erzeugt
    3. Verstanden, dass Zahlen binär gespeichert und verschoben werden (Hat nur an den Kommentaren was geändert)
    4. Ein Ende für die Schleife eingebaut (Sprungmarke End: )

    Fragen:
    1. Normal werden die Ausgangswerte doch in das Prozessabbild geschrieben und gelangen von dort aus nach dem Programmzyklus an die Ausgänge. Ich müsste ja mehrmals im Programm meine Ausgänge verändern. geht das überhaupt?
    2. Was muss ich sonst noch verbessern?

    MfG Matthias

    Code:
    Programm:
     
     
    L                             55                                        // Läd eine 110.111
    SLD                         3                                          // Verschiebe 3 Stellen nach links à 110111.000
    T                             #Zaehler                               // schreibe 110111.000 in #Zaehler
    L                             0                                        // Lade eine 0.000
    T                             #Zaehlersenden                     // schreibe 0.000 in #Zaehlersenden
     
    Anf:                                                                       // Anfang der Schleife
                                                                  
    L                             0                                             //  erzeuge eine 0 weil 0<>1
    L                             1                                             
    ==I
    S                             A 0.0                                      // Setze alle Ausgänge=0
    S                             A 0.1
    S                             A 0.2
    S                             A 0.3
    S                             A 0.4
    S                             A 0.5
    S                             A 0.6
    S                             A 0.7
     
    L                             #Zaehler                             // Lade Zähler
    LAR1                                                                // keine Ahnung
    L                             DB1 [AR1,P#0.0]                  // Läd den Inhalt des Bits 55.0 aus DB1
    T                             #GespeicherterWert              // Speichert das Ergebniss aus DB1 55.0 in #...
    L                             E [AR1,P#0.0]                      // Läd den Zustand des Eingangs 55.0 ?? Eingänge Reihe
    T                             #AktuellerWert                    // Speichert den Zustand des Eingangs 55.0
    X                             #GespeicherterWert             // Vergleicht #Gesp mit #Aktu.
    X                             #AktuellerWert                    // Vergleicht #Gesp mit #Aktu.
    SPB                         Se0:                                  // Wenn #Gesp ungleich #Aktu ist, dann springe zu Se0:
     
    Mit:                                                                        // Sprungmarke
     
    L                             #Zaehler                                 // Lade Zähler
    +AR1                                                                    // Addiere 1 mit 55.0 à 55.1
    T                             #Zaehler                                 // Speichere Wert in #Zaehler
    L                             150                                        // Lade eine 10010110
    SLD                          3                                          // Verschiebe 3 Stellen nach links à 10010110.000
    L                             #Zaehler                            
    >                                                                         //  wenn =1 dann Schleife beenden
    SPB                        End:                                       // Schleife beenden
    SPA                       Anf:                                        // Springe zum Anfang der Schleife
     
    Se0:
     
    L                             #AktuellerWert                    // Überprüft ob der aktuelle Wert=1 ist
    L                             1
    ==I                                                                          // Wenn sich der Wert von 0 auf 1 geändert hat, dann ist das Ergebnis 1. Sonst ist es 0 (Der erste Wert der Binärzahl von Links gibt an ob das Signal 1 oder 0 ist. Die anderen sieben geben an um welches Signal es sich handelt.)
    SPB                       Se1:                                       // Wenn Ergebnis=1 dann Springe zu SendenON
     
    NOT                                                                       // Setze Ausgang 0.0=1
    S                             A 0.0                                      // Setze Ausgang 0.0=1
     
    Se1:                                                                      // Dezimalzahl >64 dann muss die 2. Stelle der Binärzahl 1 sein
    L                             #Zaehlersenden                 
    L                             64
    >I
    SPBN                    Se2:
    S                             A 0.1
     
    Se2:                                                                      // (Dezimalzahl-64)>32 dann muss die 3. Stelle der Binärzahl 1 sein
    L                             #Zaehlersenden
    L                             64
    -I
    L                             32
    >I
    SPBN                    Se3:
    S                             A 0.2
    Se3:                                                                      // (Dezimalzahl-96)>16  dann muss die 4. Stelle der Binärzahl 1 sein
    L                             #Zaehlersenden
    L                             96
    -I
    L                             16
    >I
    SPBN                    Se4:
    S                             A 0.3
    // Analog fortfahren bis alle 8 Stellen der Binärzahl bestimmt sind
    Se8:
    L                             #Zaehlersenden
    L                             127
    -I
    L                             0
    >I
    SPBN                    Se9:
    S                             A 0.7
    Se9:
    Pause                    10ms                     // Pause damit die S7-1200 die ASI-Kanäle auslesen kann
    SPA                       Mit:                         // Springe zu Weiter
    End:
    Geändert von matthias (28.06.2012 um 10:59 Uhr)

  10. #20
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Warum fängst du nicht erstmal mit einfachen Grundlagen an und arbeitest Dich dann vor.

    Als erstes solltest Du mal verstehen, dass das Programm zyklisch abgearbeitet wird. Das bedeutet je Zyklus einmal von Anfang bis Ende, dann werden die Ausgänge entprechend den errechneten Zuständen gesetzt/rückgesetzt, die Eingänge abgefragt und danach wieder das Programm durchgeackert. Es ist also nicht wie bei einem PC-Programm, wo Du dafür sorgen mußt, das das Programm nicht zu Ende läuft. Sogar im Gegenteil - das Programm muss zum Ende kommen, weil ja sonst nichts an Deinen Ausgängen passiert bzw. die Eingänge nicht abgefragt/aktualisiert werden, wenn Du in einer Programmschleife festhängst.


    Dann dürfen Sprungmarken nicht alleine in einer Zeile stehen, sondern immer vor einem Befehl. Soll kein Befehl folgen, gibt es die Leerlaufanweisung "NOP 0".
    Die Doppelpunkte gehören nicht zum Namen der Sprungmarke, sondern kennzeichnen diese. Beim Sprungbefehl werden diese also nicht mit angegeben.


    Ausgängen kann man einen Zustand zuweisen oder sie dauerhaft setzen bzw. rücksetzen.
    Code:
    U E 0.0
    = A 0.0
    Mit = folgt in diesem Fall der Ausgang A0.0 immer dem Zustand von E0.0 (wie bei einem Schalter). Ist E0.0 ein, ist auch A0.0 ein - ist E0.0 aus, ist auch A0.0 aus.
    Code:
    U E 0.0
    S A 0.0
    Hier wird der Ausgang A0.0 dauerhaft auf EIN gesetzt, sobald der Eingang E0.0 einmal auf EIN geht. Auch wenn der Eingang dann wieder aus geht. Also wie ein Schütz mit Selbsthaltung.
    Code:
    U E 0.1
    R A 0.0
    Erst hier wird bei Betätigung eines weiteren Taster (o.ä.) der Ausgang wieder dauerhaft zurückgesetzt.
    Also zusammengefaßt: Setzen ist immer EIN und Rücksetzen ist immer AUS.
    Alle drei Varianten stellen eine bitweise Bearbeitung dar.

    Man kann die Ausgänge aber auch byte-, word- oder doppelwordweise bearbeiten. Das Ausgangsbyte AB0 z.B. kann dann 256 Zustände haben, jenachdem welchen Zustand die einzelnen 8 Bits haben. Das kann man nutzen, um z.B. einen Zustand, wie alle Bits aus, schnell zuzuweisen:
    Code:
    L 0
    T AB 0
    Damit erhalten die Bits A0.0 bis A0.7 alle den Zustand 0.


    == gibt es nicht als Anweisung. Jeder Vergleich beinhaltet in der Anweisung auch immer den Datentyp, der verglichen werden soll, also zb. ==I oder ==D


    Pause als Anweisung gibt es meines Wissens nach nicht.

    Wie gesagt, ist dies hier ein SPS-Programm, das zyklisch durchgearbeitet wird. Wenn die Eingänge nicht in diesem Zyklus als gesetzt abgearbeitet werden, dann halt im nächsten. Einen Zustand haben sie aber immer entweder 0 oder 1, egal wie lange die Abfrage dauert.



    Frage: Womit schreibst Du denn Dein Programm? Einfach so mit dem PC-Editor?
    Step 7 hätte doch bei all dem aufgezählten schon "gemeckert" und ich hab' mir nicht mal angesehen, was das Programm eigentlich machen soll. (Ist mir heut' zuviel für'n Feierabend.)
    Geändert von hucki (27.06.2012 um 18:55 Uhr)

Ähnliche Themen

  1. SCL und If-Anweisung
    Von steven001 im Forum Programmierstrategien
    Antworten: 33
    Letzter Beitrag: 09.06.2012, 17:54
  2. Antworten: 23
    Letzter Beitrag: 12.06.2011, 07:30
  3. awl schleife und pointer
    Von Iserlohner im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 18.02.2011, 09:12
  4. Anweisung ?
    Von Xaverl im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 06.01.2010, 14:29
  5. SCL-Compiler und Case-Anweisung
    Von herdi im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.09.2008, 10:02

Lesezeichen

Berechtigungen

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