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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: For-Schleife und IF-Anweisung

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich arbeite zurzeit an meiner Bachelorarbeit und habe große Probleme mit der Verbindung einer C7-621 ASI und einer S7-1200.
    nachdem ich einige Verbindungsmöglichkeiten ausgeschlossen habe, bleibt mir nurnoch die Kommunikation über ASI-Module übrig. Die C7-621ASI ist direkt über die ASI-Leitung mit den ASI-Modulen verbunden. Die S7-1200 wird per eigitalen Ein und Ausgängen an die Module angeschlossen.
    Da ich gerne einige Signale über diese ASI-Module senden will reicht es mit nicht einfach pro Kanal ein Signal zu übertragen. Deshalb will ich folgendes probieren:
    Bsp:
    Ich will das Signal von Sensor1, das von der C7 aufgenommen wird an die S7 übertragen.
    1. Jedem Siganl wird ein binärer Code zugeordnet (der Sensor bekommt 00000101 das ist als Dezimalzahl eine 5)
    2. Der letzte übertragene Sensorzustand wird in einem Merker gespeichert (Der Sensor in M 0.5). Der Sensor hängt an dem Eingang E 0.5.
    3. In einer FOR-Schleife soll nun zuerst der aktuelle Sensorzustand mit dem gespeicherten Sensorzustand verglichen werden. Wenn die Werte ungleich sind soll das neue Signal übertragen werden (Der entsprechende Binärcode soll sich an den ASI-Modulen einstellen).

    For (counter=1, counter >=128, counter +1) Da der Sensor die Nummer 5 bekommen hat soll er bei dem 5. Schleifendurchlauf kontrolliert werden
    IF (E 0.5 > M 0.5){ das würde bedeuten, dass der Sensor von 0 auf 1 gewechselt hat
    IF counter > 128 then A 0.0 = 1 und counter -128 else A 0.0 = 0
    IF counter > 64 then A 0.1 = 1 und counter -64 else A 0.1 = 0
    IF counter > 32 then A 0.2 = 1 und counter -32 else A 0.2 = 0
    ......
    Hier wird die dezimale Zahl in eine Binärzahl umgerechnet und die Ausgänge der ASI-Module mit der binären Zahl belegt.
    }
    IF (E 0.5 < M 0.5){ das würde bedeuten, dass der Sensor von 1 auf 0 gewechselt hat
    .... Fast analog zu oben
    }

    Ich hoffe ich konnte meine Idee halbwegs verständlich erklären.

    Nun zu meinen Fragen:
    1. Kann man in FUP in STEP7 überhaupt FOR-Schleifen und IF-Anweisungen erstellen (Ich hab über Google gehört das es mit dem MOVE-block funktionieren soll. Leider versteh ich nicht wie.)
    2. Kann man in der FOR-Schleife die Werte der Merker und Eingänge laufen lassen:
    Schleifendurchlauf1: Merker 0.0 und Eingang 0.0
    Schleifendurchlauf2: Merker 0.1 und Eingang 0.1
    Schleifendurchlauf3: Merker 0.2 und Eingang 0.2 ...


    MfG Matthias
    Zitieren Zitieren For-Schleife und IF-Anweisung  

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

    Standard

    1. Kann man in FUP in STEP7 überhaupt FOR-Schleifen und IF-Anweisungen erstellen (Ich hab über Google gehört das es mit dem MOVE-block funktionieren soll. Leider versteh ich nicht wie.)
    2. Kann man in der FOR-Schleife die Werte der Merker und Eingänge laufen lassen:
    Schleifendurchlauf1: Merker 0.0 und Eingang 0.0
    Schleifendurchlauf2: Merker 0.1 und Eingang 0.1
    Schleifendurchlauf3: Merker 0.2 und Eingang 0.2 ...
    1. FUP nein --->Dafür gibt es SCL

    2. Ja

    PS: Es kann mit Loop und Next auch eine Schleife in AWL gelöst werden
    PSS: AWL -->Stichworte AR1,AR2 Pointer, indirekte Adressierung

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

    Standard

    Zitat Zitat von Verpolt Beitrag anzeigen
    PSS: AWL -->Stichworte AR1,AR2 Pointer, indirekte Adressierung
    Ich bin mir nicht sicher, aber ich glaub, gehört zu haben dass die S7 1200 kein AWL unterstützt.
    mfG Aventinus

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

    Standard

    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?

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

    Standard

    Das geht schon, du schaltest die Ansicht des ganzen Bausteins auf AWL um, fügst dein Netzwerk in ein programmierst es aus und schaltest anschließend wieder nach FUP um. Fertig
    mfG Aventinus

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

    Standard

    Ich hab mal probiert mich in AWL einzuarbeiten und das Programm zum Senden der Signale zu erstellen.
    Hab ich die AWL-Sprache halbwegs verstanden bzw. wird es so funktionieren.

    Code:
    Programm:
     
     
    L                                    55                                                    // Läd eine 55
    SLD           3                                                                          // Verschiebe 3 Stellen nach links à aus ..000.055 wird 55.0
    T                                    #Zähler
    L                                    0
    T                                    #Zählersenden
     
    Anfang:
     
    L                                    0                                                       // Setze alle Ausgänge=0
    =                                    A 0.0
    =                                    A 0.1
    =                                    A 0.2
    =                                    A 0.3
    =                                    A 0.4
    =                                    A 0.5
    =                                    A 0.6
    =                                    A 0.7
     
    L                                    #Zähler
    LAR1                                                                                     // ???
    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                              Senden                                           // Wenn #Gesp ungleich #Aktu ist, dann springe zu Senden
     
    Weiter:
     
    L                                    #Zähler
    +AR1                                                                                     // Addiere 1 mit 55.0 à 55.1
    T                                    #Zähler
    SPA                              Anfang
     
    Senden:
     
    L                                    #AktuellerWert                              // Überprüft ob der aktuelle Wert=1 ist
    L                                    1
    ==                                                                                          // 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                              SendenON                                     // Wenn Ergebnis=1 dann Springe zu SendenON
     
    L                                    1                                                       // Setze Ausgang 0.0=1
    =                                    A 0.0
     
    SendenON:                                                                          // Dezimalzahl>64 dann muss die 2. Stelle der Binärzahl 1 sein
    L                                    #Zählersenden                             
    L                                    64
    >I
    SPBN                           SendenON2
    L                                    1
    =                                    A 0.1
     
    SendenON2:                                                                       // (Dezimalzahl-64)>32 dann muss die 3. Stelle der Binärzahl 1 sein
    L                                    #Zählersenden
    L                                    64
    -I
    L                                    32
    >I
    SPBN                           SendenON3
    L                                    1
    =                                    A 0.2
    SendenON3:                                                                       // (Dezimalzahl-96)>16  dann muss die 4. Stelle der Binärzahl 1 sein
    L                                    #Zählersenden
    L                                    96
    -I
    L                                    16
    >I
    SPBN                           SendenON4
    L                                    1
    =                                    A 0.3
    // Analog fortfahren bis alle 8 Stellen der Binärzahl bestimmt sind
    Senden ON8:
    L                                    #Zählersenden
    L                                    127
    -I
    L                                    16
    >I
    SPBN                           SendenON4
    L                                    1
    =                                    A 0.7
    Pause                          10ms                            // Pause damit die S7-1200 die ASI-Kanäle auslesen kann
    SPA                              Weiter                          // Springe zu Weiter
    Geändert von matthias (26.06.2012 um 18:51 Uhr)

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

    Standard

    Nicht ganz. Simatic hat unter beispielprojekte hilfe. F1 auch. Siemens im www ausbildungsunterlagen zu awl.

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

    Standard

    Wo sind denn die Fehler?

  9. #9
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard

    Zitat Zitat von Verpolt Beitrag anzeigen
    Zitat Zitat von matthias Beitrag anzeigen
    ...
    Nun zu meinen Fragen:
    1. Kann man in FUP in STEP7 überhaupt FOR-Schleifen und IF-Anweisungen erstellen
    ...
    1. FUP nein --->Dafür gibt es SCL
    ...
    Natürlich kann man IF-Anweisungen und FOR-Schleifen auch in FUP/KOP erstellen!

    1. Ist jede simple Zuweisung eine IF -Anweisung:
    UND.jpg
    entspricht:
    IF E10.0=1 THEN A10.0=1 ELSE A10.0=0

    Größere Verknüpfungen sind entsprechend größere IF-Anweisungen
    Die Verknüpfung am Anfang entspricht dem IF-Block und der(die) folgende(n) Befehl(e) (SET, RESET, MOVE ...) dem THEN-Block. Negiert man den Eingang des Befehls, hat man einen ELSE-Block.



    2. FOR-Schleifen legen einen Anfangswert fest, durchlaufen die Schleife, erhöhen am Ende die Variable um einen angegebene Schrittweite und vergleichen, ob sich das Ergebnis außerhalb des angegebenen Wertebereichs befindet. Wenn nicht, springen sie zum Beginn der Schleife zurück.
    Und genau das kann man auch mit FUP/KOP erstellen:
    For-Schleife.jpg


    Ist zwar nicht so komfortabel, wie in SCL oder anderen höheren Programmiersprachen, aber die Frage war ja, ob man sowas erstellen kann.


    PS: Ich hoffe, das mein FUP syntaktisch korrekt ist, ich benutz' das nie. Aber die Vorgehensweise sollte man auf jeden Fall erkennen können.
    Geändert von hucki (26.06.2012 um 20:25 Uhr) Grund: Waren natürlich Fehler in der FUP-Schleife, ich wusste es!

  10. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    thomas_1975 (27.06.2012)

  11. #10
    Registriert seit
    26.06.2012
    Beiträge
    36
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Schonmal danke für die Antworten.
    Ich würde es zuerst mal mit AWL probieren.
    Ich hab gerade mal nach den Ausbildungsunterlagen gesucht aber leider nichts gefunden.

    Ich habe leider nur wenige und kurze Beispiele gefunden, mit denen ich mich nur schlecht in die AWL-Sprache hineindenken kann.
    Es wäre deshalb eine riesen Hilfe, wenn ihr mir meine Fehler zeigen könntet, bzw mir sagt was ich grundlegend falsch mache.

    MfG Matthias

Ä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
  •