# Ampelbeispiel von codesys-Handbuch in st und cfc übersetzen



## dave.p (5 Dezember 2011)

Hallo Leute,

befasse mich erst seit 2 Wochen mit SPS, bzw. Beckhoffs twincat (also bitte nicht auslachen). Da in unserer Firma nur st und cfc zur Anwendung kommt und ich keine passenden Anfängerbeispiele finden konnte, erschien es mir sinnvoll das Ampelbeispiel abzuändern - aber natürlich funktioniert es nicht. Wäre also sehr dankbar wenn mir hier jemand helfen könnte.
bis jetzt zusammengebastelt:
Programm ABLAUF

```
PROGRAM ABLAUF
VAR_INPUT
    START:BOOL;
END_VAR
VAR
    init: INT:=0;
    count:INT:=0;
END_VAR
VAR_OUTPUT
    AMPEL1_STATUS:INT;
    AMPEL2_STATUS:INT;
END_VAR
VAR
    VERZ:WARTEN;
END_VAR

IF START THEN

CASE init OF

0:    AMPEL1_STATUS:=1;
    AMPEL2_STATUS:=3;
    init:=1;

1:    AMPEL1_STATUS:=2;
    AMPEL2_STATUS:=4;
    VERZ(start_timer:=TRUE);
    VERZ(ZEIT:=t#5s);
    IF VERZ.OK THEN VERZ(start_timer:=FALSE); init:=2;
    END_IF

2:    AMPEL1_STATUS:=3;
    AMPEL2_STATUS:=1;
    VERZ(start_timer:=TRUE);
    VERZ(ZEIT:=t#10s);
    IF VERZ.OK THEN VERZ(start_timer:=FALSE); init:=3;
    END_IF

3:    AMPEL1_STATUS:=4;
    AMPEL2_STATUS:=2;
    VERZ(start_timer:=TRUE);
    VERZ(ZEIT:=t#5s);
    IF VERZ.OK THEN VERZ(start_timer:=FALSE); init:=4;
    END_IF

4:    AMPEL1_STATUS:=1;
    AMPEL2_STATUS:=3;
    VERZ(start_timer:=TRUE);
    VERZ(ZEIT:=t#10s);
    IF VERZ.OK  THEN VERZ(start_timer:=FALSE); init:=2;
    END_IF

END_CASE;
END_IF
```
Funktionsblock AMPEL

```
FUNCTION_BLOCK AMPEL
VAR_INPUT
    STATUS:INT;
END_VAR
VAR_OUTPUT
    GRUEN:BOOL;
    GELB:BOOL;
    ROT:BOOL;
END_VAR
VAR
END_VAR
CASE STATUS OF
1:    GRUEN:=TRUE;
    GELB:=FALSE;
    ROT:=FALSE;
2:    GRUEN:=FALSE;
    GELB:=TRUE;
    ROT:=FALSE;
3:    GRUEN:=FALSE;
    GELB:=FALSE;
    ROT:=TRUE;
END_CASE
```
Programm PLC


Funktionsblock WARTEN

```
FUNCTION_BLOCK WARTEN
VAR_INPUT
    ZEIT:TIME;
    start_timer:BOOL;
END_VAR
VAR_OUTPUT
    OK:BOOL:=FALSE;
END_VAR
VAR
    ZAB:TP;
END_VAR
ZAB.PT:=ZEIT;
ZAB(IN:=start_timer);
IF NOT ZAB.Q THEN OK:=TRUE; ELSE OK:=FALSE; END_IF;
```

Grundsätzlich scheint das sogar zu funktionieren, aber nur im Ablauf-Programm. Wenn ich das ganze ausführe, kommt im Programm PLC nicht eine Variable an, statt dessen nur Fragezeichen. Hat jemand eine Idee was ich hier falsch mache?


----------



## Schnick und Schnack (5 Dezember 2011)

1. evtl nochmals nach Datenfluss anordnen (Rechtsclick im CFC-Editor --> Reihenfolge)
2. Online gehen, Fenster --> Alle schliessen, und PLC-PRG nochmals öffnen

Was sind diese A1_gruen für Variabeln?

Sonst müsste es gehen.....


Edit....
Noch zur Logik:
Soweit ich das noch sehe hast Du im Ampel-Baustein den Status 4 vergessen. 
Müsste ja theoretisch iwie rot und gelb zusammen sein oder?

Und in Schritt 4 vom Ablauf müsste init wohl wieder 1 geschrieben werden und nicht 2


----------



## dave.p (5 Dezember 2011)

Erstmal danke für die schnelle Antwort!
Funktioniert leider trotzdem nicht, Ablauf und Warten laufen und ändern die Variablen wie gewünscht, aber in ampel und plc sind wieder nur Fragezeichen und keine Werte...

A1 usw werden Ausgängen zugewiesen die die Farbe dann schalten sollten

..und ja, status 4 hab ich vergessen 

der Sprung von Schritt 4 auf den zweiten macht deshalb Sinn da die der Status bei Schritt 4 und 0 der selbe ist - ich hab das so interpretiert das Schritt 0 nur zum initalisieren beim Programmstart gedacht ist.


----------



## Schnick und Schnack (5 Dezember 2011)

lad mir bitte mal das projekt hoch




> der Sprung von Schritt 4 auf den zweiten macht deshalb Sinn da die der Status bei Schritt 4 und 0 der selbe ist - ich hab das so interpretiert das Schritt 0 nur zum initalisieren beim Programmstart gedacht ist.





Schritte 4 und 0 sind gleich, somit ist schritt 0 der init-schritt.
aber du springst in schritt 2 statt in den einser


 Also da Ablauf ja gut läuft, gehe ich davon auch das die PLC im Run ist, du PLC-PRG in einem Task aufrufst und und du eine saubere verbindung zur plc hast??


----------



## dave.p (5 Dezember 2011)

Ok, da hast du natürlich recht..

kommen wir zur nächsten dummen Frage: wie kann ich hier eine Datei hochladen, find hier nur bild und video


----------



## Schnick und Schnack (5 Dezember 2011)

dave.p schrieb:


> Ok, da hast du natürlich recht..



Was hast denn Du erwartet
Spässle am Rande.

Bei der Antwort auf das Erweiterte Design und dann die schöne Büroklammer


----------



## dave.p (5 Dezember 2011)

Anhang anzeigen ampel_st_cfc.zip

	

		
			
		

		
	
 ahh, ok, hoffe das hat geklappt


----------



## Schnick und Schnack (5 Dezember 2011)

Ja hat geklappt.
Ist eine relativ einfach sache.
In der Taskkonfiguration rufst Du im Standardtask das Ablaufprogramm auf.
Das brauchst Du aber nicht. Den das rufst Du ja bereits im PLC-PRG auf.
Diesen Programmaufruf kannst Du also löschen. Stattdessen musst Du natürlich dort PLC_PRG aufrufen.
(brauchst den Programmaufruf ned löschen, kannst direkt statt Ablauf --> PLC_PRG auswählen)

Dann noch die kleinen Logikanpassungen wie besprochen und dein Programm rennt.

Liebe Grüsse


----------



## dave.p (5 Dezember 2011)

Ahh, jetzt kommt Licht ins Dunkel...
Vielen Dank für die schnelle Hilfe!! 
Funktioniert!!


----------



## Schnick und Schnack (5 Dezember 2011)

Gerne doch!

Die Änderungen sind soweit verständlich oder?

Speziell warum der Programmaufruf zu ändern ist?

Gruss


----------



## dave.p (5 Dezember 2011)

Ja, jetzt is alles klar, vielen Dank nochmal für die schnelle Hilfe!

greetings


----------

