Eigenschaften - wie benutzt man sie?

wonderfulworld

Level-1
Beiträge
114
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe jetzt endlich auch mal die Eigenschaften bei Codesys V3(bzw. SoMachine Motion von Schneider Electric) genauer unter die Lupe genommen und bekomme Sie einfach nicht zum Laufen. Könnt ihr mir sagen was ich falsch mache?

Ich habe einen FB mit der Eigenschaft myInteger mit getter und setter angelegt:
Code:
{attribute 'monitoring':='variable'} 
(*ich habs auch schon mit dem Attribut 'call' oder keinen Pragma probiert. Leider funktioniert alles nicht*)

PROPERTY myInteger : INT

Dann hab ich eine Methode iterate: INT die die Eigenschaft myInteger hochzählen soll:
Code:
METHOD iterate : INT
VAR_INPUT
END_VAR
______________________________

myInteger := myInteger + 1;
iterate := myInteger;

Dann hab ich den FB in einem Programm deklariert und so aufgerufen:
Code:
getNext : BOOL;
next : INT;
iterate : Iterate;
_____________________________

IF getNext THEN
    next := iterate.iterate();
END_IF


Aber die Eigenschaft bleibt immer auf 0. Egal was ich mache. Ich kann soviel hochzählen wie ich will.
Ich mache ganz sicher etwas falsch. Aber ich find einfach nicht was. Seht ihr den Fehler?
Gruß
wonderfulworld
 
Hallo,
der Fehler ist, dass du es falsch benutzt ...
Eine Eigenschaft (Property) hat z.B. den Sinn (wie eine Funktion) den Wert von im Baustein schon bekannten Variablen/Ergebnissen/Methoden zu verrechnen und ihn dir direkt auszugeben (via Get) oder (via Set) eine Variable zu beeinflussen.
Deinen Inkrementierer kannst du aber so nicht benutzen, da er m.E. ziemlich unkontrolliert (oder unsinnig) ´hochzählt, wenn du ihn im Get-Teil der Property programmierst (oder aufrufst).

Gruß
Larry
 
Mmh ich hab jetzt wirklich nochmal viel probiert, aber so richtig verstanden habe ich immer noch nicht, was Properties mir für einen Mehrwert bringen. Natürlich kann ich sie im Interface deklarieren und dann in der Anwendung gegen das Interface implementieren. Aber ich kann doch dann auch genauso einfach eine getMyProperty() oder setMyProperty() Methode anlegen. Die macht doch im Grunde genau dasselbe, oder?
gruß wonderfulworld
 
Mmh ich hab jetzt wirklich nochmal viel probiert, aber so richtig verstanden habe ich immer noch nicht, was Properties mir für einen Mehrwert bringen.

Hallo,
dafür bekomme ich jetzt "so aus der Hüfte geschossen" auch nichts genannt.
Ich denke mal, es hängt von deiner Anwendung und deimer Vorstellung der Struktur ab. Im Grunde ist es (aus meiner Sicht) eine Möglichkeit, den Code eines "Monster"-FB's ein bißchen besser zu organisieren. Aber wie schon geschrieben : ich habe dafür (auf SPS-Basis) kein vernünftiges Beispiel - bei .Net (Visual Studio) wäre das schon etwas Anderes.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mmh ich hab jetzt wirklich nochmal viel probiert, aber so richtig verstanden habe ich immer noch nicht, was Properties mir für einen Mehrwert bringen. Natürlich kann ich sie im Interface deklarieren und dann in der Anwendung gegen das Interface implementieren. Aber ich kann doch dann auch genauso einfach eine getMyProperty() oder setMyProperty() Methode anlegen. Die macht doch im Grunde genau dasselbe, oder?
gruß wonderfulworld

Das ist genau das gleiche. Das ist nur ein "optischer" Unterschied, manche finden
Instanz.Property := wert; schöner als Instant.SetMyProperty(Wert);

Wirklich interessant ist das Feature für unsere OEM-Kunden. So können beispielsweise Parameter auf der Steuerung vom Anwender wie Variablen benutzt werden,
während in Wirklichkeit ein funktionaler Zugriff erfolgt.
 
Edit: Ups ich hab das hier wahrscheinlich gleichzeitig mit dem Vorposter geschrieben. Die Antwort über meinem Post, ist für mich schon ausreichend.


Mein Problem ist halt, dass ich OOP bis jetzt nur von Java her kenne und da gibt es, soweit ich weiß, gar keine Eigenschaften. Das ist eine komplett neue Technologie für mich. Deshalb fällt es mir auch so schwer zu verstehen was der Sinn hinter dem ganz ist. Ich hab jetzt schon einige Artikel aus der .Net-Welt zu dem Thema gelesen, gestern den ganzen damit herumgespielt, aber so richtig versteh ich immer noch nicht wo den da der Vorteil liegt. Das wurde ja von Menschen in Codesys hineinimplementiert, die sich was dabei gedacht haben. Und jetzt einfach hergehen und Eigenschaften nicht benutzten, weil man sie nicht versteht, will ich auch nicht.
Gruß wonderfulworld
 
Zuletzt bearbeitet:
Wir haben uns das Feature von C# abgeschaut. Aber du hast es doch komplett verstanden, da steckt wirklich nicht mehr dahinter.
Jeder Zugriff der Art:

inst.prop := wert;

wird implizit vom Compiler zu einem Aufruf inst.__setProp(wert); umgebaut und jeder Zugriff der Art:

var := inst.Prop;

wird zu var := inst.__getProp();

Das ist alles. Gewünscht hat sich ein OEM-Kunde eine Funktionalität damit er bestimmte Parameter in seiner Steuerungskonfiguration wie Variablen darstellen kann.
Er muss diese Parameter aber funktional auslesen. Und wir haben daraus ein allgemein verwendbares Feature gemacht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist alles. Gewünscht hat sich ein OEM-Kunde eine Funktionalität damit er bestimmte Parameter in seiner Steuerungskonfiguration wie Variablen darstellen kann.
Er muss diese Parameter aber funktional auslesen. Und wir haben daraus ein allgemein verwendbares Feature gemacht.

Dagegen spricht ja auch nichts. :-) Vielen Dank für die Erklärung. Ihr hab mir sehr geholfen.
Gruß wonderfulworld
 
Zurück
Oben