PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittkette mit Sprung (Abzweig)



neon
27.02.2007, 11:23
Hallo!
ich muss in eine Schrittkette einen Alternativabzweig programmieren, nachdem die Schrittkette 8 mal durchlaufen wurde.
Nach den 8 durchläufen soll die Maschine zu 1 fahren und wieder von neuem beginnen (ohne Unterbrechung).

Hier ist mein Programm, hat jemand eine Idee wo der Fehler liegen kann?

Der MW_Startposition wird im letzten Schritt um 1 hochgezählt, und soll bei 9 (also nach dem 8 durchlauf auf 0 gesetzt werden):

Der MW_Position wird in jeder Station der Maschine um 1 hochgezählt, damit das Programm weiß in welcher Station sich die Maschine befindet.

NW1: Schritt0 (Startschritt)
U(
U #Position_unten
U #Position_Badmitte
UN #Position_oben
UN #Vorfahren
UN #Rueckfahren
U #ff320
O #Reset
O #Startpos_erreicht
)
S #ff0
U #ff1
R #ff0
U #ff0
= #SR_0


NW2: Sprung3
L #MW_Startposition
L 8
==I
SPB CAS3

NW3: Sprung1
L #MW_Startposition
L 8
>I
SPB CAS1

NW4: Schritt1
U(
O(
L #MW_Position
L #MW_Startposition
<I
)
O #M_Startposition
)
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Vorfahren
UN #Rueckfahren
U #ff0
U #Programm_Automatik_ein
U #Programm_Autom_ein_stat
S #ff1
U(
O #ff5
O #Reset
)
R #ff1
U #ff1
= #SR_1

NW5: Sprung2
L #MW_Startposition
L 8
<=I
SPB CAS2

NW6: Sprungziel1
CAS1: U #ff0
R #ff0

NW7: Zurückfahren auf Position 1 wenn MW2>=8
U(
L #MW_Startposition
L 8
>=I
)
U #Programm_Automatik_ein
S #ff_rueckfahren
U(
O #Startpos_erreicht
O #Reset
)
R #ff_rueckfahren
U #ff_rueckfahren
= #SR_2

NW8: Fahren bis MW_Startposition=2
L #MW_Startposition
L 2
==I
= #Startpos_erreicht

NW9: MW0-MW2-MW4-MW6 rücksetzen wenn Startposition erreicht ist
U #Startpos_erreicht
= L 0.0
U L 0.0
SPBNB _001
L 0
T "Absolutposition"
_001: NOP 0
U L 0.0
SPBNB _002
L 0
T "Startposition"
_002: NOP 0
U L 0.0
SPBNB _003
L 0
T "Wert_FU_Schnellfahrt"
_003: NOP 0
U L 0.0
SPBNB _004
L 0
T MW 6
_004: NOP 0

NW10: Sprungziel3
CAS3: U #ff0
R #ff0
S #ff_Sprung3

NW11: Sprungziel2 /Schritt5
CAS2: U(
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
U #ff1
O
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
U #Startpos_erreicht
O
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
U #ff_Sprung3
)
S #ff5
U(
O #ff10
O #Reset
)
R #ff5
U #ff5
= #SR_5
R #ff_rueckfahren

NW12: Schritt 10
UN #Position_unten
U #Position_Badmitte
U #Position_oben
UN #Vorfahren
UN #Rueckfahren
U #ff5
S #ff10
U(
O #ff15
O #Reset
)
R #ff10
U #ff10
= #SR_10
R #ff_Sprung3

:confused:

marlob
27.02.2007, 12:03
Hallo,

also was funktioniert denn und was funktioniert nicht????
Wo inkrementierst du deine MWs (MW_Startposition und MW_Position).
Auf jeden Fall nicht in dem Code den du gepostet hast.
:confused::confused::confused:

marlob

neon
27.02.2007, 13:05
Hallo,

Es funktioniert alles, bis zum 8. durchlauf -dann ist 2 Schritte aktiv und ich weiß nicht wo der Fehler ist.
Das Problem ist, dass ich nach dem 8. Durchlauf die Schrittkette verlassen muss und die Maschine zur Startposition 1 fahren muss, dann geht alles wieder von vorne los.
Aber wie kann ich die Schrittkette für diesen Rückfahrschritt aussetzen, und bei 1 wieder setzen?
Ich habe versucht diesen Rückfahrschritt durch die Sprünge zu realisieren, indem ich vergleiche welcher Wert im MW für den Startschritt steht.


