Stückzähler mit S7-200 Cpu 214 programmieren.

Zuviel Werbung?
-> Hier kostenlos registrieren
Gast schrieb:
Benutzt du nicht die eingebauten Eingangsfilter (0,2ms - 8,7ms im Systemdatenbaustein) oder hast du das ganze als Impulsabgriff oder
schnellen Zähler programmiert.

Wenn ein Endschalter durch die Betätigungsart so prellt wie dieser es anscheinend tut,
dann kommt man mit Eingangsfiltern von lächerlichen 8,7ms mit Sicherheit nicht weit.
Das ganze ist ganz in Ordnung um z.B. Taster bzw. Relaisprellen abzuwenden, zu mehr aber auch nicht.

Stromtom schrieb:
a)Der Endschalter prellt heftigst, kann aber auch leider keinen anderen einbauen(hat eine Federgabel andere verbiegen oder brechen ab)

b)Gelegentlich zählen die Reben zweimal wegen der Blätter d.h. ich hab den Zählimpuls auf 2 sec. verlängert und umgehe somit das Problem. Weil nach 2 sec die Rebe den Endschalter sicher passiert hat und er wieder frei ist.

Mfg
Manuel
 
Bei 2sec kann sich um kein prellen mehr handeln, dass muss was anderes sein.

Oben angegebener Code von MSB (Verfasst am: 18.09.2005, 13:54) funktioniert überhaupt nur bei Nutzung der eingebauten Filter.
Je nach Sequenz des Eingangssignals und genutzten Filterzeit kann dass das Signal zu lange verzögern oder Fehlsignale liefern.

Die Filterung sollte man wie bei Microcontrollern üblich über ein mehrmaliges abfragen des Eingangs per Zeitinterrupt erledigen.

Den Eingang sollte nicht über den eingebauten Filter laufen bzw. deaktiviert sein.
Wird ein Flanke erkannt startet man einen Zeitinterrupt für einige Durchläufe z.b. 5xmal.
Im Interrupt fragt man den Eingang ab und dekrementier den Zähler.
Falls der Eingang nicht mehr da ist, schaltet man den Interrupt wieder aus.
Falls der Eingang 5xmal erkannt wurde gibt man diesen an das Hautprogramm als gültig weiter.

Durch die Auflösung des Zeitinterrupts 1ms (0ms-255ms) kann man dieses für eine schnelle Signaerfassung/-übergabe gut anpassen und dabei Fehlauslösungen wirksam unterdrücken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht sehe ich ja jetzt was falsch,

ich bezweifle gar nicht das die Variante mit Interrupts nicht auch funktionieren würde,
auch wenn ich das momentan nicht so 100% nachvollziehen kann.

Aber wodurch kann es durch meinen Code zu Fehlauswertungen kommen?

Mir ist klar das die Zeit von 2 Sekunden im 100ms Bereich "Variabel" ist,
ganz einfach durch die Zykluszeit der SPS.
Allerdings spielt das in dem Fall allerdings auch keine Rolle.

Ich mache ja in dem Code nichts anderes, als das ich nachdem der Eingang im Programm, als High und dann wieder Low erkannt wurde eine erneute Flanke des Eingangs für 2 Sekunden unterbinde.
Und ich unterstelle jetzt mal, das das externe Zeitrelais auch nichts anderes macht.

Mfg
Manuel
 
Man sollte zum filtern keine fest vorgegeben Zeit nehmen, da die Kontakte mit der Zeit schlechter werden und/oder
bei Austausch durch Ersatzteil wieder verändern.
Daher wäre es besser wenn sich das Programm dem Eingang anpasst.

Bei oben dargestellten Programm würde es zu einer Fehlauslösung kommen wenn z.B. ein Flackern oder Störimpuls auftritt
oder der Eingang vor Ablauf der 2sec wieder abfällt (abhängig ob Eingang als Impulsabgriff oder Filter parametriert und mit welcher Zeit).
In diesem Fall wäre T37 abgelaufen und Merker M0.0 deaktiviert.

Sobald der Eingang E0.0 beim nächsten mal wieder käme, würde sofort ein gültiger Impuls über M1.0 ans Programm weiter gegeben.
Besonders Fatal wäre das ganze wenn es sich wieder nur um einen Störimpuls handeln würde.

Besser wäre dann wenn man das Programm nur duch folgenden Code ersetzen würde.
LD E0.0
TON T33, +8 // 10ms Timer anstatt 100ms, 8x10ms = ca. 80ms Verzögerung

Bedeutet, der Eingang muss für mindestens ca.80ms durchgehend anstehen damit ein gültiges Signal erkannt wird.
Fällt der Eingang kurzzeitig ab, fällt der Timer auf 0 wieder zurück.
Vorteil ist dass auch beim verändern der Prellzeit dieses genauso funktioniert.
Nur die geeignetste Filterzeit für den Eingang (0,2ms -8,7ms) sollte für die Anlage vorher ermittelt werden.

Generell:
Bei der Nutzung im Hauptprogramm mit Timern etc. anstatt Interrupts hat man das Problem, dass die eingene Zykluszeit
(Eingang liegt an, Programm aber immer an anderer Stelle als beim letzten mal oder ungünstige Stelle), die Abweichung der Timer
(10ms und 100ms werden nur am Anfang von Zyklus eingelesen -> d.h. Abweichung +- 10ms/100ms siehe S7-200 Handbuch) einer Reproduktion der Ergebnisse im Wege steht.
Zur Reproduzierbarkeit der Ergebnisse sollte man mit Zeitinterrupts und am besten mit Eingangsinterrupts arbeiten.
Dadurch kann man (je nach Programmierung) den Eingang nur wenige Millisekunden nach der Prellzeit prezise und dauerhaft reproduzierbar als gültig erkennen.
 
Zurück
Oben