SCL Zähler...ewiges problem^^

Chris_the_new

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich bin gerade dabei eine Linearspindel in SCL zu Programmieren welche 4 Positionen Anfährt.
dabei kann man die Reihenfolge frei Wählen (außgenommen 2x die Gleiche position hintereinander) sobald eine Position erreicht wurde soll 3sec gewartet werden und dann die nächste angefahren werden.

Problem: wenn ich von der Position starten will welche meine momentane Position ist zählt der Zähler nicht hoch obwohl er eine positive Flanke von "POS1_ERREICHT" bekommt und sonst keiner der Eingänge ein Signal aufweißt!
(Der Zähler zählt dabei brav seine 3sec runter danach wird erst der Zähler aktiv)

IF NOT "TIMER1" THEN BCD_WERT := S_CU (C_NO := ZAEHLER1, // Zähler in welcher runde man ist
CU := ("POS_A" AND UNTER_4) OR ("POS_B" AND UNTER_4)OR ("POS_C" AND UNTER_4) OR
("POS_D" AND UNTER_4) OR POS1_ERREICHT OR POS2_ERREICHT OR POS3_ERREICHT OR POS4_ERREICHT,
R := RUECKSETZTEN) ;
END_IF;

alle anderen positionen bzw wenn momentanposition nicht POS1 ist funktionieren deswegen kann es das: IF NOT "TIMER1" THEN BCD_WERT := S_CU nicht sein sonst hätte ich das problem auch bei POS 2/3/4
bitte um nen ratschlag da ich nicht alles umschreiben will und den Zähler in einem normalen FC schreiben muss
mfg
 
Hallo,
wenn du in SCL einen S7-Zähler oder einen S7-Timer verwendest, so mußt du sicherstellen, dass er nicht bedingt bearbeitet wird. Beide wollen (da sie ja selber eine Flankenauswertung intern amchen) den 0-1 und 1-0 Übergang selber sehen.
Wenn du den in eine IF-Then-Abfrage einbaust, so bewirkt das im anschließenden AWL-Code, dass der Zähler übersprungen wird, wenn die Bedingung nicht erfüllt ist.
Wenn du es so machen willst, wie schon von dir begonnen, so würde ich dir empfehlen eine Variable im Statischen Bereich zu definieren (Typ INT), die du dann hochzählst (und für die du die Flankenauswertung dann aber selber machen mußt).

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst Du garantieren, dass der Zähl-FB aufgerufen wird, wenn die Flanke von Pos1_Erreicht kommt und auch aufgerufen wird, wenn die Flanke von Pos1_Erreicht wieder geht?

Der Zähl-FB funktioniert nur, wenn er alle Signalwechsel mitbekommt. Vielleicht schneidet der Timer den Aufruf des Zähl-FBs schon ab, bevor der Zähl-FB alle Flankenwechsel mitbekommt.


Edit: Larry war doch schneller...
 
Zurück
Oben