Das Hochzählen der Position funktioniert mit ADD_I/SUB_I, das durch Näherungsschalter gezählt wird.
Und die Startposition wird mit dem letzten Schritt hochgezählt, und muss nach dem Rückfahrschritt wieder auf 0 gesetzt werden.

Ich hoffe jetzt wird mein Problem etwas klarer. :???:

kiestumpe
27.02.2007, 13:20
Hallo neon,

mache doch am Ende ne Verzweigung und setze den anderen Schritt verodert auf den 0-ten Schritt.

hth

neon
27.02.2007, 13:48
Hallo,
du meinst am Ende des Schritt 0 eine Abfrage, ob der MW_Starposition 8 ist und dann den Schritt für das Rückfahren aktivieren?

Habe ich das so richtig verstanden?

//Das würde aber so nicht funktionieren, da ich den Schritt1 überspringen muss wenn der 8. Ablauf fertig ist.

kiestumpe
27.02.2007, 13:57
also ehrlich gesagtwerd ich aus deiner Beschreibung nicht schlau.:confused:

Mach dir nen Ablaufdiagramm und füge notfalls noch Hilfsschritte ein - dann funktionierts...

hth

neon
13.03.2007, 18:14
Hallo!
Mich würde jetzt doch interressieren, wie ich eine Schrittkette mit dem Sprungverteiler realisieren könnte.
Wäre super, wenn mir das jemand kurz erklären könnte.

Ich habe in meinem SPS-Buch schon nachgeschaut, aber das Thema wird recht kurz abgehandelt.


Beispiel:

NW1: Schritt0 (Startschritt)
U(
U #Position_unten
U #Position_Badmitte
UN #Position_oben
UN #Vorfahren
UN #Rueckfahren
U #ff320
O #Reset
O #Startpos_erreicht
)
S #ff0
U #ff1
R #ff0
U #ff0
= #SR_0


NW11: Schritt5

U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
U #ff0
O
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
U #Startpos_erreicht
O
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
)
S #ff5
U(
O #ff10
O #Reset
)
R #ff5
U #ff5
= #SR_5



Wie müsste ich das mit SPL machen?
Ich habe diesen Lösungsansatz:

SPL Schritt0
U(
U #Position_unten
U #Position_Badmitte
UN #Position_oben ..............................<== Sprungbedingungen der Schritte
UN #Vorfahren
UN #Rueckfahren
O #Reset
O #Startpos_erreicht
)
S #ff0
U #ff1
R #ff0
U #ff0
= #SR_0


SPL Schritt5
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
U #ff0
O
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren
U #Startpos_erreicht
O
U #Position_Badmitte
UN #Position_oben
U #Position_unten
UN #Rueckfahren


SPL SchrittXY

SPA Schritt0

ON SPA Schritt 0.................................. <== Abarbeitung der Schritte
BEA ..........................................................wenn die Sprungbedingung erfüllt ist

SPA Schritt5
U SR_0
= #SR_5

ON SPA Schritt 5
O #Reset SPB SPA Schritt 0 .................................<== Springe zum Schritt0 wenn Reset
BEA ........................................................................Gedrückt wurde.

Ich müsste ja einen Schritt nach dem anderen abarbeitet.... :-?

Ralle
13.03.2007, 21:35
L "DATA_STATION_".STEPNUMBER //das ist ein Byte
SPL ENDE
SPA LEER //Schritt 00 - Leerschritt
SPA STRT //Schritt 01 - Start, Teilekontrolle
SPA NHNL //Schritt 02 - Niederhalter abwärts
SPA BUNL //Schritt 03 - Bürstvorschub vorwärts
SPA LER1 //Schritt 04 - Leerschritt
SPA BUZE //Schritt 05 - Ablauf Bürstzeit
SPA OKAY //Schritt 06 - Abfrage Bürstergebnis
SPA BUHL //Schritt 07 - Bürstvorschub rückwärts
SPA NHHL //Schritt 08 - Niederhalter aufwärts
SPA LER2 //Schritt 09 - Leerschritt
SPA LETZ //Schritt 10 - letzter Schritt
ENDE: SPA LEER


// Schritt 01 - Start, Teilekontrolle
STRT: SET

