Step 7 Zähler in SCL S7-Manager

Kehrer

Level-2
Beiträge
380
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich versuche gerade einen Vorwärtszähler zu programmieren.
Nach 5 Fehlversuchen soll dann eine Fehlermeldung ausgegeben werden.

Habe mir es so in etwa vorgestellt:
Code:
VAR
currVal, binVal: word;
actFlag: bool;
END_VAR

currVal :=S_CU(C_NO:=Z11, CU:=NOT oNIORutsche_eTeilSensor1 OR NOT oNIORutsche_eTeilSensor2 , S:=M0.1,
PV:=16#5, R:=oNIORutsche_eTeilSensor1 OR oNIORutsche_eTeilSensor2 OR , CV:=binVal,
Q:=actFlag);

und ist dann Q:=actFlag dafür einsetzbar?
Code:
 2:  //Lichtschranke NiO Teile Rutsche
        IF oNIORutsche_eTeilSensor1  OR oNIORutsche_eTeilSensor2  OR actFlag<5 THEN      //U E5.6  OE5.7
            IF a2m_sync <> 0 THEN // Wenn Bohren aktiv sollte kein Fehler gemeldet werden um Spindel zu schützen
                ;
            ELSE
                 sf_fehler(Fehlernummer := 1410, Fehlerart := sk_Fehler, Diagnosenummer := BYTE_TO_INT(a11c_step));     //NiO Teile Sensor meldet Rutsche nicht frei
            END_IF;
            sc_nextstep := a11c_step;
        END_IF;

dann kommt aber wegen actFlag: Unzulässiger Operandentyp
 
Zuletzt bearbeitet:
Du hast actFlag als Bool deklariert und vergleichst in der IF-Abfrage auf kleiner 5, da meckert der compiler natürlich.
 
Die Information die du suchst (der Zählerstand) ist in CV -> Zählerstand enthalten. Ich bin mir beim S7 SCL jetzt nicht auf Anhieb sicher, aber ich hoffe hier meckert der compiler auch, wenn du jetzt einfach den Wert aus CV in der If-Abfrage vergleichen willst. Du musst den Typ (wenn ich die Doku von dir da richtig interpretiere) noch in das richtige Format wandeln, hast du eine Idee von was auf was?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Augang Q sollte ja true werden wenn CV=PV. Also dann:
IF oNIORutsche_eTeilSensor1 OR oNIORutsche_eTeilSensor2 OR actFlag=false THEN
d.h. wenn actFlag= true dann kommt der Fehler.
Q wird erst true wenn CV 5 erreicht hat. (Status des Zählers)
Richtig?
1648542074970.png
Code:
  2:  //Lichtschranke NiO Teile Rutsche
        IF oNIORutsche_eTeilSensor1 = true OR oNIORutsche_eTeilSensor2 = true OR NOT actFlag  THEN      //U E5.6 OR OE5.7 OR NICHT Zählerstatus
            IF a2m_sync <> 0 THEN // Wenn Bohren aktiv sollte kein Fehler gemeldet werden um Spindel zu schützen
                ;
            ELSE
                sf_fehler(Fehlernummer := 1410, Fehlerart := sk_Fehler, Diagnosenummer := BYTE_TO_INT(a11c_step));     //NiO Teile Sensor meldet Rutsche nicht frei
            END_IF;
            sc_nextstep := a11c_step;
        END_IF;
 
Zuletzt bearbeitet:
d.h. wenn actFlag= true dann kommt der Fehler.
Q wird erst true wenn CV 5 erreicht hat. (Status des Zählers)
Richtig?
Habe grade nochmal die Doku gecheckt.
Bei S_cu ist q true wenn der cv größer 0 ist.
Deswegen ist meine Aussage falsch.

Du könntest auch den iec counter ctu verwenden. Den kann man mittels sfb0 in step 7 classic nutzen.
Bei diesem liefert Q den Signalzustand 1 solange CV>=PV
 
was soll denn dann dort stehen?
Anhang anzeigen 60097
muss der beschaltet sein?
Kann dir nicht ganz folgen. Deine "simulation" ist ja in TIA und mit dem IEC Zähler CTU.

