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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Wie Array in SCL abfragen?

  1. #11
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dann geh mal im Kopf oder mit Stift und Papier die Schleife durch, die Larry gepostet hat.

    Alternativ geht es wieder mit einem vorzeitigen Abbruch.

    Code:
    M30.0 := true;
    FOR i := 1 to 20 DO
      if Melde_DB.Meldungen[i] <> 0 then
        M30.0 := false;
        EXIT;
      end_if;
    end_for;
    Die Schleife läuft solange bis ein Element nicht 0 ist, setzt den Merker dann auf false und unterbricht die Schleife.
    Sind alle Elemente 0 läuft die Schleife bis zum Ende durch und der Merker bleibt true.....

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Dank' euch für die Vorschläge!

    @Larry: Würde dein erster Code wirklich funktionieren? Koslovski hat ja angemerkt, dass so nur der letzte Array-Wert abgefragt wird und alle anderen nicht!

    Die Zeile

    Code:
           "M30.0" := "M30.0" AND ("Melde_DB".Meldung["i"] = 0 ) ;
    verstehe ich gar nicht. Was wird denn hier abgefragt; M30.0 wird doch oben schon auf 1 gesetzt?
    @Spirit:
    Ich gehe mal davon aus, dass der Code funktioniert - getestet hatbe ich ihn jedoch nicht.
    Erstmal vorweg - es gibt hier natürlich viele Wege, es zu lösen. Der Vorschlag von MasterOhh ist um nichts schlechter.
    Ich bleibe hier aber (nur des Erklärens wegen) mal bei meinem Code :
    - Richtig, der M30.0 wird erstmal True. In der Schleife wird er dann mit sich selbst und der Abfrage auf 0 des Array-Elementes verundert und wieder in sich zugewiesen. Ist das Array-Element = 0 dann ist das Ergebnis des Vergleichs in der Klammer ein True. Ist der Merker vorher schon True dann wird seine neue Zuweisung True AND True - also wieder TRUE. Ist der Vergleich in der Klammer <> 0 dann ist das Ergebnis der Klammer ein False. De neue Zuweisung des Merkers wäre also dann True AND False - ergibt FALSE. Und so bleibt es dann auch in der Folge.

    Wie schon geschrieben kann man die Shcleife auch vorzeitig abbrechen (bei erster falscher Übereinstimmung) - so ist es mir aber halt nicht eingefallen ...

    Gruß
    Larry

  3. #13
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Lieben Dank an Euch!

    Glaube, das habe ich dann soweit verstanden (oh Wunder!)...


    Ach (doch) noch eine Frage:


    Angenommen ich würde neben


    "Melde_DB".Meldungen[i] = 0

    auch noch

    "Alarm_DB".Alarme[?] = 0

    abfragen wollen, darf dann für das Fragezeichen ebenfalls das gleiche i herangezogen werden - oder kommt sich das dann mit obiger Abfrage in die Quere?
    LG
    spirit

  4. #14
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Du kannst das gleiche i verwenden, musst allerdings eine neue hierfür FOR-Schleife anlegen, da die bestehende Schleife ja mit EXIT vorzeitig verlassen werden kann.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  5. #15
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Ok, alles klaro! Danke...
    LG
    spirit

  6. #16
    Registriert seit
    27.11.2012
    Beiträge
    22
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    Dank' euch für die Vorschläge!

    @Larry: Würde dein erster Code wirklich funktionieren? Koslovski hat ja angemerkt, dass so nur der letzte Array-Wert abgefragt wird und alle anderen nicht!

    Die Zeile

    Code:
           "M30.0" := "M30.0" AND ("Melde_DB".Meldung["i"] = 0 ) ;
    verstehe ich gar nicht. Was wird denn hier abgefragt; M30.0 wird doch oben schon auf 1 gesetzt?
    Ja, der erste Code würde funktionieren, weil die FOR Schleife beim ersten 0er beendet wird. Man kann danach über i noch abfragen, welcher es war.

    Zum zweiten Code. Richtig M30.0 wird schon auf TRUE gesetzt und soll auch TRUE _bleiben!_
    M30.0 nimmt immer den Zustand vom letzten M30.0 & Melde_DB.Meldung[i] an. Das heißt, sobald M30.0 einmal den Zustand 0 hat, bleibt er auch auf 0.

    Deshalb ist der Unterschied wie von Larry beschrieben, ob ALLE Werte 0 sein müssen oder nur eines.

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. MW in SCL abfragen?
    Von spirit im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 21.03.2013, 14:15
  3. Merkerbyte abfragen in scl
    Von Werner1 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.03.2012, 16:11
  4. Timer in SCL abfragen
    Von geduldiger im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 25.09.2007, 15:55
  5. Mit SCL Flanke 0->1 abfragen
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 21.06.2005, 18:07

Lesezeichen

Berechtigungen

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