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

Ergebnis 1 bis 7 von 7

Thema: Programmierwettbewerb, 4. Aufgabe

  1. #1
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn an einer Anlage mit mehreren leistungsstarken Verbrauchern mehrere zum selben Zeitpunkt zuschalten können, so kommt es zu einer sehr hohen Leistungsspitze. Diese soll verhindert werden.

    Gesucht wird ein Baustein, der folgende Funktionen erfüllt:
    • 8 Signale (der Einfachheit halber, aber prinzipiell leicht erweiterbar auf 32 Signale oder mehr);
    • Einschalten mit einer Mindestpause (es darf immer nur ein Ausgang zugeschaltet werden);
    • Abschalten ohne Verzögerung;
    • bei Zeitvorgabe "T#0ms" sollen die Signale unverzögert durchschalten;
    • Zugriff direkt auf die Ausgänge im PAB (Aufruf am Ende des OB1, einfache nachträgliche Anwendung bei bestehenden Programmen);
    • Zugriff auf die Ausgänge über "IN_OUT" (verhindert Verwechslungen falls man "IN" und OUT" verwenden würde);
    • keine Verwendung von S5-Timern!;
    • ganz wichtig: nach einem Neustart müssen alle Ausgänge zurückgesetzt werden;
    • eine Wiedergabe der Reihenfolge des Eintreffens der Signale ist nicht erforderlich;
    Die Schnittstelle ist nur ein Vorschlag:
    Code:
    (******************************************************************************)
    FUNCTION_BLOCK "AUSGAENGE_PUFFER"
    TITLE = 'Sorgt für Schaltpausen beim Zuschalten mehrerer Ausgänge' 
    (******************************************************************************)
    VAR_INPUT
      FREIGABE                          : BOOL;       // Freigabe
      #T1                               : TIME;       // Zeitvorgabe für Mindest-Schaltpausen
    END_VAR
    VAR_IN_OUT
      A1                                : BOOL;       // Ausgang im Prozess-Abbild
      A2                                : BOOL;       // Ausgang im Prozess-Abbild
      A3                                : BOOL;       // Ausgang im Prozess-Abbild
      A4                                : BOOL;       // Ausgang im Prozess-Abbild
      A5                                : BOOL;       // Ausgang im Prozess-Abbild
      A6                                : BOOL;       // Ausgang im Prozess-Abbild
      A7                                : BOOL;       // Ausgang im Prozess-Abbild
      A8                                : BOOL;       // Ausgang im Prozess-Abbild
    END_VAR
    Es gab mal einen FB auf den Siemens-Seiten, der jedoch nicht alle o.g. Vorgaben erfüllt. Keine Ahnung ob er bei Siemens noch online zu finden ist.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford
    Zitieren Zitieren Programmierwettbewerb, 4. Aufgabe  

  2. #2
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Hi,
    hört sich intressant an,wenn ich die Woche dazu komm häng ich mich mal dran

    darfs auch in SCl sein?
    Der Input "Freigabe" soll der auch alle wegschalten?
    Wenn ich einen meiner Finger in eines deiner Nasenlöcher stecke, haben wir beide nen Finger in der Nase

  3. #3
    Avatar von Onkel Dagobert
    Onkel Dagobert ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Zitat Zitat von Zefix Beitrag anzeigen
    ..darfs auch in SCl sein?..
    Selbstverständlich! Alle Werkzeuge dürfen benutzt werden. Von mir aus auch KOP und FUP, solange der Code verständlich und nachvollziehbar ist.

    Zitat Zitat von Zefix Beitrag anzeigen
    ..Der Input "Freigabe" soll der auch alle wegschalten?
    Ja, wenn die "Freigabe" nicht gesetzt ist. Du kannst den Eingang aber auch "Reset" oder "Init" nennen, falls dir das lieber ist. Sinnvolle Erweiterungen oder Änderungen der Schnittstelle sind erwünscht.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  4. #4
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    hab das mal probiert, folgendes kam dabei heraus.

    Code:
    FUNCTION_BLOCK "AUSGAENGE_PUFFER"
    
    TITLE = 'Sorgt für Schaltpausen beim Zuschalten mehrerer Ausgänge'
    
    VERSION : '1.0'
    AUTHOR  : dalbi
    
    VAR_INPUT
      FREIGABE : BOOL; // Freigabe
      #T1      : TIME; // Zeitvorgabe für Mindest-Schaltpausen
    END_VAR
    
    VAR_IN_OUT
      A1 : BOOL; // Ausgang im Prozess-Abbild
      A2 : BOOL; // Ausgang im Prozess-Abbild
      A3 : BOOL; // Ausgang im Prozess-Abbild
      A4 : BOOL; // Ausgang im Prozess-Abbild
      A5 : BOOL; // Ausgang im Prozess-Abbild
      A6 : BOOL; // Ausgang im Prozess-Abbild
      A7 : BOOL; // Ausgang im Prozess-Abbild
      A8 : BOOL; // Ausgang im Prozess-Abbild
    END_VAR
    
    VAR_TEMP
      i : INT;
      ENOUT : ARRAY[0..7] OF BOOL;
    END_VAR
    
    VAR
      MSP : BOOL;   // Freigabe Timer Mindest-Schaltpausen
      sTIMER : TON; // Timer Mindest-Schaltpausen
      OUT : ARRAY[0..7] OF BOOL;
    END_VAR
    
    BEGIN
    
    (**************************************************************************** 
      Ausgänge umladen 
     ****************************************************************************)
    
      ENOUT[0] := A1;
      ENOUT[1] := A2;
      ENOUT[2] := A3;
      ENOUT[3] := A4;
      ENOUT[4] := A5;
      ENOUT[5] := A6;
      ENOUT[6] := A7;
      ENOUT[7] := A8;
    
    (**************************************************************************** 
      Startsignal TIMER rücksetzen, wenn Zeit erreicht ist
      oder die Zeitvorgabe auf 0 steht
     ****************************************************************************)
    
      IF sTIMER.Q OR TIME_TO_DINT(#T1) = 0 THEN
        MSP := FALSE;
      END_IF;
    
    (**************************************************************************** 
      Timer für Mindest-Schaltpausen starten
     ****************************************************************************)
      
      sTIMER(IN:=MSP, PT:=#T1);
    
    (**************************************************************************** 
      Schaltfreigabe auswerten
     ****************************************************************************)
      
      FOR i := 0 TO 7 DO
        IF ENOUT[i] AND NOT OUT[i] AND NOT MSP AND FREIGABE THEN
          OUT[i] := TRUE;
          MSP := TRUE;
        END_IF;
        IF NOT ENOUT[i] OR NOT FREIGABE THEN
          OUT[i] := FALSE;
        END_IF;
      END_FOR;
    
    (**************************************************************************** 
      Ausgänge umladen 
     ****************************************************************************)
    
      A1 := OUT[0];
      A2 := OUT[1];
      A3 := OUT[2];
      A4 := OUT[3];
      A5 := OUT[4];
      A6 := OUT[5];
      A7 := OUT[6];
      A8 := OUT[7];
    
    END_FUNCTION_BLOCK
    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  5. #5
    Avatar von Onkel Dagobert
    Onkel Dagobert ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Die Beteiligung läßt etwas zu wünschen übrig. Ihr habt doch nicht etwa Weihnachtsstress oder so etwas?

    @dalbi,
    schön gemacht! Ich habe es nicht getestet, denke aber daß es alle Punkte erfüllt. Meine Lösung sieht genau so aus, habe nur statt des Timers die Systemzeit (TIME_TCK) verwendet. Der Weg über das ARRAY und die Schleifen sind exakt identisch. Es konnte ja auch nicht anders sein. Ich denke, eine Lösung in AWL oder FUP kommt wohl nicht mehr.

    Kommen wir zur Abstimmung !

    Wer hat du eine Idee für die fünfte Aufgabe?


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  6. #6
    Registriert seit
    19.05.2008
    Beiträge
    648
    Danke
    117
    Erhielt 136 Danke für 105 Beiträge

    Standard

    Hallo Onkel,

    wollte auch noch mitmachen, aber inzwischen ist immer mehr Kunden aufgefallen, dass das Jahr zu Ende geht und noch alles Mögliche erledigt werden soll…
    Vielleicht klappt es das nächste Mal.

    Gruß
    Chräshe

  7. #7
    Avatar von Onkel Dagobert
    Onkel Dagobert ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Chräshe,

    dann poste deine Lösung wenn du so weit bist. Es hat bestimmt niemend etwas dagegen.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

Ähnliche Themen

  1. Programmierwettbewerb, 3. Aufgabe
    Von Chräshe im Forum Stammtisch
    Antworten: 7
    Letzter Beitrag: 05.12.2011, 20:43
  2. Programmierwettbewerb, 2. Aufgabe
    Von LargoD im Forum Stammtisch
    Antworten: 14
    Letzter Beitrag: 02.08.2011, 22:27
  3. Programmierwettbewerb
    Von M-Ott im Forum Stammtisch
    Antworten: 49
    Letzter Beitrag: 22.06.2011, 14:00
  4. Programmierwettbewerb: Diskussion
    Von Kai im Forum Stammtisch
    Antworten: 51
    Letzter Beitrag: 20.06.2011, 10:05
  5. Programmierwettbewerb: Interesse? Regeln!
    Von M-Ott im Forum Stammtisch
    Antworten: 67
    Letzter Beitrag: 18.06.2011, 08:28

Lesezeichen

Berechtigungen

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