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

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

Thema: Puslweitenmodulation Heizwiderstand auf TwinCAT

  1. #1
    Registriert seit
    07.10.2015
    Beiträge
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    Seit ein paar Monaten habe ich einen neuen Arbeitsgeber und ich bin oft auf mich alleine gestellt, wenn es um Informationen beschaffen geht. Falls ich hier mit meiner Frage am falschen Ort bin dann entschuldigt bitte die Störung.

    Ich habe nun mehrere Stunden damit verbracht mir ein Bild einer PWM zu machen, um es auf Twin CAT mit Strukturiertem Text zu realisieren. Da für mich Strukturierter Text absolutes Neuland ist (ich habe jedoch einen TwinCAT Anfängerkurs besucht), komme ich einfach nicht weiter. Zudem finde ich im Internet keine passende Antwort für meine Frage.

    Zur Aufgabenstellung:

    Ich muss mit einem Potentiometer, durch einer PWM, einen Heizwiderstand steuern und mit 10%-, 30%-, 50%- und 100%er Leistung betreiben.
    Zum Schluss sollte ich die Werte: Poti Heizleistung, Ausgang Heizwiderstand und die Temperatur auf Scope View visualisieren und Aufnahmen bei 10-, 30%, 50% und 100% machen



    So und jetzt zu meiner Aktuellen Situation:

    Um dieses Programm zu schreiben habe ich die OSCAT Basic Library runtergeladen und gedenke den CTRL_PWM Funktionsbaustein zu benutzen.

    Dieser sieht dann so aus (mit meinen definierten Variablen):

    CTRL_PWM(
    CI:= , (*Brauche ich nicht*)
    MAN_IN:=rPoti_Einstellung , (*Manueller Eingangswert*)
    MANUAL:= bSchalter1, (*Umschalter für Handbetrieb*)
    F:= t#20s, (*Periodendauer in Hz*)
    Q:= bHeiz1, (*Steuersignal für Heizwiderstand*)
    );

    rPoti_Einstellung (*Potentiometer Eingangssignal in REAL*)
    bSchalter (*Umschalter für PWM in BOOL*)
    bHeiz1 (*Ausgangssignal PWM für Heizwiderstand in BOOL*)

    Die Variablen für den Temperatursensor hab ich noch nicht definiert.

    Da "MAN_IN" in REAL ist muss ich ja das Potentiometersignal (INT) in Real umwandeln, dafür benutze ich die INT_TO_REAL Funktion mit der Formel: rPoti_Einstellung:= (iPoti1)/32767*50;

    Nun zu meiner Frage:
    Als erstes wollte ich Testen, ob ich auf dem richtigen Weg zur Lösung bin. Jedoch kann ich das Ganze nicht übersetzen, weil beim Übersetzen immer die Fehlermeldung "CTRL_PWM ist keine Funktion" kommt. àAuch hier finde ich auf Google keine Lösung.

    Und zweitens: Bin ich überhaupt auf dem richtigen Weg? Kann ich irgendwo mehr Input herkriegen für meine Aufgabe oder gibts irgendwo Beispiele in Codesys?

    Freundliche Grüsse,
    FreshSkyline
    Zitieren Zitieren Puslweitenmodulation Heizwiderstand auf TwinCAT  

  2. #2
    Registriert seit
    15.05.2013
    Beiträge
    58
    Danke
    4
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo FreshSkyline,

    prinzipiell hört sich der Weg doch schon mal gut an. Zu deinem Problem:

    CTRL_PWM ist ein Funktionsbaustein, d.h. du darfst ihn nicht einfach so verwenden, sondern musst ihn instanzieren. Folgender Pseudocode:

    In der Variablenliste
    Code:
    PWMBeispiel : CTRL_PWM;
    Im Programmcode dann:
    Code:
    PWMBeispiel( 
    CI:= , (*Brauche ich nicht*)
    MAN_IN:=rPoti_Einstellung , (*Manueller Eingangswert*)
    MANUAL:= bSchalter1, (*Umschalter für Handbetrieb*)
    F:= t#20s, (*Periodendauer in Hz*)
    Q:= bHeiz1, (*Steuersignal für Heizwiderstand*) 
    );

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

    FreshSkyline (07.10.2015)

  4. #3
    Registriert seit
    05.07.2013
    Beiträge
    75
    Danke
    12
    Erhielt 14 Danke für 12 Beiträge

    Standard

    Um den Baustein nutzen zu können, musst du ihn in der Variablendeklaration erstmal instanzieren und deine benötigten Variablen am besten gleich mit deklarieren:
    Code:
    Var
    Heizung1 :CTRL_PWM;
    rPoti_Einstellung %i :REAL;(*Potentiometer Eingangssignal in REAL ist bestimmt ein Eingang*)
    bSchalter %I :BOOL; (*Umschalter für PWM in BOOL auch hier sicher ein Eingang*)
    bHeiz1 %Q :BOOL;(*Ausgangssignal PWM für Heizwiderstand in BOOL ist garantiert ein Ausgang*)
    End_Var
    Im Code rufst du dann deine Instanz auf, wie du es geplant hast.
    Code:
    Heizung1( 
    CI:= , (*Brauche ich nicht*)
    MAN_IN:=rPoti_Einstellung , (*Manueller Eingangswert*)
    MANUAL:= bSchalter1, (*Umschalter für Handbetrieb*)
    F:= t#20s, (*Periodendauer in Hz*)
    Q:= bHeiz1, (*Steuersignal für Heizwiderstand*) 
    );
    Die Ein- und Ausgänge kannst du dann direkt an die Variablen binden.

    MfG Jensemann
    Das Leben ist eines der Härtesten

  5. Folgender Benutzer sagt Danke zu jensemann für den nützlichen Beitrag:

    FreshSkyline (07.10.2015)

  6. #4
    FreshSkyline ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2015
    Beiträge
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @ SPS_A und Jensemann

    Vielen Dank erstmal für eure raschen Antworten.

    Jetzt bin ich so weit, dass ich 3 Bausteine habe: MAIN (PRG), PWM_Heizung(FB) und UmrechnungPoti (FUN).

    Hier PWM_Heizung:
    Code:
    FUNCTION_BLOCK PWM_Heizung
    VAR
        Heizung1                : CTRL_PWM;     (*Initialisieren des Funktionsbausteins CTRL_PWM*)
        EingangPotentiometer        : INT;            (*Potentiometer Eingangssignal in REAL*)
        SchalterEingang            : BOOL;            (*Schaltereingang für PWM Aktievierung in BOOL*)
        Ausgang_PWM            : BOOL;            (*Ausgangssignal PWM für Heizwiderstand in BOOL*)
        Controler_Eingang        : REAL;            (*Eingang für Controler*)
    END_VAR
    -------
    Heizung1( CI:= Controler_Eingang                (*Wird nicht benötigt*),               
                   MAN_IN:= Umrechnung_Poti_FUN(EingangPotentiometer),    (*Manueller Eingangswert*)
                   MANUAL:= SchalterEingang,        (*Umschalter für Handbetrieb*)
                   F:= TIME_TO_REAL(t#20s),        (*Periodendauer in Hz*)
                   Q=> Ausgang_PWM                   (*Steuersignal für Heizwiderstand*)
    );
    und hier UmrechnungPoti:

    Code:
    FUNCTION Umrechnung_Poti_FUN : REAL
    VAR_INPUT
        Poti         :INT;
    END_VAR
    -------
    Umrechnung_Poti_FUN := INT_TO_REAL (Poti)/32767*10;
    Jetzt hab ich das Problem, dass wenn ich im Main mit F2 die Eingabehilfe aufrufe und unter definierte Funktionsblöcke "PWM_Heizung" hinzufügen möchte, nur PWM_Heizung hinzugefügt wird. Die von mir im FB definierten Inputs und Outputs werden nicht angezeigt.

    Also es müsste ja normalerweise so aussehen im MAIN (Wenn ich den FB abrufe):
    Code:
    PROGRAM MAIN
    VAR
    (*Inputs*)
        bSchalter1         AT    %IX0.0             :BOOL;
        bSchalter2         AT    %I*                 :BOOL;
        bSchalter3         AT    %I*                 :BOOL;
        bSchalter4         AT    %I*                 :BOOL;
        bSchalter5         AT    %I*                 :BOOL;
        bSchalter6         AT    %I*                 :BOOL;
        bSchalter7         AT    %I*                 :BOOL;
    
    
    (*Outputs*)
        bHeizung1        AT    %QX0.0             :BOOL;
        bLampe1         AT    %Q*                :BOOL;
        bLampe2        AT    %Q*                :BOOL;
        bLampe3        AT    %Q*                 :BOOL;
    END_VAR
    -------
    PWM(EingangPotentiometer:= , SchalterEingang:= , Ausgang_PWM=> )
    Oder hab ich da wieder etwas vergessen? Schlussendlich möchte ich dann mit dem gleichen FB vier verschiedene Potis brauchen. Ausgänge sind dann einmal ein Heizwiderstand und 3 mal LED's.

  7. #5
    Registriert seit
    15.05.2013
    Beiträge
    58
    Danke
    4
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,

    soweit ich das auf die schnelle sehe, ist dein FB "PWM_Heizung" überflüssig, oder? Dieser ist ja in der reingeladenen bib vorhanden. Du müsstest ja somit einfach in deinem Hauptprogramm 4 Instanzen davon anlegen. Das die Input und Output Variablen nicht angezeigt werden, liegt simplerweise daran, dass deine deklarierten Variablen nur normale "VAR"s sind. Sollen es Eingangs- oder Ausgangsvariablen sein, dann brauchst du folgende Syntax:

    Code:
    VAR_INPUT
        Variable: Datentyp;
    END_VAR
    VAR_OUTPUT
        Variable: Datentyp;
    END_VAR
    Soweit erst einmal verständlich?
    Viele Grüße

  8. Folgender Benutzer sagt Danke zu SPS_A für den nützlichen Beitrag:

    FreshSkyline (07.10.2015)

  9. #6
    FreshSkyline ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2015
    Beiträge
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @SPS_A

    Vielen Dank, ja ich habs kurz vor deiner Antwort gemerkt, dass ich de Variablen falsch deklariert hatte.

    Nun ich brauche den FB "PWM_Heizung schon, denn ich möchte einen einheitlichen Baustein haben, damit ich bei einer Änderung nur eine "Instanz" ändern muss und nicht 4. 4 sind zwar nicht viel, aber es dient ja als Übungszweck damit ich später bei komplexeren Programmen mir die Programmanpassung etwas erleichtere.

    So ich habs soweit geschafft dass FAST alles läuft, nur krieg ich beim PWM_Ausgang kein Signal wenn ich das Poti drehe.

    Code:
    PROGRAM MAIN
    VAR
    	Potentiometer1			: PWM_Heizung;
    	Potentiometer2			: PWM_Heizung;
    	Potentiometer3			: PWM_Heizung;
    	Potentiometer4			: PWM_Heizung;
    END_VAR
    -------------------------
    
    (*Potentiometer 1*)
    
    
    Potentiometer1(
    	Controler_Eingang:= , 
    	EingangPotentiometer:= bPoti1,
    	SchalterEingang:= bSchalter1,
    	Frequenz:= t#20s,
    	Ausgang_PWM=> bHeizung1 );
    
    
    
    
    (*Potentiometer 2*)
    
    
    Potentiometer2(
    	Controler_Eingang:= , 
    	EingangPotentiometer:= bPoti2,
    	SchalterEingang:= bSchalter2,
    	Frequenz:= t#50s,
    	Ausgang_PWM=> bLampe1);
    
    
    
    
    (*Potentiometer 3*)
    
    
    Potentiometer3(
    	Controler_Eingang:= ,
    	EingangPotentiometer:= bPoti3,
    	SchalterEingang:= bSchalter3,
    	Frequenz:= t#10s,
    	Ausgang_PWM=> bLampe2);
    
    
    
    
    (*Potentiometer 4*)
    
    
    Potentiometer4(
    	Controler_Eingang:= ,
    	EingangPotentiometer:= bPoti4,
    	SchalterEingang:= bSchalter4,
    	Frequenz:= t#1s,
    	Ausgang_PWM=> bLampe3);
    
    
    
    
    
    
    FUNCTION_BLOCK PWM_Heizung
    VAR
    	Heizung1				: CTRL_PWM; 	(*Initialisieren des Funktionsbausteins CTRL_PWM*)
    END_VAR
    VAR_INPUT
    	Controler_Eingang			: REAL;			(*Eingang für Controler*)
    	EingangPotentiometer		: INT;			(*Potentiometer Eingangssignal in REAL*)
    	SchalterEingang			: BOOL;			(*Schaltereingang für PWM Aktievierung in BOOL*)
    	Frequenz				: TIME;			(*Periodendauer der PWM*)
    END_VAR
    VAR_OUTPUT
    	Ausgang_PWM			: BOOL;			(*Ausgangssignal PWM für Heizwiderstand in BOOL*)
    END_VAR
    -------------------------
    
    Heizung1(		CI:= Controler_Eingang					(*Wird nicht benötigt*),
    				MAN_IN:= INT_TO_REAL(EingangPotentiometer)/32767*10,	(*Manueller Eingangswert*)
    				MANUAL:= SchalterEingang, 			(*Umschalter für Handbetrieb*)
    				F:= TIME_TO_REAL(Frequenz), 				(*Periodendauer in Hz*)
    				Q=> Ausgang_PWM					(*Steuersignal für Heizwiderstand*)
    );
    An was könnte das liegen? Ich komm nicht dahinter :/


    Vielen Dank schon mal für die bisherige Hilfe!! Es hat mir sehr geholfen das ganze etwas mehr zu Verstehen.

    Freundliche Grüsse,
    FreshSkyline

  10. #7
    Registriert seit
    15.05.2013
    Beiträge
    58
    Danke
    4
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,

    könntest du dein CoDeSys-Projekt eben anfügen? Dann schau ich gerne mal drüber.

    Viele Grüße

  11. #8
    FreshSkyline ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2015
    Beiträge
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich weiss nicht wie ich hier Dateien anhängen kann also hab ichs auf meine OneDrive geladen.

    https://onedrive.live.com/redir?resi...int=file%2cpro



    Vielen Dank!

  12. #9
    Registriert seit
    15.05.2013
    Beiträge
    58
    Danke
    4
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,

    anscheinend braucht man auch ein Konto, um die Datei runterzuladen, oder? Zumindest werd ich darauf weitergeleitet.

    Anhang hier im Forum kannst du über das Büroklammersymbol hinzufügen, eventuell vorher zippen.

    Viele Grüße

  13. #10
    FreshSkyline ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2015
    Beiträge
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das geht bei mir eben nicht :/


    Hier mal ein Link:

    https://www.wetransfer.com/downloads...8133051/c33394

    Hoffe diese Seite geht, der Link ist nur für kurze Zeit verfügbar.

    Gruss,

    FreshSkyline

Ähnliche Themen

  1. TwinCAT 3 auf 64-Bit Rechner + Laufzeit auf 32-Bit Laptop
    Von RudolfAtITD im Forum CODESYS und IEC61131
    Antworten: 22
    Letzter Beitrag: 31.03.2015, 09:22
  2. TwinCAT 2 und TwinCAT 3 auf einem Rechner
    Von DerDron im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 17.11.2014, 16:07
  3. TwinCAT auf Server2008
    Von JAM im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 09.06.2012, 20:06
  4. Heizwiderstand: Wieviel Ampere zieht einer Phase?
    Von Moroso im Forum Elektronik
    Antworten: 26
    Letzter Beitrag: 25.01.2012, 20:46
  5. TwinCAT-Runtime auf CE-Panel
    Von Toddy80 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 01.07.2010, 13:27

Stichworte

Lesezeichen

Berechtigungen

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