Step 5 95U Zähler auslesen

MAH

Level-2
Beiträge
21
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf einer S5 95U wird der schnelle Zähler 1 zunächst genullt, dann von einem Drehgeber hochgezählt.

Der Istwert wird über die PWs 36 und 38 eingelesen. (Der Istwert überschreitet die 16 Bit und läuft hinüber in das höherwertige Wort).

Der Inhalt wird wie ein "Doppelwort" benutzt, obwohl diese CPU ja keine Doppelwortarithmetik kennt.
Beide Inhalte werden zunächst auf die MWs 36 und 38 umgeladen, in zwei unmittelbar hintereinander liegenden Befehlen.

Eine Division durch 8 wird realisiert, indem das LSW mit SRW nach rechts geschoben wird und die fehlenden Bits aus dem HSW hinüber gezogen werden, Merker für Merker.
Dadurch reduziert sich die maximal benötigte Zählerzahl auf die verarbeitbaren 15 Bit.

Und jetzt das Problem:
Sporadisch scheint ein Konsistenzproblem aufzutreten, denn in Hunderten von Takten kommt es vor, daß ein Vergleicher "Zählerstand >= X" anspricht und eine Funktion auslöst, obwohl der Zählerstand sicher noch nicht da ist.

Nun meine Fragen dazu:

Hilft es, statt der Prozessworte 36 und 38 die Eingangsworte 36 und 38 zu lesen ?
Diese können sich ja während der OB1 Bearbeitung wohl nicht verändern.

Ich habe das Programm mal so geändert, funktionieren tut es zunächst genauso wie mit PWs, aber das Konsistenzproblem war bisher sehr sporadisch. Man muss es also länger beobachten.
Aber ist damit schon Konsistenz gesichert ?

Oder muss man zusätzlich das höchstwertige Bit des LSW und das niederwertigste Bit des HSW beobachten ?
 
Denkst du es ist ein echter Unterschied zwischen dem PEW und dem MW, wenn das nur umgeladen wird?
Das Problem Konsistenz musst du in der PLC lösen.
Beobachten ist doch im Status Varaibel problemlos möglich, da ist es unerheblich ob PEW oder MW.
Ich denke das Problem kommt von dem Geber.
Da muss du nach meiner Meinung ansetzen


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde erst einmal versuchen den Zähler anders zu parametrieren, anscheinend
hast du deinen schnellen Zähler als Kaskaden Zähler parametriert, ohne dieses geht
er nur bis zur Wortgrenze und du kannst dir die ganze Schieberei und was weiß ich
noch schenken.

Dazu musst du im Parameter-Datenbaustein 'DB1' folgende Zeilen suchen und ändern.
Code:
KC = ' OBC: CAP 65535 CBN 65535;

Das 'OBC' ist die Parameter Kennung für Zähler und das CAP ist die für Counter 'A' der
mit den Parameter 'P' positive Flanken bis 65535 zählt, würdest du da ein 'N' schreiben
würde er negative Flanken zählen, wie im Beispiel für Kanal 'B'.

Wenn dein Zähler den 'Vergleichswert' von '65535' erreicht hat, fängt er automatisch wieder
bei '0' an zu zählen. Dazu wird ein Alarm OB aufgerufen der OB3 da kannst du für dein
Programm auswerten ob du einen Zählerüberlauf gehabt hast der 'E 35.0' wird für den Kanal
'A' auf True gesetzt und der 'E 35.1' für Kanal 'B'

Das umladen auf ein Merkerwort kannst du dir auch schenken wenn du das Eingangswort (EW)
anstatt Peripheriewort (PW) lädst.

Das der Geber eine Macke hat würde ich erstmal fast ausschließen.
 
Zuletzt bearbeitet:
Um kaskadierte Zähler konsistent während des Zählens einzulesen sind Hardwaremaßnahmen erforderlich. Da das hier nicht möglich ist, rate ich Dir, den Vergleich so zu ändern, dass die Funktion erst dann ausgelöst wird, wenn in zwei aufeinanderfolgenden CPU-Zyklen die Auslösebedingung erfüllt ist. Das sollte Deine Fehlauslösungen zuverlässig unterdrücken.
Du könntest auch die Zählerwerte aus der Peripherie (nicht aus dem Prozessabbild) zweimal hintereinander einlesen, und die Funktion nur dann auslösen, wenn beide gelesenen Werte die Auslösebedingung erfüllen

Gruß
Erich
 
Zuletzt bearbeitet:
Um kaskadierte Zähler konsistent während des Zählens einzulesen sind Hardwaremaßnahmen erforderlich. Da das hier nicht möglich ist, rate ich Dir, den Vergleich so zu ändern, dass die Funktion erst dann ausgelöst wird, wenn in zwei aufeinanderfolgenden CPU-Zyklen die Auslösebedingung erfüllt ist. Das sollte Deine Fehlauslösungen zuverlässig unterdrücken.
Du könntest auch die Zählerwerte aus der Peripherie (nicht aus dem Prozessabbild) zweimal hintereinander einlesen, und die Funktion nur dann auslösen, wenn beide gelesenen Werte die Auslösebedingung erfüllen

Gruß
Erich

Danke, so etwas hatte ich mir gedacht. Ich hatte gestern von PW auf EW umgestellt, aber dann wird das ja wohl nichts bringen. Ich warte mal ab.

Ansonsten hatte ich mir folgendes überlegt:
Der Baustein zur Geberauswertung (der den Vergleicher beinhaltet) wird nur dann aufgerufen, wenn das höchste Bit im LSW und das niederwertigste Bit im MSW in zwei aufeinanderfolgenden Zyklen gleich sind.
Das Siemens Handbuch zu dieser CPU sagt über Konsistenzproblem zu diesem Zähler leider gar nichts.

Danke
Manfred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ansonsten hatte ich mir folgendes überlegt:
Der Baustein zur Geberauswertung (der den Vergleicher beinhaltet) wird nur dann aufgerufen, wenn das höchste Bit im LSW und das niederwertigste Bit im MSW in zwei aufeinanderfolgenden Zyklen gleich sind.
Sollte auch funktionieren, dann hat es sicher gerade keinen Übertrag gegeben. Entweder zwei Zyklen oder zweimal hintereinander die PEWs lesen, dann ist die Reaktionszeit kürzer.
Gruß
Erich
 
Nochmals als Rückmeldung: Bereits nachdem ich den Einlesevorgang des kaskadierten Zählers von PW auf EW umgestellt hatte, gab es die unmotivierten Auslösungen des Vergleichers für ca. 15 Stunden nicht mehr. Vorher war es etwa stündlich. Zusätzlich habe ich aber noch die Konsistenzüberwachung, wie oben beschrieben eingefügt.
 
Zurück
Oben