//++++ Sprung zum Ende wenn kein Teil in Pos. ++++
U "DATA_STATION_".Stat_Auto
U(
ON "DATA_PLANT_INFO".INFO_RT1_Nest_03.Teil_2_vorhanden
ON "DATA_GLOBAL_TECHNOLOGIE".Typ_Prod.Aktivieren.ST_10
)
S "DATA_STATION_".K_LAST_STEP
SPB LEER

//++++ wenn Teil v.h.-->nächster Schritt ++++
U "DATA_PLANT_INFO".INFO_RT1_Nest_03.Teil_2_vorhanden
U "DATA_GLOBAL_TECHNOLOGIE".Typ_Prod.Aktivieren.ST_10
O
U "DATA_STATION_".Step_angewaehlt
S "DATA_STATION_".SK_NEXT_STEP_AUTO //damit wird dann das Schrittbyte um 1 erhöht, beim nächsten Zyklus kommt man in den nächsten Schritt
SPA LEER

// Schritt 02 - Niederhalter abwärts
NHNL: SET
S "DATA_STATION_".MSG_OUT_01_SET

UN "E s9 Niederhalter GS"
S "DATA_STATION_".SK_NEXT_STEP_AUTO
SPA LEER

// Schritt 03 - Bürstvorschub vorwärts
BUNL: SET
S "DATA_STATION_".MSG_OUT_01_SET
S "DATA_STATION_".MSG_OUT_02_SET
S "DATA_STATION_".MSG_OUT_05_SET

UN "E s9 Niederhalter GS"
UN "E s9 Vorschubzyl. GS"
U "E s9 Klappe AS"
UN "E s9 Klappe GS"
S "DATA_STATION_".SK_FORCE_STEP
SPA LEER

// Schritt 04 - leer
LER1: SET

S "DATA_STATION_".SK_FORCE_STEP
SPA LEER

// Schritt 05 - Ablauf Bürstzeit
BUZE: SET
L "DATA_GLOBAL_TECHNOLOGIE".Produktionsdaten[5] //vorgegebene Bürstzeit vom TP
L 10
/I
T "DATA_STATION_".SK_Waiting_Time

S "DATA_STATION_".SK_FORCE_STEP
SPA LEER

// Schritt 06 - Leerschritt
OKAY: SET

S "DATA_STATION_".SK_FORCE_STEP
SPA LEER


// Schritt 07 - Bürstvorschub rückwärts
BUHL: SET
S "DATA_STATION_".MSG_OUT_02_RES
S "DATA_STATION_".MSG_OUT_05_RES

U "E s9 Vorschubzyl. GS"
UN "E s9 Vorschubzyl. AS"
U "E s9 Klappe GS"
UN "E s9 Klappe AS"
S "DATA_STATION_".SK_NEXT_STEP_AUTO
SPA LEER

// Schritt 08 - Niederhalter aufwärts
NHHL: SET
S "DATA_STATION_".MSG_OUT_01_RES

U "E s9 Niederhalter GS"
UN "E s9 Niederhalter AS"
S "DATA_STATION_".SK_NEXT_STEP_AUTO
SPA LEER

// Schritt 09 - Leerschritt
LER2: SET

S "DATA_PLANT_INFO".INFO_RT1_Nest_03.Teil_2_Mantel_A
S "DATA_STATION_".SK_FORCE_STEP
SPA LEER

// Schritt 10 - letzter Schritt
LETZ: SET

S "DATA_STATION_".K_LAST_STEP //Hiermit wird die Schrittkette abgeschlossen, ein "Endebit" gesetzt!

// Ende
LEER: NOP 0


Hier mal ein Beispiel, wie es in meinen Programmen vorkommt. Kannst auch mal nach "Schrittkette" oder "Sprungverteiler" hier im Forum suchen, da gibts glaube ich auch schon Erläuterungen zu diesem Thema.

neon
15.03.2007, 20:05
Danke, sowas habe ich gesucht.
Wie könnte ich auf diese Art eine Verzweigung einbauen?

z.B.:
Wenn E0.0=1 dann führe Schritt1 aus, und dann weiter bei Schritt5

Wenn E0.1=1 dann führe Schritt2 aus, und dann weiter bei Schritt5

Und wenn ich Reset drücke springe zu Schritt0 und setzte alle anderen Schritte zurück.

Werden die SPL Anweisungen (Schritte 0-10) eigentlich automatisch nacheinander abgearbeitet?

:confused:

