Analogwert in abhängigkeit einer Zeit erhöhen !!

Snoopy123123

Level-1
Beiträge
125
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich stehe im Moment auf dem schlauch. Ich habe eine DC Stromversorgung 0-20V / 130 A dessen Ausgangsspannung ich via Analogeingang einstellen kann. Soweit wunderbar.
Da beim nun beim direkten setzen der Ausgangsspannung der Einschaltstrom am Verbraucher (DC Motor) zu hoch steigt geht meine Stromversorgung in Overload.

Jetzt müsste ich in Abhängigkeit einer Zeit die Spannung hochfahren.
Die Werte müssen Variabel am OP einstellbar sein.

ZB Spannung 15,5 Volt / Hochlaufzeit 200ms

Jetzt sollte der Wert von 0-15,5 (Real Wert) in 200ms linear steigen !!!!!

Hoffe ich habe das verständlich genug geschrieben. Hatte vor das über eine Kennlinie zu machen aber wenn ich die Werte alle Einstellbar machen muss geht dies glaube ich nicht. Ich weiss nicht wie ich die Zeit einbringen soll.

Danke im Vorraus !!!
 
Kommst Du mit SCL klar?

Wenn ja in der OSCAT.lib gibt es einen Funktionsblock namens "rmp_soft" der das leisten kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe schon öfters einzelne Bausteine in SCL geschrieben wenn ich mehre verschaltete schleifen oder berechnungen zu machen habe,

aber library aufgerufen ? Bahnhof ? Wenn du mir das mal erklären könntest ??
Danke !!
 
So ich hab das mal aus der OSCAT Lib rauskopiert.

Musst es aber wohl ein wenig am S7 Anpassen ich habe die CoDeSys Version.

Besser noch lade Dir bei www.OSCAT.de die Step7 Version runter.

Code:
FUNCTION_BLOCK rmp_soft
VAR_INPUT
    IN : BOOL;
    val : BYTE;
END_VAR
VAR_INPUT CONSTANT
    pt_on: TIME := T#100ms;
    PT_off : TIME := T#100ms;
END_VAR
VAR CONSTANT
    steps : INT := 255;
END_VAR
VAR_OUTPUT
    Out : BYTE := 0;
END_VAR
VAR
    last_step : TIME := T#0ms;
    now : TIME;
    x :REAL := 0;
END_VAR

(*
    version 1.0    22 jan 2007
    programmer     oscat
    tested BY        oscat

this soft on/off ramp generator generates a soft on and soft off ramp while the max on value is set by the input
the time for a full ramp can be set by config variables for up and down ramp.
*)

Code:
IF in  AND out < val THEN
    (* generate on ramp *)
    now := TIME();
    x := out + TIME_TO_REAL(now -last_step)*steps/TIME_TO_REAL(pt_on);
    IF x > val THEN
        out := val;
        x := val;
    ELSE out := REAL_TO_BYTE(x); END_IF;
    last_step := now;
ELSIF NOT in AND out > 0 THEN
    (* generate off ramp *)
    now := TIME();
    x := out - TIME_TO_REAL(now -last_step)*steps/TIME_TO_REAL(pt_off);
    IF x  < 0 THEN
        out := 0;
        x := 0;
    ELSE out := REAL_TO_BYTE(x); END_IF;
    last_step := now;
ELSIF in AND out > val THEN
    (* generate ramp down to input value *)
    now := TIME();
    x := out - TIME_TO_REAL(now -last_step)*steps/TIME_TO_REAL(pt_off);
    IF x  < val THEN
        out := val;
        x := val;
    ELSE out := REAL_TO_BYTE(x); END_IF;
    last_step := now;
END_IF;
IF out = val OR out = 0 THEN last_step := TIME(); END_IF;


(* revision history

hm 22.1.2007        rev 1.1
    deleted unused variables X1 and I, X2 and X3

*)
 
hallo,
S7? unten in werbung und produktneuheiten nach oscat schauen, dort die s7 lib runterladen, und dann im s7 manager als biliothek aufrufen. aber von siemens gibt es auch ein rampenprogramm.
 
du willst von 0-15,5 innerhalb von 200ms?
kein problem, verstehe jetzt auch nicht wozu man für ein paar zeilen code ne lib braucht, aber gut...
was verstehst du utner liniar?
wie groß ist deine zykluszeit?

wenn die bei 20ms liegt, dann kannste bestenfalls 10 schritte machen...

wenn es den halbwegs genau werden muss, dann arbeite diirekt mit der zykluszeit, überprüfe in jedem zyklus wie lange der letzte war, und erhöhe proportional dazu deinen sollwert.

wenn deine zykluszeit zu schlecht ist, bzw dir das nicht genau genug ist, dann mache es im ob35 und stelle den aufrufintervall eben auf den benötigten wert ein. in dem ob35 kannste dann auch immer einen fixen wert auf den sollwert geben, da sein zyklus ja recht konstant ist...

bei der ganzen geschichte musst bedacht werden was deine analogausgänge wie schnell können, sonst nützt dir der sauberste sollwertgeber in der software nix...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
du willst von 0-15,5 innerhalb von 200ms?
kein problem, verstehe jetzt auch nicht wozu man für ein paar zeilen code ne lib braucht, aber gut...
was verstehst du utner liniar?
wie groß ist deine zykluszeit?

wenn die bei 20ms liegt, dann kannste bestenfalls 10 schritte machen...

wenn es den halbwegs genau werden muss, dann arbeite diirekt mit der zykluszeit, überprüfe in jedem zyklus wie lange der letzte war, und erhöhe proportional dazu deinen sollwert.

wenn deine zykluszeit zu schlecht ist, bzw dir das nicht genau genug ist, dann mache es im ob35 und stelle den aufrufintervall eben auf den benötigten wert ein. in dem ob35 kannste dann auch immer einen fixen wert auf den sollwert geben, da sein zyklus ja recht konstant ist...

bei der ganzen geschichte musst bedacht werden was deine analogausgänge wie schnell können, sonst nützt dir der sauberste sollwertgeber in der software nix...

So wie ich den Beitrag von Snoopy123123 lese geht es ihm um einen Art Softstart . Die Parameter dafür sollen über ein OP geärdert werden können.

Eine SPS mit stark schwankenden Zykluszeit die sich dazu noch um die 20ms bewegt, taugt nicht mal für halbwegs genau ;o)
 
Zurück
Oben