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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: PWM in SCL

  1. #1
    Registriert seit
    19.09.2010
    Beiträge
    11
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo erstmal,
    bin relativ neu hier im Forum und habe da ein Anliegen.
    Da AWL zu einfach geworden ist, möchte ich gerne SCl lernen.
    Hierzu wurde mir eine Aufgabe gestellt ( schon recht anspruchsvoll) :
    Erstellen einer Pulsweitenmodulation (PWM) in SCL.
    Hat das jemand schon mal gemacht??
    Mirt gehts da um den Aufwand und ob das für den Anfang nicht zuviel ist.
    Arbeite zur Zeit mit der Doku von Step 7 und habe bis jetzt nur folgende Zeilen geschafft:

    VAR_INPUT
    ANA_IN:INT; // 0-10V Analog Eingang als Sollwertgeber
    END_VAR

    VAR_OUTPUT
    DIG_OUT:BOOL:=0 // Ausgabe der PWM als Digital Ausgang ala Frequenzumrichter

    END_VAR
    VAR
    ERGEBNIS:INT:=0;
    CONST
    Vorgabe_Hz:INT:=50;
    MAX_DIGITD:INT:=27648;
    PRO_ANTEIL:INT:=98;
    END_CONST
    BEGIN
    FOR ANA_IN >=0& ANA_IN <=27648;
    ERGEBNIS:= PRO_ANTEIL MOD MAX_DIGIT;
    Nicht viel aber schonmal ein Anfang finde ich.
    Zitieren Zitieren PWM in SCL  

  2. #2
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    Zitat Zitat von waldschrat Beitrag anzeigen
    Da AWL zu einfach geworden ist, möchte ich gerne SCl lernen.
    Hierzu wurde mir eine Aufgabe gestellt ( schon recht anspruchsvoll) :
    Erstellen einer Pulsweitenmodulation (PWM) in SCL.
    Hat das jemand schon mal gemacht??
    Na, da weiss ich vielleicht jemanden: http://www.sps-forum.de/member.php?u=6250

    Gruss
    kind regards
    SoftMachine

  3. #3
    waldschrat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.09.2010
    Beiträge
    11
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Soft Machine,
    werds mal versuchen ...

  4. #4
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Hast du mal versucht, dein Programm mi dem SCL-Compiler zu übersetzen?
    Zitat Zitat von waldschrat Beitrag anzeigen
    FOR ANA_IN >=0& ANA_IN <=27648;
    Was willst du mit dieser Zeile erreichen?
    Schau´ dir mal die Syntax zu FOR an.

    Der Zweck des Konstrukts
    Code:
    FOR n:=0 TO max;
    Anweisung; [Anweisung;]
    END_FOR
    ist es, die Anweisungen je einmal für jeden Wert von n auszuführen, wobei n die Werte 0 bis max annimmt.

    Hast du eine Vorstellung, wie du die PWM-Funktionalität z.B. in AWL (S7) oder C oder Assembler (Mikrocontroller) programmieren würdest?

    Zitat Zitat von waldschrat Beitrag anzeigen
    ERGEBNIS:= PRO_ANTEIL MOD MAX_DIGIT;
    Egal, wozu das gut sein soll, aber in deinem Beispiel sind PRO_ANTEIL und MAX_DIGIT Konstanten, daher ist auch PRO_ANTEIL MOD MAX_DIGIT ein Konstanter Ausdruck. Wozu soll die SPS das jedesmal neu berechnen?

  5. #5
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    Code:
    FUNCTION_BLOCK PWM
    VERSION : '1.0'
    AUTHOR  : dalbi
    
    VAR_INPUT
      IN   : INT;              // Eingang 0..100%
      Ta   : TIME := T#100MS;  // Abtastzeit
      Tp   : TIME := T#10s;    // Periodendauer
      RESET: BOOL;             // Reset
    END_VAR
    
    VAR_OUTPUT  
      Y : BOOL;                // PWM Signal
    END_VAR 
    
    VAR_TEMP
      OFF : DINT;
      #MAX : DINT;
    END_VAR
    
    VAR
      TICK : DINT;
    END_VAR
    
    BEGIN
    
      #MAX := TIME_TO_DINT(Tp) / TIME_TO_DINT(Ta);
      
      OFF := #MAX * IN / 100; // Ausdauer berechnen
      TICK := TICK + 1;       // Zyklen addieren
      
      // Zyklenzähler auf 0 setzen
      IF TICK >= #MAX THEN
        TICK := 0;
      END_IF;
    
      IF TICK >= OFF THEN   // Ausgang ausschalten
        Y := FALSE;
      ELSIF RESET THEN      // Reset  
        TICK := 0;
        Y := FALSE;
      ELSE                  // Ausgang einschalten
        Y := TRUE;
      END_IF;
      
    END_FUNCTION_BLOCK
    Quelle: http://de.wikipedia.org/wiki/Pulsweitenmodulation

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

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

    waldschrat (19.06.2011)

  7. #6
    waldschrat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.09.2010
    Beiträge
    11
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wie schon am Anfang geschrieben :
    Ich habe sehr wenig Ahnung von SCL und das sind nur erste Gedanken von mir.
    Gedanke ist:
    Analogwert (+2764 in einen Time wert für einen Impulsgeber umzuwandeln dieser soll an die Zykluszeit der CPU nach Leistung der Ausgangskarte angepasst werden können (je nach Typ).

  8. #7
    waldschrat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.09.2010
    Beiträge
    11
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke dalbi,
    soviel wollte ich eigentlich nicht als Lösung haben...
    will das ja selber lernen ,hatte da an so kleine Lösungsschritte gedacht aber das hier ist ja schon super

  9. #8
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    sollte auch nur so als Anregung dienen, müsste man eh noch auf Deinen Analogeingang 0..27648 anpassen.

    Der Aufruf von meinem Beispiel muss im OB35 erfolgen und die Zykluszeit in Ta entsprechend eingetragen werden.

    Gruss Daniel
    Geändert von dalbi (19.06.2011 um 00:17 Uhr) Grund: OB100 = OB35 :)
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  10. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    da du mich (auf Anregung von Softmaschine) ja direkt angepostet hast hier auch mein Beitrag dazu :

    Im Grunde hat Dalbi ja schon das Wesentliche gesagt.
    Mein Ansatz wäre es auch, etwas mit dem OB35 zu machen.
    Dein selbsterstellter Baustein könnte ja auch Basis des ihm übergebenen OB35-Aufruf-Intervalls die gewünschten Ein- und Ausschaltzeiten berechnen. Willst du das dann aber auf einen Ausgang leiten so mußt du beachten, das ein im OB35 gesetzter Ausgang nicht automatisch auf der Ausgangskarte (Prozessabbild) landet - du müßtest den also dann "handisch" auf das zugehörige PAB übertragen (so a la "L AB4 - T PAB 4").

    Gruß
    Larry

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

    waldschrat (19.06.2011)

  12. #10
    waldschrat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.09.2010
    Beiträge
    11
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke nochmal an dalbi und Larry für die super Unterstützung hat mich schon weiter gebracht als ich mir erhofft hatte.
    Werd es mal versuchen ohne Copy/Paste zu realisieren.

Lesezeichen

Berechtigungen

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