Step 7 Zähler in SCL

Zuviel Werbung?
-> Hier kostenlos registrieren
… ich danke euch für die Geduld. Übrigens, könnte einer der Moderatoren bitte unter meinem Namen die Wörter "Erfahrener Benutzer" wegnehmen? ;)

Nochmals zum Verständnis; ich hatte ja Folgendes programmiert:

Code:
IF NOT Eingang AND fm THEN
   TAKT := 1;
END_IF;
fm := Eingang;



Also die Variable TAKT, die als Eingangs-Variable deklariert ist, dauerhaft auf 1 gesetzt.

So, nun wird im nächsten Zyklus diese Eingangsvariable TAKT eingelesen; allerdings nicht als 1 sondern als 0, da der eigentliche Status 1 von TAKT nicht nach außen an die Schnittstelle übergeben werden kann.

Das ist auch der Grund, warum das Beispiel funktioniert; da das Programm beim erneuten Durchlauf die Variable TAKT als 0 ansieht.

Kann man das so sagen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke ducati,

also mit beschaltet meinst du, wenn z.B. ein Eingang auf 1 ist, oder?

Und unbeschaltet wäre ja das von mir aufgezeigte Beispiel und dann würde mein "Erklärungsversuch" soweit stimmen???

Eine unbeschaltete InVariable behält doch den Wert nicht bei, sondern erhält ihn erst wieder, wenn das Programm erneut durchlaufen wird; so zumindest hatte ich Ralle jetzt verstanden. :confused:
 
Dein Baustein wird also abgearbeitet, der Eingang wird eingelesen (hier 0),
...
Wenn dein Baustein dran ist, wird der Eingang eingelesen, der ist immer noch 0, denn du hast ihn zwar intern auf 1 geschrieben, aber das wird nicht nach Außen an die wirkliche Eingangsvariable witergegeben.

Eine unbeschaltete InVariable behält doch den Wert nicht bei, sondern erhält ihn erst wieder, wenn das Programm erneut durchlaufen wird; so zumindest hatte ich Ralle jetzt verstanden. :confused:

Doch...

Ralle ist davon ausgegangen, das der Eingang auch (mit 0) verschaltet ist.
 
Ok, glaube jetzt gebe ich auf!

Verstehe momentan echt nur noch Bahnhof...

Ich hatte lediglich TAKT intern fest auf 1 gesetzt und TAKT als Eingangs-Variable deklariert. Nicht mehr und nicht weniger; keine Ahnung ob ich da irgend einen Eingang verschaltet habe oder nicht. Und so wie ich das (bisher) verstanden hatte, orientiert sich die SPS beim Einlesen des Eingangs nicht welchen Wert die Variable TAKT intern (fest) hat, sondern liest den Eingang mit dem Status 0 ein, da er nicht auf 1 gesetzt (z.B. E0.0 = 1) ist.

Aber offensichtlich habe ich das alles falsch verstanden. :x
 
... mir ist es noch nicht zu warm ... ;)

Wenn du TAKT als IN-Variable nimmst dann ist sie trotzdem eine "ganz normale" Variable (wie auch eine STAT-Variable) in deinem Instanz-DB.
Du kannst (auch wenn über die Schnittstelle anders zugewiesen) der Variablen im weiteren Code einen anderen (als den übergebenen) legalen Wert zuweisen.
Dieser Wert wird dann, zumindestens bis zum nächstens Aufruf des Bausteins oder bis zu einer neuerlichen Manipulation im folgenden Code, beibehalten.

Aber grundsätzlich (wie schon von Ralle erläutert) : Eine IN-Variable nimmt beim Start des Baustein den Wert der äußeren Beschaltung an.

Trotzdem würde ich dir empfehlen, zu tun, wie schon Ducati schreibt : Ausprobieren hilft ...

Gruß
Larry
 
Ok, glaube jetzt gebe ich auf!

Verstehe momentan echt nur noch Bahnhof...

