Aufrufprobleme PID-Regler

Begonnen von gravieren, 24. Dezember 2006, 14:30:21

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 25 Gäste betrachten dieses Thema.

gravieren

Hi

Ich komme mit dem PID-Regler NICHT klar.

Irgendwie fehlt mir die Angabe für den Aufruf.

Als freilaufender Zyklus verrichtet der Baustein nach meinen Meinung nicht die gewünschte Arbeit.

Was mache ich falsch.


Karl

gravieren

Sorry

Bedienfehler von mir.

Es Bedarf einem "Reset" bevor man damit Arbeitet / Erster Aufruf.


Frage:   Lässt sich der Code von rst : BOOL;     auf    rst : BOOL := TRUE;  ändern ?
            (Erstinitialisierung beim Aufruf)


Karl


hugo

wird in der rev 1.1 zum 1.1. erledigt, danke für den input.
der pid ist freilaufend, damit er auch bei stark beladener sps exact arbeitet.
ein pid der zyklisch aufgerufen wird kann von einer hoeher priorisierten task unterbrochen werden und dann entstehen fehler.
in der 1.1 werden wir den pid auch auf trapezformel umstellen, die etwas mehr genauigkeit liefert als die jetzt verwendete rechteckformel.

sonstige wünsche bitte mitteilen.

gravieren

Hi


Zitatsonstige wünsche bitte mitteilen.
Ja, hab noch einen.


ZitatVAR_INPUT
   KP, TN, TV, limit_H, limit_L : REAL;
END_VAR
Kannst du "limit_H"  und  "limit_L"   tauschen, unter CFC etwas Gewöhnungsbedürftig.
( Hoher Wert steht oben )



Selbstoptimierung wäre Cool 


hugo

die eingänge tauschen ist ein guter tip, werde ich machen.
aber wieso rst auf true initialisieren, damit waere ein offener rst immer ein rst den rst ist high active.

hugo

Selbstoptimierung wäre Cool 

das waere absolut cool, aber derzeit habe ich leider noch keine brauchbaren algorithmen / verfahren gefunden
hat jemand hierzu ideen, inputs?

gravieren

Hi Hugo


Zitataber wieso rst auf true initialisieren, damit waere ein offener rst immer ein rst den rst ist high active.
Simmt grundsätzlich, jedoch sollte natürlich nachfolgender Zeile eingefügt werden.

IF rst OR KP = 0 THEN
            rst := FALSE;        <--  Diese Zeile einfügen. Dann ist ein offener RST-Eingang natürlich NICHT 1
                                            (Diese Grundinitialisierung wird von vielen Nahmhaften Herstellern gemacht)
   y := offset;
   integ(rst := 1);
   integ.rst := 0;
ELSIF manual THEN



gravieren

Hi Hugo

ZitatSelbstoptimierung wäre Cool 

das wäre absolut cool, aber derzeit habe ich leider noch keine brauchbaren algorithmen / verfahren gefunden
hat jemand hierzu ideen, inputs?

Ich werde mal Informationen sammeln und einen neuen Tread aufmachen.


hugo

verstehe, wenn jemand von extern einen rst aufruft dann wird er ausgeführt und die rst variable gelöscht.
die grundinitialisierung mir rst = true wuerde dann noch dafür sorgen das er beim ersten aufruft auch gleich initialisiert wird.

ich habe mich bisher nie getraut eine eingangsvariable aus dem programm heraus zu schreiben, ist den das nach iec61131 zulässig?


gravieren



Zitatich habe mich bisher nie getraut eine eingangsvariable aus dem programm heraus zu schreiben

Das ist auch "nur" eine Speicherzelle .



Zitatist den das nach iec61131 zulässig?
Weiß ich nicht.   Siemens setzt nach dem  END_IF  einen ";"   und behauptet das sei   iec61131-Konform.


Karl

hugo

hab das ganze mit eingangsvariblen aus einen fb schreiben probiert, es funktioniert.
jedoch werde ich erst nachlesen ob das iec confrom ist. wenn  ja mache ich die aenderung sie ist in jedem fall eine gute idee.

gravieren

Hi Hugo

Zitatwerde ich erst nachlesen ob das iec confrom ist.
Hast du dazu Lektüre ?



Karl

hugo

habe folgendes gefunden:

in iec61131-3 von john tiegelkamp. seite 41 schreibt ganz klar das eine var_input innerhalb einer poe oder funktionsblock nur gelesen werden darf.
bei einer var_in_out ist dies anders, diese ist jedoch nur ein pointer auf die uebergebene variable, und hat weiterhin das problem der doppelten darstellung in einer grafischen sprache wie cfc


habe es zwar getetset, und unter codesys festgestellt ein funktionsbaustein kann sehr wohl eine var_input beschreiben, betrachte es aber als gefährlich so etwas zu verwenden.
für mich wäre es nur dann akzeptabel wenn die norm dies explizit erlauben würde.


fazit, in oscat wollen wir portabel bleiben und von keiner plattform abhaengig sein deshalb koennen wir dies nicht verwenden.
sorry....

hugo