easy-forum

Deutsch - Applikationen => Allgemein => Thema gestartet von: feng41 am November 12, 2002, 01:55:19 Vormittag

Titel: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 12, 2002, 01:55:19 Vormittag
Programmierung auch von ->dynamischen Systemen mit der EASY8xx-DC-.
Mit Hilfe der Abtasttheorie können für dynamische Systeme (Filter, Regler, etc) Differenzengleichungen aufgestellt werden, die relativ einfach zwischen Analogeingang und Analogausgang schrittweise von der SPS berechnet werden können.  Hier stößt die EASY wegen der fehlenden Gleitkommaverarbeitung allerdings leider wieder an Grenzen (die vielleicht auch noch ausgeräumt werden können), die man "austricksen" muß (Doppelwort u.a.)
Ich lege mal eine Testberechnung für ein einfaches Tiefpassfilter "Test PT1.e40" bei . Die Belegung der Bausteine in "Test PT1.xls".

Nun meine Fragen
1) Bei der Berechnung der Differenzengleichung müssen die Werte bei jedem Zyklusdurchlauf in einem Schieberegister weitergeschoben werden. Wie bringe ich die DB dazu, in jedem Durchlauf zu schalten?
2) Wenn jemand in dem kleinen Testprogramm PT1 Verbesserungen oder Umständlichkeiten entdeckt --- bitte rückmelden!
3) Wenn jemand sich auch schon Gedanken gemacht hat, wie man z.B. einen PID-Regler mit der Easy bauen kann - oder wie man ein bestimmtes Filter bauen kann. Bitte melden
Danke!
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 13, 2002, 13:04:26 Nachmittag
Hallo feng41,

vielen Dank für Ihren Beitrag!
Kurz zum DB: Der DB lässt sich nur jeden zweiten Zyklus triggern. Mit Hilfe von zwei DBs können Sie aber Werte in jedem Zyklus verschieben. Bitte schauen Sie sich das angehängte Programm an und beobachten Sie in der Simulation das Merker Doppelwort 1 (MD1).

Grüße
Jens Regulski
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 13, 2002, 15:43:40 Nachmittag
Guten Tag Herr Regulski - und vielen Dank für Ihre schnelle Antwort+Beispiel! Scheint irgendwie genial zu sein, aber ich verstehe den Ablauf noch nicht.
Können Sie mit den Haftnotizen noch Kommentare reinschreiben was wann wo und warum passiert?
Warum erscheint der AR1 nicht in Ihrem Programm?
Gruß feng41
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 13, 2002, 17:59:06 Nachmittag
Hallo feng41,

anbei noch ein paar Screenshots zum Programm.

Um den AR zu verwenden, ist es nicht notwendig ihn im Bitschaltplan zu verdrahten! Weitere Kommentare finden Sie auf den Screenshots.

Ach übrigens, der Wunsch nach einem PID-Regler ist angekommen....  ;)... mal schauen, was noch kommt.

BITSCHALTPLAN:

Screenshots gelöscht, da falsch
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 15, 2002, 03:14:09 Vormittag
Guten Abend Herr Regulski - also irgendwie ist da noch ein "Knoten" drin. Auch Ihr Vorschlag schaltet nur bei jedem 2.Zyklus weiter (ausmessen mit Timer als Referenzzeit und Conter).
Wenn der Datenbaustein wirklich in jedem Zyklus weiterschalten würde (Schieberegister), dann würde die Abtastzeit immerhin (gegen jetzt) halbiert werden - also dynamische Systeme könnten mit höherer Auflösung gebildet werden - das wär' doch was...
100% sind doch nicht zu verachten - beim Gehalt schon gar nicht [auch wenn ein Politiker da nur müde (in die Kamera) grinsen würde]...

Gruß feng41
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 15, 2002, 12:10:29 Nachmittag
Hallo feng41,