Ich hatte lediglich TAKT intern fest auf 1 gesetzt und TAKT als Eingangs-Variable deklariert. Nicht mehr und nicht weniger; keine Ahnung ob ich da irgend einen Eingang verschaltet habe oder nicht. Und so wie ich das (bisher) verstanden hatte, orientiert sich die SPS beim Einlesen des Eingangs nicht welchen Wert die Variable TAKT intern (fest) hat, sondern liest den Eingang mit dem Status 0 ein, da er nicht auf 1 gesetzt (z.B. E0.0 = 1) ist.

Aber offensichtlich habe ich das alles falsch verstanden. :x


Also nochmal, ich habs dann mal gerade getestet mit PLCSIM.

Egal ob du den INPUT beschaltest oder nicht, was immer du damit (wenn du ihn im FB symbolisch als normale Input-Variable ansprichst) machst, er wird am Anfang der Abarbeitung des FB eingelesen und hat da den Wert, der von Außen angelegt ist. Ist nichts angelegt, dann hat die VAriable den Wert, der bei der Deklaration als Anfangswert vorgegeben wurde (hat man da nichts geändert, ist das False).
Also alles im grünen und somit logischen Bereich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe schon viel rumprobiert... kann aber leider die Ergebnisse nicht immer deuten; daher ja auch meine (vielen) doofen Fragen!

Zusammenfassung (erneuter Versuch):

Wenn ich an einen Eingang von Außen kein Signal anlege, dann ist dieser unbeschaltet. Im FB deklariere ich eine InVariable TAKT, die fest den Status 1 besitzt.
Beim Einlesen hat der INPUT jedoch trotzdem 0, da nicht beschaltet und auch der vorgegebene Anfangswert nicht geändert wurde. Erst beim Durchlauf des Programmes erhält die InVariable wieder den Status 1, da ja TAKT fest auf 1 gesetzt ist. Stimmt's jetzt?
 
Jetzt hört sich das ganze doch gut an!
Wenn du jedoch als Anfangswert für deine Eingangsvariable Takt True gesetzt hast und aussen nichts verlinkst ist die Eingangsvariable Takt beim Beginn des Bausteins erstmal True!
Das ganze gilt jedoch nur sollange du nie etwas am Baustein verlinkst! Sobald hier einmal ein 0 Signal also False verlinkt wurde ist die Variable beim Beginn ebenso False
Sollange du sie nicht abnullst bzw. im Baustein wieder setzt!


Mfg
 
Zuletzt bearbeitet:
Na da fällt mir jetzt aber ein Stein vom Herzchen... dachte schon es liegt wirklich daran, dass ich blond bin. :p

Gibt es eine Möglichkeit, dass frau das sichtbar macht, dass die Eingangsvariable TAKT beim Beginn (Einlesen) des Bausteins erst einmal TRUE ist? Natürlich nur dann, wenn ich den Anfangswert dieser Variablen auf TRUE gesetzt habe.

Lieben Dank...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja ...
Du könntest dir den Status in STAT-Hilfsvariablen abspeichern, die du in den entsprechenden Zeilen setzt / zuweist.

Was ich jetzt bei der ganzen TAKT-Geschichte immer noch nicht verstanden habe (obwohl ich mich wirklich bemüht habe ;)) ist, welchen Sinn das Alles in Verbindung mit dem Counter hat ...

Gruß
Larry
 
Hab gestern Abend mal nachgelesen, was mein alter Steuerungstechnik-Prof. gesagt hat:

In-Variablen soll man im FB nur lesen, IN_OUT-Variablen kann man lesen und beschreiben

Allerdings hat er sich nicht dazu geäußert, was passiert, wenn man IN-Variablen trotzdem beschreibt. Prinzipiell ist es aber auch egal, da man es nicht machen soll(te)...

gruß.
 
Jetzt hört sich das ganze doch gut an!
Wenn du jedoch als Anfangswert für deine Eingangsvariable Takt True gesetzt hast und aussen nichts verlinkst ist die Eingangsvariable Takt beim Beginn des Bausteins erstmal True!
Das ganze gilt jedoch nur sollange du nie etwas am Baustein verlinkst! Sobald hier einmal ein 0 Signal also False verlinkt wurde ist die Variable beim Beginn ebenso False
Sollange du sie nicht abnullst bzw. im Baustein wieder setzt!
Mfg

