-> Hier kostenlos registrieren
Hallo zusammen,
Derzeit sitze ich an einem Projekt mit einer WAGO 767-2301, die Messwerte sammeln soll. Da ich bereits einiges objektorientiert programmiert habe (Java,C++, Matlab), möchte ich dies auch hier umsetzen. Die Übersichtlichkeit, Stabilität und Wartbarkeit wird durch OOP meiner Meinung nach stark gefördert. Leider stieß ich bereits am Anfang auf Probleme.
Was ich bisher habe: Steuerung, Bus etc. funktionieren einwandfrei mit klassischer Programmierung. Da das Projekt einige Slaves umfasst, soll über Klasseninstanzen die Buskommunikation gesteuert werden. Eine weitere Klasse soll Hilfsfunktionen zur Verfügung stellen. Bei CoDeSys 3.4.4 ist OOP im Menü aktiviert worden und ich habe die Funktionsbausteine mit Methoden und Attributen versehen.
Nun das Problem: Zugriffe und Zuweisungen mit THIS.meineFunktion/Attribut/Variable oder _meineFunktion/Attribut innerhalb der Klasse produzieren Fehlermeldungen:
unbekannter Typ - bzgl. Rückgabewert einer Methode
'THIS' ist keine Strukturvariable // Bei Attributen sowie VAR (ohne Namenskonflikte)
Wie verweise ich korrekt auf die Attribute und Methoden der zugehörigen Instanz? Muss ich ansonsten die Instanz der Methode separat als VAR_INPUT übergeben?
Wie sollte eine simple Getter oder Setter Methode in ST aussehen? (Keine Prüfung oder ä., nur simples Lesen/Schreiben)
Die Autovervollständigung bietet bei THIS.* bereits die Methoden etc. an. Einige Beispiele aus verschiedenen Dokumenten habe ich bereits gefunden, komme aber an dieser wichtigen Stelle nicht weiter.
Eine weitere Frage:
Der Buszugriff (Modbus) erfolgt über die CoDeSys Treiber. Jeweils ein Eingags/Ausgangs-Wort wurde damit einer lokalen Variable zugeordnet. Dies funktioniert soweit. Nun möchte ich gerne den Buszugriff komplett innerhalb der Klasse abarbeiten. Ist dies möglich indem ein POINTER TO WORD auf meine Busvariable gesetzt wird, welche ich anschließend meiner Klasse übergebe?
Ich hoffe das Problem ist verständlich geschildert und ich bin für jede Hilfe dankbar.
Derzeit sitze ich an einem Projekt mit einer WAGO 767-2301, die Messwerte sammeln soll. Da ich bereits einiges objektorientiert programmiert habe (Java,C++, Matlab), möchte ich dies auch hier umsetzen. Die Übersichtlichkeit, Stabilität und Wartbarkeit wird durch OOP meiner Meinung nach stark gefördert. Leider stieß ich bereits am Anfang auf Probleme.
Was ich bisher habe: Steuerung, Bus etc. funktionieren einwandfrei mit klassischer Programmierung. Da das Projekt einige Slaves umfasst, soll über Klasseninstanzen die Buskommunikation gesteuert werden. Eine weitere Klasse soll Hilfsfunktionen zur Verfügung stellen. Bei CoDeSys 3.4.4 ist OOP im Menü aktiviert worden und ich habe die Funktionsbausteine mit Methoden und Attributen versehen.
Nun das Problem: Zugriffe und Zuweisungen mit THIS.meineFunktion/Attribut/Variable oder _meineFunktion/Attribut innerhalb der Klasse produzieren Fehlermeldungen:
unbekannter Typ - bzgl. Rückgabewert einer Methode
'THIS' ist keine Strukturvariable // Bei Attributen sowie VAR (ohne Namenskonflikte)
Wie verweise ich korrekt auf die Attribute und Methoden der zugehörigen Instanz? Muss ich ansonsten die Instanz der Methode separat als VAR_INPUT übergeben?
Wie sollte eine simple Getter oder Setter Methode in ST aussehen? (Keine Prüfung oder ä., nur simples Lesen/Schreiben)
Die Autovervollständigung bietet bei THIS.* bereits die Methoden etc. an. Einige Beispiele aus verschiedenen Dokumenten habe ich bereits gefunden, komme aber an dieser wichtigen Stelle nicht weiter.
Eine weitere Frage:
Der Buszugriff (Modbus) erfolgt über die CoDeSys Treiber. Jeweils ein Eingags/Ausgangs-Wort wurde damit einer lokalen Variable zugeordnet. Dies funktioniert soweit. Nun möchte ich gerne den Buszugriff komplett innerhalb der Klasse abarbeiten. Ist dies möglich indem ein POINTER TO WORD auf meine Busvariable gesetzt wird, welche ich anschließend meiner Klasse übergebe?
Ich hoffe das Problem ist verständlich geschildert und ich bin für jede Hilfe dankbar.