-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - fenast

#1
Ein Hinweis an den Autor: Gerade habe ich in der PCWORX-Version einen Copy/Paste-Fehler gefunden, der offenbar schon seit März 2009 existiert. Beim letzten Update wurde der Code modifiziert und zusätzlich der Code der alten Version dringelassen (schnell zu sehen, wenn man an's Fileende scrollt). Hat außer Performanceeinbußen wohl keine Auswirkungen, wahrscheinlich hat's deswegen auch noch keiner gemerkt? Gruß und Happy New OSCAT Year!
#2
Vielen Dank für deine Mühe!!
Dann muss ich mich wohl um einen neuen Compiler kümmern; wer weiß, was da sonst noch für Merkwürdigkeiten schlummern.
Schon ein dickes Ding... einziger Vorteil: Ab jetzt kann ich bei Fehlern mit dem Setup immer sagen: wahrscheinlich liegt's wieder mal an PC WORX ;-)
Schönes WE!
#3
Danke, peewit, für die superschnelle und kompetente Antwort.
Leider besitze ich keine neuere PC-Worx-Version um damit zu experimentieren. Wäre trotzdem der Versuch eines Firmware-Upgrades lohnenswert?
Hier sind die Zusatzinfos:
SPS: ILC 130 ETH 2.0.5.9062
Firmware: V. 3.54.01 07/16/09 HW 01
Projektvorlage: ILC 130 ETH Rev. > 01/3.00
#4
Liebe Leute, ich habe ein lustiges kleines Problem mit einer Phoenix-Kleinsteuerung ILC 130 ETH unter PCWORX 5.20 (SP 4.45).
Dort habe ich den OSCAT(3v32)-PID-Regler CTRL_PID genutzt (übrigens ein Klasse-Teil!) und mich gewundert, warum er nicht funktioniert. Der Output liefert konsequent 0.0. Weitere Forschungen ergaben, dass die (dort verwendete) Funktion DEAD_ZONE Quelle des Übels ist. Sie spuckt ebenfalls Null aus, egal welche Parameter man ihr übergibt. Da tut sie auch, wenn man sie isoliert einfach im Hauptprogramm aufruft, z.B. ist hier DzOut immer 0.0 statt 2.0:
DzOut := DEAD_ZONE (DzIn, DzLim) mit den Vorbesetzungen DzIn := 2.0; DzLim := 0.1; oder beliebigen anderen Werten.
Der Blick in den Code von DEAD_ZONE zeigt, dass dort mittels ABS() ein Absolutwert berechnet wird. ABS() liefert jedoch immer 0.0, wenn ABS() innerhalb von DEAD_ZONE aufgrufen wird. ABS() funktioniert jedoch, wenn ABS() im Hauptprogramm direkt (also nicht innerhalb einer OSCAT-Bibliotheksfunktion) aufgerufen wird.
Wenn man den (überschaubaren) ST-Code von DEAD_ZONE modifiziert und die ABS()-Funktion dort entfernt bzw. durch funktionsgleiche if-Konstrukte ersetzt, funktioniert alles. Aber das kann's nicht sein.
Schreibt man das gleiche Programm für ein anderes Phonenix-Zielsystem, für das eine PC-Simulation möglich ist (bei der ILC130 gibt's dämlicherweise keine Simu-Möglichkeit), so funktioniert alles (auch mit ABS()) wunderbar.

AÄhhh - ich bin nicht gerade ein Anfänger (wohl schon bei PCWORX), aber dazu fällt mir nix ein... vielleicht hat jemand von euch eine Idee? Demo-Projekt (obiger Dreizeiler) kann zur Verfügung gestellt werden, aber man braucht halt eine ILC130, um das auszuprobieren. Vielen Dank vorab für eure Hilfe.