Step 7 FM 350 Problem periodisches Zählen

PinkPanther

Level-1
Beiträge
41
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe folgendes Problem:
Ich habe eine 314 CPU mit einer FM350 Zählerkarte.

Das Projekt ist ein Paternosterregal. Eigentlich ganz einfach. Das Gerät kann vorwärts und rückwärts fahren, und steht
bei Zählwert 0 an Regal 1. Bei Regal 2 an 1200, Regal 3 bei 2400 und so weiter bis Regal 22 mit dem Wert 25200. Danach kommt wieder Regal 1
mit dem Wert 0. Der ganze Kreis ist also 26400 Impulse groß. Von Jedem Regal ist die Position im Programm hinterlegt. (Regal1=0, Regal 2=1200, Regal3=2400,usw.)

Nun soll das Regal stets den kürzesten Weg fahren, also von zB. Regal 21 auf Regal 2 in positiver Richtung.
Man überschreitet also den Zählerwert 26399 und muß wieder bei 0 aufwärts zählend beginnen.

Umgekehrt auch in der anderen Richtung von zB. Regal 3 (Wert 2400) auf Regal 20 (Wert 22800)in negativer Richtung.
Dabei unterschreitet man die 0, und muß dann bei 26399 abwärts zählend fahren.



Ich möchte dafür in dem FM350 die Zählergrenze aktivieren. So soll die Baugruppe vorwärts von 0 bis 26399 zählen und bei einen
weiteren Puls des Gebers wieder bei 0 beginnen. Das kann ich mit "Hauptzählrichtung Vorwärts" in den Parametern erreichen. Soweit so gut.

Wenn ich das Regal nun aber rückwärts fahre soll der Wert abwärts zählen und bei Unterschreiten der 0 wieder auf 26399
springen. Ist halt ein umlaufendes Regal. - Das geht irgendwie bei "Hauptzählrichtung Vorwärts" nicht, wohl aber bei
"Hauptzählrichtung rückwärts"


Nun kann ich aber nicht beides auswählen.
Was mache ich falsch?? oder habe ich bei der Zählrichtung Vorwärts nur irgendwo einen Haken vergessen, damit unter
0 wieder nach 26399 gesprungen wird??

- Ich möchte den Nulldurchgang nicht gern über die CPU ausführen(in diesem Fall bei kleiner 0 auf 26399 setzen), da ich
durch Zykluszeit immer einen kleinen Fehler erzeuge, den ich eigentlich über das periodische Zählen innerhalb
der Grenze 0 bis 26399 in den Parametern elegant umgehen könnte.

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

Dank Euch
 
Also vorweg : ich habe keine Ahnung, ob die Zählerkarte das von dir geforderte kann oder nicht - ich kann es mir aber nicht vorstellen.
Es ist aber auch gar kein Problem.
Du liest dir den Zählwert der Karte in die SPS ein. Hier rechnest du dann :
Position_berechnet := (Zaehlwert + 26400) mod 26400 ;
... schon hast du in der Variablen nur noch Positionswerte, die du auch gebrauchen kannst.
Nun mußt du natürlich die Karte irgendwann einmal neu setzen und das solltest du nicht im laufenden Zählbetrieb machen - wenn du allerdings eine Zielposition erreicht hast und stehst dann hättest du genug Zeit, die Zählerkarte neu zu setzen ohne Zählfehler ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Zählkanal bei "Hauptzählrichtung vorwärts" auch rückwärts zählen kann, dann wird ziemlich sicher beim Unterschreiten von 0 auf die obere Zählgrenze gesprungen.
Welche FM350 genau hast Du?

Harald
 
Hallo PN/DP

Es ist eine 6ES7 350-1AH03-0EA0.

Ich denke eigentlich auch das ich da etwas übersehen habe.
Wenn ich Hauptrichtung vorwärts wähle funktioniert die vorwärtszählerei auch prima,
nur eine Fahrt unter 0 ergibt einen negativen Zählwert, anstatt wie geplant
ein Rückwärtszählen bei 26399 beginnend.

Gruß
 
