CoDeSys - Beispiel

Tiger30

Level-1
Beiträge
65
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich versuche mal das Lauflicht-Beispiel in Codesys zu implementieren(FUP).
Ich habe drei Ausgänge und einen Schalter.
Netzwerk 0001 wenn Schalter= True ist dann Aus0= True
Netzwerk 0002 Hier wir ein Timer aufgerufen. Nach 3s wird aus1=True und aus0=False.

Das gleiche habe ich für aus2 gebaut. Nun halt läuft das Programm einmal.
Wie kann ich das Programm so änderen das ich mit einem zweiten schalter das Lauflicht stopen kann.

Danke im Voraus.
Gruß
T.
 
So wie du es jetzt hast läuft das ja nicht lange!
Aber du kannst doch mit einem RS glied arbeiten! Also mit tastern.
mit dem einen Starten(setzen) und dem anderen dann Stoppen(Rücksetzen).
Der timer läuft doch nur wenn er ein 1-Signal hat.
In Codesys AWL hieße das:
LD Schalter1
S M1

LD Schalter2
R M1

Das M1 Signal benutzt du dann für die erste lampe und für den Timer!
So hoffe das hat dir geholfen und ich habe dich richtig verstanden!

Gruß Domi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Domi
Danke für deine Antwort bzw für dein Vorschlag.
Nun was ich bis jetzt gemacht habe funktioniert einwanfrei nur wenn ih im Debuggmod das programm teste.
In der Visu läuft das ganze ein mal und dann bleibt stehen.
das heisst:
Der Schalter EIN wird gedrückt
==> aus0 geht an
==> (nach 3s)aus0 geht aus, aus1 geht an
==> (nach 3s)aus1 geht aus, aus2 geht an
==> (nach 3s)aus2 geht aus, aus0 geht an und hier hört's auf was ich nicht erwartet habe
wie ich das in FUP so implementiert:
1) aus0:= ein
2) Timer(IN:=aus0, PT:=t#3s), aus1:=Timer.Q und y0:=reset
Schritt 3 und 4 sind wurden analog zu Schritt2 gemacht
Ich weiss jetzt nicht, warum das Programm nur einen Durchlauf schafft

Gruss
T.
 
Moin moin
bei mir funktioniert das programm immer noch nicht wie ich mir vorgestellt habe. Mein Problem liegt daran, dass das Programm nur ein Durchlauf macht und hört auf.
Mein Code:
***********************************
IF x0 THEN
y0:=1;
END_IF

zeit0(IN:=y0, PT:=t#3s);
IF zeit0.Q THEN
y1:=1;
y0:=0;
END_IF

zeit1(IN:=y1, PT:=t#3s);
IF zeit1.Q THEN
y2:=1;
y1:=0;
END_IF

zeit2(IN:=y2, PT:=t#3s);
IF zeit2.Q THEN
y2:=0;
y0:=1;
END_IF
**************************************
x0:Eingang
y0...y2: Ausgang

In der Visualiesierung drücke auf den schalter EIN(x0) dann läuft das Programm:
1) y0 ist ein
2) nach 3s: y1 ein und y0 aus
3) nach 3s: y2 ein und y1 aus
4) nach 3s: y2 aus und y0 ein

und hier hört's auf.
Wie kann ich das programm so ändern dass es kontinuierlich läuft

Danke im Voraus
T.
 
Hallo
ich habe leider das Problem noch net gelöst und ich weiss net woran es liegt
So komme ich leider net weiter ich hoffe ich bekomme hier in Forum ein paar Vorschläge.
Hat jemand schon mal mit dem Lauflicht Beispiel beschäftigt?

mfg
T.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
So komme ich leider net weiter ich hoffe ich bekomme hier in Forum ein paar Vorschläge.
...

Ein Lauflicht lässt sich auf so vielen unterschiedlichen Wegen lösen das man Dich mit Lösungen zuschmeißen könnte. In welcher Sprache hättest Du denn gerne eine Lösung? Würdest Du auch mit schiebe Befehlen (SHL/SHR) klar kommen?

Hier mal eine Quick and Dirty lösung in ST die nur mit IF-Verzweigungen arbeitet.