Ralle
15.03.2007, 21:32
Bei SPL wird solange in die entsprechende Verzweigung gesprungen, bis eine neue Nummer in das Byte eingetragen wird. Ruf mal die Hilfe dazu in Step7 auf, ist ganz gut erläutert. Für die Weiterschaltung mußt du selbst sorgen.

Hier mal ein anderes Beispiel, mit Stepweiterschaltung:


NW1:

L #Stepcounter
SPL ALE2
SPA END
SPA T3S0 //Tab 3 Seg 0
SPA T5S0 //Tab 5 Seg 0
ALE2: SPA END

NW2:

T3S0: NOP 0 //;

L 3
T #Send.Tabellennummer
L 0
T #Send.Segmentnummer

//;

U(
L #Recive.Tabellennummer
L #Send.Tabellennummer
==I
)
U(
L #Recive.Segmentnummer
L #Send.Segmentnummer
==I
)
SPBN BUSY

CALL "BLKMOV"
SRCBLK :=P#DIX 50.0 BYTE 13
RET_VAL:=#Ret_Val_Temp
DSTBLK :=#Tabelle_3.Segment_0 //P#DIX 148.0 BYTE 13 //Tabelle 3 Segment 0

L #Ret_Val_Temp
L 0
<>I
SPB ERR

SPA NSTP

NW3:


T5S0: NOP 0 //;

L 5
T #Send.Tabellennummer
L 0
T #Send.Segmentnummer

//;

U(
L #Recive.Tabellennummer
L #Send.Tabellennummer
==I
)
U(
L #Recive.Segmentnummer
L #Send.Segmentnummer
==I
)
SPBN BUSY

CALL "BLKMOV"
SRCBLK :=P#DIX 50.0 BYTE 13
RET_VAL:=#Ret_Val_Temp
DSTBLK :=#Tabelle_5.Segment_0 //P#DIX 190.0 BYTE 13 //Tabelle 5 Segment 0

L #Ret_Val_Temp
L 0
<>I
SPB ERR

SPA NSTP

NW4:

END: NOP 0
SET
R #fn_Busy // set function ready
L 0
T #fn_Error // set no error
L 1
T #Stepcounter
SPA PGEM
//;
ERR: L 0 // reset statemachine
T #Stepcounter
SET
R #fn_Busy
R #Anlauf_Stat
SPA PGEM
//;
NSTP: NOP 0
L #Stepcounter
INC 1 // go to the next Step
T #Stepcounter
SPA PGEM
BUSY: L 0 // set no error
T #fn_Error
SET
S #fn_Busy // set function busy
//;
PGEM: NOP 0

neon
28.05.2007, 17:18
Hallo,
ich habe nochmal versucht eine Schrittkette mit der Sprungleiste zu erstellen.

Aber nachdem ich Start gedrückt habe, schaltet die Schrittkette nicht in den nächsten Schritt weiter. Ich habe schon einige Beispiele im Forum durchgelesen, aber finde den Fehler nicht.

Die Schrittkette soll so funktionieren:
s0 ist die Grundstellung, und beim betätigen vom Start-Taster wird MB50 um 1 hochgezählt und schaltet somit zum Schritt1 (s1). Im Schritt1 werden die Aktionen ausgeführt, und zählt MB50 um 1 hoch wenn die Transitionen erfüllt sind....


NW1:
L MB 50 // Nummer des Sprungziels
SPL ende // Sprungziel, wenn > letzter
SPA s0 // Sprungziel, wenn = 0
SPA s1 // Sprungziel, wenn = 1
SPA s2 // Sprungziel, wenn = 2
SPA s3 // Sprungziel, wenn = 3
SPA s4 // Sprungziel, wenn = 4
SPA s5 // Sprungziel, wenn = 5

ende: SET
L 0
T MB 50
BEA

NW2:
s0: U E 0.0 //Starttaster
U E 1.7 //Endschalter Grundstellung
SPA next
BEA

NW3:
s1: = A 4.1 //Aktionen

U E 1.0 //Transitionen zum nächsten Schritt
U E 1.1
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW4:
s2: = A 4.2 //Aktionen

U E 1.1 //Transitionen zum nächsten Schritt
U E 1.2
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW5:
s3: = A 4.3 //Aktionen

U E 1.2 //Transitionen zum nächsten Schritt
U E 1.3
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA

NW6:
s4: = A 4.4 //Aktionen