Hmm, die FM350-1 kann leider nicht was Du willst.
Du brauchst "Endlos zählen" oder "Periodisch zählen" - aber in beiden Moden können keine Zählgrenzen eingestellt werden. Bei "Einmalig Zählen" kann man zwar Zählgrenzen einstellen, doch beim Überschreiten der Zählgrenzen stoppt der Zähler.

Das macht aber nichts, denn es geht viel einfacher. Laß den Zähler einfach frei vorwärts+rückwärts "Endlos zählen" und rechne Dir Deine Position heraus. Weil 2[SUP]32[/SUP] und auch 2[SUP]16[/SUP] kein Vielfaches von 26400 sind, geht das allerdings nicht ganz so einfach wie man auf den ersten Blick vermuten könnte. Damit das Umspringen beim Überschreiten der 32-Bit-Zählgrenzen (DINT-Datentyp-Grenzen) keine Rechensprünge verursacht, rechne nur mit der Differenz des Zählerstands zur Abfrage vorher. Und diese Differenz verrechne/übertrage auf einen 0..26399-"Zähler" (Deine Position).

So etwa mache ich es in der Regel mit FM350-2-Encodern für Bänder-Positionen:
Code:
      L     "DB350".Enc_old             //(INT 16 Bit) Zählerstand_vorher
      L     "DB_FM350-1".ACT_CNTV       //Zählerstand/Encoderwert jetzt, untere 16 Bit reichen auch (*)
      T     "DB350".Enc_old             //als Zählerstand_vorher merken
      TAK
      -I                                //muß -I! braucht keinen WordWrap beachten! funzt automatisch

//hier in AKKU1-L die 16-Bit-Differenz zu Zählerstand vorher ---> auf 0..26399-Position verrechnen

      ITD
      L     "DB350".RelPos              //rel.Position (bei Referenzieren auf 0 gesetzt)
      +D                                //die Zählerstand-Differenz (+/-) dazu
      L     26400                       //für MOD immer positiv machen!
      +D
      L     26400
      MOD
      T     "DB350".RelPos              //(INT 16 Bit) 0..26399
(*) Der Zählerstand kann als 32-Bit-Wert oder auch nur die unteren 16 Bit verarbeitet werden, das Programm kommt mit beiden klar. Möglich ist also:
* L "DB_FM350-1".ACT_CNTV //Zählerstand 32 Bit aus dem DB für FC CNT_CTL1
* L PED <FM350_E_Adr + 4> //Zählerstand 32 Bit direkt aus der Baugruppe
* L PEW <FM350_E_Adr + 6> //Zählerstand 16 Bit direkt aus der Baugruppe


Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi PN/DP :TOOL:

vielen Dank für das geniale Stück Code. Das ist tatsächlich wesentlich einfacher als alles andere.
Ich werde auch garnicht mehr groß mit dem "periodischem Zählen rumdocktern....

Auch vom Handling vereinfacht es die Sache sehr, da man sich um den Zähler nicht mehr kümmern braucht.
Damit hast Du mir wirklich Klasse weitergeholfen, und ich wäre auf die komplette Lösung so schnell auch nicht
gekommen.


Schönen Abend noch,

Gruß
PinkPanther
 
Das geht irgendwie bei "Hauptzählrichtung Vorwärts" nicht, wohl aber bei "Hauptzählrichtung rückwärts".
Den Begriff "Hauptzählrichtung" an sich finde ich schon ganz schön krank!

Nun kann ich aber nicht beides auswählen.
Eben! Darum wurde der Begriff "Hauptzählrichtung" auch nur erfunden, um zu rechtfertigen, dass der Zähler nicht in beiden Richtungen richtig arbeiten kann.
Man erkennt ein kleines Bisschen guten Willen und, dass total praxisfremd am Bedarf vorbei irgendein Schwachsinn umgesetzt wurde.

Was mache ich falsch??
Du kannst Dir (ebenfalls total praxisfremd) gar nicht vorstellen, dass einem so ein Schwachsinn verkauft wird.
Beim Überfliegen der Beschreibung sah ja noch alles so aus, als sei das Teil für alle Eventualitäten gewappnet.
 
Zurück
Oben