In deinem obigen Code nutzt du ja den Legacy Timer S_CU.

Den S-Eingang brauchst du nur, wenn du willst das der CV=PV wird, das passiert nämlich wenn S true wird.
Ob du den im Code weglassen kannst oder einen Dummy dranschalten musst weiss ich nicht.
Habe SCL in Step7 Classic nicht genutzt.

Im Anhang wäre eine etwas ausführlichere Beschreibung.
 

Anhänge

  • DokuCTU.JPG
    DokuCTU.JPG
    145,2 KB · Aufrufe: 5
  • DokuS_CU.JPG
    DokuS_CU.JPG
    169 KB · Aufrufe: 5
Zuviel Werbung?
-> Hier kostenlos registrieren
muss der beschaltet sein?
Nein, nicht, wenn Du den Zähler nicht auf einen Stand 1..999 (vorbe-)setzen willst. Auf den Stand 0 kannst Du ihn "setzen" mit R.

Ich staune jedesmal wieder, wie in den Beschreibungen die Begriffe dezimal, hexadezimal, BCD und dual durcheinandergewirbelt werden.
Da muss man hart bleiben und sich nicht verwirren lassen. ;)

In deinem obigen Code nutzt du ja den Legacy Timer S_CU.
Auch das noch! Wo denn?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, nicht, wenn Du den Zähler nicht auf einen Stand 1..999 (vorbe-)setzen willst. Auf den Stand 0 kannst Du ihn "setzen" mit R.

Ich staune jedesmal wieder, wie in den Beschreibungen die Begriffe dezimal, hexadezimal, BCD und dual durcheinandergewirbelt werden.
Da muss man hart bleiben und sich nicht verwirren lassen. ;)


Auch das noch! Wo denn?
Habe mir es so in etwa vorgestellt:


VAR currVal, binVal: word; actFlag: bool; END_VAR currVal :=S_CU(C_NO:=Z11, CU:=NOT oNIORutsche_eTeilSensor1 OR NOT oNIORutsche_eTeilSensor2 , S:=M0.1, PV:=16#5, R:=oNIORutsche_eTeilSensor1 OR oNIORutsche_eTeilSensor2 OR , CV:=binVal, Q:=actFlag);
Na hier @Heinileini
 
Kommt darauf an, ob Du ihn benutzen willst. Der Eingang S übernimmt die Vorgabe nur bei einer positiven Flanke.
Bei R setzt der den also auf auf 5 zurück? Dann bräuchte ich den S erst gar nicht?
oder muss ich einmal S setzen damit er vorbelegt ist?

Code:
//Abwärtszähler 5 Stück damit nicht immer nIO Fehler bringt (Rückwärtszählen=CD; Rücksetzen=R; Fehler quittieren Visu=S; Vorbelegt auf 5=PV;  Ausgang immer da bis Rückzählung 0=Q)
currVal :=S_CD(C_NO:=Z1, CD:=NOT oNIORutsche_eTeilSensor1 OR NOT oNIORutsche_eTeilSensor2 , S:=,
PV:=16#5, R:=oNIORutsche_eTeilSensor1 OR oNIORutsche_eTeilSensor2 , CV:=binVal, Q:=actFlag);
 
Bei R setzt der den also auf auf 5 zurück? Dann bräuchte ich den S erst gar nicht?
oder muss ich einmal S setzen damit er vorbelegt ist?
Für mein Verständnis (rück-)setzt der R immer nur auf 0 - für alles andere (1..999) wird S benötigt.
Ferner dürfte der R auf 0 setzen, solange der Eingang R TRUE ist, nicht nur bei einer positiven Flanke (Signal-Wechsel von FALSE auf TRUE).
Leider kann sich mein Gedächtnis täuschen, zumal man ja auch immer wieder unterschiedliche Beschreibungen findet, die von richtig über "gut gemeint" und irreführend bis falsch sein können.
Im Zweifelsfall ausprobieren!

PS:
Oder einen ZählerSelbstbau produzieren - da weiss man, was man hat. ;)
 
Zuletzt bearbeitet:
Zurück
Oben