TON -> Rampe -> Merker

Cococabana

Level-2
Beiträge
34
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe bereits mir einen Dreieck-Funktionsgenerator mit dem Funktionsblock TON gebaut. Funktioniert wie gewollt. :cool:
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? :confused: Quasi keine normale Zuweisung sondern eine Zuweisung per Impulsbzw. flankengesteuert?
Gruß Coco
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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[COLOR=red],[/COLOR]
[COLOR=red]ET=> TON_1_ET[/COLOR]
);
TON_2(
IN:=start_2,
PT:=th_2[COLOR=red],
ET=> TON_2_ET[/COLOR]
);
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([COLOR=red]TON_1_ET[/COLOR]));
n_2:=((n_max/TIME_TO_REAL(th_2))*TIME_TO_REAL([COLOR=red]TON_2_ET[/COLOR]));
n_ist:=n_1+n_2;
 
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;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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...
 
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
 
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 =)
 
Zurück
Oben