Step 7 Kiesförderanlage

Mc52

Level-1
Beiträge
40
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend,

ich muss eine Kiesförderanlage programmieren bestehend aus 3 Motoren. Sobald S1 gedrückt wird sollen sich die Motoren Q3->Q2->Q1 jeweils mit einer einschaltverzögerung von 5 sekunden einschalten. Sobald S2 gedrückt wird sollen sich die Motoren in umgekehrter Reihenfolge, also Q1->Q2->Q3 jeweils mit einer ausschaltverzögerung von 10 sekunden abschalten. Sobald S0 gedrückt wird bzw die Relais F1,F2,F3 aktiv werden sollen sich die Motoren komplett ausschalten.

Ich habe das mal versucht zu programmieren. Aber i-wie kommt mir das etwas lang vor. Ich glaube das geht bestimmt etwas kompakter.

So sieht mein Programm momentan aus:

nw1:
U(
U "S1"
S "M1"
U(
O "S0"
O "F1"
O "F2"
O "F3"
)
R "M1"
U "M1"
)
L S5T#5S
SE "T1"
NOP 0
NOP 0
NOP 0
U "T1"
= "Q3"


nw2:
U(
U "Q3"
S "M2"
U(
O "S0"
O "F1"
O "F2"
O "F3"
)
R "M2"
U "M2"
)
L S5T#5S
SE "T1"
NOP 0
NOP 0
NOP 0
U "T1"
= "Q2"




nw3:
U(
U "Q2"
S "M3"
U(
O "S0"
O "F1"
O "F2"
O "F3"
)
R "M3"
U "M3"
)
L S5T#5S
SE "T1"
NOP 0
NOP 0
NOP 0
U "T1"
= "Q1"




nw4:
U(
U "S2"
S "M4"
U(
O "S0"
O "F1"
O "F2"
O "F3"
)
R "M4"
U "M4"
)
L S5T#10S
SA "t2"
NOP 0
NOP 0
NOP 0
U "t2"
= "Q3"




nw5:
U(
U "S2"
S "M5"
U(
O "S0"
O "F1"
O "F2"
O "F3"
)
R "M5"
U "M5"
)
L S5T#10S
SA "t2"
NOP 0
NOP 0
NOP 0
U "t2"
= "Q2"


nw6:
U(
U "S2"
S "M5"
U(
O "S0"
O "F1"
O "F2"
O "F3"
)
R "M5"
U "M5"
)
L S5T#10S
SA "t2"
NOP 0
NOP 0
NOP 0
U "t2"
= "Q1"

Wäre dankbar für jede Besserung.

mit freundlichen Grüßen
 
Hi,

ohne jetzt hier tiefer einzusteigen fällt folgendes auf:

Du verwendest mehrfach denselben Timer (z.B. SE "T1)
Ausgänge werden mehrfach zugewiesen (z.B. ="Q1")
Hier würde ich erstmal "aufräumen"

Gruß
Move
 
Zuviel Werbung?
-> Hier kostenlos registrieren
- Du kannst die Hälfte des Programms löschen (die kompletten Netzwerke 1 bis 3) :cool: weil die bewirken nichts (*) - nur die letzte Zuweisung im Programm zu einem Ausgang kommt auch am Ausgang an.
(*) es sei denn, Du verwendest "M1", "M2" und "M3" noch irgendwo anders im Programm?

- Die OR-Verknüpfung S0..F3 kommt in allen Netzwerken exakt gleich vor --> die könntest Du "ausklammern", sprich: vor den Netzwerken auf einen Hilfsmerker legen (kann auch TEMP) und in den Netzwerken den Hilfsmerker verwenden.
Code:
O   "S0"
O   "F1"
O   "F2"
O   "F3"
=   #Abschaltung

- Statt S/R-Flipflop kannst Du die Logik auch zu einer Selbsthaltung umformen.
Code:
U(
O   "S2"
O   "M5"
)
UN  #Abschaltung
=   "M5"
U   "M5"
L   S5T#10S
SA  "t2"
NOP 0
NOP 0
NOP 0
U   "t2"
=   "Q2"

- Dein Netzwerk nw6 tut das gleiche wie das nw5 - ist das nur ein Tippfehler beim posten Deines Programms? Falls nicht, dann könntest Du im nw6 einfach schreiben
Code:
U   "Q2"
=   "Q1"

- Die Mehrfachverwendung der Timer "T1" und "t2" mußt Du beseitigen. Du mußt vermutlich in jedem Netzwerk einen anderen Timer einsetzen.

PS: Code postet man am besten in [CODE]-Tags (der #-Button im Beitragseditor).

Harald
 
Guten tag,

erst einmal vielen dank für die antworten. Ich habe das Programm etwas überarbeitet und es versucht mit euren Verbesserungsvorschlägen zu vereinfachen.
Leider klappt die simulation nicht wie erhofft, weil die Merker M3.1,M2.1,M1.1 ständig aktiv sind :confused:

Code:
nw1:
      O     "S0"
      O     "F1"
      O     "F2"
      O     "F3"
      =     "Bandaus"

Code:
nw2:
      U(    
      U     "S1"
      L     S5T#5S
      SE    "t3"
      U(    
      O     "S0"
      O     "Bandaus"
      )     
      R     "t3"
      NOP   0
      NOP   0
      U     "t3"
      )     
      S     "M3"
      U(    
      U(    
      U     "Q1"
      L     S5T#10S
      SA    "t6"
      NOP   0
      NOP   0
      NOP   0
      U     "t6"
      )     
      R     "Ausschalten band 3"
      U     "S0"
      S     "Ausschalten band 3"
      U     "Ausschalten band 3"
      )     
      R     "M3"
      U     "M3"
      =     "Q3"


Code:
nw3:
      U(    
      U     "Q3"
      L     S5T#5S
      SE    "t3"
      U(    
      O     "S0"
      O     "Bandaus"
      )     
      R     "t3"
      NOP   0
      NOP   0
      U     "t3"
      )     
      S     "M2"
      U(    
      U(    
      U     "Q1"
      L     S5T#10S
      SA    "t5"
      NOP   0
      NOP   0
      NOP   0
      U     "t5"
      )     
      S     "ausschalten band 2"
      U     "S0"
      R     "ausschalten band 2"
      U     "ausschalten band 2"
      )     
      R     "M2"
      U     "M2"
      =     "Q2"



Code:
nw4:
      U(    
      U     "Q2"
      L     S5T#5S
      SE    "t3"
      U(    
      O     "S0"
      O     "Bandaus"
      )     
      R     "t3"
      NOP   0
      NOP   0
      U     "t3"
      )     
      S     "M1"
      U(    
      U(    
      U     "S2"
      L     S5T#10S
      SE    "t4"
      NOP   0
      NOP   0
      NOP   0
      U     "t4"
      )     
      S     "Ausschalten band 1"
      U     "S0"
      R     "Ausschalten band 1"
      U     "Ausschalten band 1"
      )     
      R     "M1"
      U     "M1"
      =     "Q1"
 
S1 ist doch wahrscheinlich ein Taster und wird nicht dauerbetätigt, dadurch wechselt Deine Einschaltverzögerung nicht auf 1. Hier musst Du mit einem SR-Flipflop vor dem SE arbeiten. arbeiten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was mir noch auffällt, allerdings ist das nur ein Detail: Die Relais F1 - F3 sollen wahrscheinlich Sicherungen darstellen. In der Realität sind diese normalerweise geöffnet, sobald ein Fehler ansteht und geschlossen, wenn alles in Ordnung ist.
 
Hi,
nicht zu kompliziert denken.
Besser in kleinen Schritten arbeiten
Gruß
Move

Code:
O     E      0.0 // S0
O     E      0.3 // F1
O     E      0.4 // F2
O     E      0.5 // F3
=     #Alles_Aus

// Timer Starten
      U(    
      U(    
      U(    
      UN    E      0.1 // S1
      L     S5T#16S
      SA    T      1
      U     #Alles_Aus
      R     T      1
      NOP   0
      NOP   0
      U     T      1
      )     
      L     S5T#5S
      SE    T     10
      NOP   0
      NOP   0
      NOP   0
      U     T     10
      )     
      L     S5T#5S
      SE    T     11
      NOP   0
      NOP   0
      NOP   0
      U     T     11
      )     
      L     S5T#5S
      SE    T     12
      NOP   0
      NOP   0
      NOP   0
      NOP   0

// Timer Stoppen
      U(    
      U(    
      U(    
      UN    E      0.2 // S2
      L     S5T#31S
      SA    T      2
      U     #Alles_Aus
      R     T      2
      NOP   0
      NOP   0
      U     T      2
      )     
      L     S5T#10S
      SE    T     20
      NOP   0
      NOP   0
      NOP   0
      U     T     20
      )     
      L     S5T#10S
      SE    T     21
      NOP   0
      NOP   0
      NOP   0
      U     T     21
      )     
      L     S5T#10S
      SE    T     22
      NOP   0
      NOP   0
      NOP   0
      NOP   0

// Q3 ansteuern

      U     T     10
      S     A      0.0
      U(    
      O     T     22
      O     #Alles_Aus
      )     
      R     A      0.0
      NOP   0

//Q2 ansteuern

      U     T     11
      S     A      0.1
      U(    
      O     T     21
      O     #Alles_Aus
      )     
      R     A      0.1
      NOP   0

//Q1 ansteuern

      U     T     12
      S     A      0.1
      U(    
      O     T     20
      O     #Alles_Aus
      )     
      R     A      0.1
      NOP   0
BE
 
Zuletzt bearbeitet:
Hi,
nicht zu kompliziert denken.
Besser in kleinen Schritten arbeiten
Gruß
Move

Code:
O     E      0.0 // S0
O     E      0.3 // F1
O     E      0.4 // F2
O     E      0.5 // F3
=     #Alles_Aus

// Timer Starten
      U(    
      U(    
      U(    
      UN    E      0.1 // S1
      L     S5T#16S
      SA    T      1
      U     #Alles_Aus
      R     T      1
      NOP   0
      NOP   0
      U     T      1
      )     
      L     S5T#5S
      SE    T     10
      NOP   0
      NOP   0
      NOP   0
      U     T     10
      )     
      L     S5T#5S
      SE    T     11
      NOP   0
      NOP   0
      NOP   0
      U     T     11
      )     
      L     S5T#5S
      SE    T     12
      NOP   0
      NOP   0
      NOP   0
      NOP   0

// Timer Stoppen
      U(    
      U(    
      U(    
      UN    E      0.2 // S2
      L     S5T#31S
      SA    T      2
      U     #Alles_Aus
      R     T      2
      NOP   0
      NOP   0
      U     T      2
      )     
      L     S5T#10S
      SE    T     20
      NOP   0
      NOP   0
      NOP   0
      U     T     20
      )     
      L     S5T#10S
      SE    T     21
      NOP   0
      NOP   0
      NOP   0
      U     T     21
      )     
      L     S5T#10S
      SE    T     22
      NOP   0
      NOP   0
      NOP   0
      NOP   0

// Q3 ansteuern

      U     T     10
      S     A      0.0
      U(    
      O     T     22
      O     #Alles_Aus
      )     
      R     A      0.0
      NOP   0

//Q2 ansteuern

      U     T     11
      S     A      0.1
      U(    
      O     T     21
      O     #Alles_Aus
      )     
      R     A      0.1
      NOP   0

//Q1 ansteuern

      U     T     12
      S     A      0.1
      U(    
      O     T     20
      O     #Alles_Aus
      )     
      R     A      0.1
      NOP   0
BE
:shock:
Diese Lösung ist SEHR unelegant!

@TE:
Du warts schon auf dem richtigen Weg. Lass Dich jetzt nicht abbringen!
 
Die Methode mit dem übergeordneten Timer finde ich nicht sauber. Dadurch muss man immer zwei Zeiten ändern, wenn man eigentlich nur eine ändern möchte. Das geht auch eleganter.
 
Hi,

wenns mehr nicht ist.
Natürlich kann man das ganze noch modifizieren und hübscher machen.
Aber so würde es funktionieren und dient als Denkanstoss.

Gruß
Move
 
Zurück
Oben