U E 1.3 //Transitionen zum nächsten Schritt
U E 1.4
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW7:
s5: = A 4.5 //Aktionen

U E 1.4 //Transitionen zum nächsten Schritt
U E 1.5
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW8:
next: L MB 50
+ 1
T MB 50

NW9:
NOP 0

:confused:

neon

Larry Laffer
28.05.2007, 17:52
Man kann es aber auch noch so machen :


u -Schritt_1
u -E1.0
s -Schritt_2
R -Schritt_1

u -Schritt_1
u -E1.1
s -Schritt_3
R -Schritt_1

... usw.

Ralle
28.05.2007, 19:46
Hallo,
ich habe nochmal versucht eine Schrittkette mit der Sprungleiste zu erstellen.

Aber nachdem ich Start gedrückt habe, schaltet die Schrittkette nicht in den nächsten Schritt weiter. Ich habe schon einige Beispiele im Forum durchgelesen, aber finde den Fehler nicht.

Die Schrittkette soll so funktionieren:
s0 ist die Grundstellung, und beim betätigen vom Start-Taster wird MB50 um 1 hochgezählt und schaltet somit zum Schritt1 (s1). Im Schritt1 werden die Aktionen ausgeführt, und zählt MB50 um 1 hoch wenn die Transitionen erfüllt sind....


NW1:
L MB 50 // Nummer des Sprungziels
SPL ende // Sprungziel, wenn > letzter
SPA s0 // Sprungziel, wenn = 0
SPA s1 // Sprungziel, wenn = 1
SPA s2 // Sprungziel, wenn = 2
SPA s3 // Sprungziel, wenn = 3
SPA s4 // Sprungziel, wenn = 4
SPA s5 // Sprungziel, wenn = 5

ende: SET
L 0
T MB 50
BEA

NW2:
s0: U E 0.0 //Starttaster
U E 1.7 //Endschalter Grundstellung
SPA next
BEA

NW3:
s1: = A 4.1 //Aktionen

U E 1.0 //Transitionen zum nächsten Schritt
U E 1.1
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW4:
s2: = A 4.2 //Aktionen

U E 1.1 //Transitionen zum nächsten Schritt
U E 1.2
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW5:
s3: = A 4.3 //Aktionen

U E 1.2 //Transitionen zum nächsten Schritt
U E 1.3
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA

NW6:
s4: = A 4.4 //Aktionen

U E 1.3 //Transitionen zum nächsten Schritt
U E 1.4
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW7:
s5: = A 4.5 //Aktionen

U E 1.4 //Transitionen zum nächsten Schritt
U E 1.5
SPA next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW8:
next: L MB 50
+ 1
T MB 50

NW9:
NOP 0

:confused:

neon

SPA ?
Du meinst sicher SPB!
Außerdem wär sicher nützlich ein Bit "Schrittkette läuft" und "Schrittkette fertig" zu haben.

Unregistrierter gast
28.05.2007, 19:58
SPA ?
Du meinst sicher SPB!


Ein gern gemachter Fehler.

neon
28.05.2007, 20:13
Danke für den Tip!

Die Programmvorlage mit SPA habe ich aus diesem Beitrag:
http://www.sps-forum.de/showthread.php?t=4324&highlight=sprungleiste

Der SPA Aufruf habe ich so verstanden, dass der Sprung in jedem Fall stattfindet wenn die Transitionen erfüllt sind (oder liegt genau hier mein Denkfehler?).

Ist sonst alles richtig, wenn ich das in SPB ändere? :???:

Ein Bit für "Schrittkette läuft" und "Schrittkette fertig" wäre schon nützlich, ein "Reset" fehlt auch noch.

Mir geht es aber jetzt um die grundsätzliche Funktionsweise der SPL, da ich noch nie damit gearbeitet habe. :) :)

Unregistrierter gast
28.05.2007, 20:32
Der SPA Aufruf habe ich so verstanden, dass der Sprung in jedem Fall stattfindet wenn die Transitionen erfüllt sind (oder liegt genau hier mein Denkfehler?).



SPA = Springe ABSOLUT (=immer)

SPB = Springe BEDINGT (wenn VKE =1)

Ralle
28.05.2007, 20:36
Danke für den Tip!

Die Programmvorlage mit SPA habe ich aus diesem Beitrag:
http://www.sps-forum.de/showthread.php?t=4324&highlight=sprungleiste

