Ampelbeispiel von codesys-Handbuch in st und cfc übersetzen

dave.p

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
Code:
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
Code:
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
PLC_PRG.jpg
Funktionsblock WARTEN
Code:
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?
 
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
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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 :oops:

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.
 
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??
 
Zuletzt bearbeitet:
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
 
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
 
Zurück
Oben