Fall 1: keine Beschaltung von außen
Wenn man die Variable im Baustein beschreibt, dann hat sie für den Rest des Bausteins in diesem Zyklus den neu beschriebenen Wert. Im nächsten Zyklus behält sie diesen manipulierten Wert!

Fall 2: Beschaltung von außen
Wenn man die Variable im Baustein beschreibt, dann hat sie für den Rest des Bausteins in diesem Zyklus diesen neu beschriebenen Wert. Im nächsten Zyklus hat sie wieder den Wert der außen angelegten Variable!

PS: Ich muß aber auch sagen, INPUT-Variablen sollte man nicht beschreiben, das bringt auch spätere Programmierer nur durcheinander. Dann doch besser auf eine Stat-Variable kopieren und mit dieser weiterarbeiten.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Fall 1: keine Beschaltung von außen
Wenn man die Variable im Baustein beschreibt, dann hat sie für den Rest des Bausteins in diesem Zyklus den neu beschriebenen Wert. Im nächsten Zyklus hat sie wieder den Anfangswert!

Hmm, Ralle

habs grad mit Step7 5.5 SP3, SCL und CFC und FUP getestet:

wenn ich bei unbeschalteter Eingangsvariablen im Baustein die Variable einmal beschreibe, bleibt der neue Wert auch im nächsten Zyklus erhalten, auch wenn ich im Baustein jetzt diese Eingangsvariable nicht mehr beschreibe.
Man sieht im zugehörigen InstanzDB, das sich der Aktualwert der IN-Variablen ändert und auch erhalten bleibt, wenn im Baustein auf die IN-Variable nicht mehr geschrieben wird.

Gruß.
 
... ich würde hier aber auch davon ausgehen, dass sie den Wert der Beschaltung (wenn vorhanden) annimmt - ansonsten das, was ihr zuletzt "eingetrichtert" wurde ...

Gruß
Larry
 
Hab auch grad eine Anwendung gefunden, wo ich das nutze (vielleicht nicht ganz sauber)

ich hab nen Bausteineingang welcher nicht verschaltet wird, sondern nur von der Visu aus verändert werden kann (über den zugehörigen IDB). Wenn ich jetzt von der Visu aus ne Eingabe mache, wird im Baustein die Gültigkeit (min/max) überprüft. Liegt der eingegebene Wert ausserhalb der Grenze, wird die IN-Variable auf den Max bzw. Min Wert im Baustein beschrieben. Und das bleibt dann auch (bis zum nächsten CPU-Gesamtladen) erhalten.

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
erstmal --> Nein, immer

Also wenn wir jetzt von einem FB mit Instanz DB reden trifft "immer" nicht ganz zu!

Ich habe einen FB mit einer Eingangsvariable nennen wir sie "TAKT_E" und einer Ausgangsvariable die wir "TAKT_A" nennen.
Die Variable "TAKT_E" wird mit Anfangswert "TRUE" projektiert!
Im Baustein selber befidnet sich dann nur folgender Code:

Code:
U TAKT_E
= TAKT_A

Wird dieser FB nun aufgerufen ohne "TAKT_E" von außen zu beschaltet ist auch "TAKT_A" auf True.
Wird "TAKT_E" von außen beschalten und die Angelegte Variable ist False so wird auch "TAKT_A" False.
Wenn man dann die Angelegte variable wieder entfernt somit ist "TAKT_E" wieder unbeschaltet wird "TAKT_A" sollange False
sein bis der IDB neu geladen wird!

Mfg
 
Ja, ihr habt Recht, ich hab das gerade noch einmal getestet, erst bei "Neu Laden" des IDB wird der Anfangswert dann wieder vewendet!

Ich korrigiere da mal in meinem Post oben, damit da nicht noch mehr Leute durcheinander kommen! :-?
 
Jo, und um die Verwirrung für den TE aufzulösen:

1. IN-Variablen beschreibt man im Baustein nicht
2. Was dabei passieren würde ist für den Anfänger egal, siehe 1.
3. Für einen Zähler in SCL ist die Diskussion unerheblich
4. Ein einfacher Zähler in SCL könnte so wie in meinem Post #17 aussehen.

Gruß.
 
Zurück
Oben