da hatten Sie recht, da Programm führte nicht zum gewünschten Resultat. Was mich nur gewundert hat war, dass MD 1 so schön hochgelaufen ist. Na ja  :-/

Anbei ein zweiter Versuch. Eine Kopie des Datensatzes der verschoben werden soll, wird auf einen zweiten DB gelegt. Da die beiden DBs asynchron getriggert werden, wird MD in jedem Zyklus mit einem neuen Wert beschrieben.

Um sich den Programmablauf genauer anzuschauen, wechseln Sie bitte in die Simulations-Ansicht, rufen die Baustein-Ansicht auf, starten die Simulation und erhöhen die gewünschte Zykluszeit auf 2000 ms.

Grüße
Jens Regulski
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 16, 2002, 03:00:52 Vormittag
Guten Abend Herr Regulski - das sieht doch schon recht gut aus! Danke!
Aber dennoch - so ganz glücklich bin ich noch immer nicht (Isebill-Effekt...), da ich jetzt den zu verschiebenden Wert 2x in zwei DB eingeben muß.  Vielleicht geht es aber auch nicht anders.
Oder könnte man einen AR vielleicht irgendwie zu einer Schieberegisterfunktion überreden - der wird  ja von Haus aus bei jedem Zyklus getriggert??

Gruß feng41
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 19, 2002, 13:02:12 Nachmittag
Hallo feng41,

eine Schieberegisterfunktion ist leider nicht so einfach zu realisieren. Sie müssen durch eine geschickte Anordnung der DBs im Wortschaltplan die Werte im Speicher verschieben (z.B. kopieren von MD3 -> MD4, MD2->MD3, MD1->MD2 ). Da die DBs leider nur bei jedem zweiten Zyklus schalten, müssen Sie wohl die ganze Sache doppelt aufbauen, damit jeder Zyklus berücksichtigt wird.

