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

Ergebnis 1 bis 8 von 8

Thema: TON -> Rampe -> Merker

  1. #1
    Registriert seit
    14.08.2009
    Beiträge
    34
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe bereits mir einen Dreieck-Funktionsgenerator mit dem Funktionsblock TON gebaut. Funktioniert wie gewollt.
    Als nächstes möchte ich eine Hochlauframpe mir bauen die mit einer Steigung 1 solange hochfährt bis ich einen Knopf drücke. Dann soll die Rampe mit der halben Steigung weiterfahren bis zum definiertem Endwert.

    Mein Problem ist das wenn ich gleichzeitig TON_2 starte und TON_1 stoppe, er den hochgelaufenden Wert bis zum Umschaltzeitpunkt vergisst. Warum ist mir klar, aber wie kann ich eine Art Merker mir bauen? Quasi keine normale Zuweisung sondern eine Zuweisung per Impulsbzw. flankengesteuert?
    Gruß Coco
    Geändert von Cococabana (17.09.2009 um 10:33 Uhr)
    Zitieren Zitieren TON -> Rampe -> Merker  

  2. #2
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Ist es möglich, dass du mal kurz deinen Code postest?
    A programmer is just a tool which converts caffeine into code.

  3. #3
    Registriert seit
    14.08.2009
    Beiträge
    34
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    VAR
    start_1:BOOL:=TRUE;
    start_2:BOOL;
    n_max:REAL:=10;
    n_1:REAL;
    n_2:REAL;
    n_ist:REAL;
    th_1:TIME:=t#20s;
    th_2:TIME:=t#60s;
    TON_1:TON;
    TON_2:TON;
    END_VAR
    TON_1(
    IN:=start_1,
    PT:=th_1
    );
    TON_2(
    IN:=start_2,
    PT:=th_2
    );
    IF start_2
    THEN
    (* Hier muss der Momentanwert von TON_1 in einer Variable gelegt werden die danach mit einem schreibschutz belegt ist. Alternativ auch einfach TON_1 anhalten (kein Reset), aber dies ist wohl nciht möglich *)

    start_1:=FALSE;
    END_IF

    n_1:=((n_max/TIME_TO_REAL(th_1))*TIME_TO_REAL(TON_1.ET));
    n_2:=((n_max/TIME_TO_REAL(th_2))*TIME_TO_REAL(TON_2.ET));
    n_ist:=n_1+n_2;
    Ich hab schon Versucht an den Wert n_1 zum Umschaltpunkt rechnerisch mit anderen Timern usw. zu kommen. Das hat aber leider nicht zum Erfolg bislang geführt

  4. #4
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Verwende doch mal zwei neue Variablen
    Code:
    TON_1_ET: TIME;
    TON_2_ET: TIME;
    Und dazu versuche doch mal folgenden geänderten Code:
    Code:
    TON_1(
    IN:=start_1,
    PT:=th_1,
    ET=> TON_1_ET
    );
    TON_2(
    IN:=start_2,
    PT:=th_2,
    ET=> TON_2_ET
    );
    IF start_2
    THEN 
    (* Hier muss der Momentanwert von TON_1 in einer Variable gelegt werden die danach mit einem schreibschutz belegt ist. Alternativ auch einfach TON_1 anhalten (kein Reset), aber dies ist wohl nciht möglich *)
    
    start_1:=FALSE;
    END_IF
    
    n_1:=((n_max/TIME_TO_REAL(th_1))*TIME_TO_REAL(TON_1_ET));
    n_2:=((n_max/TIME_TO_REAL(th_2))*TIME_TO_REAL(TON_2_ET));
    n_ist:=n_1+n_2;
    A programmer is just a tool which converts caffeine into code.

  5. #5
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    In deinem THEN-Zweig müsstest du dann auch TON_1_ET verwenden können. Evtl. so:
    Code:
    VAR
    TON_1_ET_schreibschutz: TIME;
    END_VAR
     
    THEN
        TON_1_ET_schreibschutz := TON_1_ET;
    A programmer is just a tool which converts caffeine into code.

  6. #6
    Registriert seit
    14.08.2009
    Beiträge
    34
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    TON_1(
    IN:=start_1,
    PT:=th_1,
    ET=> TON_1_ET Ähm, ehrlich gesagt habe ich keine Ahnung was das bezwecken soll. ET ist doch nur Output !??
    );
    TON_2(
    IN:=start_2,
    PT:=th_2,
    ET=> TON_2_ET
    );
    IF start_2
    THEN
    (* Hier muss der Momentanwert von TON_1 in einer Variable gelegt werden die danach mit einem schreibschutz belegt ist.
    Alternativ auch einfach TON_1 anhalten (kein Reset), aber dies ist wohl nciht möglich *)
    TON_1_ET_schreibschutz := TON_1_ET;
    So hatte ich es auch mal probiert, aber in dem Moment wo ich umschalte läuft TON_1_ET ja einfach weiter. Der soll aber stehen bleiben! Deswegen
    --> start_1:=FALSE; Aber damit Resete ich den wert leider.
    END_IF
    n_1:=((n_max/TIME_TO_REAL(th_1))*TIME_TO_REAL(TON_1_ET));
    n_2:=((n_max/TIME_TO_REAL(th_2))*TIME_TO_REAL(TON_2_ET));
    n_ist:=n_1+n_2;
    Eine verflixte Sache ist das vielleicht...

  7. #7
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    ET=> TON_1_ET Ähm, ehrlich gesagt habe ich keine Ahnung was das bezwecken soll. ET ist doch nur Output !??
    Das ist nichts anderes, als dass die abgelaufene Zeit in der Variablen TON_1_ET gespeichert wird.

    TON_1_ET_schreibschutz := TON_1_ET;
    So hatte ich es auch mal probiert, aber in dem Moment wo ich umschalte läuft TON_1_ET ja einfach weiter. Der soll aber stehen bleiben! Deswegen
    --> start_1:=FALSE; Aber damit Resete ich den wert leider.
    OK. War ein Denkfehler meinerseits. Du darfst im Prinzip die Variable TON_1_ET_schreibschutz nur beschreiben wenn start_2 eine steigende Flanke aufweist.
    Code:
    VAR
    RTrig: R_TRIG;
    END_VAR
     
    RTrig(CLK:= start_2);
     
    IF RTrig.Q THEN
        TON_1_ET_schreibschutz := TON_1_ET;
    END_IF
    A programmer is just a tool which converts caffeine into code.

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

    Cococabana (17.09.2009)

  9. #8
    Registriert seit
    14.08.2009
    Beiträge
    34
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ooaah herzlichen Dank! Genau den Baustein hab ich gesucht! Zig mal in der Bibliothek angeklickt und doch nicht kapiert das er meine Lösung ist.

    Danke für deine Hilfe =)

Ähnliche Themen

  1. Rampe Programmieren
    Von zloyduh im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 16.09.2010, 09:52
  2. Rampe regelt Temperatur - PID
    Von netsroht im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 09.07.2010, 18:23
  3. Rampe mit Zeitsteuerung
    Von Headman im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.05.2010, 22:15
  4. Analogausgang mit Rampe ansteuern (S7-200)
    Von sukram1711 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.03.2010, 17:08
  5. Rampe bei einer Bandgeschwindigkeitsregelung
    Von harald2 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 20.10.2008, 18:48

Lesezeichen

Berechtigungen

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