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

Ergebnis 1 bis 1 von 1

Thema: Strukturkomponenten sortieren

  1. #1
    Registriert seit
    05.09.2011
    Beiträge
    176
    Danke
    43
    Erhielt 28 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Morgen!

    Da ich jetzt wieder im Nachtdienst bin, habe ich etwas mehr Zeit mich mit dem Thema SCL zu beschäftigen.

    Ich betreibe gerne das "learning by doing", also hab ich mir gedacht ich mache folgendes:

    Ich habe eine CPU (315-2DP; Step7 Prof. V5.4) wo ich ein Eingangsbyte bitweise einlese. Sobald eine Flanke am Eingang kommt, soll mir die aktuelle Systemzeit und ein bestimmter Wert in einem globalen DB (="unsortiert") geschrieben werden.

    Das hab ich hinbekommen. Probleme (und jetzt auch schon Kopfschmerzen) bereitet mir das Sortieren der Daten! Die Daten aus dem DB "unsortiert" sollen nach der Systemzeit in einem anderen (globalen) DB (="sortiert") sortiert werden.

    Nun habe ich in der Hilfe von SCL ein Beispiel mit dem Bubblesort-Algorithmus gefunden! Aber ich bekomme es einfach nicht hin (vl. liegts ja an der Strukturkomponente...)

    Ein Beispiel:

    Bit E0.1 wird heute um 06:03:20s eingelesen, die Systemzeit und ein Integerwert (=1 für Bit 1) in ein Array of Struct im DB geschrieben.
    Bit E0.0 wird heute um 06:03:50s eingelesen, die Systemzeit und ein Integerwert(=0 für Bit 0) in den DB eingetragen.
    So, nun soll mir das Programm das Array mittels Bubblesort durchsuchen.

    Dabei will ich aber nur nach der Systemzeit sortieren! Wenn getauscht werden muss, muss der Integerwert der Strukturkomponente mitkopiert werden!

    Und ich bin mir nicht sicher ob es überhaupt so geht, hier erstmal der Code (ev. auch auf die Kommentare achten..):

    Code:
    FUNCTION_BLOCK FB2
    
    VAR_INPUT
            unsort: ARRAY [0..7] OF 
        STRUCT
            Zeit:Date_and_Time;
            Nummer:INT;
        END_STRUCT;
    END_VAR
    
    VAR_OUTPUT
        sort:ARRAY [0..7] OF
        STRUCT
            Zeit:DATE_AND_TIME;
            Nummer:INT;
        END_STRUCT;
    END_VAR
    
    
    VAR
    tauschen:BOOL;
    index:INT;
    Hilfsmerker:DATE_AND_TIME;
    HIlfsmerker_1:INT;
    END_VAR
    
    BEGIN
    REPEAT
          tauschen:=false;
          FOR index:=0 TO 7 DO   // Angenommen index = 0
            IF unsort[index].Zeit > unsort[index + 1].Zeit THEN   //Ist der Wert in Zeile unsort[0].Zeit größer als in Zeile unsort[1].Zeit? Wenn ja dann...
               Hilfsmerker:= unsort[index + 1].Zeit;  //Schreibe den Wert aus Zeile unsort[1].Zeit in den Hilfsmerker
               Hilfsmerker_1:= unsort[index + 1]. Nummer;   // schreibe den Wert aus Zeile unsort[1].Nummer in den Hilfsmerker
               unsort[index + 1].Zeit:=unsort[index].Zeit;  // Schreibe Inhalt aus Zeile 1 in Zeile 0 (also immer direkt in die Strukturkomponente)
               unsort[index + 1].Nummer:=unsort[index].Nummer; //Schreibe Inhalt aus Zeile 1 in Zeile 0
               unsort[index].Zeit:= Hilfsmerker;   // Schreibe Inhalt aus Hilfsmerker in Zeile 0
               unsort[index].Nummer:= Hilfsmerker_1; // Schreibe Inhalt aus Hilfsmerker in Zeile 0
               tauschen:= true;   // setze tauschen auf true
               sort[index].Zeit:= unsort[index].Zeit;              // kopiere von Zeile 0 (Db1) in die Zeile 0 des (DB2) ???? Stimmt meine Überlegung überhaupt??
               sort[index].Nummer:=unsort[index].Nummer; // 
             END_IF;
        END_FOR;
    UNTIL NOT tauschen
    END_REPEAT;   
        
    END_FUNCTION_BLOCK
    Stimmt das überhaupt mit der Schnittstelle? Kann ich Strukturen so einlesen? Ich hab neben div. CPU Stops es nur einmal geschafft dass ich immer in Zeile 0 (sprich ganz oben) den zuletzt geflankten Eingang habe (der aber eigentlich ganz unten stehen sollte)!

    Wie schnell eine Nacht vergehen kann wenn man verzweifelt etwas versuchen will.

    Leider habe ich nur in der Arbeit die Möglichkeit das zu testen. Wisst ihr woher ich eine günstige Trial-Version herbekomme? Dann könnte ich das auch zu Hause simulieren/testen!

    Hier sind noch Screenshots von dem DB (der andere ist identisch aufgebaut) und dem Aufruf im OB1.

    Vielen Dank im Voraus.
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Strukturkomponenten sortieren  

Ähnliche Themen

  1. Daten sortieren DB1 -> DB2
    Von momo99 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.11.2009, 15:02
  2. sortieren in awl
    Von cosmo im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.08.2008, 10:56
  3. Datenbaustein sortieren ect..
    Von TheBigMemph im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 12.03.2007, 17:58
  4. VAT sortieren?
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.01.2006, 11:23
  5. Daten sortieren
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.03.2005, 15:50

Lesezeichen

Berechtigungen

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