TIA Normieren_Skalieren

huisajack

Level-1
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte gerne mit den Bausteinen Normieren und Skalieren meine Drehzahl so steuern dass sie ab einem gewissen Zählerstand langsam sinkt. Meine Frage ist ob dass so überhaupt möglich ist?
POSsollbrems ist der Zählwert ab dem gebremst werden soll und auf der POSsoll soll der Motor stehen. MIN und MAX beim Skalierbaustein müssten dann ja vertauscht sein also wäre Min > Max. Funktioniert dass dann überhaupt?
Das MW24 wird dann in ein AW für den FU kopiert.


Unbenannt.PNG
 
Hallo,

Ich kann die Norm_X Bausteine nicht finden in meine TIA Bibliothek.

Seht für mir so aus das die aktualerer Wert zwischen min und max skaliert wird.
Dan würde den zwischenwert genau de max wert sein wen du auf POSsoll bist.

Der SCALE_X hat in dein Beispiel die gleiche Funktion wie der UNSCALE. Dan kannst du auch direkt auf das PAW schreiben.

Hab selbst nicht ein positionsregelung gemacht. Ich würde es mit ein PI oder PID Regler versuchen.

Wenn du der Sollwert erreichst -> Ausgang Null. ->Drehzahl Null.
Auf das Príncipe dann.

DVH
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Norm_X Baustein ist bei mir gleich oberhalb des Scale_X Bausteins und der Zwischenwert hat beim Minimum 0.0 und beim Maximum des Norm_x Bausteins 1.0. Ist der Zwischenwert 0 sollte dass MW24 den Wert 27648 haben und bei einem Zwischenwert von 1.0 sollte es 0 sein. Wenn ich MIN und MAX vertausche bin ich mir sicher dass es funktioniert, aber für meine Positionierung bräuchte ich es so wie oben.
 
Hallo,

Für Sollwerteingabe eines Reglers ist eine Rampe Baustein eine gute Wahl.

Hast du die Möglichkeit deine Bausteine lebendig zu prüfen auf eine Prüfstand oder direkt auf der Maschine ?

Was ich jetzt auch sehe.
Wenn m1.0 = Falsch wird das Merkerword nicht mehr überschrieben.
Wird die im weitere Verarbeitung mit zum Beispiel not Aus noch mit Null überschrieben ?

DVH
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich kann die Norm_X Bausteine nicht finden in meine TIA Bibliothek.

...

Der SCALE_X hat in dein Beispiel die gleiche Funktion wie der UNSCALE. Dan kannst du auch direkt auf das PAW schreiben.

DVH


Hi

die beiden gibt es nur auf 1200 und 1500

PAW sollte man nur verwenden wenn es draußen schneller klappern soll als Zykluszeit. Eigentlich nie ;-)

'n schön' Tach auch
HB
 
Hi

normalerweise (was ist schon normal? -- wer will denn schon normal sein? -- ich verzettel ich, nochmal von vorne)

Ein SPS Programm lebt von der Endlosschleife. Eingänge lesen, Verarbeiten, Ausgänge schreiben und von vorne. Die reine Lehre sagt, dass man nicht auf Eingänge schreibt und jeder Ausgang nur einmal im Programm beschrieben wird. Um zu sehen, wie schnell die CPU niemals wird, schreibt man ein Programm
Code:
A0.0 := not( E0.0 )
und verbindet A0.0 mit E0.0. Dann kann man am Oszilloskop sehen wie viel Zeit das Betriebssystem mit sich selbst verbringt. Das ist damit auch die minimale Zykluszeit für den freilaufenden OB1.

Wenn man nun Ausgänge mit Relais hat, dann hört man die ganz deutlich klappern. Sollte die Zykluszeit unter die Schaltzeit des Relais kommen, dann tut das dem Relais gar nicht gut. Und hängt an dem Relais noch ein Schütz unter Last, dann sind dessen Kontakte auch bald abgebrannt.

Da man aber im praktischen Leben mit dem Grundsatz "jeden Ausgang nur ein mal schreiben" selten klar kommt, schreibt man eben doch mehrmals auf einen Ausgang. Das stört in den seltensten Fällen, dann A0.0 ist ja gar nicht wirklich der Ausgang. A0.0 ist nur irgend ein Speicher, der, so es in HWCN eingestellt, erst am Zyklusende auf ein Modul kopiert wird und damit das Relais betätigt.

Wenn du jedoch auf PAB0 schreibst, so dauert das um Faktoren länger, denn nun wird tatsächlich sofort das Byte auf die echten Ausgänge geschrieben. Kopieren aus dem Speicher auf die Peripherie macht einen beträchtlichen Teil der Zeit aus, die die CPU außerhalb deines Programmes verbringt. Die ziehst du damit mehrfach in das Programm rein. Aber dafür klappern die Relais jetzt noch hektischer.

Schau dir
Code:
PAB0 := 16#FF
PAB0 := 0
PAB0 := 16#FF
PAB0 := 0
PAB0 := 16#FF
PAB0 := 0
mal auf einem Oszi an.

Bei der 1200/1500 muss man übrigens in der Tagtable ein Signal für AB0 definieren um dann mittels "signalname":p auf den Ausgang zu ballern.

'n schön' Tach auch
HB
 
Zuviel Werbung?
-> Hier kostenlos registrieren
zu Rampe: die hier gezeigten können leider nicht auf ein bestimmtes POSsoll bremsen, sondern nur auf ein Vsoll.

Ob Min>Max funktioniert, weiß ich nicht. Bei einer selbstgeschriebenen Skalierfunktion kann es funktionieren ;)

Ich kann jederzeit, so oft ich will, direkt auf Ausgänge schreiben und sehe das nicht als Fehler (abgesehen von Ineffizienz). Davon klappern keine Relais, es sei denn, das ist so gefordert. Warum? Weil ich globale Variablen und Ausgänge nicht für _Zwischenergebnisse_ benutze, wenn sie da nicht hingehören. Nur das wäre der eigentliche Fehler.
 
Versuch mal so:
Code:
    #RESTWEG_ABS:= ABS(#Zielpos - #Istpos);
    #SPEED_TEMP:= #V_max * SQRT(#RESTWEG_ABS/#Bremsweg);


    IF #SPEED_TEMP > #V_max THEN
        #SPEED_TEMP:= #V_max;
    END_IF;
    
    IF #SPEED_TEMP < #V_min THEN
        #SPEED_TEMP:= #V_min;
    END_IF;
        
    IF #RESTWEG_ABS > #Toleranz_Ziel THEN    
        #SPEED_OUT:= #SPEED_TEMP;
    ELSIF #RESTWEG_ABS <= #Toleranz_Ziel THEN
        #SPEED_OUT:= 0.0;    
    END_IF;
 
Zuletzt bearbeitet:
Zurück
Oben