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

Seite 2 von 8 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 77

Thema: Auswahlkriterium Betriebsstunden

  1. #11
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitiere mal mich selbst:
    Am Ende enthält dein Index in DB2 eine Liste der Art
    5
    4
    2
    3
    6
    7
    1
    Bzw. bei dir im DB 20.
    Dies bedeutet, daß der 5. Eintrag in der (unsortierten) Liste im DB10 der kleinste (größte?, das hängt davon ab, ob du beim Sortieren auf größer oder kleiner vergleichst.) ist, der 4. Eintrag der zweitkleinste, der 2. der drittkleinste.
    Du schaltest also die Betriebsmittel 5,4, und 2 ein, weil sie noch am wenigsten gelaufen haben.
    [/quote]

  2. #12
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Hallo,

    das habe ich schon gelesen - nur stehe ich wahrscheinlich auf dem Schlauch...

    Hier mal zunächst das was im FB passiert...

    Code:
    // Bubble Sort
    
    
    
          L     DB20.DBB    0               //lade 1.Eintragsnummer aus Index 
          L     32                          //Länge eines DWORDS in bits 
          *I                                //ergibt Adresse des eigentlichen Elements 
          T     LD     0                    //zwischenspeichern 
    
          L     DB20.DBB    1               //lade 2.Eintragsnummer aus Index 
          L     32                          //Länge eines DWORDS in bits 
          *I                                //ergibt Adresse des eigentlichen Elements 
          T     LD     4                    //zwischenspeichern 
    
          L     DB10.DBD    0               //Lade Betriebsstunden des 1. Betriebsmittels 
          L     DB10.DBD    4               //Lade Betriebsstunden des 2. Betriebsmittels 
          >D    
          SPB   nix1                        //wenn das 1.größer ist, ist nichts zu tun, sonst wird jetzt getauscht: 
    
          L     DB20.DBB    0               //lade 1.Eintragsnummer aus Index 
          T     LB     0                    // zwischenspeicher für Ringtausch 
          L     DB20.DBB    1               //lade 2.Eintragsnummer aus Index 
          T     DB20.DBB    0               //speicher als neue 1.Eintragsnummer aus Index 
          L     LB     0                    //Hole Zwischenspeicher zurück 
          T     DB20.DBB    1               //speicher als neue 2.Eintragsnummer aus Index 
    
    nix1: NOP   0
    
          L     DB20.DBB    1               //lade 2.Eintragsnummer aus Index 
          L     32                          //Länge eines DWORDS in bits 
          *I                                //ergibt Adresse des eigentlichen Elements 
          T     LD     0                    //zwischenspeichern 
    
          L     DB20.DBB    2               //lade 3.Eintragsnummer aus Index 
          L     32                          //Länge eines DWORDS in bits 
          *I                                //ergibt Adresse des eigentlichen Elements 
          T     LD     4                    //zwischenspeichern 
    
          L     DB10.DBD    4               //Lade Betriebsstunden des 2. Betriebsmittels 
          L     DB10.DBD    8               //Lade Betriebsstunden des 3. Betriebsmittels 
          >D    
    
          SPB   nix2                        //wenn das 2.größer ist, ist nichts zu tun, sonst wird jetzt getauscht: 
    
          L     DB20.DBB    1               //lade 2.Eintragsnummer aus Index 
          T     LB     0                    // zwischenspeicher für Ringtausch 
          L     DB20.DBB    2               //lade 3.Eintragsnummer aus Index 
          T     DB20.DBB    1               //speicher als neue 2.Eintragsnummer aus Index 
          L     LB     0                    //Hole Zwischenspeicher zurück 
          T     DB20.DBB    2               //speicher als neue 3.Eintragsnummer aus Index 
    
    nix2: NOP   0
    
          L     DB20.DBB    2               //lade 3.Eintragsnummer aus Index 
          L     32                          //Länge eines DWORDS in bits 
          *I                                //ergibt Adresse des eigentlichen Elements 
          T     LD     0                    //zwischenspeichern 
    
          L     DB20.DBB    3               //lade 4.Eintragsnummer aus Index 
          L     32                          //Länge eines DWORDS in bits 
          *I                                //ergibt Adresse des eigentlichen Elements 
          T     LD     4                    //zwischenspeichern 
    
          L     DB10.DBD    8               //Lade Betriebsstunden des 3. Betriebsmittels 
          L     DB10.DBD   12               //Lade Betriebsstunden des 4. Betriebsmittels 
          >D    
    
          SPB   nix3                        //wenn das 3.größer ist, ist nichts zu tun, sonst wird jetzt getauscht: 
    
          L     DB20.DBB    2               //lade 3.Eintragsnummer aus Index 
          T     LB     0                    // zwischenspeicher für Ringtausch 
          L     DB20.DBB    3               //lade 4.Eintragsnummer aus Index 
          T     DB20.DBB    2               //speicher als neue 3.Eintragsnummer aus Index 
          L     LB     0                    //Hole Zwischenspeicher zurück 
          T     DB20.DBB    3               //speicher als neue 4.Eintragsnummer aus Index 
    
    nix3: NOP   0
    
          L     DB20.DBB    3
          L     32
          *I    
          T     LD     0
    
          L     DB20.DBB    4
          L     32
          *I    
          T     LD     4
    
          L     DB10.DBD   12
          L     DB10.DBD   16
          >D    
    
          SPB   nix4
    
          L     DB20.DBB    3
          T     LB     0
          L     DB20.DBB    4
          T     DB20.DBB    3
          L     LB     0
          T     DB20.DBB    4
    
    nix4: NOP   0
    
          L     DB20.DBB    4
          L     32
          *I    
          T     LD     0
    
          L     DB20.DBB    5
          L     32
          *I    
          T     LD     4
    
          L     DB10.DBD   16
          L     DB10.DBD   20
          >D    
    
          SPB   nix5
    
          L     DB20.DBB    4
          T     LB     0
          L     DB20.DBB    5
          T     DB20.DBB    4
          L     LB     0
          T     DB20.DBB    5
    
    nix5: NOP   0
    
          L     DB20.DBB    5
          L     32
          *I    
          T     LD     0
    
          L     DB20.DBB    6
          L     32
          *I    
          T     LD     4
    
          L     DB10.DBD   20
          L     DB10.DBD   24
          >D    
    
          SPB   nix6
    
          L     DB20.DBB    5
          T     LB     0
          L     DB20.DBB    6
          T     DB20.DBB    5
          L     LB     0
          T     DB20.DBB    6
    
    nix6: NOP   0

    Nun sieht ja mein Stunden-DB etwa so aus:

    Stunden_M1 DWORD DW#16#0
    Stunden_M2 DWORD ....


    Und der Index-DB etwa so:

    Index_M1 BYTE B#16#0
    Index_M2 BYTE B#16#0
    Index_M3 BYTE ....


    ___________________________________________


    Getauscht werden ja die Indexes

    Aber wird da nicht nur der Wert getauscht ?

    Bleibt da nicht die Reihenfolge M1,M2,M3,M4.....


    Kann es sein das ich da was nicht blicke ?


    Mir geht einfach nicht runter wie ich nachher erkennen soll welches Betriebsmittel welchem Byte zugeordnet ist (aber bitte nicht auslachen - und wenn dann heimlich... )
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  3. #13
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von rs-plc-aa
    ...
    Und der Index-DB etwa so:

    Index_M1 BYTE B#16#0
    Index_M2 BYTE B#16#0
    Index_M3 BYTE ....

    Mir geht einfach nicht runter wie ich nachher erkennen soll welches Betriebsmittel welchem Byte zugeordnet ist (aber bitte nicht auslachen - und wenn dann heimlich... )
    Ein sinnvoller Anfangswert für den Index-DB ist:
    Index_M1 BYTE B#16#1
    Index_M2 BYTE B#16#2
    Index_M3 BYTE B#16#3
    Index_M4 BYTE B#16#4
    Index_M5 BYTE B#16#5
    Index_M6 BYTE B#16#6
    Index_M7 BYTE B#16#7

    Zwei Dinge noch:
    Dein "Bubblesort" FB hat nur 6 Durchgänge (wenn ich richtig gezählt habe). Nötig sind aber 27!
    Beim Index habe ich was falsch gemacht: Der 1. Eintrag im Betriebsstunden DB hat den Array-Index 0.
    Ein wirklich sinnvoller Anfangswert für den Index-DB ist:
    Index_M1 BYTE B#16#0
    Index_M2 BYTE B#16#1
    Index_M3 BYTE B#16#2
    Index_M4 BYTE B#16#3
    Index_M5 BYTE B#16#4
    Index_M6 BYTE B#16#5
    Index_M7 BYTE B#16#6

  4. #14
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Hallo,

    jetzt habe ich auch mal das:

    http://liebknecht-gymnasium.bei.t-on...ubblesort.html

    gelesen (mal ganz runterscrollen und den link "graphische Darstellung" anklicken - echt gut gemacht)

    Bei den Durchläufen zähle ich bei meinen 7 Variablen aber nur 21.


    Jetzt ich nix mehr wissen...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  5. #15
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von rs-plc-aa
    Hallo,
    Bei den Durchläufen zähle ich bei meinen 7 Variablen aber nur 21.
    Sorry, 21 ist richtig, da 7 Variablen 6 Vergleiche erfordern. Habe (n*n+n)/2 gerechnet, richtig ist aber (n*n-n)/2

  6. #16
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Hallo,

    alles klar...

    Hat jemand den Link schon besucht?



    Jetzt muß ich aber noch mal mit dem Index nerven.


    Wenn die Sortierung fertig ist dann sind ja die Bytes, die vorher aufsteigend im DB nummeriert waren - also von 1 bis 7 und der Wert von 0 bis 6 - nun, wenn wir mal davon ausgehen daß sich nach der Sortierung eine veränderte Reihenfolge ergibt, von der Benennung ( also M1 - M7) her immer noch gleich - da dies ja an die Bausteinadresse geklammert ist.

    Es ändert sich also nur der Wert - z.B.:

    M1 = 5
    M2 = 3
    M3 = 0
    M4 = 6
    ...


    Wenn das bis hierher stimmt, dann muß ja jetzt noch von Hand oder halt eben extra noch bestimmt werden Welche BM-Nummer auch am wenigsten, am zweitwenigsten, ... usw. Stunden hat...


    oder ist dies schon erledigt und ich habe immer noch nicht bemerkt wo ?
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  7. #17
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Wenn ich da geschrieben habe:
    L DB20.DBD[DB10.DBB0] oder so ähnlich: Das kann die S7 gar nicht, aber es ist ein Pseudo-Code, mit dem sich der Algorithmus übersichtlich darstellen läßt. Und Anweisungen dieser Art sind in allen höheren Computersprachen Gang un Gäbe.
    Es fiel mir dann später auf, daß du in einem folgenden Posting richtigen S7-Code hineingestellt hast, der keinerlei indirekte Adressierung enthält...

    Der Witz an indirekter Adressierung ist, daß nicht immer mit derselben Variable gearbeitet wird, sondern mit derjenigen, deren Positionsnummer (array index) oder Adresse (pointer) in einer anderen Variablen steht.
    Ich werde mal im Laufe von morgen Code für Bubblesort mit real existierenden S7-Befehlen posten. Er wird weniger übersichtlich aussehen.

    Zuletzt wirst du noch folgendes tun müssen:
    Du hast im DB10 eine Liste mit den Betriebsmitteln in absteigender Reihenfolge der Stunden.
    Zunächst ermittelst du wieviele eingeschaltet werden sollen:
    L 0
    T MW2 //Zahl der BM, Annahme 0
    UN E0.0 //keine Anforderung da?
    SPB N1
    LMW2
    L1
    +I
    TMW2
    N1: NOP 0
    UN E0.1 //keine Anforderung da?
    SPB N2
    LMW2
    L1
    +I
    TMW2
    N2: NOP 0
    ...
    Am Ende steht in MW2 die Zahl der einzuschaltenden Betriebsmittel.

    nun kommt:
    Wenn mindestens 7 Betriebsmittel gefordert, alle einschalten
    Wenn mindestens 6 Betriebsmittel gefordert, die Nummern 1-6 der Indexliste einschalten
    Wenn mindestens 5 Betriebsmittel gefordert, die Nummern 1-5 der Indexliste einschalten
    ...
    Wenn mindestens 1 Betriebsmittel gefordert, die Nummer 1 der Indexliste einschalten

  8. #18
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Hallo,

    super danke bis jetzt...

    Ich bin noch ein relativer Neuling, und habe wenig bis gar keine Erfahrung mit Arrays oder Pointern - umso interessanter lausche ich weiter.


    Ich habe den Code mal geändert - jetzt fange ich als eröffnung mit:

    7>6 ? - wenn ja machnix
    6>5 ? - ...

    2>1 ? - ...

    macht 6 Vergleiche im ersten durchgang...

    im zweiten lasse ich den letzten weg - usw.


    Damit komme ich auf die 21.

    Der letzte Durchgang wäre dann:

    7>6 ? - wenn ja machnix.


    Ich hoffe das passt

    So hätte ich dann den kleinsten oben usw. - wie ich ja will.


    Jetzt muß ich die festen Adressen nur noch gegen die entsprechenden Variablen austauschen.


    @Zottel:

    Da warte ich aber noch auf deinen Vorschlag...




    Ich für meinen Teil fahre jetzt los nach Nürnberg - ihr könnt euch wahrscheinlich denken wohin...



    Also an alle die auch da sind:


    Viel Erfolg bei den Verhandlungen, viel Spaß und alles was dazugehört.
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  9. #19
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Ok, hier meine Lösung zum Bublesort mit S7:
    Code:
    //FC16
    // Parameter
    laenge  INT  Laenge der Liste -1 
    indexDB  INT  Nummer des Datenbausteins, der den Index enthält 
    datenDB  INT  Nummer des Datenbausteins, der die Daten enthält 
    datenLaenge INT  Länge eines Daten-Elements 
    AUF_AB  BOOL  Sortierrichtung 
    INIT_INDEX BOOL  Index inititialisieren 
    //
    // lokale Variablen:
    //
    i WORD  //Schleifenzaehler der äußeren Schleife 
    j WORD  Schleifenzaehler der inneren Schleife 
    idx1 DINT  Adresse des 1.Index-Elementes 
    idx2 DINT  Adresse des 2. Index-Elementes 
    iw1 WORD  Wert des ersten Index-Elementes 
    iw2 WORD  Wert des 2. Index-Elementes 
    dix1 DINT  Adresse des 1.Daten-Elementes 
    dix2 DINT  Adresse des 2.Daten-Elementes 
    DDBN WORD   
    IDBN WORD   
    VerglErg BOOL   
    //
    // Parameter umladen, weil AUF DB[x] nicht mit Parametern funktioniert:
    //
          L     #indexDB 
          T     #IDBN
          L     #datenDB
          T     #DDBN
    //
    // Index initialisieren, wenn gewünscht.
    //
          UN    #INIT_INDEX
          SPB   M005
          L     #laenge
          T     #i
          AUF   DB [#IDBN]
    M004: NOP   0
          L     #i
          L     8 // 8 Bit pro Eintrag im Index
          *D    
          T     #idx1
          L     #i
          T     DBB [#idx1]
          L     1
          -I    
          T     #i
          SPPZ M004
     
    M005: NOP   0
    
    // die nächsten 8 Zeilen sind nur zum Beobachten:
          AUF   DB [#IDBN]
          L     DBB    0
          L     DBB    1
          L     DBB    2
          L     DBB    3
          L     DBB    4
          L     DBB    5
          L     DBB    6
    
    
          L     #laenge
          T     #i
    
    M003: L     #laenge
          L     #i
          -I    
          L     1
          +I    
          T     #j
    
    M002: NOP   0
          AUF   DB [#IDBN]
          L     #j
          L     8
          *D    
          T     #idx1
          L     DBB [#idx1]
          T     #iw1
    
          L     #idx1
          L     8                           //Länge eines Indexelements in Bit
          -D    
          T     #idx2                       //Index des letzten Elements
          L     DBB [#idx2]
          T     #iw2                        //Index des letzten Elements
    
          L     #iw1
          L     #datenLaenge
          *D    
          T     #dix1
    
          L     #iw2
          L     #datenLaenge
          *D    
          T     #dix2
    
          AUF   DB [#DDBN]
    
          L     DBD [#dix1]
          L     DBD [#dix2]
          >D    
          =     #VerglErg
          U     #VerglErg
          U     #AUF_AB
          O(    
          UN    #VerglErg
          UN    #AUF_AB
          )     
          SPB   m001
          AUF   DB    10
    // das muss auch AUF DB [#IDBN] werden! Sonst klpppt's nicht mit anderen DB-Nummern als 10.
    Leider geht das rot nicht innerhalb von code. Der folgende Code gehört noch zu FC16:

    Code:
          L     #iw1
          T     DBB [#idx2]
          L     #iw2
          T     DBB [#idx1]
    m001: NOP   0
          L     #j
          L     1
          -I    
          T     #j
          T     MB    22
          SPP   M002
          L     #i
          L     1
          -I    
          T     #i
          T     MB    23
          SPP   M003
          L     MB    22
          T     MW     0
    // die nächsten 8 Zeilen sind nur zum Beobachten:
          AUF   DB [#IDBN]
          L     DBB    0
          L     DBB    1
          L     DBB    2
          L     DBB    3
          L     DBB    4
          L     DBB    5
          L     DBB    6
          BE
    //
    // OB1 zum Testen des FC16:
    //
    Code:
          CALL  FC    16
           laenge     :=6
           indexDB    :=10
           datenDB    :=20
           datenLaenge:=32
           AUF_AB     :=FALSE
           INIT_INDEX :=TRUE
          L     DB10.DBB    0
          L     DB10.DBB    1
          L     DB10.DBB    2
          L     DB10.DBB    3
          L     DB10.DBB    4
          L     DB10.DBB    5
          L     DB10.DBB    6
    
          CALL  FC    16
           laenge     :=6
           indexDB    :=10
           datenDB    :=20
           datenLaenge:=32
           AUF_AB     :=TRUE
           INIT_INDEX :=TRUE
          L     DB10.DBB    0
          L     DB10.DBB    1
          L     DB10.DBB    2
          L     DB10.DBB    3
          L     DB10.DBB    4
          L     DB10.DBB    5
          L     DB10.DBB    6
          BE

  10. #20
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    bin wieder von der Messe zurück.


    @Zottel:

    Die lokalen Variablen kenne ich bei FC´s nicht - nur bei FB´s unter "STAT" (Instanz-DB).

    Oder meinst du damit die "Temp" bei der FC ?
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

Ähnliche Themen

  1. Display für S7-300 (Betriebsstunden etc.)
    Von superkato im Forum HMI
    Antworten: 8
    Letzter Beitrag: 25.11.2010, 17:18
  2. Betriebsstunden Umschaltung zweier Pumpen
    Von rene im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 06.09.2007, 14:52
  3. betriebsstunden speichern
    Von Merlin115 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.11.2006, 10:42
  4. Maschienenstart nach Betriebsstunden
    Von mst im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.11.2005, 20:37
  5. Betriebsstunden erfassen und auswerten
    Von Anonymous im Forum Programmierstrategien
    Antworten: 14
    Letzter Beitrag: 11.08.2005, 08:35

Lesezeichen

Berechtigungen

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