Grüße
Jens Regulski
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 19, 2002, 14:36:20 Nachmittag
Guten Tag Herr Regulski - ja das stimmt. Ich bin schon weit davon ab, bei jedem Zyklus der EASY eine Schiebung hinzubekommen.  Aber selbst wenn man 2 Zyklen spendiert, habe ich ein Problem, ein 3-stufiges Schieberegister zu programmieren, da die Easy auswertet und im letzten Verarbeitungsschritt den neuen Wert gleich zwei Stufen weiterschiebt. Ich habe den ganzen Sonntag rumprobiert, aber keine sichere Funktionsweise hinbekommen :-/
Muss ich tatsächlich 4-6 Zyklen spendieren, um ein 3-stufiges Schieberegister für MD zu erstellen ??? :-[
HabenSie noch eine Idee?
Gruß feng41
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 19, 2002, 16:08:59 Nachmittag
Hallo feng41,

hier mal ein Beispielprogramm, was ein Schieberegister beinhaltet. Die Daten werden in jedem Zyklus weitergeschoben. AR1 erzeugt die Daten (werden in MD1 gespeichert). MD2 beinhaltet den Wert von n, MD3 den Wert von n+1 und MD4 den Wert von n+2. Ich hoffe, das Beispiel hilft Ihnen ein wenig weiter. Viel Spaß noch beim Programmieren.

Jens Regulski
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 19, 2002, 17:59:51 Nachmittag
Guten Tag Herr Regulski - ja Ihr Beispiel läuft hervorragend - sogar bei jedem Easy-Zyklus.
Aber jetzt verraten Sie mir doch mal, wieso das bei einer Analogwerteingabe nicht läuft. Siehe beiliegendes Beispiel (IA1 auf einen Wert einstellen, Ablaufdauer auf 3sek verlangsamen und MD2,3,4 anschauen  :P

Übrigens schade, dass der Analogwert bei Einzelschritt nicht übernommen wird.
Gruß feng41
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 19, 2002, 20:05:31 Nachmittag
Hallo feng41,

peinlich peinlich peinlich  :-[.... ich habe einen bekannten Anfängerfehler gemacht. Der Toggel-Merker M1 wurde von MD1 überbügelt. Naja, der Fehler ist behoben.

Zudem wurde Input 1 von AR1 mit dem Analogeingang IA1 (I7 am Gerät) belegt. Jetzt werden die Analogwerte korrket in den MerkerDoppelworten 3-5 gespeichert.

Das Programm sollte nun funktionieren  ;).

Grüße
Jens Regulski
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 19, 2002, 21:35:08 Nachmittag
Guten Abend Herr Regulski - na so peinlich ist das ja nun wieder auch nicht - zumal es bei der Addition von 1 ja auch einen 0-1-Wechsel von M1 ergibt. Ich hatte dieses (zugegeben gefährliche) "Doppelspiel" schon fast als "Raffinesse" gesehen...
Aber jetzt wird es spannend: Ich sende Ihnen zwei Programme mit gleichem Kontaktplan - das eine geht - das andere nicht. Unterschied lediglich in der Anordnung der Bausteine im Bauteileplan!
So langsam geht der "Knoten" auf. Die Gründe werden erkennbar. Aber warum? Wo kann ich hierfür nähere Informationen bekommen?
Gruß feng41
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 19, 2002, 21:53:54 Nachmittag
Die Bausteine werden in der Reihenfolge nach von oben links nach unten rechts abgearbeitet!
In Ihrem »falschen« Programm kopieren Sie zunächst MD5 auf MD2 dann MD2 auf MD3 und schließlich MD3 auf MD4. Somit haben alle MDs den gleichen Wert! Sie müssen erst den zu schiebenden Wert retten, bevor Sie ihn überschreiben.

Übrigens, die Addition mit 1 ist natürlich beim Einlesen des Analogwertes nicht notwendig (sonst haben Sie immer einen Offset um 1).
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 19, 2002, 21:59:34 Nachmittag
anbei das Schieberegisterprogramm ohne Addition um 1
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 19, 2002, 23:30:33 Nachmittag
Ich meine, das sollte doch deutlich im Handbuch und in der Hilfe stehen, dass die Reihenfolge im Bauteileplan eine Funktion hat und wichtig sein kann!!! Immerhin kann man die ja freizügig neu anordnen.
Oder steht das schon irgendwo und ich habe das (wieder) überlesen? Bitte rückkoppeln.
Mich hat diese Erkenntnis fast 2 Tage gekostet! Nicht ganz billig... Zwar auch was gelernt - aber irgendwie bleibt auch ein wenig Grummeln...
Wenn jetzt durch dieses Forum einige Teilnehmer diesen Fehler umgehen können - ist ja auch was... Soll ich mein Spendenkonto nennen?
Gruß feng41
Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: Jens am November 20, 2002, 22:23:11 Nachmittag
Hallo feng41,

da haben Sie leider  ;) Recht, wir haben vergessen die Art der Bausteinverarbeitung in der Bausteinliste zu dokumentieren. Dies wird aber schleunigst nachgeholt! Vielen Dank für Ihren Hinweis.

Viele Grüße
Jens Regulski


Titel: Re: Dynamische Systeme mit EASY8xx bauen
Beitrag von: feng41 am November 25, 2002, 01:27:30 Vormittag
So jetzt scheint das "Werk" PID-Regler mit der EASY822 ersteinmal gelungen zu sein. Siehe Anhang.
Eingabe über IA3 - Ausgabe über QA.
Die Sprungantwort sieht jedenfalls schon mal sehr typisch aus.

Das Ganze hakt natürlich noch mit:
1) Keine negative Ausgangsspannung. Man muß später irgendwie schiften.
2) Keine Gleitkommaverarbeitung (aber mit der Doppelwortverarbeitung immerhin noch ganz brauchbar - als Regler sowieso, da Fehler im Regelkreis ausgeregelt werden.)

Gruß feng41