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

Ergebnis 1 bis 4 von 4

Thema: SCL Timer

  1. #1
    Registriert seit
    17.10.2013
    Beiträge
    48
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe ein Proglem mit einer Einschaltverzögerung in SCL. Ich benutze dafür den Baustein SFB4. Das Programm ist für eine messe gedacht und soll eine Art Browsergame geben. Wo man über ein Panel eingaben geben kann. Die Einschaltverzögerung brauche ich um die Bauzeit eines Gebeudes nach zu stellen. Hier mein Code:
    Code:
    FUNCTION_BLOCK FB2
    VAR_INPUT
        DBnr:Block_DB;
        Metalmiene_erweitern:BOOL;
        Kristalmine_erweitern:BOOL;
        Treibstoffmine_erweitern:BOOL;
    END_VAR
    VAR_TEMP
    
    END_VAR
    VAR
        m_bau_fertig:BOOL;
        m_Bauen:BOOL;
        k_bau_fertig:BOOL;
        k_Bauen:BOOL;   
        t_bau_fertig:BOOL;
        t_Bauen:BOOL; 
        zeit_fertig:BOOL;
        Timer1:SFB4;
        Timer2:SFB4;
        Timer3:SFB4;
        ZEIT:TIME;
    END_VAR
    
    IF Metalmiene_erweitern = 1 AND NOT k_Bauen AND NOT t_Bauen AND NOT m_Bauen AND
       DWORD_TO_DINT (DBnr.DD0) >= WORD_TO_DINT (DBnr.DW14) AND DWORD_TO_DINT (DBnr.DD4) >= WORD_TO_DINT (DBnr.DW16)  THEN
        DBnr.DD0:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD0) - WORD_TO_DINT (DBnr.DW14));
        DBnr.DD4:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD4) - WORD_TO_DINT (DBnr.DW16));
        m_bau_fertig:=0;
        ZEIT :=DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD22));
        m_Bauen:=1;
    END_IF;
    
    IF Kristalmine_erweitern = 1 AND NOT m_Bauen AND NOT t_Bauen AND NOT k_Bauen AND
       DWORD_TO_DINT (DBnr.DD0) >= WORD_TO_DINT (DBnr.DW28) AND DWORD_TO_DINT (DBnr.DD4) >= WORD_TO_DINT (DBnr.DW30) THEN
        DBnr.DD0:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD0) - WORD_TO_DINT (DBnr.DW28));
        DBnr.DD4:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD4) - WORD_TO_DINT (DBnr.DW30));
        k_bau_fertig:=0;
        ZEIT :=DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD36));
        k_Bauen:=1;
    END_IF;
    
    IF Treibstoffmine_erweitern = 1 AND NOT m_Bauen AND NOT k_Bauen AND NOT t_Bauen AND
       DWORD_TO_DINT (DBnr.DD0) >= WORD_TO_DINT (DBnr.DW42) AND DWORD_TO_DINT (DBnr.DD4) >= WORD_TO_DINT (DBnr.DW44) THEN
        DBnr.DD0:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD0) - WORD_TO_DINT (DBnr.DW42));
        DBnr.DD4:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD4) - WORD_TO_DINT (DBnr.DW44));
        t_bau_fertig:=0;
        ZEIT :=DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD50));
        t_Bauen:=1;
    END_IF;
    
    Timer1(IN := m_Bauen ,PT := DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD22))); 
    m_bau_fertig := Timer1.Q;
    
    Timer2(IN := k_Bauen ,PT := DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD36))); 
    k_bau_fertig := Timer2.Q;
    
    Timer3(IN := t_Bauen ,PT := DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD50))); 
    t_bau_fertig := Timer3.Q;
    
    IF m_bau_fertig =1 THEN
        DBnr.DW12:= INT_TO_WOrD(WORD_TO_INT(DBnr.DW12) + 1);
        DBnr.DW14:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW14))*2.3));
        DBnr.DW16:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW16))*2.3));
        DBnr.DW20:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW20))*1.75));
        DBnr.DD22:= REAL_TO_DWORD(DWORD_TO_REAL (DBnr.DD22)* 1.3);
        m_Bauen:= 0;
        m_bau_fertig :=0;
    ELSIF k_bau_fertig =1 THEN
        DBnr.DW26:= INT_TO_WOrD(WORD_TO_INT(DBnr.DW26) + 1);
        DBnr.DW28:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW28))*2.4));
        DBnr.DW30:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW30))*2.2));
        DBnr.DW34:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW34))*1.75));
        DBnr.DD36:= REAL_TO_DWORD(DWORD_TO_REAL (DBnr.DD36)* 1.3);
        k_Bauen:= 0;
        k_bau_fertig:=0;
    ELSIF t_bau_fertig =1 THEN
        DBnr.DW40:= INT_TO_WOrD(WORD_TO_INT(DBnr.DW40) + 1);
        DBnr.DW42:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW42))*2.2));
        DBnr.DW44:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW44))*2.3));
        DBnr.DW48:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW48))*1.7));
        DBnr.DD50:= REAL_TO_DWORD(DWORD_TO_REAL (DBnr.DD50)* 1.3);
        t_Bauen:= 0;
        t_bau_fertig:=0;
    END_IF;
    
        
    
    END_FUNCTION_BLOCK
    Das Problem ist jetzt das der Timer sofort durchschaltet. Bei PT:= ... Frage ich in meinem DB ein Wert ab mit dem Format TIME.

    Vielen Dank schonmal.
    Zitieren Zitieren SCL Timer  

  2. #2
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.725
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    Bliebe jetzt natürlich noch die Frage zu klären was "sofort" ist, und womit du dieses "sofort" festgestellt hast.

    Wenn ich jetzt mal unterstelle, das in DBnr.DD22 was "sinnvolles" steht,
    desweiteren unterstelle, das du eine relativ alte Version von PLCSim verwendest,
    dann wäre dieses Verhalten unter Umständen unbedenklich.

    Die älteren PLCSim Versionen konnten Sachen wie den SFB4 nämlich nicht funktionieren, mit eben den von dir beschriebenen Ergebnis.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

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

    BlueDogi (07.11.2013)

  4. #3
    Registriert seit
    17.10.2013
    Beiträge
    48
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also Ich habe PLCsim benutzt V5.3 SP1 wenn dir das was sagt. festgestellt habe ich das in dem keine Zeit abläuft. Genau gesagt wird in einem Zyklus z.B. Metalmiene_erweitern betätigt und m_Bauen an dem Timer1 aktiv. im nächsten Zyklus schaltet dan m_bau_fertig durch.

  5. #4
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    PLCSIM v5.3 SP1 ist der Bösewicht.
    Jesper M. Pedersen

  6. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    BlueDogi (07.11.2013)

Ähnliche Themen

  1. Timer in SCL erzeugen
    Von Bensen83 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 01.06.2017, 17:47
  2. Anfängerfrage - SCL Timer
    Von FrankTheTank im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 28.07.2011, 13:37
  3. Timer in SCL funktioniert nicht
    Von karlm44 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.05.2010, 22:47
  4. S7 SCL Timer
    Von PoshCom im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 04.08.2008, 11:45
  5. Timer in SCL abfragen
    Von geduldiger im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 25.09.2007, 15:55

Stichworte

Lesezeichen

Berechtigungen

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