ich habe neben meines Hauptprogrammes (PRG_PCL) noch ein weiteres Programm. Sowohl das Hauptprogramm als auch das zusätzliche Programm sind in ST geschrieben.
Jetzt hänge ich an einer Stelle und komme nicht weiter: Wie kann ich das Programm in meinem Hauptprogramm aufrufen ? Wenn ich Versuche das Programm als eine Instanz im Hauptprogramm zu deklarieren bekomme ich eine Fehlermeldung.
Hier der Code:
PROGRAM PLC_PRG
VAR
inc:inkrementierung;k:int;
END_VAR
inc(j:=1); <---Hier kommt die Fehlermeldung
PROGRAM inkrementierung
VAR_INPUT
j:INT;
END_VAR
VAR_OUTPUT
k:INT;
END_VAR
k := j + 1;
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2009-12-02
Originally created by: mg
ne weitere Instanz öffnet man mit FUNCTIONBLOCK.
Man kann zwar auch ein PROGRAM als Unterprogramm öffnen, aber das ist keine Instanz. Soweit ich weiß kann ich einem PROGRAM keine Variablen übergeben (ich erhalte nur uU welche zurück)
Wenn ich schon ein Untergrogramm verwenden will (ohne Variablen zu übergeben) geht das am besten, indem ich dem PROGRAM eine AKTION hinzufüge. Dann erolgt der Zugriff allerding nur innerhalb des PROGRAM
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wenn schon zwei unabhängige Programme benötigt werden, ist die sauberste Lösung, beide Programme über die Taskkonfiguration aufzurufen (können auch in einer gemeinsamen Task laufen), und die Daten als globale Variablen auszutauschen.
Wenn es nur um das Inkrementieren eines Wertes geht oder andere einfache Berechnungen, läßt sich das besser über eine FUNCTION realisieren, die dann im Hauptprogramm aufgerufen wird.
Eine Funktion verwendet man wie eine deklarierte (parametrierbare) Variable, d.h. man braucht sie im verwendenden Baustein nicht zu instanziieren.
Beispiel:
FUNCTION inkrementierung: INTVAR_INPUTj:INT;END_VAR inkrementierung := j + 1;
Das von der Funktion zurückgegebene Ergebnis kann in komplexeren Anweisungen direkt verarbeitet werden, hier wird es halt nur auf eine lokale Variable des Programms geschrieben.
Genaueres steht auch in der CoDeSys online Hilfe.
Gruss
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Erst einmal vielen Dank an euch alle für die Antworten! Mitlerweile habe ich mein Problem gelöst bekommen. Habe eben auch im CoDeSys-Handbuch was dazu gefunden. Hatte dieses mir zwar schon mehrmals angeschaut aber trotzdessen die betreffende Stelle immer wieder übelesen oder übersehen.
Also nochmal Vielen Dank und einen schönen Tag,
Christian
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich habe neben meines Hauptprogrammes (PRG_PCL) noch ein weiteres Programm. Sowohl das Hauptprogramm als auch das zusätzliche Programm sind in ST geschrieben.
Jetzt hänge ich an einer Stelle und komme nicht weiter: Wie kann ich das Programm in meinem Hauptprogramm aufrufen ? Wenn ich Versuche das Programm als eine Instanz im Hauptprogramm zu deklarieren bekomme ich eine Fehlermeldung.
Hier der Code:
PROGRAM PLC_PRG
VAR
END_VAR
inc(j:=1); <---Hier kommt die Fehlermeldung
PROGRAM inkrementierung
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
k := j + 1;
Originally created by: mg
ne weitere Instanz öffnet man mit FUNCTIONBLOCK.
Man kann zwar auch ein PROGRAM als Unterprogramm öffnen, aber das ist keine Instanz. Soweit ich weiß kann ich einem PROGRAM keine Variablen übergeben (ich erhalte nur uU welche zurück)
Wenn ich schon ein Untergrogramm verwenden will (ohne Variablen zu übergeben) geht das am besten, indem ich dem PROGRAM eine AKTION hinzufüge. Dann erolgt der Zugriff allerding nur innerhalb des PROGRAM
Hi,
das Anhängen einer Aktion geht in ST nicht.
Wenn schon zwei unabhängige Programme benötigt werden, ist die sauberste Lösung, beide Programme über die Taskkonfiguration aufzurufen (können auch in einer gemeinsamen Task laufen), und die Daten als globale Variablen auszutauschen.
Wenn es nur um das Inkrementieren eines Wertes geht oder andere einfache Berechnungen, läßt sich das besser über eine FUNCTION realisieren, die dann im Hauptprogramm aufgerufen wird.
Eine Funktion verwendet man wie eine deklarierte (parametrierbare) Variable, d.h. man braucht sie im verwendenden Baustein nicht zu instanziieren.
Beispiel:
Der Aufruf im Hauptprogramm sieht dann so aus:
Das von der Funktion zurückgegebene Ergebnis kann in komplexeren Anweisungen direkt verarbeitet werden, hier wird es halt nur auf eine lokale Variable des Programms geschrieben.
Genaueres steht auch in der CoDeSys online Hilfe.
Gruss
Hallo Chris ...
also ..
Programme kann man nicht instanziieren ...
wenn du mehrere Instanzen benötigst, dann musst du einen
Funktionsblock schreiben ..
Aber man kann natürlich Programme in anderen Programmen aufrufen ...
auch ohne Taskkonfiguration ...
In deinem Fall musst du nur die Deklaration im VAR ... END_VAR Block löschen ...
Der Aufruf sollte dann so aussehen
inkrementierung( j := 1);
Programme können sehr wohl INPUT, OUTPUT und sogar IN_OUT Variablen übergeben bekommen ...
man kann sogar an Programme Aktionen dran hängen,
wobei diese Aktionen
nicht mit den Aktionen in AS zu verwechseln sind ...
Man markiert dazu links im Baum das Programm und clickt dann mit der rechten Maustaste
das Contextmenü auf. Dort kann man dann eine Aktion hinzufügen.
Diese Aktionen müssen dann aber auch noch aufgerufen werden ...
Erst einmal vielen Dank an euch alle für die Antworten! Mitlerweile habe ich mein Problem gelöst bekommen. Habe eben auch im CoDeSys-Handbuch was dazu gefunden. Hatte dieses mir zwar schon mehrmals angeschaut aber trotzdessen die betreffende Stelle immer wieder übelesen oder übersehen.
Also nochmal Vielen Dank und einen schönen Tag,
Christian