-> Hier kostenlos registrieren
Hallo zusammen,
ich bin neu hier in diesem Forum und habe ein kleines Problem und komm einfach auf keinen grünen Zweig.
Vorab: Ich bin NICHT gerade ein Profiprogrammierer, hab aber gewisse Grundkenntnisse in Step7 (V5.5).
Ablauf:
Es handelt sich um ein Projekt, in dem ich Zeiten (Zählwerte eines Taktgebers) erfassen muss. Es gibt drei Varianten dieser Anlage, die jedoch immer das selbe machen. Die Anlage fährt von Position A (Sensor B0) nach Position B (Sensor B180) und wieder zurück nach Position A (Sensor B0). Dieser Ablauf entspricht einem Zyklus. Auf jeder Endlage soll die Anlage 2sec. verweilen. Bevor die Zeiten jedoch erfasst werden, muss die Anlage zuerst einmal 100 Zyklen warmlaufen. Von den 30 darauffolgenden Zyklen brauch ich dann die Zeit, wenn die Anlage von Pos.A (B0) nach Pos.B (B180) fährt.
Programmierung:
Ich hab diesen Ablauf in einem FB als Ablaufkette programmiert. Das Warmlaufen und die anschließende Zeitenermittlung hab ich mit zwei Rückwärtszählern realisiert: Der Warmlaufzähler (Z1) zählt von 100 rückwärts bis auf 0. Er setzt einen Merker (Warmlaufmerker), der als Startbedingung für das verfahren von Pos A nach Pos B nötig wird. Ist der Zähler dann auf 0 setzt der Flankenwechsel von Q den Zählwert des Messzählers (Z2). Der wiederum setzt einen zweiten Merker, der ebenfalls als Weiterfahrbedingung von Pos A nach Pos B nötig ist (Oderverknüpfung "Warmlaufmerker oder Messmerker"). Sind Beider Merker (Warmlaufmerker und Messmerker) auf 0, bleibt die Anlage stehen und die Messung ist beendet.
Alles eben Genannte sowie den Taktgenerator zur Zeitenermittlung hab ich in FUP programmiert. Bei der Zeitenermittlung hab ich mich in AWL versucht:
[U "M2" // Schrittmerker (Schritt2) Schwenken 0 auf 180
FP M 5.3 // Positive Flanke Schritt 2
S M 5.4 // Hilfsmerker für Positive Flanke
U Z 2 // Bedingung für Messzähler muss da sein
UN Z 1 // Warmlaufmerker darf nicht da sein ( könnte man wahrscheinlich auf weglassen)
R #B180 // Rücksetzen des Hilfsmerkers bei erreichen von B180
SPB M000 // Sprungbefehl in die Zykluszeitermittlung
//
M000: L #Schritt // Statische Variable #Schritt (Anfangswert 0)
L 1 // Zahl "1" laden
+I // Zur Variable #Schritt addieren
T #Schritt // neuen Wert in #Schritt transferieren
L #Schritt // Zyklusvergleich
L 1 // 1. Zyklus
==I
SPB M001 // Springe nach Zeitenzuweisung 1. Zyklus
L #Schritt // Zyklusvergleich
L 2 // 2. Zyklus
==I
SPB M002 // Springe nach Zeitenzuweisung 2. Zyklus
// …………..wird bis Zyklus 30 wiederholt ………………………………
M001: U( // Zeitenzuweisung 1. Zyklus mit Zähler Z5
U "M2" // Bewegung von Pos A nach Pos B setzt den Zähler
UN #B0 // ... sobald B0 nicht mehr da ist
S M 20.0
U "M3" // Sobald Verweilzeit (2sec) beginnt und B180 da ist
R M 20.0 // Rücksetzten des Zählers
U M 20.0
)
U T 10 // Bei jedem Takt von T10 vorwärtszählen
ZV Z 5
BLD 101
NOP 0
NOP 0
NOP 0
NOP 0
LC Z 5 // Lade den Zählwert von Z5
T #Zeitspeicher // Transferiere den Zählwert in Temporäre Variable #Zeitspeicher
DTR // Umwandeln des Zählers von BCD in INT
RND
T #Zeit1 // Transferiere INT-Zahl in Out-Variable #Zeit 1
NOP 0
BEA
// …………wird ebenfalls bis Zyklus 30 wiederholt einzige Änderung anstatt #Zeit 1 => #Zeit2…]
Problem:
Die Werte kommen nicht als INT im DB an und laufen zudem ständig. Ich hab mir vorgestellt, dass wenn ich den DB im Beobachten-Modus anschaue, ich Schritt für Schritt die Werte reingeschrieben bekomme.
Es stehen bei jeder Zeit die gleichen Werte (Zeit 1 bis 30)
So, ich hoffe mein Problem langweilt euch nicht zu sehr, aber ich hab mir gedacht bei euch müsste mir jemand weiterhelfen können.
Danke mal im Voraus für eure Antworten.
ich bin neu hier in diesem Forum und habe ein kleines Problem und komm einfach auf keinen grünen Zweig.
Vorab: Ich bin NICHT gerade ein Profiprogrammierer, hab aber gewisse Grundkenntnisse in Step7 (V5.5).
Ablauf:
Es handelt sich um ein Projekt, in dem ich Zeiten (Zählwerte eines Taktgebers) erfassen muss. Es gibt drei Varianten dieser Anlage, die jedoch immer das selbe machen. Die Anlage fährt von Position A (Sensor B0) nach Position B (Sensor B180) und wieder zurück nach Position A (Sensor B0). Dieser Ablauf entspricht einem Zyklus. Auf jeder Endlage soll die Anlage 2sec. verweilen. Bevor die Zeiten jedoch erfasst werden, muss die Anlage zuerst einmal 100 Zyklen warmlaufen. Von den 30 darauffolgenden Zyklen brauch ich dann die Zeit, wenn die Anlage von Pos.A (B0) nach Pos.B (B180) fährt.
Programmierung:
Ich hab diesen Ablauf in einem FB als Ablaufkette programmiert. Das Warmlaufen und die anschließende Zeitenermittlung hab ich mit zwei Rückwärtszählern realisiert: Der Warmlaufzähler (Z1) zählt von 100 rückwärts bis auf 0. Er setzt einen Merker (Warmlaufmerker), der als Startbedingung für das verfahren von Pos A nach Pos B nötig wird. Ist der Zähler dann auf 0 setzt der Flankenwechsel von Q den Zählwert des Messzählers (Z2). Der wiederum setzt einen zweiten Merker, der ebenfalls als Weiterfahrbedingung von Pos A nach Pos B nötig ist (Oderverknüpfung "Warmlaufmerker oder Messmerker"). Sind Beider Merker (Warmlaufmerker und Messmerker) auf 0, bleibt die Anlage stehen und die Messung ist beendet.
Alles eben Genannte sowie den Taktgenerator zur Zeitenermittlung hab ich in FUP programmiert. Bei der Zeitenermittlung hab ich mich in AWL versucht:
[U "M2" // Schrittmerker (Schritt2) Schwenken 0 auf 180
FP M 5.3 // Positive Flanke Schritt 2
S M 5.4 // Hilfsmerker für Positive Flanke
U Z 2 // Bedingung für Messzähler muss da sein
UN Z 1 // Warmlaufmerker darf nicht da sein ( könnte man wahrscheinlich auf weglassen)
R #B180 // Rücksetzen des Hilfsmerkers bei erreichen von B180
SPB M000 // Sprungbefehl in die Zykluszeitermittlung
//
M000: L #Schritt // Statische Variable #Schritt (Anfangswert 0)
L 1 // Zahl "1" laden
+I // Zur Variable #Schritt addieren
T #Schritt // neuen Wert in #Schritt transferieren
L #Schritt // Zyklusvergleich
L 1 // 1. Zyklus
==I
SPB M001 // Springe nach Zeitenzuweisung 1. Zyklus
L #Schritt // Zyklusvergleich
L 2 // 2. Zyklus
==I
SPB M002 // Springe nach Zeitenzuweisung 2. Zyklus
// …………..wird bis Zyklus 30 wiederholt ………………………………
M001: U( // Zeitenzuweisung 1. Zyklus mit Zähler Z5
U "M2" // Bewegung von Pos A nach Pos B setzt den Zähler
UN #B0 // ... sobald B0 nicht mehr da ist
S M 20.0
U "M3" // Sobald Verweilzeit (2sec) beginnt und B180 da ist
R M 20.0 // Rücksetzten des Zählers
U M 20.0
)
U T 10 // Bei jedem Takt von T10 vorwärtszählen
ZV Z 5
BLD 101
NOP 0
NOP 0
NOP 0
NOP 0
LC Z 5 // Lade den Zählwert von Z5
T #Zeitspeicher // Transferiere den Zählwert in Temporäre Variable #Zeitspeicher
DTR // Umwandeln des Zählers von BCD in INT
RND
T #Zeit1 // Transferiere INT-Zahl in Out-Variable #Zeit 1
NOP 0
BEA
// …………wird ebenfalls bis Zyklus 30 wiederholt einzige Änderung anstatt #Zeit 1 => #Zeit2…]
Problem:
Die Werte kommen nicht als INT im DB an und laufen zudem ständig. Ich hab mir vorgestellt, dass wenn ich den DB im Beobachten-Modus anschaue, ich Schritt für Schritt die Werte reingeschrieben bekomme.
Es stehen bei jeder Zeit die gleichen Werte (Zeit 1 bis 30)
So, ich hoffe mein Problem langweilt euch nicht zu sehr, aber ich hab mir gedacht bei euch müsste mir jemand weiterhelfen können.
Danke mal im Voraus für eure Antworten.