Code:
myTON(IN:=NOT myTON.Q, PT:=t#1s);
IF AN THEN
    IF myTON.Q THEN
      IF LAMPE1 THEN
        LAMPE1 := FALSE;
        LAMPE2 := TRUE;
        LAMPE3 := FALSE;
      ELSIF LAMPE2 THEN
        LAMPE1 := FALSE;
        LAMPE2 := FALSE;
        LAMPE3 := TRUE;
      ELSE
        LAMPE1 := TRUE;
        LAMPE2 := FALSE;
        LAMPE3 := FALSE;
      END_IF
    END_IF
ELSE
  LAMPE1 := FALSE;
  LAMPE2 := FALSE;
  LAMPE3 := FALSE;
END_IF
 
Hallo Zotos
danke für deine Antwort. Ich werde dein Code gleich mal testen.
Ich habe das Lauflicht in FUP implementiert nur leider funktioniert net.
Das Programm macht einen Durchlauf dann hört auf bzw die Lampen ändern ihren Zustände nicht.

mfg
T.
 
IF x0 THEN
y0:=1;
END_IF

zeit0(IN:=y0, PT:=t#3s);
IF zeit0.Q THEN
y1:=1;
y0:=0;
END_IF

zeit1(IN:=y1, PT:=t#3s);
IF zeit1.Q THEN
y2:=1;
y1:=0;
END_IF

zeit2(IN:=y2, PT:=t#3s);
IF zeit2.Q THEN
y2:=0;
y0:=1;
END_IF

Hallo
Ich denke du hast den "Schalter" X0 in der Visu als "Variable toggeln" eingestellt. Du solltest es mal als "Variable tasten" probieren.
Gruß

Andreas
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Codesys-Beispiel

Hallo Zotos
Danke für dein Code. ich habe's bei mir getestet und läuft einwandfrei.
ich möchte aber das Lauflicht in FUP schreiben ausserdem dein Code wird kompliziertet wenn ich es erweitern muss das heisst wenn ich statt 3 Ausgänge 10 habe

Hallo Andreas
Danke für dein Vorschlag leider hat nicht geklappt. mein Programm ist in FUP geschrieben.
Am Ausgang der Timer wird nach Ablauf der Zeit einen Ausgang gesetzt und den anderen zurückgesetzt(Zum Beispiel Y1:=true und Y0:=False).
Was ich in der hilfe jetzt verstanden habe, wenn man einen ausgang set bzw zurückgesetzt hat dann behält der Ausgang diesen Zusatnd und genau das passiert in meinem Programm.

mfg
T.
 
@Tiger:
dann wäre es vielleicht doch sinnvoll, sich mit den von Zotos schon vorgeschlagenen Schiebe-Befehlen zu beschäftigen ...
Wieviele Kanäle soll das Lauflicht denn schluß-endlich nun haben ?

Gruß
LL
 
Hallo Andreas
hier sind meine FUP-Netzwerke. Das Problem, glaube ich, liegt daran dass die Ausgänge werden gesetzt bzw zurückgesetzt und die behalten dann ihren Zuständen
 

Anhänge

  • Lauflicht.zip
    7,2 KB · Aufrufe: 83
Hallo
Du musst dein X0 in der Visu von Toggle auf Tasten stellen und dann alle Ausgänge die nicht R sind von Zuweisung auf S(etzen) stellen (Siehe Anhang)

Gruß

Andreas
 

Anhänge

  • Lauflicht.pdf
    5,5 KB · Aufrufe: 90
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Andreas
danke schöne für deine Hilfe. Ich werde mir demnächst schlauer machen was der Unterschied zwischen Toggel und tasten angeht.
Nun wenn ich das Lauflicht erweitern möchte und zwar mit einem AUS-Schalter und 10 Ausgänge, dann ist diese Möglichkeit nicht praktisch oder?
wie geht das denn wenn ich mit das Lauflicht mit SHR realisieren möchte. dafür brauche ich nur einen Ausgagng zu defenieren oder?

mfg
T.
 
Ich werde mir demnächst schlauer machen was der Unterschied zwischen Toggel und tasten angeht.

Bei Beckhoff ist es so, dass wenn du eine Variable toggelst, dann springt sie von False auf True und im nächsten Zyklus wieder von True auf False. Es entsteht also ein ganz kurzer Impuls.
Beim Tasten ist es so, dass die Variable auch auf True springt, aber auch im nächsten Zyklus auf True bleibt. Wenn du Buttons für solche Aktionen benutzt siehst du in diesem Fall auch, dass der Button gedrückt bleibt. Wenn du diesen dann noch einmal drückst wird er wieder normal und die Variable springt wieder auf False.
 
@Tiger
Wenn du 10 Lampen unterschiedlich ansteuern möchtest, brauchst du auch 10 Ausgänge. Für die SHR-Sache brauchst du aber wahrscheinlich nur einen Timer der das Bit nach Ablauf der Zeit weiterschiebt.

Gruß

Andreas
 
Zurück
Oben