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

Ergebnis 1 bis 4 von 4

Thema: Programmierung einer Zeitsteuerung mit Nutezrvorgabe

  1. #1
    Registriert seit
    09.09.2013
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich würde gerne auf einer WAGO SPS mit Codesys V2.3 eine zeitabhängige Nutzersteueurng realisieren, wofür ich noch nach der richtigen Programmierstrategie suche. Folgendes soll ermöglicht sein:

    - Der Nutzer kann die Eingaben über eine kleine Visu tätigen
    - Der Nutzer kann für unterschiedliche Tage und unterschiedliche Uhrzeiten bspw. Solltemperaturen einstellen
    - Das ganze wird dann zu der jeweiligen Zeit umgesetzt

    Bisher habe ich das ganze über eine IF..ELSE Abfolge gelöst, was auch prinzipiell funktioniert. Das ganze ist aber sehr statisch und sehr viel Code. Vielleicht hat ja jemand etwas ähnliches schon einmal gemacht und eine elegantere Idee, ggf. Lösung über eine Case-Struktur.

    Freue mich auf Anregungen, viele Grüße!
    Geändert von dayd (02.05.2016 um 09:59 Uhr)
    Zitieren Zitieren Programmierung einer Zeitsteuerung mit Nutzervorgabe  

  2. #2
    Registriert seit
    24.02.2009
    Beiträge
    1.244
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Ich habe soetwas ähnliches für eine Pausenuhr/sirene gemacht. Dort kann man Pausenzeiten eingeben und auswählen an welchen Wochentagen die einzelnen Zeiten gültig sein sollen.

    Realisiert habe ich das mit einem Array von einer Struktur.
    Die Struktur behinhaltet einmal die Zeit als Stunden und Minuten wert, die Wochentage Bitcodiert in einem Byte und die Pausendauer.

    Code:
    TYPE Pausendaten
    STRUCT
      bStunde :Byte;
      bMinute : Byte;
      bTage :Byte;
      bDauerMinuten :Byte;
    END_STRUCT
    END_TYPE
    
    arrPausenzeiten :ARRAY[0..19] OF Pausendaten;
    Bei WAGO und Codesys weiss ich jetzt nicht wie man da die Zeitdaten bekommt. Bei Beckhoff gibt es eine TIME_STRUCT die alles beinhaltet was man braucht. (akt. Stunde, akt. Minute, Day of Week etc. pp)

    Ich lasse dann das Array einfach in einer FOR Schleife durchlaufen und prüfe ob arrPausenzeiten[i].bStunde = aktStunde und arrPausenzeiten[i].bMinute = aktMinute. Zusätzlich prüfe ich noch ob der Wochentag stimmt.

    Die Wochentage habe ich Bit-Codiert im Byte abgelegt.
    bTage.0 = Sonntag
    bTage.1 = Montag
    ...
    bTage.6 = Samstag

    Mit dem aktuellen DayOfWeek erzeuge ich mir eine Bit-Maske (BitMaske := SHL(BYTE#1, TIME_STRUCT.DayOfWeek)) und verunde diese mit bTage.
    Wenn das Ergebnis 0 ist dann ist die Pausenzeit für den Wochentag nicht gültig, wenn das Ergebnis > 0 dann ist der Eintrag gültig.

    Du kannst statt dem Byte bTage auch ein Array[0..6] of Bool verwenden und dann prüfen ob das passende Element TRUE oder FALSE ist.
    Code:
    arrTage :Array[0..6] of Bool;
    IF arrTage[TIME_STRUCT.DayOfWeek] = TRUE THEN
     ...
    END_IF
    Wenn alle Bedingungen passen (Stunde, Minute und Wochentag) dann übernimmst du die Parameter aus der Struktur. In meinem Fall ist da nur bDauerMinuten als Paramter hinterlegt, du kannst in deine Struktur beliebige Parameter anlegen.

    Ich hoffe es ist so halbwegs verständlich wie ich das meine ....
    Sänd from mei Kombjudder mitse Dastadurr.

  3. #3
    dayd ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.09.2013
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo MasterOhh,

    vielen Dank für die ausfürhliche Antwort. So ganz kann ich das noch nicht nachvollziehen, aber ich teste es einfach mal in einem Programm, warhscheinlich wird es dann klarer. Die Systemzeit kann man auch bei der Wago relativ leicht mit einer Bib auslesen.

    Viele Grüße

  4. #4
    dayd ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.09.2013
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo MasterOhh,

    hab das ganze Mal durchgeschaut. So ganz komme ich noch nicht dahinter, wie du das realisiert hast.

    Vom Prinzip möchte ich so etwas ausführen, wie es in der Scheduler_o3.lib mit dem Baustein "FbScheduleWeekly" vorhanden ist. Dort kann man anscheinend verschiedene Programme für einzelne Wochentage hinterlagen, womit dann Digitalzustände geschaltet werden. Der Unterschied zu meinem Vorhaben ist, dass nihct nur "an"/"aus", sondern auch Analogwerte eingegeben werden verarbeitet werden sollen.

    Also, an die Zeiten kommt man auch bei der Wago sehr leicht. Woran es happert, ist der Teil ab dem Vergleich. Die FOR-Schleife krieg ich vom Prinzip hin, aber mir ist nicht ganz klar welcher Variablen du dann welchen Wert zuweist. Hättest du vielleicht die Chance ein Beispielprogramm anzufügen?

    Besten Dank schon einmal.

Ähnliche Themen

  1. Programmierung einer zyklischen Beckhoff SPS mit ST
    Von DerBenutzer im Forum Programmierstrategien
    Antworten: 19
    Letzter Beitrag: 06.01.2015, 20:10
  2. Programmierung einer Handhabungsmaschine mit TwinCAT2
    Von dme im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 24.04.2013, 10:48
  3. Antworten: 2
    Letzter Beitrag: 21.03.2013, 13:39
  4. Programmierung einer KL2541 mit Beckhoff
    Von waska87 im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 20.01.2012, 21:57
  5. Realisierung einer Automatisierung mit C-Programmierung
    Von clumsi im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 19.01.2012, 20:40

Lesezeichen

Berechtigungen

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