Aufruf von Methoden wie in C

zergi

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

ich habe ein paar Probleme damit bereits bekannte Programmiermethoden von C auf CoDeSys zu übertragen. Ich weiß nicht ob ich mich einfach nur vertippe, oder ob es so überhaupt nicht geht.

Am besten beschreib ich erstmal was ich in C machen würde:

Code:
function (temp_a a, temp_b b)
{
Mach irgendwas mit temp_a und temp_b;
}


int main ()
{
int a;
int b;
function (a, b);
return 0;
}

Als Beschreibung: Ich will einer Funktion zwei Werte übergeben die irgendwie verarbeitet werden sollen.

Jetzt kommen aber die Methoden ins Spiel.


Meine Main Datei sieht nun so aus:
Code:
PROGRAM main_prog
VAR
t1 : standard;
temp : ARRAY[1 .. 4] OF functions := [t1];
a : INT := 1;
b : INT := 2;
END_VAR

temp[1].test_methode(var1 := a, var2 := b);

END_PROGRAM

Die Methode (und Interfacekopf) sieht so aus:

Code:
METHOD test_methode : BOOL
VAR_INPUT
var1 : INT;
var2 : INT;
END_VAR
VAR
temp1 : INT := 0;
temp2 : INT := 0;
END_VAR

temp1 := var1;
temp2 := var2;

END_METHOD

Eigentlich müsste in temp1 jetzt 1 und temp2 2 stehen aber es steht in beiden 0. Warum ist das so? Wo ist mein Fehler?


Vielen Dank an den der mich mit dem Geistesblitz trifft! Ich hoffe das wird wie ein 4 zu 0 gegen Argentinien . :ROFLMAO:
 
Hallo,
wie wäre es, wenn du statt mit TEMP-Variablen mit einer OUT-Variable arbeitest und darin zum Beipiel die Summe deiner beiden Einzel-Variablen abbildest ?
TEMP ist möglicherweise auch bei Codesys temporär ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Huhu,

genau genommen arbeite ich garnicht mit Temp Variablen sondern mit nem Struct. Ich hab nur bei dem Beispiel temps eingeführt damits übersichtlicher wird.

Was ich aber vergessen habe im Anfangspost zu schreiben ist das Ergebnis des Simulationsmodus.

Wenn ich (nach Aktivieren der Simulation) die Methode öffne sieht sie wie folgt aus:
Code:
temp1 [COLOR="Green"]0[/COLOR] := var1 [COLOR="Green"]???[/COLOR];
temp2 [COLOR="Green"]0[/COLOR] := var2 [COLOR="Green"]???[/COLOR];


Und die main so:
Code:
temp[1].test_methode(var1 := a [COLOR="Green"]1[/COLOR], var2 := b [COLOR="Green"]2[/COLOR]);

Es wird also die 1 und 2 übergeben, es kommt aber nichts an.
Der Fehler muss also irgendwo am Syntax der Methode liegen.. oder kann man evt. keine Variablen an Methoden übergeben?
 
Ich denke die werte kommen schon an, jedoch arbeitest du mit Funktionen (Methoden) würdest du aus deiner Methode einen FB machen dann sollte es gehen.
Die Funktion wird nur bei Ausführung initialisiert und sie besitzt eigentlich keinen Wertbereich.
Alle Werte der Funktion stehen nach der Ausführung nicht mehr zu Verfügung
das ist eigentlich in jeder Programmiersprache so.
 
Huhu,

Wenn ich (nach Aktivieren der Simulation) die Methode öffne sieht sie wie folgt aus:
Code:
temp1 [COLOR=Green]0[/COLOR] := var1 [COLOR=Green]???[/COLOR];
temp2 [COLOR=Green]0[/COLOR] := var2 [COLOR=Green]???[/COLOR];

das muss so sein weil du die Funktion nicht als instanz aufrufen kannst, denn es gibt kein Instanz derer.

nach deinem Ansatz müsstest du ja über Twincat ein Auswahl bekommen welches Objekt du dir anzeigen lassen möchtest..
Doch gibt dir TwinCat dies nicht weil es dieses Objekt nicht als Instanz gibt
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
nach deinem Ansatz müsstest du ja über Twincat ein Auswahl bekommen welches Objekt du dir anzeigen lassen möchtest..
Doch gibt dir TwinCat dies nicht weil es dieses Objekt nicht als Instanz gibt

Bekomm ich aber. Die Abfrage welche der 4 Objekte ich den ansehen will.
Alle 4 zeigen mir das gleiche an. Wobei 2-4 mir ja auch nix anzeigen sollten, nur im ersten müssten die Werte anders sein.


Dein erstes Post versteh ich nicht. Wenn es die Funktion nicht mehr geben sollte, wieso stehen dann Werte in den Variablen? Nur nicht die Übergebenen.
Edit: Nach nem großen Stück Schokolade habe ich deinen Post jetzt doch verstanden. Er betrifft mich aber nicht, da ich, im zweiten Post, als Antwort auf Larry geschrieben habe das ich mit einem struct arbeite wo alle Werte drin gespeichert werden. Das die Function/Methode nach dem Aufruf "abgearbeitet" wird und nicht mehr da ist ist klar, deshalb speicher ich ja auch woanders.
 
Zuletzt bearbeitet:
poste doch mal bitte deinen code für die Function

der bezeichner Method exsistiert bei mir garnicht.
temp : ARRAY[1 .. 4] OF functions := [t1];
was ist functions
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

es geht wohl um Codesys 3.
Zergi: eine Methode ist ziemlich ähnlich wie eine Funktion, d.h: jeder Input, jeder Output und jede lokale Variable sind nur temporäre Daten, die bei jedem Aufruf initialisiert werden und anschliessend wieder zerstört werden.
Anschauen kann man sich die Werte dann nur wenn man in den Aufruf reinsteppt oder wenn man einen Breakpoint in der Methode setzt.
Willst du Variablen haben, die zwischen Aufrufen erhalten bleiben, dann musst du diese beim Funktionsblock deklarieren.
Dein Projekt kann aber wohl nicht übersetzbar sein:
Code:
t1 : standard;
temp : ARRAY[1..4] OF functions := [t1];
was ist standard für ein Typ und was ist functions für ein Typ? Bei diesem Codestück ist mir schon gar nicht klar was du erreichen willst.
Du legst eine Variable t1 vom Typ Standard an (ein Funktionsblock?) dann einen Array mit basistyp functions (ein anderer Funktionsblock?) dann initialisierst du das erste Element des Array mit der vorher definierten Variable (das ist ein memcopy! Willst du das?).
Zu welchem Funktionsblock gehört nun die Methode?

Bernhard
 
Zurück
Oben