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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Licht dimmen 0-10V

  1. #11
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von chefren_new Beitrag anzeigen
    Hallo

    ich komme da nicht mit, für mich wäre es einfacher wenn es möglch ich eine Timer und einen Zähler anlaufen zu lassen und wenn der Zähler auf null ist sollte die Schleife abgebrochen werden.

    aber leider bekomme ich solch ein Schleife nicht zum laufen, wie kann ich das machen.

    möchte nicht nur von 100% auf 0% sonder Variabel z.B.: von 70 auf 30 oder so

    ein solche Schleife wäre für mich auch bei anderen Bausteinen wichtig.

    Gruß
    Hallo Chefren,
    Zeiten zu nehmen ist hier nicht so günstig.

    100 / 70 == Ist
    0 / 30 == Soll

    Code:
       U #Sekundentakt
       UN M #Fertig
       FP M 10.0
       SPBN go
       L #Ist  // Statische Variable oder MW
       + -1
       T #Ist
    go:NOP 0
       L #Ist
       L #Soll
       <=I   // Zeit abgelaufen
       = M #Fertig
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  2. #12
    chefren_new ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.08.2009
    Beiträge
    137
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo

    warum ist mein Weg nicht so günstig?
    Ich verstehe deine Lösung nicht, kann derzeit AWL noch nicht lesen, kann leider nur FUP.

    Stehe voll auf der Leitung, Sorry

    Warum Sekundentakt?
    kann ich ein Beispiel in FUP haben?

    wie soll das gehen wenn ich von 70% auf 30 % in z.B.: 23 min Dimmen möchte

    ich habe ja eine Zeitspanne die für jedes Prozent gilt, oder?

    Gruß Klaus

  3. #13
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    die einzelnen bausteine sind nicht in FUP, aber die aufrufe lassen sich in KUP darstellen

    zuerst bauen wir uns eine simple zeitschaltuhr:

    Code:
    *
    FUNCTION "SIMPLE_CLOCK" : VOID
    TITLE =
    //this function realize a switching clock and calculate the range in seconds
    //
    //DATE:     31.10.2009
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    VERSION : 0.1
    
    
    VAR_INPUT
      todNOW : TIME_OF_DAY ;	
      todON : TIME_OF_DAY ;	
      todOFF : TIME_OF_DAY ;	
    END_VAR
    VAR_OUTPUT
      xOut : BOOL ;	
      dRange : DINT ;	
    END_VAR
    VAR_TEMP
      xTemp1 : BOOL ;	
      xTemp2 : BOOL ;	
      xTemp3 : BOOL ;	
      xTemp4 : BOOL ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          L     #todON; 
          L     #todOFF; 
          >D    ; 
          SPB   days; 
    
          U(    ; 
          L     #todNOW; 
          L     #todON; 
          >=D   ; 
          )     ; 
          U(    ; 
          L     #todNOW; 
          L     #todOFF; 
          <=D   ; 
          )     ; 
          =     #xOut; 
          SPA   end; 
    
    days: L     #todNOW; 
          L     #todON; 
          >=D   ; 
          =     #xTemp1; 
    
          L     #todNOW; 
          L     TOD#23:59:59.999; 
          <=D   ; 
          =     #xTemp2; 
    
          L     #todNOW; 
          L     TOD#0:0:0.0; 
          >=D   ; 
          =     #xTemp3; 
    
          L     #todNOW; 
          L     #todOFF; 
          <=D   ; 
          =     #xTemp4; 
    
          U     #xTemp1; 
          U     #xTemp2; 
          O     ; 
          U     #xTemp3; 
          U     #xTemp4; 
          =     #xOut; 
    
    end:  NOP   0; 
    
    NETWORK
    TITLE =
    
          L     #todON; 
          L     #todOFF; 
          >D    ; 
          SPB   day; 
    
          L     #todOFF; 
          L     #todON; 
          -D    ; 
          L     L#1000; 
          /D    ; 
          T     #dRange; 
          SPA   out; 
    
    day:  L     TOD#23:0:0.0;
          L     #todON;
          -D    ;
          L     TOD#1:0:0.0;
          +D ;
          L     #todOFF; 
          +D    ; 
          L     L#1000; 
          /D    ; 
          T     #dRange; 
    out:  SET   ; 
          SAVE  ; 
          
    END_FUNCTION
    und ein sekundenzähler für die bereits gedimmte zeit:

    Code:
    *
    FUNCTION "SIMPLE_DELTATICK" : VOID
    TITLE =
    //this function realize the calculation of an percantage value from a time length
    //
    //DATE:     31.10.2009
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    VERSION : 0.1
    
    
    VAR_INPUT
      xPlcPulse : BOOL ;	
      xReset : BOOL ;	
      dTimeLength : DINT ;	
    END_VAR
    VAR_OUTPUT
      rPercentage : REAL ;	
    END_VAR
    VAR_IN_OUT
      dTimeTemp : DINT ;	
      xHelpFlag : BOOL ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
    // reset
          U     #xReset; 
          SPBN  tick; 
          L     0; 
          T     #dTimeTemp; 
    // END_reset
    
    // incTime
    tick: U     #xPlcPulse; 
          FP    #xHelpFlag; 
          SPBN  calc; 
          L     #dTimeTemp; 
          L     L#1; 
          +D    ; 
          T     #dTimeTemp; 
    // END_incTime
    
    // calcValue
    calc: L     #dTimeTemp;
          DTR   ;
          L     #dTimeLength;
          DTR   ;
          /R    ;
          L     1.000000e+002;
          *R    ;
          T     #rPercentage;
    // END_calcValue
    	  SET;
    	  SAVE;
    END_FUNCTION
    und natürlich den von mir schon oft erwähnten y=mx+n sachverhalt:

    Code:
    *
    FUNCTION "SIMPLE_LINEAR" : VOID
    TITLE =
    //this function realize a simple linear function by the input of the four 
    //parameters X1,X2,Y1 and Y2
    //
    //DATE:     31.10.2009
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    VERSION : 0.1
    
    
    VAR_INPUT
      rY1 : REAL ;	
      rY2 : REAL ;	
      rX1 : REAL ;	
      rX2 : REAL ;	
      rAbscissa : REAL ;	
    END_VAR
    VAR_OUTPUT
      rOrdinate : REAL ;	
    END_VAR
    VAR_TEMP
      rConstant : REAL ;	
      rGrade : REAL ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
    // rGrade
          L     #rX2; 
          L     #rX1; 
          -R    ; 
          T     #rGrade; 
    
          L     #rY2; 
          L     #rY1; 
          -R    ; 
          L     #rGrade; 
          /R    ; 
          T     #rGrade; 
    // END_rGrade
    
    // rConstant
          L     #rGrade; 
          L     #rX1; 
          *R    ; 
          L     #rY1; 
          TAK   ; 
          -R    ; 
          T     #rConstant; 
    // END_rConstant
    
    // rOrdinate
          L     #rGrade; 
          L     #rAbscissa; 
          *R    ; 
          L     #rConstant; 
          +R    ; 
          T     #rOrdinate; 
    // END_rOrdinate
    	  SET;
    	  SAVE;
    END_FUNCTION
    im OB1 machen wir dann folgendes:

    Code:
    *
    ORGANIZATION_BLOCK "CYCL_EXC"
    TITLE = "Main Program Sweep (Cycle)"
    VERSION : 0.1
    
    
    VAR_TEMP
      OB1_EV_CLASS : BYTE ;	//Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : BYTE ;	//1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : BYTE ;	//Priority of OB Execution
      OB1_OB_NUMBR : BYTE ;	//1 (Organization block 1, OB1)
      OB1_RESERVED_1 : BYTE ;	//Reserved for system
      OB1_RESERVED_2 : BYTE ;	//Reserved for system
      OB1_PREV_CYCLE : INT ;	//Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : INT ;	//Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : INT ;	//Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : DATE_AND_TIME ;	//Date and time OB1 started
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          U     "xLogFalse"; 
          UN    "xLogFalse"; 
          =     "xLogFalse"; 
    NETWORK
    TITLE =
    
    
    
          CALL "DT_TOD" (
               IN                       := #OB1_DATE_TIME,
               RET_VAL                  := "tod_NOW");
          NOP   0; 
    NETWORK
    TITLE =
    //timerange
          CALL "SIMPLE_CLOCK" (
               todNOW                   := "tod_NOW",
               todON                    := TOD#18:0:0.0,
               todOFF                   := TOD#22:0:0.0,
               xOut                     := "xDimEnable",
               dRange                   := "dDimTimeRange");
          NOP   0; 
    NETWORK
    TITLE =
    //control range
    //START
    //
          L     7.000000e+001; 
          T     "rDimStart"; 
          NOP   0; 
    NETWORK
    TITLE =
    //control range
    //END
          L     3.000000e+001; 
          T     "rDimEnd"; 
          NOP   0; 
    NETWORK
    TITLE =
    
          U     "xPLCPulse_1Hz"; 
          =     L     20.0; 
          BLD   103; 
          U     "xDimEnable"; 
          FP    "xHelpFlag01"; 
          =     L     20.1; 
          BLD   103; 
          U     "xDimEnable"; 
          SPBNB _001; 
          CALL "SIMPLE_DELTATICK" (
               xPlcPulse                := L     20.0,
               xReset                   := L     20.1,
               dTimeLength              := "dDimTimeRange",
               rPercentage              := "rTimeState",
               dTimeTemp                := "dDimPeriod",
               xHelpFlag                := "xHelpFlag02");
    _001: NOP   0; 
    NETWORK
    TITLE =
    
          CALL "SIMPLE_LINEAR" (
               rY1                      := "rDimStart",
               rY2                      := "rDimEnd",
               rX1                      := 0.000000e+000,
               rX2                      := 1.000000e+002,
               rAbscissa                := "rTimeState",
               rOrdinate                := "rDimState");
          NOP   0; 
    NETWORK
    TITLE =
    
          U     "xLogFalse"; 
          =     L     20.0; 
          BLD   103; 
          CALL "UNSCALE" (
               IN                       := "rDimState",
               HI_LIM                   := 1.000000e+002,
               LO_LIM                   := 0.000000e+000,
               BIPOLAR                  := L     20.0,
               RET_VAL                  := "wTempRetVal",
               OUT                      := AW     0);
          NOP   0; 
    END_ORGANIZATION_BLOCK
    am besten übernimmst du folgende symboltabelle beim nachvollziehen vor dem übersetzen der quelle:

    Code:
    *
    CYCL_EXC         OB      1   OB      1 Cycle Execution
    wTempRetVal      MW    200   WORD 
    dDimPeriod       MD    154   DINT 
    rDimEnd          MD    124   REAL 
    rDimStart        MD    120   REAL 
    rDimState        MD    112   REAL 
    rTimeState       MD    108   REAL 
    dDimTimeRange    MD    104   DINT 
    tod_NOW          MD     20   TOD 
    xHelpFlag02      M     150.1 BOOL 
    xHelpFlag01      M     150.0 BOOL 
    xDimEnable       M     100.0 BOOL 
    xPLCPulse_1Hz    M       2.5 BOOL 
    xLogFalse        M       0.0 BOOL 
    UNSCALE          FC    106   FC    106 Unscaling Values
    SIMPLE_CLOCK     FC     12   FC     12 
    SIMPLE_DELTATICK FC     11   FC     11 
    SIMPLE_LINEAR    FC     10   FC     10 
    DT_TOD           FC      8   FC      8 DT to TOD
    Geändert von vierlagig (31.10.2009 um 17:29 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #14
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    das im anhang befindliche projekt beinhaltet die bausteine sowohl als AWL als auch umgeschrieben in KUP ...
    Angehängte Dateien Angehängte Dateien
    Geändert von vierlagig (31.10.2009 um 15:25 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #15
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    die berechnung hier:

    Code:
    *
    day:  L     TOD#23:0:0.0;
          L     #todON;
          -D    ;
          L     TOD#1:0:0.0;
          +D ;
          L     #todOFF; 
          +D    ; 
          L     L#1000; 
          /D    ; 
          T     #dRange;
    gefällt mir nicht ... bin für vorschläge offen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #16
    Registriert seit
    01.11.2007
    Beiträge
    1.235
    Danke
    91
    Erhielt 406 Danke für 367 Beiträge

    Standard

    Mein Vorschlag:
    Code:
    *
    day:  L     T#1D;
          L     #todON;
          -D    ;
          L     #todOFF; 
          +D    ; 
          L     L#1000; 
          /D    ; 
          T     #dRange;
    Grüße von HaDi

  7. Folgender Benutzer sagt Danke zu HaDi für den nützlichen Beitrag:

    vierlagig (31.10.2009)

  8. #17
    chefren_new ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.08.2009
    Beiträge
    137
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo


    hab das Problem gelöst!!

    hab noch eine kleine Frage zu Schluß

    Wie kann ich sehen ob auf meinen MC noch Platz frei ist? oder erfahre ich das wenn ich Keinen Bausteine mehr in die CPU laden kann.


    DANKE

    Gruß

Ähnliche Themen

  1. Licht dimmen per SPS und PWM
    Von Portisch im Forum Sonstige Steuerungen
    Antworten: 17
    Letzter Beitrag: 15.09.2011, 14:16
  2. Licht - Szenarien programmieren
    Von Doofundstinkt im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 31.12.2009, 15:40
  3. Licht dimmen
    Von Baumi im Forum Simatic
    Antworten: 45
    Letzter Beitrag: 09.12.2008, 09:33
  4. Licht ein und aus mit einem Taster
    Von Steffen gast im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 31.03.2006, 10:33
  5. [Info] Licht am Tag in A
    Von Kurt im Forum Stammtisch
    Antworten: 12
    Letzter Beitrag: 17.11.2005, 10:00

Lesezeichen

Berechtigungen

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