PID Regler via Programm einstellen

akrapovic

Level-1
Beiträge
36
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe gerade das Problem, dass ich den SOLLWERT von meinem PID-Regler einstellen möchte.

Wenn E1.5 gedrückt wird, wird der aktuelle ISTWERT von AEW0 (MW30) in MW18 gespeichert.

Dies möchte ich als Sollwert für den PID-Regler machen.

Dazu habe ich mittels "I_DI" MW18 in VD26 übertragen.

VD26 ist laut Datenbaustein der Sollwert des PIDs kann man den dadurch beeinflussen ?

PID_Regler.jpg
 
Ja richtig, das ist eine S7-200, programmiert man mit MikroWin.

Im PID Unterprogramm ist ein Schloss zu sehen, da steht, dass ich dieses Programm mit dem Operationsassistenten automatisch erstellt hatte.

Kann ich also einen PID-Regler im Nachhinein nicht mehr manuell parametrieren ?
 
Ich habe gerade folgendes gelesen:

"Am Parameter
Setpoint_R wird der Sollwert (Bereich von 0...100) vorgegeben. Der Ausgangparameter "Output" ist
die Stellgröße."

Im PID-Regler habe ich als Analog-Eingangssignal Werte zwischen -32000 und +32000

Dabei ist +-32000 jeweils 100, also 100%

Wie kann ich nun den AnalogEingangswert von z.B: +3500 in diese "Setpoint-Zahl" (0...100) umrechnen ??
 
Anscheinend gibt es für diese Umrechnung Unterprogramm "Scale_I_to_R"

Weiß jemand wo man dieses Unterprogramm in MikroWin findet ?

S7-200_Dreipunktschrittregler_03.jpeg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Im Projektbaum ganz unten unter Unterprogrammaufrufe oder Bibliotheken oder ganz oben unter Programmbaustein.
Woher hast Du denn den Screenshot? In dem Projekt ist der Scale_I_to_R sicher drin.

Harald
 
Also Screenshot habe ich von hier:
http://www.siemens.at/ad/s7-200/de/s554.htm

Da habe ich die Idee von der "Dreipunktschieberregelung" geklaut ;)

In meinem Programm sieht es nun so aus:

PID_Kalibrieren.jpg


Wenn auf Kalibrieren gedrückt wird, dann wird der analog Kamerawert mittels Scale_I_to_R auf den Bereichen +-100 skaliert und in VD200 ausgegeben.

VD200 fungiert dann als Sollwert bei "Setpoint_R" am PID-Regler.

Soweit sollte das hoffentlich funktionieren....

Letzte Frage;

Wird der Kalibrier-Wert "VD200" dauerhaft im Programm gespeichert oder muss bei Start jedesmal neu kalibriert werden ?


//EDIT: Übrigens das Unterprogramm "Scale_I_to_R" muss ggf. von Siemens geladen werden und manuell in der Bibliothek ergänzt werden !
 
Zuletzt bearbeitet:

Letzte Frage;

Wird der Kalibrier-Wert "VD200" dauerhaft im Programm gespeichert oder muss bei Start jedesmal neu kalibriert werden ?
siehe: Systemdatenbaustein > Remanente Bereiche
VD200 sollte remanent sein und wenigstens 30 Tage ausgeschaltet den Wert behalten.
Via SMB31 und SMW32 kann man den Wert auch in den EPROM "brennen".

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
VD200 sollte remanent sein und wenigstens 30 Tage ausgeschaltet den Wert behalten.
...
Dafür würde ich meine Hand nicht ins Feuer legen, vor allem, wenn keine Zusatzbatterie vorhanden ist.

Hatte schon welche (neue!) mit Speicherchip (deshalb keine Batterie), die nicht mal über's WE gehalten haben. Also im Zweifel lieber nullspannungsfest im EEPROM speichern, wie Harald empfohlen hat.
 
Aha ! Das könnte die Erklärung dafür sein warum einige Funktionen nach dem Urlaub nicht mehr funktioniert hatten ! :p

Wie genau speichere ich nun meine VD200 in SMB31 oder SMW32 ??

VD200 ist doch eine 32Bit Ganzzahl oder ? Also kann ich das mittels MOV_R machen ?

VD200(IN) -> MOV_R -> SMB31(OUT) ?
 
Nein. Ist ja auch etwas unlogisch, eine 32bit Ganzzahl mit "Übertrage Realzahl" in die 8 Bit eines Bytes oder 16 Bit eines Wortes zu übertragen. ;)

In der Hilfe gibt's ne Anleitung. Im Prinzip trägt man in das SMW32 die zu speichernde Adresse (also hier die 200) ein und setzt dann im SMB31 ein bestimmtes Bit, damit die CPU den Wert dieser Adresse nullspannungsfest ablegt. Über ein anderes Bit des SMB31 kommt dann (glaub' ich) die Rückmeldung, wenn das Speichern erfolgreich war (kann mehrere Zyklen dauern).
Außerdem sind alle Werte, die du beim Programmieren im Datenbaustein festlegst automatisch nullspannungsfest im EEPROM.

PS: Für das Speichern über's Programm gibt's 'nen Assistenten.

PPS: Ne' doch nicht, hab' ich in mit dem Log verwechselt.
 
Zuletzt bearbeitet:
...
PS: Für das Speichern über's Programm gibt's 'nen Assistenten.
...
Ja den Assistenten habe ich bereits gefunden, allerdings verstehe ich nicht was ich z.B. bei der Bytelänge eintragen muss,
...
Da gibt' es doch keinen Assistenten. Hab' das mit dem Logs, von denen ich auch 2 benutze, verwechselt.
Was Du da gefunden hast, ist eine von Siemens erstellte Subroutine (SBR), um gleich mehrere Adressen "in einem Rutsch" (geht trotzdem nur nacheinander) zu speichern.


Für einzelne Variablen gibt die F1-Taste folgende Hilfe:
MicroWin Hilfe schrieb:
Sie können über Ihr Programm einen Wert, der sich im Variablenspeicher befindet, im nullspannungsfesten Speicher (EEPROM) ablegen. Zum Ausführen der Funktion laden Sie die Adresse, die gespeichert werden soll, in SMW32. Laden Sie anschließend SMB31 mit dem Befehl, den Wert zu speichern. Nachdem Sie den Befehl zum Speichern des Werts abgesetzt haben, dürfen Sie den Wert im Variablenspeicher solange nicht mehr ändern, bis die CPU den Sondermerker SM31.7 zurücksetzt und dadurch das Ende der Speicheroperation anzeigt.

Am Ende eines jeden Zyklus prüft die CPU, ob ein Wert im nullspannungsfesten Speicher abgelegt werden soll. Ist dies der Fall, dann wird der angegebene Wert im nullspannungsfesten Speicher abgelegt.
Ich hab' mir dann 2 Bits als Flags genommen - das Erste, um zu signalisieren, wenn ein Wert geändert wurde und abgespeichert werden soll, und das Zweite um zu speichern, wenn die Eintragung für's Speichern gemacht wurde (um mehrmaliges Eintragen zu verhindern). Nach erfolgreichem Speichern, werden beide Bits zurückgesetzt.
Das sieht in FUP dann z.B. so aus (geänderten Wert G1:VW50 nullspannungsfest speichern):
 
Zuletzt bearbeitet:
Zurück
Oben