VIPA 214 und schneller PID

olitheis

Level-1
Beiträge
488
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich hoffe das ist ok, wenn ich einen neuen Thread eröffne, weil meine Fragi ist glaube ich in dem anderen Thema nun untergegangen in der Diskusion über VIPA oder nicht VIPA. Auf jeden Fall ist meine VIPA CPU 214 +DI's+DO's+AI's+AO's schon am Freitag eingetroffen. Jetzt hier nochmal meine Frage:
Da ich nicht jeden Tag mit Step7 arbeite, würde ich mich freuen, wenn ihr mir mit meinem Programm oä. etwas helfen könntet, da die Regler ja auch sehr schnell reagieren sollen.
Wie gesagt, ich benötige 2 getrennte PID Regler, die beide auf den gleichen Analogausgang wirken (klar, natürlich immer nur einer :razz:) extern umschaltbar über einen Eingang. Wie gehe ich da am besten vor mit der Programmierung? (ich hoffe Zykluszeiten von < 10ms zu erreichen?
Vielen Dank nochmal
Oli
 
Hallo,

-falls Du noch nie mit Step7 und Vipa gearbeitet hast, versuch erstmal die Hardwarekonfiguration hinzukriegen (oder gehts schon?, das war damals meine größte Hürde:rolleyes: )

-als nächstes würde ich vorschlagen, das Handling des PID-Reglers an Hand des Siemens-Beispiels mal durchzuspielen, wenn du keine geeignete Strecke an die SPS hängen kannst, nimm halt eine simulierte Strecke (T1-Glied als FB)

-welche AI und AO-Baugruppen verwendest Du denn und welche Auflösung benötigst Du für den Prozeß? Ich glaube mich zu erinnern, dass bei manchen AI-Baugruppen (..BD5x) die Wandlungszeit pro Kanal bei 7 bis über 200ms liegt, in Abhängigkeit von der Auflösung (10-16 Bit). Zusammen mit der Zykluszeit der SPS und der Wandlungszeit für die Ausgabe wirds dann schon sehr eng mit 10ms:confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
also die HW Konfig läuft so weit. Ich habe mir die Hardware inkl. AI's usw. für meine Anwendung aussuchen lassen (anruf bei VIPA). Die genauen Daten habe ich erst Morgen wieder parat. Ich werd's mal damit testen, sollte ich mit der Abtastrate nicht hinkommen, werd ich evtl. auf Speed7 umsteigen.
In erster linie geht es mir aber nun aber um die eigentliche Programmierung der beiden PID Regler, was ich beachten muss, um die schnellstmögliche Zykluszeit hinzubekommen.
Danke nochmal
Oli
 
In erster linie geht es mir aber nun aber um die eigentliche Programmierung der beiden PID Regler, was ich beachten muss, um die schnellstmögliche Zykluszeit hinzubekommen.

-wenn Du keinen Regler neu programmieren willst: nimm 2x FB41, stell den OB35 richtig ein
-der Ausgang für die Stellgröße des ersten Reglers geht an den Eingang Handwert (MAN) des zweiten
-wenn der erste Regler aktiv sein soll, schalte den zweiten in Handbetrieb und umgekehrt - dadurch ist schonmal eine stoßfreie Umschaltung zwischen beiden Reglern garantiert
-für die reine Bearbeitung der Regler mit Ein- und Ausgabe reicht die CPU-Leistung locker für 10ms,
 
danke PeterEF, das hört sich gut an. Ich denke, so werde ich die Sache mal angehen.
Hier ist nochmal die Hardware:
CPU VIPA 214-1BC02
DI VIPA 221-1BF00
DO VIPA 222-1BF00
AI (4x16bit) VIPA 231-1FD00
AO (4x12bit) VIPA 232-1BD30
(in der Reihenfolge gesteckt)

Jetzt kommt auch schon die nächste Frage: gibt es ein gutes Tool oder Programm, womit ich einen der beiden Analogeingänge mitschreiben kann. Mit ebenfals einer schnellen Sampletime. Ist der Step7 PID Graph dazu in der Lage, und kann er die Graphen abspeichern?

Danke
Oli
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Programm, womit ich einen der beiden Analogeingänge mitschreiben kann. Mit ebenfals einer schnellen Sampletime. Ist der Step7 PID Graph dazu in der Lage, und kann er die Graphen abspeichern?

Danke
Oli

Der PID-Control in der Lage bis 100ms. Abspeichern ist nicht.
 
hallo PeterEF,
könntest Du mir evtl. bei der Programmierung noch etwas unter die Arme greifen: wie kann ich 2xFB41 programmieren, und wie genau muss ich den OB35 einstellen?

Oli
 
Der FB41 steht in der StandartLibary unter PID ControlBlocks.
Wenn du darauf klickst und F1 drückst erfährst Du folgendes:

Die Berechnung der Werte in den Regelungsbausteinen erfolgt nur dann korrekt, wenn der Baustein in regelmäßigen Abständen aufgerufen wird. Deshalb sollten Sie die Regelungsbausteine in einem Weckalarm-OB (OB 30 bis OB 38 ) aufrufen. Die Abtastzeit geben Sie am Parameter CYCLE vor.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke,
wie kann ich denn den 2. (S)FB41 einfügen bzw. programmieren?

Ich habe im OB35 nun ein NW mit folgendem Aufruf:
call SFB41,DB41
und ein 2. NW mit diesem Aufruf:
call SFB41,DB42
ist das so in Ordnung für zwei PID's?
Kann ich mein komplettes Programm in den OB35 schreiben, oder macht es aus einen Geschwindigkeits-Standpunkt keinen Sinn?
Danke nochmal
Oli
 
Ob35

Danke,
wie kann ich denn den 2. (S)FB41 einfügen bzw. programmieren?

Ich habe im OB35 nun ein NW mit folgendem Aufruf:
call SFB41,DB41
und ein 2. NW mit diesem Aufruf:
call SFB41,DB42
ist das so in Ordnung für zwei PID's?
Kann ich mein komplettes Programm in den OB35 schreiben, oder macht es aus einen Geschwindigkeits-Standpunkt keinen Sinn?
Danke nochmal
Oli

Hi, ja, die Aufrufe sind so OK. Relevante Reglerwerte sollen entspr.
eingetragen werden(Gain, TI, TD, Deadzone usw.). Als CYCLE soll die
Aufrufzeit des OB35 eingetragen werden.
Kompl. Programm im OB35 ist nicht OK. Man nimmt OB1 oder besser
FCs, damit ein wenig Übersicht da ist.

Gruss: Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kompl. Programm im OB35 ist nicht OK. Man nimmt OB1 oder besser
FCs, damit ein wenig Übersicht da ist.

Gruss: Vladi

Das Auslesen der Analogeingänge und der Transfer in den Analogausgang sollte aber schon im OB35 passieren (falls schneller als Zykluszeit), sonst nutzt auch der schnelle Regler wenig.
 
da ich ja wirklich nur einen der beiden Regler "sehr schnell" (<10ms) benötige, macht es da Sinn, die "cycle time" des einen PID auf 10ms und die andere auf z.B. 100ms. Dann die Weckzeit des OB35 auf die kleinste, also 10ms, einzustellen?

Eventuell könnte es erforderlich werden, beim nicht aktiven Regler den Integral-Anteil einzufrieren.
das müsste der INT_HOLD Parameter sein? Aus welchem Grud wäre das erforderlich?

Danke nochmal an alle, die so geduldig mit mir sind.
 
habe gerade versucht den OB35 samt Aufruf für den sfb41 in die VIPA CPU 214 zu laden. Die Anweisung:
call SFB41, DB41
verursacht einen SF auf der CPU.
Fehler: SFC nicht vorhanden (Diagnosepuffer) ???

Edit: hab dieses "Problem" mit dem SF gefunden. Ich hatte den FB41 nicht aus der Stand. Libary eingefügt, und mit call SFB41 gings nätülich nicht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Learning by doing

Fehler: SFC nicht vorhanden (Diagnosepuffer) ???
Hallo,
der entsprechende (S)FC41 (und die DB's) muß natürlich vorher in die CPU kopiert werden. Integralwerte laufen bei offenen Reglerkreisen immer ins Unendliche, entsprechend lange dauert es nach dem Umschalten, bis wieder vernünftige Werte kommen. Warum gibt es keine Möglichkeit, mit einem Regler zu arbeiten und die Parameter während des Betriebs jeweils anzupassen?
 
Hallo,
natürlich könnten die Parameter auch angepasst werden.

Du meinst verschiedene Paramter je nach Verwendung umschalten? Wie kann man das realisieren?
Danke
Oli
 
Parameter ändern

Du meinst verschiedene Paramter je nach Verwendung umschalten? Wie kann man das realisieren?
@oli,
wie wärs damit, die Werte für GAIN, TI und TD jeweils an die passende Stelle im Datenbaustein zu schreiben, z.B. mit MOVE. Eventuell muß beim Abspeichern die "Typüberprüfung von Operanden" mal kurz ausgeschaltet werden, weil in den Instanz-DB direkt geschrieben wird und das meckert der Editor an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
könntest Du mir evtl. ein kleines Beispiel geben, wie Du das meinst?
Vielleicht ein Teil eines Programms, denn so genau wüsste ich jetzt nicht, wie ich das mit dem Move realisieren soll. Ich müsste ja eigentlich im DB zwischen zwei Werten umschalten können:
Danke
Oli
 
Wechselnde Parameter zum Regeln

Hallo oli,

eigentlich genügt es schon, an den Variablen am FB41 links dranzuschreiben, wo der jeweilige Wert herkommt.
 
Hallo Werner,
danke nochmal für die Hilfe.
Wie kann ich denn z.B. in den DB41 reinschreiben. Jeder Parameter hat doch eine Adresse. Ich dachte, dass ich aus dem Programm heraus irgendwie auf diese Adressen schreiben kann (z.B. DB41.DBX16.0 oder so ähnlich)
Ich müsste ja auf verschiedene Parameter mit verschiedenen Datentypen schreiben (s. Screenshot, Time-Real-Bool usw). Könntest Du mir evtl. mal anhand des "manual value" (Adresse 16.0/Real im DB) kurz erleutern, wie ich aus dem Programm heraus in diesen Wert schreiben kann.
Später möchte ich möglicherweise der Wert auch über ein HMI ändern können.
Danke nochmal
Oli
 

Anhänge

  • db41.jpg
    db41.jpg
    25,4 KB · Aufrufe: 10
Zurück
Oben