Der SPA Aufruf habe ich so verstanden, dass der Sprung in jedem Fall stattfindet wenn die Transitionen erfüllt sind (oder liegt genau hier mein Denkfehler?).

Ist sonst alles richtig, wenn ich das in SPB ändere? :???:

Ein Bit für "Schrittkette läuft" und "Schrittkette fertig" wäre schon nützlich, ein "Reset" fehlt auch noch.

Mir geht es aber jetzt um die grundsätzliche Funktionsweise der SPL, da ich noch nie damit gearbeitet habe. :) :)

Hast Recht, das ist hier auch schon falsch:
http://www.sps-forum.de/showpost.php?p=24568&postcount=2

Sollte man mal editieren!
PS: So erledigt, mal für die Nachwelt richtiggestellt!

neon
31.05.2007, 12:11
Hallo,
ich habe das SPA durch SPB ersetzt, die Schrittweiterschaltung funktioniert jetzt einwandfrei.
Jetzt habe ich nur das Problem, das die Ausgänge nicht aktiviert werden.

Die Transitionen zum nächsten Schritt funktionieren, nur die Ausgänge kommen nicht. :confused: :confused:

Muss ich da noch was beachten?



neon

neon
31.05.2007, 18:30
Ich habe das Problem jetzt so gelöst:

NW1:
L MB 50 // Nummer des Sprungziels
SPL ende // Sprungziel, wenn > letzter
SPA s0 // Sprungziel, wenn = 0
SPA s1 // Sprungziel, wenn = 1
SPA s2 // Sprungziel, wenn = 2
SPA s3 // Sprungziel, wenn = 3
SPA s4 // Sprungziel, wenn = 4
SPA s5 // Sprungziel, wenn = 5
ende: SET
L 0
T MB 50
BEA


NW2:
s0: U E 0.0 //Starttaster
U E 1.7 //Endschalter Grundstellung

SPB next
BEA

NW3:
s1: SET //Aktionen
= #SR_0

U E 1.0 //Transitionen zum nächsten Schritt
U E 1.1
SPB next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW4:
s2: SET //Aktionen
= #SR_1
CLR
= #SR_0

U E 1.1 //Transitionen zum nächsten Schritt
U E 1.2
SPB next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


....aber ich finde diese Lösung etwas umständlich, da ich in jedem Schritt den vorhergehenden Ausgang rücksetzen muss.
Gibt es keine Möglichkeit den Ausgang nur solange zu setzen, bis der nächste Schritt aktiviert ist?

Wenn ich das SET weg lasse, wird der Ausgang nicht gesetzt. :shock:

Kai
31.05.2007, 20:27
Hallo neon,

hast Du Dir mal überlegt, eine ganz normale Schrittkette mit einer Alternativverzweigung zu programmieren? Eine solche Schrittkette kann man ohne Probleme auch in FUP programmieren und sie ist dann schön übersichtlich. :)

Wenn Du willst, dann könnte ich zum Wochenende mal ein kurzes Beispiel hier ins Forum stellen.

Ich selbst bin ja kein besonderer Freund von Schrittketten mit Sprungleisten, aber das ist reine Geschmackssache. :rolleyes:

Gruß Kai

Ralle
31.05.2007, 23:06
Ich habe das Problem jetzt so gelöst:

NW1:
L MB 50 // Nummer des Sprungziels
SPL ende // Sprungziel, wenn > letzter
SPA s0 // Sprungziel, wenn = 0
SPA s1 // Sprungziel, wenn = 1
SPA s2 // Sprungziel, wenn = 2
SPA s3 // Sprungziel, wenn = 3
SPA s4 // Sprungziel, wenn = 4
SPA s5 // Sprungziel, wenn = 5
ende: SET
L 0
T MB 50
BEA


NW2:
s0: U E 0.0 //Starttaster
U E 1.7 //Endschalter Grundstellung

SPB next
BEA

NW3:
s1: SET //Aktionen
= #SR_0

U E 1.0 //Transitionen zum nächsten Schritt
U E 1.1
SPB next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


NW4:
s2: SET //Aktionen
= #SR_1
CLR
= #SR_0

U E 1.1 //Transitionen zum nächsten Schritt
U E 1.2
SPB next //Sprung zum Bausteinende, und Schrittnummer um 1 erhöhen
BEA


....aber ich finde diese Lösung etwas umständlich, da ich in jedem Schritt den vorhergehenden Ausgang rücksetzen muss.
Gibt es keine Möglichkeit den Ausgang nur solange zu setzen, bis der nächste Schritt aktiviert ist?

