TIA Vergleicher zu langsam

oliversps

Level-1
Beiträge
95
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr Lieben!

TIA Portal V13 (SP2), S7 1200 1215C DC/DC/DC

Ich habe einen Incrementaldrehgeber an meine S7 1215C angeschlossen, den HSC Zähler aktiviert und die Eingangskanäle auf 0.1 microsec. gestellt.
Nun möchte ich meinen Zählwert mit meinem vorgegebenen Sollwert vergleichen.

Folgendes Problem tritt auf:
Vergleiche ich meinen Sollwert mit dem tatsächlichen Zählwert mit Hilfe eines CMP== (gleich) Bausteins, so löst dieser nicht aus.
Vergleiche ich aber über einen CMP<= (kleiner oder gleich) so löst dieser aus.

Meine Frage:
Wie bekomme ich nun mein Signal wenn der Soll- und Istwert exakt identisch ist?
Das ganze dient nämlich zur Positionierung und sollte keine Unregelmäßigkeiten aufweisen wie bisher mit CMP<=

Über eine Antwort würde ich mich riesig freuen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst bei der HSC-Konfiguration ein Ereignis (Interrupt) für "Zählerwert gleich Referenzwert" konfigurieren:
TIA-Hilfe F1 schrieb:
Schnelle Zähler konfigurieren

...
  • In der Parametergruppe "Ereigniskonfiguration" sind die folgenden Ereignisse aktivierbar:
    • Zählerwert gleich Referenzwert
    • Externes Rücksetzen
    • Richtungswechsel
    Jedem dieser Ereignisse können Sie unter "Prozessalarm" einen Prozessalarm-OB (Hardware interrupt) zuordnen. Oder Sie ordnen jedem Ereignis im Anwenderprogramm (Anweisung "ATTACH") einen Prozessalarm-OB zu.
    Ergebnis: Wenn ein Ereignis ausgelöst wird, führt die CPU den zugeordneten Prozessalarm-OB aus (gemäß der konfigurierten Priorität).
Genauer dürfte es nicht gehen.
 
Zuletzt bearbeitet:
Als Ergänzung zu Hucki's Beitrag :
Es ist nicht der Vergleicher zu langsam sondern deine SPS ...!
Innerhalb eines SPS-Zyklusses kommen an dem Counter möglicherweise ettliche Impuls an. So ist es dann so, dass du, wenn du denn Zähler zyklisch in eine Tabelle schreiben würdest, darin nicht fortlaufende Werte siehst (11, 12, 13 ...) sondern eher etwas wie '11 , 17 , 22 ...' - somit ist der Vergleicher auf Gleichheit bei so etwas generell Unsinn.
Willst du es also im zyklischen Programm machen dann je nach Richtung auf Überschreitung oder Unterschreitung abfragen oder wie von Hucki beschrieben. Ich persönlich würde es aber im Programm machen und nicht in der Karte - auf die Genauigkeit hat das Ganze wenig Einfluß da die Reaktion ja im zyklischen Programm erfolgt und dessen Bedingungen unterliegt ... (für Super-genau ist eine 1215 ja nun auch nicht unbedingt der ganz richtige Ansatz)

Gruß
Larry
 
Ich persönlich würde es aber im Programm machen und nicht in der Karte - auf die Genauigkeit hat das Ganze wenig Einfluß da die Reaktion ja im zyklischen Programm erfolgt und dessen Bedingungen unterliegt ... (für Super-genau ist eine 1215 ja nun auch nicht unbedingt der ganz richtige Ansatz)
:confused:
Wenn die Reaktion (also der Stop) auf den erreichten Wert im Prozessalarm-OB erfolgt, dann ist er nicht vom Zyklus des OB1 abhängig.
Höchstens noch von der eigenen Ausführdauer und anderen, gerade ausgeführten OBs mit höherer Priorität.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Unregelmäßigkeiten werden wohl auch bei einer Auswertung und Reaktion via Prozessalarm nicht viel besser. Warum?
Wenn Du einen Motor aus voller Fahrt stoppen willst (scheint mir Dein Ansatz) hast Du außer der Massenträgheit noch die Reaktionszeit der Aktoren (z.B. Schütz). Diese bringen bei entsprechender Bewegungsgeschwindigkeit ordentlich zeitliche Unsicherheit.
So simpel Positionierungen habe ich bisher immer mittels FU gelöst. Dabei bringe ich den Motor kurz vor der Sollposition auf eine niedrige definierte Geschwindigkeit (Vorstopp) aus der die Wiederholgenauigkeit des Positionsstopp um Größenordnungen besser wird. Den Vorstopp kannst Du dann einfach per >= im Zyklus erledigen.
 
Zurück
Oben