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

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 41

Thema: Zeitschaltuhr Pulse

  1. #1
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    habe ein kleines Problem. Ich wollte mir eine Zeitschaltuhr erstellen die ich für mehrers Funktionen einsetzen möchte.
    Die Zeitschaltuhr solle für jeden Wochentag je nach verwendeter Funktion 1-10 Einschlatzeiten und Auschaltzeiten habe, die einen Puls ausgeben.

    Mein Problem ist das ich die Größe des verwendete Arrays nicht Variabel machen kann.
    Hier mein Programm
    Code:
    FUNCTION_BLOCK FB234
    
    VAR_TEMP
        
        TEMP_INT : INT ;
        DATUM_ZEIT_DT  : DT;
        SPS_TIME : TOD; 
        Wochentag : INT;
        i:INT; 
        i2:INT;
        SPS_TIME_I:DINT;
        
    END_VAR
    
    VAR_OUTPUT
        
        PULS_EIN:BOOL;
        PULS_AUS:BOOL;
        
    END_VAR
    
    VAR
        //SCHALTUHR 1..7 = Wochentage von 1=SO, 2=MO usw , 1..10 SPEICHER PULS SCHALTUHR EIN
        SCHALTUHR_EIN : ARRAY[1..7,1..10] OF TOD; 
        //SCHALTUHR 1..7 = Wochentage von 1=SO, 2=MO usw , 1..10 SPEICHER PULS SCHALTUHR AUS
        SCHALTUHR_AUS : ARRAY[1..7,1..10] OF TOD; 
        
              
          
           
       
    END_VAR
    
    
    //______________________________________________________  
    BEGIN
    
    // Zeiten aus SPS Extrahieren  
      
     // Datum und Zeit aus SPS Lesen
          TEMP_INT:=READ_CLK(CDT :=DATUM_ZEIT_DT); 
      
     // Zeit aus Datum und Zeit Extrahieren  
          SPS_TIME:=DT_TOD(IN :=DATUM_ZEIT_DT);
     // ZEIT ind DINT umwandeln und durch 1000 Teile um sec zu erhalten     
          SPS_TIME_I:=TOD_TO_DINT (SPS_TIME)/1000 ;
     // Wochentag aus SPS Zeit Extrahieren
          Wochentag:=DT_DAY(IN :=DATUM_ZEIT_DT);  
    
    
    // Vergleich von SPS_TIME in sec mit allen EINSCHALTZEITEN des jeweiligen Wochentages. Wenn EINSCHALTZEIT mit SPS_TIME
    // übereinstimmt wird FOR Schleife beendet und Ausgang PULS_EIN IST TRUE     
        FOR i := 1 TO 10 BY 1 DO
            
          IF SPS_TIME_I = TOD_TO_DINT (SCHALTUHR_EIN[Wochentag,i])/1000 AND TOD_TO_DINT (SCHALTUHR_EIN[Wochentag,i])/1000>0  THEN
            PULS_EIN:=TRUE;
            EXIT;
            ELSE
            PULS_EIN:=FALSE;
          END_IF;
    
            
                    ;
        END_FOR;
    
     // Vergleich von SPS_TIME in sec mit allen AUSCHALTZEITEN des jeweiligen Wochentages. Wenn AUSCHALTZEIT mit SPS_TIME
    // übereinstimmt wird FOR Schleife beendet und Ausgang PULS_AUS IST TRUE     
        FOR i2 := 1 TO 10 BY 1 DO
            
          IF SPS_TIME_I = TOD_TO_DINT (SCHALTUHR_AUS[Wochentag,i2])/1000 AND TOD_TO_DINT (SCHALTUHR_AUS[Wochentag,i2])/1000>0 THEN
            PULS_AUS:=TRUE;
            EXIT;
            ELSE
            PULS_AUS:=FALSE;
          END_IF;
    
            
                    ;
        END_FOR;
       
       
        
              
        
       
    END_FUNCTION_BLOCK
      
    //*********************************ENDE FB***************************************
    Zitieren Zitieren Zeitschaltuhr Pulse  

  2. #2
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Meinst du die Verwendeten EIN/Ausschaltzeiten bzw. überhaupt die "Größe" einstellbar machen?
    Dann könntest dir ja eine IN Variable anlegen die die aktiven Tage/Zeiten angibt!
    Dann kann zum einen die Bearbeitung übersprungen werden wenn der Tag überhaupt nicht aktiviert ist. Des weiteren werden dann nur die aktiven Zeiten von den 10 abgefragt!
    Wird dann aber nur bei den For schleifen etwas bringen!Den die Zeiten usw. liegen ja im Statischen bereich!Dieser wird aber nicht zur Laufzeit in Größe odgl. verändert!
    Was noch gehen würde ist die Parameter für die Schaltuhr auch als IN bzw. IN_OUT angeben!
    dann kannst ja nur den Bereich einlesen der auch aktiv ist!

    Mfg
    Wer aufhört, besser zu werden, hat aufgehört, gut zu sein!

  3. #3
    Registriert seit
    24.01.2012
    Beiträge
    511
    Danke
    92
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Hallo,

    meine Schaltuhr habe ich in AWL gemacht, 4 Schaltzeiten (erweiterbar) und Wochentage werden auch berücksichtigt.
    Somit habe ich kein Problem mit einem Array und wie SCM schon schreibt, es wird nur der "aktive Tag" bearbeitet.

    Gruß
    DerMatze

  4. #4
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Zitat Zitat von SCM Beitrag anzeigen
    Meinst du die Verwendeten EIN/Ausschaltzeiten bzw. überhaupt die "Größe" einstellbar machen?
    Dann könntest dir ja eine IN Variable anlegen die die aktiven Tage/Zeiten angibt!
    Dann kann zum einen die Bearbeitung übersprungen werden wenn der Tag überhaupt nicht aktiviert ist. Des weiteren werden dann nur die aktiven Zeiten von den 10 abgefragt!
    Wird dann aber nur bei den For schleifen etwas bringen!Den die Zeiten usw. liegen ja im Statischen bereich!Dieser wird aber nicht zur Laufzeit in Größe odgl. verändert!
    Was noch gehen würde ist die Parameter für die Schaltuhr auch als IN bzw. IN_OUT angeben!
    dann kannst ja nur den Bereich einlesen der auch aktiv ist!

    Mfg
    Ich müsste also als IN Out den Array vom jeweiligen Tag einlen ?
    Kanst du mir ein Beispiel nennen?

  5. #5
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Also du machst als in Type zum Beispiel Any!Und holst dir dann vom Parameter DB genau nur soviele Daten die auch aktiviert worden sind!
    Die Frage stellt sich was du genau möchtest!Am einfachsten ist du machst eine Abfrage ob der Tag überhaupt aktiv ist ansonsten Baustein beenden!
    Dann änderst die For schleifen so das nur mehr die aktiven Zeiten des jeweiligen Tages durchlaufen werden!
    So wird der Baustein schon etwas feiner.
    Mfg
    Wer aufhört, besser zu werden, hat aufgehört, gut zu sein!

  6. #6
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Verstehe das nicht so ganz was du meinst.

    Der Baustein soll folgendes können
    Es soll Zeiten vergleichen und bei übereinstimmung einen Puls setzen.

    Ich möchte am Baustein einen DB mit Zeiten ansetzen der von 1 Zeit je Tag bis 10 oder mehr Zeiten je Tag eingestellt werden kann, Somit könnte ich die Zeitschaltuhr für eine einfache Rollosteuerung, 1 Zeit je Tag 7:00 Uhr Rollo Aus
    bishin zu einer Heizungststeuerng mehrere Zeiten je Tag z.b 8:00 Heizung ein 10:00 Uhr Heizung aus 12:00 Heizung ein 22:00 uhr Heizung aus verwenden.

  7. #7
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Also folgendes du hast also Tag 0-7 und Zeiten für Tag 0-7 .
    Die Zeiten Struktur sieht immer so aus Zeit ein, Zeit aus oder?
    Genau diese Ein/Aus Struktur soll variabel in den Baustein gelesen werden.
    Also Brauchst du mal eine Variable die definiert ob der Tag aktiv ist.
    Dann eine Variable die definiert wieviel Zeiten an dem aktuellen Tag aktiv sind!
    Genau mit diesen Informationen kannst dir die Daten indirekt aus dem Datenbaustein holen!

    Also sagen wir mal Tag Freitag hat 3 aktive Zeiten.Dann steht in deiner Tagesvariable z.b.: 6
    In der Variable Zeiten am Tag steht dann 3.
    Damit du jetzt den Pointer für die Erste Zeit des Tages Freitag ermitteln kannst musst du die Anzahl der aktiven Zeiten der anderen Tage addieren!
    Dadurch erhälst du dann die Startadresse für die erste Zeit vom Freitag!

    Hoffe es ist halbwegs verständlich!Ist ja schon eine etwas gröbere Sache wenn es völlig variabel sein soll!

    Gruß
    Wer aufhört, besser zu werden, hat aufgehört, gut zu sein!

  8. #8
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Im Endeffekt willst du eine Parametrierbare Wochenschaltuhr machen wenn ich dich richtig verstehe!
    Wieso willst du es variabel haben?!Zykluszeit schonen?
    Ansonsten kannst ja e für jeden Tag ein Array von 10 Zeiten odgl. anlegen!Damit wirds sicher reichen!
    So wie du es ja jetzt hast!

    Gruß
    Wer aufhört, besser zu werden, hat aufgehört, gut zu sein!

  9. #9
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Ich wollte halt für eine Rollosteueurng keinen DB mit 10 Zeiten verwenden da ich diesen für 12 Rollos brauche. Das ist ja jedes mal ein risen DB. weiterhin wollte ich so Flexibel sein da ich auch mal eine Koplexe Heizungssteuerung mit vielen Zeiten abbilden kann.

    Bei einer Buderus Heizungssteueeurng mit Zeitschaltuhr kann ich x belibig viele Ein und Ausschaltzeiten einfügen. Sowas wollte ich nachbilden.

    Versuche mal mein Glück.

  10. #10
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Achso okay!
    Ja es ist sicher machbar!Nur halt etwas aufwendiger wenn man es wirklich ganz Flexibel haben will!
    Aber mach mal und stell wieder ein!Dann kann man ja wieder weiterschauen wenns hackt!
    Gruß
    Wer aufhört, besser zu werden, hat aufgehört, gut zu sein!

Ähnliche Themen

  1. Frequenzumrichter Yaskawa 676VG3 ohne Pulse Generator
    Von lindnerlars im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 01.03.2011, 22:26
  2. Beckhoff EL2521 Pulse Train Klemme
    Von Daberer im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 01.09.2010, 07:56
  3. Zeitschaltuhr
    Von bille1806 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 29.07.2009, 21:54
  4. Zeitschaltuhr
    Von BastiMG im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 12.10.2006, 10:23
  5. S7-200 Pulse Timer
    Von Golf2 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 23.12.2005, 08:41

Lesezeichen

Berechtigungen

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