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

Ergebnis 1 bis 10 von 10

Thema: Pumpensteuerung mit 10Pumpen

  1. #1
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen ich möchte gerne diesen Code/SCL die ich Forum gefunden habe, im STEP 5.4 von Siemens austesten.
    Aber wenn ich eine neue SCL Quelle eröffne und dieser Code einfüge wird kein FB erzeugt. Es entstehen sehr viele Fehlermeldungen.

    Was mache ich falsch, das es nicht geht?


    Danke für Hilfe!
    Geändert von Pinguino (17.01.2011 um 09:04 Uhr)
    Zitieren Zitieren Pumpensteuerung mit 10Pumpen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    immer nach der Fehlermeldung sehen und die dann Stück für Stück beseitigen.

    Im aktuellen Fall fang mal mit dem Variablentyp UINT an. Das heißt in SCL dann WORD.

    Ich schaue mal noch nach Weiteren ...

    Gruß
    LL

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

    ZimmerAutomat (14.02.2014)

  4. #3
    Pinguino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich werde es mal ändern

  5. #4
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Pinguino Beitrag anzeigen
    Hallo zusammen ich möchte gerne diesen Code/SCL die ich Forum gefunden habe, im STEP 5.4 von Siemens austesten.
    Aber wenn ich eine neue SCL Quelle eröffne und dieser Code einfüge wird kein FB erzeugt. Es entstehen sehr viele Fehlermeldungen.

    Was mache ich falsch, das es nicht geht?
    Bei dem Programmcode von Zotos handelt es sich um Programmcode für CoDeSys, der nach S7-SCL umgesetzt werden muss.

    http://www.sps-forum.de/showpost.php...05&postcount=4

    Gruß Kai

  6. #5
    Pinguino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo KAY, ist dass eine grosse Sache das alles umzuschreiben?
    Das UINT ist WORD, was gibt es noch zu ändern von CodeSys zu Step?

  7. #6
    Pinguino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe das Programm im Step eingefügt, es entstehen immer noch Fehlermeldungen, ich weiss nicht mehr weiter. Ich bin kein SCL-Crack ich bitte um Hilfe!
    Geändert von Pinguino (17.01.2011 um 09:04 Uhr)

  8. #7
    Registriert seit
    23.05.2008
    Beiträge
    27
    Danke
    0
    Erhielt 14 Danke für 12 Beiträge

    Standard

    Hallo,

    es wäre wohl noch sinnvoll entweder den FUNKTION_BLOCK zKaskade in der Symboltabelle zu definieren oder direkt einen FB mit Nummer anzugeben also z.B. FUNKTION_BLOCK FB100. (falls nicht schon geschehen).

    Stephan

  9. #8
    Pinguino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das habe ich schon gemacht! (FUNKTION_BLOCK FB600)

  10. #9
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Code:
    FUNCTION_BLOCK zKaskade
    
    VAR_INPUT
        Required : INT;
        Ready_01,    Ready_02, Ready_03, Ready_04, Ready_05, Ready_06, Ready_07, Ready_08, Ready_09, Ready_10 : BOOL;
        CycleTime: DINT;
        OverlapTime: DINT;        (*Überlappungszeit*)
    END_VAR
    
    VAR_OUTPUT
        Out_01, Out_02, Out_03, Out_04, Out_05, Out_06, Out_07, Out_08, Out_09, Out_10 : BOOL;
    END_VAR
    
    VAR
        Oscillator :TON;
        CycleTimeCount: DINT;
        OverlapTimeCount: DINT;        (*Überlappungszeit Zähler*)
    
        Ready : ARRAY [1..10] OF BOOL := FALSE;
        Out : ARRAY [1..10] OF BOOL := FALSE;
    
        ReadyCount : INT;
        OutCount : INT;
    
        RequiredExt : INT;
    
        OutOnTime : ARRAY [1..10] OF DINT;
        OutOffTime : ARRAY [1..10] OF DINT;
    
    
        ForCount : INT;
        OverlapFlag: BOOL;
        OldValueTime: DINT;
        SearchRes: INT;
    END_VAR
    
    (*Beginn: Pumpenabschalten wenn nicht bereit-----------------------------*)
    FOR ForCount:=1 TO 10 BY 1 DO
        IF (Ready[ForCount] = FALSE) THEN
            Out[ForCount] := FALSE;
        END_IF;
    END_FOR;
    (*Ende: Pumpenabschalten wenn nicht bereit-------------------------------*)
    
    Oscillator(IN := NOT Oscillator.Q, PT:= T#1s);
    
    IF Oscillator.Q = TRUE THEN
    (*Beginn: Bestandsaufnahme----------------------------------------------------*)
        Ready[1]  := Ready_01;
        Ready[2]  := Ready_02;
        Ready[3]  := Ready_03;
        Ready[4]  := Ready_04;
        Ready[5]  := Ready_05;
        Ready[6]  := Ready_06;
        Ready[7]  := Ready_07;
        Ready[8]  := Ready_08;
        Ready[9]  := Ready_09;
        Ready[10] := Ready_10;
    
        Out[1]  := Out_01;
        Out[2]  := Out_02;
        Out[3]  := Out_03;
        Out[4]  := Out_04;
        Out[5]  := Out_05;
        Out[6]  := Out_06;
        Out[7]  := Out_07;
        Out[8]  := Out_08;
        Out[9]  := Out_09;
        Out[10] := Out_10;
    
        OutCount := 0;
        ReadyCount := 0;
        FOR ForCount:=1 TO 10 BY 1 DO
            IF (Out[ForCount] = TRUE) THEN
                OutCount := OutCount + 1;
                OutOnTime[ForCount] := OutOnTime[ForCount] + 1;
                OutOffTime[ForCount] := 0;
            ELSIF (Ready[ForCount] = TRUE) THEN
                    OutOffTime[ForCount] := OutOffTime[ForCount] + 1;
                    OutOnTime[ForCount] := 0;
            ELSIF (Ready[ForCount] = FALSE) THEN
                OutOnTime[ForCount] := 0;
                OutOffTime[ForCount] := 0;
            END_IF;
    
            IF (Ready[ForCount] = TRUE) THEN
                ReadyCount := ReadyCount + 1;
            END_IF;
        END_FOR;
    (*Ende: Bestandsaufnahme------------------------------------------------------*)
    
        CycleTimeCount := CycleTimeCount + 1;
    
        IF CycleTimeCount >= CycleTime THEN
            CycleTimeCount := 0;
            OverlapFlag := TRUE;
        END_IF;
    
        IF (OverlapFlag = TRUE) THEN
            OverlapTimeCount := OverlapTimeCount + 1;
            RequiredExt := Required + 1;
        ELSE
            RequiredExt := Required;
        END_IF;
    
    
        IF OverlapTimeCount >= OverlapTime THEN
            OverlapTimeCount := 0;
            OverlapFlag := FALSE;
        END_IF;
    
        IF (ReadyCount > RequiredExt) THEN
            WHILE (OutCount < RequiredExt) DO
                OldValueTime := 0;
                SearchRes := 1;
                FOR ForCount:=1 TO 10 BY 1 DO
                    IF ((OutOffTime[ForCount] > OldValueTime)
                     AND (Ready[ForCount] = TRUE) AND (Out[ForCount] = FALSE)) THEN
                        OldValueTime := OutOffTime[ForCount];
                        SearchRes := ForCount;
                    END_IF;
                END_FOR;
                IF (Ready[SearchRes] = TRUE) THEN
                    Out[SearchRes] := TRUE;
                    OutCount := OutCount + 1;
                END_IF;
            END_WHILE;
        ELSE
            FOR ForCount:=1 TO 10 BY 1 DO
                IF (Ready[ForCount] = TRUE) THEN
                    Out[ForCount] := TRUE;
                END_IF;
            END_FOR;
        END_IF;
    
    
        WHILE (OutCount > RequiredExt) DO
            OldValueTime := 0;
            SearchRes := 1;
            FOR ForCount:=1 TO 10 BY 1 DO
                IF ((OutOnTime[ForCount] > OldValueTime)
                 AND (Ready[ForCount] = TRUE) AND (Out[ForCount] = TRUE)) THEN
                    OldValueTime := OutOnTime[ForCount];
                    SearchRes := ForCount;
                END_IF;
            END_FOR;
            Out[SearchRes] := FALSE;
            OutCount := OutCount - 1;
        END_WHILE;
    
    
    END_IF;
    
    Out_01 := Out[1];
    Out_02 := Out[2];
    Out_03 := Out[3];
    Out_04 := Out[4];
    Out_05 := Out[5];
    Out_06 := Out[6];
    Out_07 := Out[7];
    Out_08 := Out[8];
    Out_09 := Out[9];
    Out_10 := Out[10];
    
    END_FUNCTION_BLOCK
    Ungetestet (aber der Compiler meckert nicht mehr).
    If you open your Mind too much, your Brain will fall out.

  11. Folgender Benutzer sagt Danke zu zotos für den nützlichen Beitrag:

    Pinguino (01.07.2009)

  12. #10
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mit etwas (zeitlichem) Abstand betrachtet. Ist meine Lösung aber viel zu komplex für die einfache Aufgabe. Ich werde das ganze wohl mal überarbeiten.

    Eine ähnliche Aufgabe mit ganz anderem Lösungsansatz findet man hier: http://www.sps-forum.de/showthread.p...608#post190608

    If you open your Mind too much, your Brain will fall out.

Ähnliche Themen

  1. Pumpensteuerung
    Von HSVBoy93 im Forum Simatic
    Antworten: 56
    Letzter Beitrag: 25.07.2010, 20:59
  2. Pumpensteuerung
    Von Luckyjack im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 24.05.2010, 15:08
  3. Pumpensteuerung
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 12.05.2005, 09:17
  4. Antworten: 1
    Letzter Beitrag: 02.04.2005, 12:09
  5. Programmierhilfe: Pumpensteuerung
    Von xpert im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 28.01.2005, 13:33

Lesezeichen

Berechtigungen

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