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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: in ARRAY suchen:Problem nichts gefunden

  1. #1
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich suche in einem ARRAY nach einem gleichem Wert (Programm_HFB), das klappt auch, ich setze zusätzlich die Variable Gefunden auf TRUE.
    Ich möchte aber auch abfragen (BOOL), wenn nichts gefunden wurde.Wie stelle ich das an?

    Was ich bislang geschrieben habe:
    (*Flanke*)
    su_Trockner_pofl(CLK:=suche_Trockner);
    (*Suche nach gleichem Programm*)
    IF su_Trockner_pofl.Q AND NOT gefunden THEN
    FOR x:= Lager_Suchen_Anfang TO Lager_Suchen_Ende DO
    IF Soll_Anlagen[x].Programm = Programm_HFB THEN
    gefundener_Trockner :=x;
    Gefunden:= TRUE;
    END_IF
    END_FOR
    END_IF
    IF Reset THEN
    Gefunden:=FALSE;
    END_IF
    IF (x=Lager_Suchen_Ende+1) AND NOT Gefunden THEN
    keine_Uebereinstimmung:=TRUE;
    END_IF

    IF Reset THEN
    keine_Uebereinstimmung:=FALSE;
    END_IF

    Ich hatte gedacht,wenn ich x mit SuchenEnde vergleiche, dass die Var keine_Uebereinstimmung an geht..funzt aber nicht.
    Hat jemand noch ne Idee?
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.
    Zitieren Zitieren in ARRAY suchen:Problem nichts gefunden  

  2. #2
    Avatar von rheumakay
    rheumakay ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard

    wenn ich zusätzlich mit <> abfrage :


    IF su_Trockner_pofl.Q AND NOT gefunden AND NOT keine_Uebereinstimmung THEN
    FOR x:= Lager_Suchen_Anfang TO Lager_Suchen_Ende DO
    IF Soll_Anlagen[x].Programm <> Programm_HFB THEN

    keine_Uebereinstimmung:= TRUE;
    END_IF
    END_FOR
    END_IF

    funktioniert es ..
    vielleicht geht es auch kürzer??
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

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

    Standard

    Wenn ich das richtig verstehe setzt du "gefunden" auf true wenn in einem der Trockner das entsprechende Programm läuft. Und jetzt willst du eine zusätzliche Variable die dir anzeigt das in keinem der Trocker das Programm aktiv ist?

    Eigentlich sollte dir "gefunden = false" nach dem kompletten Durchlauf der Schleife ja genau diese Information geben, oder? Wenn Soll_Anlagen[x].Programm = Programm_HFB nie erfüllt wird, wird gefunden nicht true .....

    Was allerdings auffällt bei deinem Ablauf (ich weiss nicht ob das gewollt ist): Deine Suche zeigt dir immer den Index des letzten Trockners an bei dem die Suchbedingung zutrifft (Wenn auf 1 5 und 7 das Programm läuft, ist der gefundene Trockner die Nr. 7. Von 1 und 5 weiss dein weiterer Ablauf nichts)
    Das gleiche gilt für dein 2ten Post. Da ist es so, das "keine_Uebereinstimmung = true" gesetzt wird sobald das Programm bei irgend einem Trockner nicht überein stimmt. Wenn also auf 9 von 10 Trockners das Programm läuft und auf einem nicht, meldet dir die Variable trotzdem keine Uebereinstimmung.
    Geändert von MasterOhh (23.08.2012 um 08:30 Uhr)

  4. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    rheumakay (23.08.2012)

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich verstehe schon deine Frage nicht. So wie du das haben willst, erfüllt doch "Gefunden" deine Bedingungen. Wenn "Gefunden" False ist, dann hast du keine Übereinstimmungen gehabt. Wo ist das Problem?
    Dein zweites Code-Beispiel, ist auch etwas eigenartig, denn du hast doch bei einer Suche immer mindestens 1 Mal "keine_Uebereinstimmung". Das führt doch in deinem Code dazu, dass am Ende immer "keine_Uebereinstimmung" True ist.

    Das Einfachste wäre, nur so lange zu suchen, bis eine Übereinstimmung gefunden wurde. Dann kann man die Schleife verlassen (Anweisung Exit). Vor Start der Schleife setzt man "Gefunden" auf False und "keine_Übereinstimmung" auf True, dann Schleife durchlaufen, bei einem Treffer "Gefunden" auf True und "keine_uerbereinstimmung" auf False, raus aus der Schleife mit Exit.

    PS: Codetags und Einrückungen machen das Lesen deines Codes etwas einfacher.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    rheumakay (23.08.2012)

  7. #5
    Avatar von rheumakay
    rheumakay ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard

    sorry,das ich mich erst jetzt melde..das Geschäft blüht
    im Anhang ist ein Screenshot des Suchablaufs(es folgen später im Program noch weitere Suchfunktionen).
    Den Codeschnipsel von heute morgen befindet sich in der Ausgangsaktion des Schrittes"Suchen"
    Um zu entscheiden welcher Alternativzweig weiter abgearbeitet wird, habe ich die VAR Gefunden und keineUebereinstimmung angelegt.
    Mache ich das nur mit NOT gefunden, rauscht er mir durch den Schritt ohne überhaupt gesucht zu haben.
    Angehängte Dateien Angehängte Dateien
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

  8. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    nach meiner Meinung fehlt in deinem Script nur das Initialisieren vor der Schleife :
    Code:
    gefundener_Trockner := -1 ;
    Gefunden:= false ;
    woher soll das Ding sonst unterscheiden können ...?

    Gruß
    larry

  9. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    rheumakay (23.08.2012)

  10. #7
    Avatar von rheumakay
    rheumakay ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard

    Hallo an alle,
    hab´s jetzt mal umgeschrieben..siehe Anhang.
    So funktioniert es !

    Nur so wie Masteroh schon geschrieben hatte , wenn mehrere gefunden werden, wird der der zuletzt gefunden wurde übernommen.
    Das hätte ich eigentlich gerne umgekehrt 1=oberste Prio 5=niedrigste Prio
    Hab´s mit austauschen von Suchanfang/ende versucht -hat aber nicht geklappt.
    Habt ihr noch einen Rat?
    Angehängte Dateien Angehängte Dateien
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

  11. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Nach dem ersten Fund die Suche abbrechen, wäre eine Möglichkeit.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  12. #9
    Avatar von rheumakay
    rheumakay ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard

    hast du mal ein Beispiel?
    Wie soll ich das hier einbauen:
    FOR x:= Lager_Suchen_Anfang TO Lager_Suchen_Ende DO
    IF Soll_Anlagen[x].Programm = Programm_HFB THEN
    gefundener_Trockner :=x;
    Gefunden:= TRUE;
    keine_Uebereinstimmung:= FALSE;
    END_IF
    END_FOR
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

  13. #10
    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
    Code:
    FOR x:= Lager_Suchen_Anfang TO  Lager_Suchen_Ende DO
       IF Soll_Anlagen[x].Programm = Programm_HFB  THEN
         gefundener_Trockner :=x;
         Gefunden:= TRUE;
         keine_Uebereinstimmung:= FALSE;
         exit;     (* <==== bricht die Abarbeitung der For-Schleife ab*)
        END_IF
    END_FOR

Ähnliche Themen

  1. Problem Array in FUP
    Von dentech im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.06.2012, 09:56
  2. nach Duplikaten in Array suchen in SCL
    Von zloyduh im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 14.02.2012, 14:58
  3. Array in DB suchen
    Von Limette im Forum Simatic
    Antworten: 46
    Letzter Beitrag: 25.01.2012, 15:45
  4. Array Problem in Visu+
    Von Mobi im Forum HMI
    Antworten: 0
    Letzter Beitrag: 20.08.2011, 23:03
  5. Problem ARRAY/Schieberegister
    Von Barni im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.08.2009, 12:31

Lesezeichen

Berechtigungen

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