Mehrfachausführung einer FCx unterbinden?

GhostBlade

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi

Ich arbeite derzeit mit einer s7-300 314-c2 dp und simatic v5.3 + sp2.
Grundlegend will ich folgende Funktion realisieren: Wenn der Wert an einem Analogeingang von einem vorgebenen Sollwert abweicht, soll bei einem Analogausgang der wert um einen 2. vorgegebenen Wert erhöht/verringert werden. Die Überprüfung findet alle 15 sekunden statt (mittels Timer).
Nun bin ich wie folgt vorgegangen. Nach der Überprüfung (in FC1) wird, je nach dem ob eine Abweichung vorliegt, mittels des Befehls CC der FC 2 aufgerufen. In FC2 wird der akutelle Wert des Analogausgangs mit dem 2. vorgegeben Wert addiert und an den Ausgang übertragen. Nun sollte doch wenn man als Beispiel folgende Werte (Analogausgang= 1 ; zu addierender Wert = 1) annimmt folgendes passieren. Alle 15 Sekunden müsste sich der Wert am Ausgang um 1 erhöhen.

Analogeingang einlesen:
Code:
      L     DB1.DBD    6
      ITD   
      DTR   
      L     2.7648e+4
      /R    
      L     1.0e+2
      *R    
      T     DB3.DBD   28
Analogeingang setzen:
Code:
      L     DB3.DBD    8
      L     1.0e+2
      /R
      L     2.7648e+4
      *R
      RND   
      T     PAW752
Leider musste ich jedoch feststellen, das der Sollwert am Ausgang nicht um jeweils 1 alle 15 Sekunden erhäht wird. Anscheinend wird FC2 immer mehrfach durch geführt, da sich der Wert immer um ca. 500 erhöht hat.
Da dies so anscheinend nicht möglich war, habe ich versucht die FC2 abzubrechen wenn M 1.0 nicht gesetzt ist. Die Funktion wurde jedoch immer noch ca 500 mal ausgeführt.

Gibt es eine Möglichkeit das ein FC nur einmal ausgeführt wird oder muss ich die Sache anders lösen?


gruß
GhostBlade
 
CC ist ja ein bedingter Aufruf, wovon genau hängt den der Aufruf des FC ab? (Codeschnipsel mit dem Timer wäre nützlich).
 
Danke für die Hinweise.

Ich habe ein Wochenende darüber geschlafen und mir das ganze heute nochmal angeschaut.
mein problem war einfach die überprüfung wann dasn ganze ausgeführt werden soll. ich hatte nur überprüft ob der timer auf 1 ist oder nicht. und da dieser timer natürlich nicht nur eine ausführungszeit auf 1 steht wurde die funktion so oft aufgerufen :p

bis denne
 
Zurück
Oben