Flankenerkennung ohne Eingangsabfrage

Schnipsel

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle!

Ich bin neu hier und auch in der Welt der Simatic-SPS-Programmierung und stehe vor einem Problem...

Ich will eine Wegstrecke messen mittels Drehencoder. Ich habe hierfür einen schnellen Zähler genommen (HC0, zählt A/B-Impulse und wird nach einer gewissen Wegstrecke (Lochscheibe und Näherungssensor) zurückgesetzt).

Das ganze klappt soweit hervorragend.

Nun war meine Idee die folgende: Ich nehme einen internen Taktgeber, hier sm0.5 und werte die steigende bzw. fallende Flanke aus zum generieren einer Zykluszeit. Bei jeder Flanke nehme ich den aktuellen Zählwert und berechne hier meine Strecke. Ich scheitere nun daaran, daß weder die steigende, noch die fallende Flanke erkannt oder ausgewertet wird. Wenn ich den Motor laufen lasse und mit der Microwin drauf schaue, dann sehe ich, daß gefühlt alle Schaltjahre mal ein Zählwert gelesen wird.
Ich habe nun versucht, mittels Merkern (z.B. = v100.x, S v100.x, 1) oder mittels Oder-Verknüpfung eines unbenutzten Eingangs eine Flanke auszuwerten, aber nein, nichts klappt. Ich bin nun etwas ratlos.
Das hier ist der bisher "letzte" Versuch mittels Merkern und eines unbenutzten Eingangs. Sehr unelegant, aber war meine letzte Hoffnung.

Code:
S      V0.1, 1
LD     E1.2
O      SM0.5
//=      V202.1
//LD     V202.1
EU
MOVD   HC0, VD100

Network 2 
// Reset des Zählers erkennen
LDN    E0.2
R      V0.1, 1

Network 3 
// Zähler auswerten
LDN    SM0.5                        // Zeitintervall von 0,5sec
O      E1.2
=      V202.0
LD     V202.0
ED
MOVD   HC0, VD104
LD     V0.1                        // nur ausführen, wenn kein Reset aktiv war!
...

Was mache ich hier so grundlegend falsch??? Funktioniert die Erkennung der Flanken ausschließlich mit Eingängen?

Ich würde mich über jede Hilfe freuen!

Oh, PS: Ich benutze eine CPU 224 und Microwin 4 SP8.
 
Hallo,

die Flankenerkennung muß auch ganz einfach direkt mit SM0.5 gehen:
Code:
Network 1
LD     SM0.5
EU
MOVD   HC0, VD100

Network 3
LD     SM0.5
ED
MOVD   HC0, VD104

Ich schätze, Du hast da nur einen logischen Fehler drin, da Du beide Male die steigende Flanke von SM0.5 auswertest. Deshalb steht dann in VD100 und VD104 immer das gleiche drin.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, ich frage einmal mit ld sm0.5 und das 2. Mal ldn sm0.5. Ist im code auch so drin, nicht nur hier (ist ne 1:1-Kopie aus dem editor).

Das eine oder andere Mal wird ja tatsächlich ein Wert genommen, nur eben gefühlt alle Schaltjahre mal und nicht alle Sekunde (jede halbe sekunde ein Wert).
Ich habe zwischen der ersten und 2. Abfrage nur den Eingang der Oder-Verknüpfung vertauscht.
 
1) LD SM0.5 + EU
2) LDN SM0.5 + ED
werten beide die steigende Flanke von SM0.5 aus ...

Tip: Wenn Du S7-200-AWL nicht 100% beherrschst, dann schreibe mal nicht so viel AWL-Code in ein Netzwerk, sondern programmiere besser in der FUP- oder KOP-Ansicht. Das erzeugt dann 100% korrekte VKE-Verknüpfungen.

Zum Beobachten der generellen Funktion der Flankenerkennung jede Sekunde probiere mal dies:
Code:
Network 1
//endlos-Sekundenzähler 0...9999
LD     SM0.5
LDW>=  Z1, 10000
ZV     Z1, 0

Network 2
LD     SM0.5
EU
MOVW   Z1, AC0
MOVD   AC0, VD100

Network 3
LD     SM0.5
ED
MOVW   Z1, AC0
MOVD   AC0, VD104

Harald
 
Hallo Harald, das war erhellend!

Ich sehe, daß ich da die Hilfe komplett falsch verstanden habe. Ich werde das Anfang der Woche testen, wenn ich wieder in der Firma bin.
Interessant ist für mich, daß trotz falscher Flankenerkennung (fallende Flanke) beim Nachschauen der Live-Beobachtung zumindest bei der steigenden Flanke nur sehr sporadisch ein Zählerwert übertragen wurde. Bei sekündlicher Flanke sollte da regelmäßig ein Wert auftauchen in VD100. Leider kam dort zu selten ein Wert an, was mich am meisten verwunderte/verwundert.

Egal. Ich bin hierin völliger Neuling und freue mich über jegliche Hilfe!!! :)

Als "alter" Assembler-Koder verstehe ich die AWL-Programmierung "besser", die FUP- und KOP-Programmierung erschließen sich mir momentan noch nicht so ganz, ich werde allerdings deinen Rat gerne annehmen und öfter die Ansicht umstellen zur Kontrolle.

Jetzt bleibt mir vorerst nur eine Frage: Warum sollte ich wie in deinem Beispiel mehr Netzwerke nehmen? Funktioniert sonst die Fup- oder Kop- Darstellung nicht richtig? Ich habe festgestellt, daß beim Umschalten des Öfteren nur ein "Unzulässig" in Rot erscheint, obwohl die Programme sonst einwandfrei funktionieren. Versteht die CPU hier die Programmteile nicht? In der AWL-Ansicht ist alles in Ordnung. Oh, das waren nun 3 Fragen...

Nochmal vielen Dank für deine Mühe und Geduld mit mir und ein angenehmes WE für dich!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider funktioniert das ganze gar nicht: Ich habe dein Programm genauso wie hier beschrieben eingesetzt und erhalte in der Programmstatus-Ansicht: Nichts. Das heißt im einzelnen, daß ich den sm0.5 schön sehe, wie er blau wird, allerdings ändert sich im Teil dahinter rein gar nichts, ich erhalte auch keine Werte in vd100 und vd104.

Ich habe dein Programm auch als komplett eigenständiges Programm in die CPU 224 geladen mit demselben Ergebnis.

Was kann ich jetzt tun, um weiterzukommen? Ich bin echt völlig ratlos.
 
Eine Aktualisierung in der Sache: Aus irgendeinem Grund wird in der Prozessabbildung nichts dargestellt, obwohl das Programm funktioniert. Ich habe einfach an anderer Stelle die entsprechenden Merker weiterverwendet und habe hier auch die "richtigen" Werte erhalten.
Insgesamt seltsam, aber ist halt so. ;)

Vielleicht ist der verwendete Laptop zu langsam, damit das Microwin alles darzustellen vermag.

Nochmal vielen Dank für die Hilfe! Das Projekt funktioniert nun einwandfrei!!!!
 
Zurück
Oben