Wenn ich das SET weg lasse, wird der Ausgang nicht gesetzt. :shock:

Na ja, SPL und SPA beeinflussen das VKE nicht, insofern ist ein

= A1.4

wohl abhängig vom VKE vor der SPL, ein SET also sogar notwendig? Man kann das Set auch vor der SPL schreiben, das sollte reichen.

Ich hab das Set immer nach der Sprungmarke stehen (M000: SET), daher ist mir das noch nie so aufgefallen, werde es mal testen.

So wie deine SK geschrieben ist, wo würden denn die Ausgänge zurückgesetzt werden? Wenn der nächste Schritt aktiv wird, wird ja

= A1.4

nicht mehr angesprungen, also auch nicht bearbeitet, dein Ausgang 1.4 würde auf 1 bleiben.

Ich nutze ein DBD aus meinem Stations-DB. Das setze ich vor der SPL immer auf Null,

L 0
T DB143.DBD120

Die einzelnen Bits setze ich in den entsprechenden Schritten, hinter der SPS (dann natürlich kein BEA in den Schritten verwenden, sondern SPA ENDE, mit Marke ENDE am Schluß der SK) kommt:

U DB143.DBX120.0
= A 1.4

So ist der Ausgang bei allen Schritten aktiv, in denen steht

S DB143.DBX120.0

neon
01.06.2007, 11:13
@Ralle:
Ich habe mir das mit den Schritten so gedacht:

NW2:
s0: = #SR_0

//Transitionen zu s1


NW3:
s1: = #SR_1

//Transitionen zu s2

die Ausgänge sind nur solange gesetzt, bis der nächste Schritt kommt.
So wie ich es jetzt mit SET und CLR realisiert habe muss ich immer, wie bei der Merkerbasierenden Schrittkette den vorhergehenden Schrittmerker rücksetzen.
Wenn ich eine Schrittkette erweitere, wäre das etwas Zeitaufwändig. :eek:

Allerdings kenne ich mich mit AWL nicht gut aus, deswegen meine Frage ob es eine Möglichkeit gibt die Ausgänge solange zu setzen bis der nächste Schritt aktiv ist (= A 4.1 funktioniert nicht).

Könntest du evtl. ein S7-Projekt mit einer SPL-Schrittkette in den Download stellen?
Dann könnte ich mir die Funktionsweise mit Reset, Startbit, Schrittkettenbit usw. anschauen. :s17:

Ralle
01.06.2007, 11:34
@Ralle:
Ich habe mir das mit den Schritten so gedacht:

NW2:
s0: = #SR_0

//Transitionen zu s1


NW3:
s1: = #SR_1

//Transitionen zu s2

die Ausgänge sind nur solange gesetzt, bis der nächste Schritt kommt.
So wie ich es jetzt mit SET und CLR realisiert habe muss ich immer, wie bei der Merkerbasierenden Schrittkette den vorhergehenden Schrittmerker rücksetzen.
Wenn ich eine Schrittkette erweitere, wäre das etwas Zeitaufwändig. :eek:

Allerdings kenne ich mich mit AWL nicht gut aus, deswegen meine Frage ob es eine Möglichkeit gibt die Ausgänge solange zu setzen bis der nächste Schritt aktiv ist (= A 4.1 funktioniert nicht).

Könntest du evtl. ein S7-Projekt mit einer SPL-Schrittkette in den Download stellen?
Dann könnte ich mir die Funktionsweise mit Reset, Startbit, Schrittkettenbit usw. anschauen. :s17:


Das hab ich doch oben geschrieben:
http://www.sps-forum.de/showpost.php?p=84674&postcount=21

vor der SPL

L 0
T MD10 (z.Bsp.)

in den Schritten

in Schritt 1
S M10.0


...

nach den Schritten

U M 10.0
= A1.4



Allerdings, da wo im Moment BEA steht schreibst du SPA ENDE

und nach allen Schritten steht zuerst

ENDE: NOP 0

Dann kannst du ab hier deine Ausgänge ala

U M10.0
= A 1.4

bringen.

Meine Schrittkettenbausteine bringen dir da nicht soviel, die sind wesentlich umfangreicher und ich habe für die Schrittweiterschaltung einen eigenen Baustein, der noch so einiges mehr macht. Eh du dich da reingearbeitest hättest...