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
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
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.
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
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.
Selbstoptimierung wäre Cool
das waere absolut cool, aber derzeit habe ich leider noch keine brauchbaren algorithmen / verfahren gefunden
hat jemand hierzu ideen, inputs?
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
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.
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?
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
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.
Hi Hugo
Zitatwerde ich erst nachlesen ob das iec confrom ist.
Hast du dazu Lektüre ?
Karl
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....
weitere infos sch diesen link an seite 49
http://www.fen-net.de/karlheinz.john/