# CoDeSYS Unterprogramme VAR übernehme?



## Michael68 (15 Januar 2011)

Hallo,

CoDeSYS und WAGO 750

Habe das Hautprogramm in Unterprogramme zerlegt und nehem die Signalausgänge mit in die anderen Unterprogramme ... Jetzt kommen Fehlermeldungen ...

Wie übernehme ich die Signalausgänge in die anderen Unterprogramme?! 

Beispiel: Aufgang   Blinker_1.Q   gibt einen Melderimpuls und befindet sich im Unterprogramm BLINKER(PRG)

Soll auch im PLC_PRG(PRG) verfügbar sein .... wie geht?


----------



## Ghosty (15 Januar 2011)

Hallo,

sollte eigentlich Funktionieren wenn du den Aufruf im PLC_PRG mit BLINKER.Blinker_1.Q machst.

Gruß


----------



## Michael68 (16 Januar 2011)

Hallo,

ne ist nicht so, jedes Unterprogramm hat seine eigene VAR Deklaration.

Fehler 4001: Tech_Tast (6): Variable 'BLINKER_1' nicht deklariert

Da die Variablen Deklaration nur im Program 'Blinker' vorhanden ist.
Kann es aber nirgend umtellen und die VAR steht auf Globale_Variable.

Wenn ich die per Hand auch in die anderen Unterprogramme Eintrage?!
Kann aber nicht normal sein oder? 

PROGRAM Blinker
VAR
    Blinker_1: TP;
    Blinker_2: TP;

Hilfe!


----------



## PN/DP (16 Januar 2011)

Michael68 schrieb:


> Fehler 4001: Tech_Tast (6): Variable 'BLINKER_1' nicht deklariert
> 
> Da die Variablen Deklaration nur im Program 'Blinker' vorhanden ist.
> Kann es aber nirgend umtellen und die VAR steht auf Globale_Variable.
> ...


Wenn Du die Variablen in den Ressourcen "Globale Variablen" einträgst, dann sind sie allen Unterprogrammen bekannt.
Wenn Du sie im Unterprogramm als VAR_GLOBAL einträgst, dann sind sie nur allen Instanzen dieses Unterprogramms bekannt.

Harald


----------



## Ghosty (16 Januar 2011)

Hallo,

hab hier mal ein kleines Beispiel, falls ich dein Problem richtig Verstanden habe.


```
PROGRAM BLINKER
VAR_INPUT
   Blink_Start:BOOL;
END_VAR
VAR
   BLINKER_1:TP;
END_VAR
 
BLINKER_1( IN:=  Blink_Start,
    PT := t#2s);

 
PROGRAM PLC_PRG
VAR
 test:BOOL;
END_VAR
 
IF BLINKER.BLINKER_1.Q THEN     (*Abfrage BLINKER_1.Q*) 
 test := TRUE;     
ELSE
 test := FALSE;    
END_IF
 
BLINKER();
```
 
Der Timer BLINKER_1 ist im PRG BLINKER deklariert. Wird dort durch irgend eine Variable gesetzt. Bei mir ""Blink_Start". Im PLC_PRG wird Abgefragt ob der Ausgang von BLINKER_1 = true ist ober nicht. Wenn Ausgang true denn Test auch true. Sonst Test = false.

Vielleicht hilft dir das ja weiter.

Gruß


----------



## Michael68 (18 Januar 2011)

Hallo,

nee irgendwie nicht ... Unterprogramme sind zu sehen auf dem Bild Blinker(PRG) etc.
Der FB Trigger_Neustart: R_TRIG kommt aus dem Programteil Tech_Tast(PRG) und ich brauche den Ausgang Q im PLC_PRG(PRG).
Egal ob ich die Deklaration im Unterprogram setzte, wie CoDeSYS es auch macht oder Global ins PLC_PRG(PRG) es geht nicht.
Das Programm startet zwar aber die Unterprogramme sind grau und laufen nicht .... 









Nachdem das Programm übertragen wurde und Läuft:


----------



## zotos (18 Januar 2011)

Die Programme muss man auch aufrufen!

Einfach einen Kasten in PLC_PRG malen und den Namen reinschreiben.


----------



## BerndAllgäu (18 Januar 2011)

zotos schrieb:


> Die Programme muss man auch aufrufen!
> 
> Einfach einen Kasten in PLC_PRG malen und den Namen reinschreiben.




könnte Helfen - lol... 



zotos schrieb:


> Kasten in PLC_PRG malen und den Namen  reinschreiben.


" ich schmeiß mich weg... aber es trifft den Nagel auf den kopf.

Erinnert mich an Labview - "Programmieren mit Binfaden" *g*


lg Bernd


----------



## zotos (18 Januar 2011)

Um mich selbst noch etwas zu korrigieren: Man kann die Programme über PLC_PRG aufrufen, es gibt aber auch noch andere Wege dies zu tun.

Die meisten (oder alle?) Plattformen sind Multitasking fähig und man kann über die Taskkonfiguration die Programme auch anstoßen.

Im vorliegenden Fall würde ich aber die Programme wie bereits erwähnt aus dem PLC_PRG heraus aufrufen. 

Wobei mir die Struktur im den kreuz  und quer verlaufenden Zugriffen nicht besonders gefällt. Aber für Projekte in der Größenordnung ist es schon ok.


----------



## Ghosty (18 Januar 2011)

Ja ist eigentlich schon besser wenn man auch das komplette Programm abarbeitet . Mit dem hab ich natürlich nicht gerechnet.

Der Aufruf von BLINKER ist in meinem Beispiel eigentlich ja auch zu sehen .

Aber wenns jetzt Funktioniert ist ja gut.

Gruß


----------



## Michael68 (18 Januar 2011)

Hallo, 

Danke zu Blöd ... habe ich irgendwie auch gelernt ... zuviel Bindfaden


----------



## Michael68 (18 Januar 2011)

.... alles gut .... kann ich eingendlich neue Software aufspielen ohne alle Ports zurückzusetzten?

Dann muss ich nicht immer das ganze Haus neu Booten ... gibt immer mecker


----------



## Michael68 (21 Januar 2011)

Hallo,

es scheind das die Unterprogramme jetzt gehen aber jetzt habe ich ein neues Problem! 
Ich bekomme keine Zeit von der WAGO geliefert - AHHHHHH






SysRtcGetTime gibt nicht mehr raus ... wie kommt denn das jetzt? Steht auf 1970 ....


----------



## Ghosty (21 Januar 2011)

Hallo,

hat es den schon einmal Funktioniert? Was hast den genau für eine Steuerung?

Vielleicht hilft dir das ja weiter:
http://www.spsforum.com/showthread.php?t=41756

Gruß


----------



## Michael68 (24 Januar 2011)

Hallo,

klar hat es Funktioniert ... und die Wago hat auch eine Echtzeituhr 
Komischer weise geht es wieder ... habe irgendwie zu viele Baustellen zurzeit.
Werde heute Abend mal Schritt für Schritt alle Funktionen überprüfen und einige Module raus schmeißen - Danke für die Hilfe.


----------



## Michael68 (29 Januar 2011)

Läuft wieder und alles ist gut .... 

Bekomme aber immer noch nicht die Variablen von den Unterprogrammen in das Hauptprogramm oder umgekehrt. Also habe ich alles Zusammenhängende in das Hauptprogramm zurückkopiert und es geht erst mal wieder ... 

Wenn jemand noch einen Tipp hat gerne


----------

