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

Seite 1 von 8 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 77

Thema: Auswahlkriterium Betriebsstunden

  1. #1
    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,

    ich bin noch ein wenig am rätseln für eine demnächst anstehende Aufgabe...


    Kurzbeschreibung:

    Es geht um 7 Betriebsmittel die angefordert werden sollen.

    Die Anforderung kommt über digitale Eingänge (7 Stück)

    Nur ist nicht jedem Eingang ein bestimmtes Betriebsmittel zugeordnet, sondern sollen anhand der Anzahl momentan geschalteter Eingänge die Betriebsmittel herausselektiert werden mit den wenigsten Betriebsstunden.

    Wenn also 3 beliebige (von diesen 7) digitaleingänge "high" sind sollen die 3 Betriebsmittel angewählt werden welche am wenigsten Stunden drauf haben.

    Kommt ein weiterer hinzu - oder fällt einer weg, geht das Spielchen weiter...



    Hierfür gibt es bestimmt verschiedene Lösungsmöglichkeiten - aber nicht eine (komplett verwendbare zumindest) ist mir bis jetzt eingefallen... *schäm*



    Hat jemand so was ähnliches schon mal gemacht ?


    Am schlimmsten stelle ich mir das zwischenspeichern vor, da ich keine Lösung mit 300 Merkern bevorzugen würde.

    Der Kniff ist ja auch, das das ganze ununterbrochen so weiterläuft.


    Es muß natürlich zunächst geprüft werden ob das Betriebsmittel überhaupt bereit ist - was ja an sich kein Problem ist - nur muß man das auch mit verankern.


    Man könnte "nicht bereite" von der Prüfung ausschließen oder mitprüfen und anschließend doch feststellen daß es nicht bereit ist - dann muß ja ersatzweise das nächst höhere genommen werden usw. ...



    Hat hier vielleicht SCL eine Wunderlösung parat?

    Damit habe ich aber noch keine Erfahrung - aber das wäre ja dann ein separater Baustein der immer nur die entsprechende Nummer(n) ausspuckt die dann letztendlich vom Hauptprogramm an- oder abgewählt werden.

    Somit könnte ich mir vielleicht schon vorstellen damit was anzuleihern




    Also

    besten Dank schon mal für eure Beiträge
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________
    Zitieren Zitieren Auswahlkriterium Betriebsstunden  

  2. #2
    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,

    ich hab beim Stöbern in der Biliothek unter der Rubrik "IEC Function Blocks" den FC25 und FC27 ausfindig gemacht.

    Das wäre eine Möglichkeit zu ermittlung des größten bzw. kleinsten Wertes.

    Man könnte diesen dann markieren und vom nächsten Durchlauf ausschließen, und weitersuchen...

    Aber die Bausteine können leider immer nur drei werte miteinander vergleichen - wie praktisch.

    Also gerade einen mehr als ich ohnehin auch so schon vergleichen kann...


    Das müßte ja dann so K.O.-Systemmäßig ablaufen - oder?

    Der Gewinner wird mit dem nächsten verglichen usw.


    Aber ich hatte halt gedacht daß es auch einfacher gehen müßte.



    Ich gebe die Hoffnung mal noch nicht auf...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  3. #3
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Standard

    Hallo rs-plc-aa,
    Am schlimmsten stelle ich mir das zwischenspeichern vor, da ich keine Lösung mit 300 Merkern bevorzugen würde.
    Muss glaube ich nicht unbedingt sein. Meine Idee dazu sieht so aus :
    Betriebsstundenerfassung läuft für alle 7 möglichen Betriebsmittel zyklisch durch, ist also immer aktuell (glaube aber, dass eine Toleranz von +- 1 Stunde irrelevant ist, kann also durchaus auch in einem Zeit-OB erfolgen). Dann würde ich auswerten (Flanke steigend oder fallend der Eingänge), ob sich eine Anwahl der Betriebsmittel geändert hat. In dem Fall würde ich dann einen FCxxx aufrufen. Den FCxxx solltest Du erstellen und dem sollte als Parameter die Anzahl der angewählten Betriebsmittel übergeben werden. Im Baustein FCxxx wertest Du anhand des übergebenen Parameters anhand der z.B. in einem DB abgelegten Betriebsstunden das entsprechende Betriebsmittel aus und übergibst das als Rückgabewert. War jetzt mal aus der Hüfte geschossen, aber sowas wäre mein erster Denkansatz dazu (bestimmt auch nicht der letzte), es gibt immer noch bessere Lösungen.
    Gruss
    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Auswahlkriterium Betriebsstunden  

  4. #4
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Standard

    Hallo rs-plc-aa,
    also ungefähr so :
    im DB mit den Betriebsstunden steht z.B. folgendes :
    Betriebsmittel 1 = 50 h
    Betriebsmittel 2 = 450 h
    Betriebsmittel 3 = 40 h
    Betriebsmittel 4 = 120 h
    Betriebsmittel 5 = 200 h
    Betriebsmittel 6 = 80 h
    Betriebsmittel 7 = 20 h

    Zur Zeit sind z.B. 3 Betriebsmittel angewählt, also BM7, BM3 und BM1.
    Jetzt wird ein viertes BM dazugeschaltet, diese 4 gibt Du als Parameter dem FCxxx mit. In dem FCxxx wertest Du dann aus, welches BM den 4-niedrigsten Betriebsstundenzähler hat. Dieses Betriebsmittel dann als Rückgabewert im FCxxx ausgeben und dann im weiteren Programm entsprechend zuschalten (b.z.w. abschalten, je nach übergebenem Parameter). Das nur als Denkanstoss, weiter ausbauen, z.B. mit Verfügbarkeit des Betriebsmittels kannst Du ja dann selber machen.
    Gruss
    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Auswahlkriterium Betriebsstunden  

  5. #5
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Standard

    Hallo rs-plc-aa,
    Hat hier vielleicht SCL eine Wunderlösung parat?
    Naja, siehe oben, SCL ist für sowas noch nicht nötig. Mit SCL kann wirklich sehr komplexe Berechnungen in der SPS durchführen (die man früher wirklich auf externen Rechnern in Hochsprachen durchführen musste), aber bei Deinem Problem ist das absolut noch nicht nötig. Dieses Problem lässt sich durchaus in normalen STEP7 (z.B. AWL) lösen.
    Gruss
    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Auswahlkriterium Betriebsstunden  

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

    Standard

    Zunächst sortierst du die Betriebsmittel nach den Betriebstunden. Dazu würde ich keinen der FCs verwenden, sondern eine einfache Vergleichsoperation, die zwei Operanden vergleicht. Um mit einem solchen Vergleich eine geordnete Liste zu erzeugen, gibt es viele Sortieralgorithmen. Diese unterscheiden sich in der Effizienz und Komplexität. Ferner unterscheiden sich Algorithmen, die eine völlig chaotische Menge gleich effizient sortieren, hinsichtlich der Effizienz bei teilweise geordneten Mengen. Die Effizient mißt man, indem man vergleicht, nach welcher Funktion die Ausführungszeit mit der Zahl der Elemente steigt. Schlecht ist n*n, gut ist log2(n) Llogarithmus zur Basis 2). Das alles interessiert erst bei mehr als einigen hundert Elementen wirklich.

    Damit man bei langen Einträgen nicht die Datenmenge der Einträge selbst "umschaufeln" muß, verwendet man einen Index. Dieser kann aus Zeigern auf die Elemente bestehen oder aus Platznummern in einer ungeordneten Liste.

    Einer der einfachsten Algorithmen heißt "Bubble sort", weil bei ihm das oberste Element in der Liste aufsteigt wie eine Blase.
    Buble sort funktioniert so: Wenn Nummer1 kleiner ist als Nummer 2, tausche Nummer 1 mit Nummer 2, sonst mach nix. Wenn Nummer2 kleiner ist als Nummer 3, tausche Nummer 2 mit Nummer 3, sonst mach nix. So gehts weiter bis zum Ende der Liste. Am Ende der Liste steht nun das kleinste Element. Weil man das sicher Weiß, braucht de nächste Durchgang nur noch alle vorigen Elemente zu untersuchen. Mit jedem Durchgang wird es eins weniger. Wenn im letzten Durchgang nur noch 2 Elemente verglichen wurden, ist die Liste sortiert.

    Realisierung:
    Du hast nun z.B. eine Liste im DB2. Jeder Eintrag ist ein DWORD, daß die Betriebsstunden (Betriebszeit) enhält. Ein DB2 enthalte deinen "Index". Er enthält jeweils ein Byte mit der Platznummer des Betriebsmittels.

    Code:
    L DB2.DBB0	//lade 1.Eintragsnummer aus Index
    L 32			//Länge eines DWORDS in bits
    *I			//ergibt Adresse des eigentlichen Elements
    T LD0		//zwischenspeichern
    
    L DB2.DBB1	//lade 2.Eintragsnummer aus Index
    L 32			//Länge eines DWORDS in bits
    *I			//ergibt Adresse des eigentlichen Elements
    T LD4		//zwischenspeichern
    
    L DB1.DBD[LD0]	//Lade Betriebsstunden des 1. Betriebsmittels
    L DB1.DBD[LD4]	//Lade Betriebsstunden des 2. Betriebsmittels
    >D
    SPB nixtun		//wenn das 1.größer ist, ist nichts zu tun, sonst wird jetzt getauscht:
    L DB2.DBB0		//lade 1.Eintragsnummer aus Index
    T LB0			// zwischenspeicher für Ringtausch
    L DB2.DBB1		//lade 2.Eintragsnummer aus Index
    T DB2.DBB0		//speicher als neue 1.Eintragsnummer aus Index
    L LB0			//Hole Zwischenspeicher zurück
    T DB2.DBB1		//speicher als neue 2.Eintragsnummer aus Index
    nixtun: NOP
    Diesen Code kannst du nun aneinanderhängen :
    Code:
    L DB2.DBB1	//lade 2.Eintragsnummer aus Index
    L 32			//Länge eines DWORDS in bits
    *I			//ergibt Adresse des eigentlichen Elements
    T LD0		//zwischenspeichern
    
    L DB2.DBB2	//lade 3.Eintragsnummer aus Index
    L 32			//Länge eines DWORDS in bits
    *I			//ergibt Adresse des eigentlichen Elements
    T LD4		//zwischenspeichern
    
    L DB1.DBD[LD0]	//Lade Betriebsstunden des 2. Betriebsmittels
    L DB1.DBD[LD4]	//Lade Betriebsstunden des 3. Betriebsmittels
    >D
    SPB nixtun2		//wenn das 1.größer ist, ist nichts zu tun, sonst wird jetzt getauscht:
    L DB2.DBB1		//lade 1.Eintragsnummer aus Index
    T LB0			// zwischenspeicher für Ringtausch
    L DB2.DBB2		//lade 2.Eintragsnummer aus Index
    T DB2.DBB1		//speicher als neue 1.Eintragsnummer aus Index
    L LB0			//Hole Zwischenspeicher zurück
    T DB2.DBB2		//speicher als neue 2.Eintragsnummer aus Index
    nixtun2: NOP
    Du mußt du ihn sinngemäß für Eintrag 1-7,1-6,1-5,1-4,1-3,1-2 ausführen. Das wären 27 der oben gezeigten Code-Blöcke mit angepassten Indexnummern (für 7 Elemente kann man das wohl so machen).

    Du kannst den Code abkürzen, indem du ihn in zwei Schleifen packst: Die äußere Schleife zählt die Durchgänge. Die innere Schleife zählt die zu vergleichenden Elemente. Sie hat mit jedem Durchgang der äußeren ein Element weniger.

    Am Ende enthält dein Index in DB2 eine Liste der Art
    5
    4
    2
    3
    6
    7
    1
    Das bedeutet, daß die Betriebsstunden des 5. Elementes am geringsten sind, nächst-geringer die des 4. und 2. Du kanst statt des Eintrags der reinen Zeit im DB1 auch einen UDT verwenden, der z.B. zusätzliche einen Zeiger auf den einzuschaltenden Ausgang enthält.

    Wann immer sich die Betriebstunden signifikant verändern, mußt du das sortieren der Liste wiederholen. Signifikant heißt: Wenn es dir nur auf Betriebsstunden ankommt, reicht es ja die Liste alle Stunde neu zu sortieren. Wenn das Betriebsmittel nicht gewechselt wird, nur weil es eine Minute oder Sekunde mehr auf dem Buckel hat als ein anderes, brauchst du die Liste auch nur dann zu sortieren, wenn sich die Kombination der Eingänge ändert.

    [/code]

  7. #7
    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

    @Zottel: das Sortieren war meine Hauptsorge - aber bei derartiger Unterstützung ...


    Zunächst wollte ich mich erst mal bedanken.

    Das muß ich erst mal durchstudieren....

    .... aber gefällt mir gut.
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  8. #8
    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,

    ich hatte leider nicht die Zeit gehabt am WE mich darauf zu stürzen wie ich es eigentlich vorhatte...

    Ich hab´s mir nun aber noch mal durchgesehen.

    @Zottel:Meinst du in deiner Beschreibung
    >> Zitat:

    Du hast nun z.B. eine Liste im DB2. Jeder Eintrag ist ein DWORD, daß die Betriebsstunden (Betriebszeit) enhält. Ein DB2 enthalte deinen "Index". Er enthält jeweils ein Byte mit der Platznummer des Betriebsmittels.

    >> Ende Zitat...

    mit DB 2 eigentlich DB1 ?

    Laut dem Code müsste das so sein.


    Ich hänge eigentlich nur noch ein wenig an dem Index fest...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

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

    Standard

    Ja, ich meinte, daß die Einträge in DB1 stehen.
    Man muß auch nicht zwigend einen Index verwenden, aber wenn du in der Liste nur die Betriebsstunden hast, hast du nach dem Sortieren halt nur eine geordnete Liste von Betriebsstunden und weißt nicht mehr, zu welchem Betriebsmittel si gehören. Das kann man auch mit einem UDT lösen, der die Nummer des BM enthält, aber mit Index kopierst du nur sowenige Bytes wie wirklich nötig.

  10. #10
    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,

    das mit dem Index ist schon o.k. - will ich auch so machen.

    Ich habe jetzt einen Global-DB (DB 20) angelegt für die Indexierung, und einen Global-DB für die Stunden (DB 10) - (ich kopiere die Stunden in den DB, die ich über Profibus von den BM´s erhalte).


    Die reihenfolge des Stunden DB´s (DB10) bleibt ja unverändert.

    Die Default-Reihenfolge der Index-Bytes ist ja 1,2,3,4...., und wird durch die Vergleiche getauscht.

    So weit kann ich folgen.


    Jetzt haben wir ja irgendwann im Index-DB eine Reihenfolge die sortiert ist.

    Aber das erste Byte trägt doch immer noch die selbe bezeichnung wie vorher - oder ?


    Ich versteh also nicht ganz wie ich das anschließend zuordnen soll...

    Sorry - aber ich hab was derartiges noch nicht gemacht.
    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
  •