Zähler : Was mache ich falsch ?

MarioDisketti

Level-1
Beiträge
47
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich verstehs nicht, folgender Code ist u.a. eingebaut und läuft:

:
U T 2
UN #Aus
FN M 10.0
L 0
S Z 1

U #Aus
U M 1.0
FP M 10.2
ZV Z 1
:

Wenn ich das richtig verstanden habe sollte der Zähler bei einer negativen Flanke der Verknüpfung aus T2 und Ausgang #Aus auf 0 gesetzt werden. Bei jeder positiven Flanke an M1.0 während #Aus = 1 ist, sollte um Z 1 um eins erhöht werden.

ABER, was macht das Ding ? Z1 zählt wie wild wenn #Aus = 1 und M1.0 auch fest auf 1 ist.

Habe ich da vielleicht was nicht richtig verstanden ?

Grüße
MarioDisketti
 
Hi,

@plc_tippser
Das stimmt, aber S Z 1 schon. Also wird der Zähler Z 1 nur gesetzt bei einem Übergang von VKE 0-> 1.

@centipede
nee ist der Ausgang einer Funktion

Grüße
MD
 
haha... hat vllt jemand dein M1 als Taktmerker aktiviert?!?

=> m1.0 == 10Hz == "Zähl wie wild" :lol:

oder dein #Aus flattert!?!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@e4sy
haha...schön wäre es, aber leider ist es nicht so...javascript:emoticon(':cry:')
Weinen

Ich hoffe nur es liegt nicht daran, dass ich derzeit einen Simulator verwende. Aber auch der sollte das mit den positiven Flanken doch können.

Imübrigen gehts auch damit

U M 11.0
U #Aus_Power
// FP M 10.2
ZV Z 1

Die FP brauche ich garnicht zu testen, da ZV das schon macht.

Grüße
MD
 
Wird der Ausgang der Funktion speichernd oder zyklisch gesetzt?

Auch Ausgänge verlieren ihre Gültigkeit beim verlassen der Funktion.

Wie sieht es denn im Status aus? Flimmert da etwas?

Der PLC-Sim funktioniert eigentlich sauber.

pt
 
Hi erneut,

ich habe den Ausgang #Aus mal aus der Bedingung kommentiert, dann klappt es auch mit dem Zählen !

Den Ausgang setze ich nur einmal in der Funktion und nehme ihn auch nicht zurück. Somit sollte der doch nicht die positiven Flanken generieren. Oder sind die Ausgangs Variable einer Funktion immer temporäre Variablen ? Dann wäre es so wie centipede vermutete...

Fragen über Fragen...

Grüße
MD
 
Hats du MB 10 vielleicht schon irgendwo benutzt?
Ist #Aus als Durchgangsvariable deklariert?

Ich würde in einer Funktion grundsätzlich keine feste Adressierung benutzen, das könnte zu Überschneidungen und Verwirrung führen.
Zudem hätte die FC dann ihren Sinn verloren.
 
morgen

kleiner tip

programmier denn baustein mal ohne Parameter übergabe teste ihn

und dann übergib in alles was du brauchst dann weist du wenigstens das er ohne geht

übrigens nur so eine kleine fragen rufst du denn baustein öfters auf
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe mal ein wenig rumexperimentiert und festgestellt, dass es wohl nur am #Aus Signal liegt und dieses als Parameter der FC wohl nicht gespeichert wird. Ohne das #Aus Signal in der Bedingung funktioniert der Zähler.
Das Signal wird zwar speichernd gesetzt aber durch die FC wohl nicht gespeichert.

@cyberlight
Was verstehe ich denn unter einer "Durchgangsvariable" (so gut kenne ich mich ja noch nicht aus)
Und was ist der Sinn einer FC ?
Oder wann sollte man FBs anstatt FCs verwenden ?
 
Hallo MarioDisketti,

Wenn eine Funktion (FC) mit Parametern aufgerufen wird, dann werden Eingangs- und Durchgangsparameter vor dem eigentlichen Funktionsaufruf in den Lokaldatenbereich des aufrufenden Bausteins kopiert. Nach dem Aufruf der Funktion werden Durchgangs- und Ausgangsparameter in diesen Lokaldatenbereich geschrieben. Der Anwender merkt davon nichts. Die Funktion selbst arbeitet mit der Kopie der eigentlichen Variablen. Daher dürfen Eingangsvariablen nur gelesen, und Ausgangsvariablen nur geschrieben werden.

In deinem Fall setzt du in der Funktion einen Ausgang. Danach fragst du diesen Ausgang innerhalb der Funktion in einer Verknüpfung ab. Bei dieser Abfrage "guckt" die Funktion jedoch auf die Kopie in den Lokaldaten des aufrufenden Bausteins, in der dein gesetzter Ausgang noch garnicht aktualisiert ist. Diese Lokaldaten des Vorgängerbausteins (auch V-Bereich genannt) liegen im temporären Lokaldatenbereich. Der Wert der durch die Abfrage eines Ausgangsparameters fälschlicherweise gelesen wird, ist undefiniert!

Aus dem selben Grund muss ein Ausgang einer Funktion bei jedem Funktionsaufruf zugewiesen werden. Wird die Zuweisung eines Funktionsausgangs übersprungen, oder wird die Funktion durch BEB beendet ohne vorher den Ausgang zu schreiben, nimmt der Ausgang einen Wert an, der zufällig an entsprechender Stelle im V-Bereich steht.

Bei einem Funktionsbaustein (FB) sieht es etwas anders aus. Dort werden die Eingangs- und Ausgangsparameter im Instanz-DB gespeichert.


Gruss, Onkel
 
Hallo Onkel,

na das is doch mal nee Aussage. Die entspricht ja auch dem Effekt der bei mir aufgetreten ist.

Ich danke allen Beteiligten nochmals !

Es gibt noch sooo viel zu lernen....
 
Zurück
Oben