Step 7 Kann es mir (noch) nicht erklären ...

spirit

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

habe hier ein Phänomen, das ich nicht deuten kann:

Code:
      U     M    100.1
      SPBN  END

      L     27
      T     #Wert            // OUT-Variable in einer FC

END:  NOP   0


Aufruf im OB1:

Code:
       CALL  "Testbaustein"
       Wert:="DB_Test".Wert    // DB40.DBW10


Fragen hierzu:

Wenn der Merker M100.1 den Status 1 besitzt, so wird 27 in den DB geschrieben. Hat M100.1 wieder den Status 0, dann steht plötzlich wieder 0 im DB.

Wird anstatt eines DB's im OB1 z.B. ein Merkerwort 200 hinter "Wert:=" geschrieben, so bleibt die 27 auch erhalten, wenn M100.1 wieder den Status 0 annimmt.

Warum ist das hier so? :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

habe hier ein Phänomen, das ich nicht deuten kann:

Code:
      U     M    100.1
      SPBN  END

      L     27
      T     #Wert            // OUT-Variable in einer FC

END:  NOP   0


Aufruf im OB1:

Code:
       CALL  "Testbaustein"
       Wert:="DB_Test".Wert    // DB40.DBW10


Fragen hierzu:

Wenn der Merker M100.1 den Status 1 besitzt, so wird 27 in den DB geschrieben. Hat M100.1 wieder den Status 0, dann steht plötzlich wieder 0 im DB.

Wird anstatt eines DB's im OB1 z.B. ein Merkerwort 200 hinter "Wert:=" geschrieben, so bleibt die 27 auch erhalten, wenn M100.1 wieder den Status 0 annimmt.

Warum ist das hier so? :confused:

Also ich würde mich mit der Funktion von TEMP Variablen in FC beschäftigen. ;-)
So wie es ausschaut, hast du ein Problem bei deiner Zuweisung des Datenwortes am Ausgang des FC.

@Lars: nicht mehr Schule, sondern schon echtes Leben

Nix für ungut


bike
 
Ich dachte das wäre eine Frage aus der Schule, damit kam einer meiner Jungs letztens aus der Technikerschule mit an. Die Variable "Wert" war als Out deklariert. Da passiert dann genau das was Spirit beschrieben hat.
 
Schulaufgabe "Warum ist das so" ?

Nein Lars,

so wie bike schon ganz richtig erkannt hat - das wahre Leben! ;)

Es geht hier um eine Maschine, die von einer Fremdfirma gefertigt u. programmiert wurde und bei der spor. Fehler auftreten. Nun ist man an meinen Chef herangetreten, ob wir uns das mal ansehen könnten ...

Naja, und jetzt habe ich die Ehre (weil ja gerade ich soviel Ahnung davon habe) und dabei ist mir eben das oben beschriebene Phänomen aufgefallen. Aber ganz verstehen tue ich es noch immer nicht.

#Wert ist doch keine Temp-Variable sondern eine Out-Variable und die verhält sich doch anders.

Aus den Siemens-Beiträgen habe ich mal beispielhaft Folgendes rauskopiert:

Der Anwender muss hier sicherstellen, dass die OUTPUT Variable
bei jedem Durchlauf des FCs beschrieben wird: T Output


Aber was ich nicht verstehe: Wenn M100.1 nicht aktiv ist, dann wird doch überhaupt nichts in die Out-Variable geladen. D.h. beim erneuten Aufruf der FC wird doch dann die Stelle mit Laden/Tranferieren komplett übersprungen. Wie kann da dann plötzlich Null geladen werden? :confused:

Dann sind doch diese ganzen Variablen bei einer FC absoluter Mist (zumindest wenn man das Prinzip nicht versteht)!
 
sinngemäß: Merker werden absolut an eine Funktion übergeben und direkt beschrieben, eine Variable aus einem DB nicht. Da geht der Weg über was temporäres.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sinngemäß: Merker werden absolut an eine Funktion übergeben und direkt beschrieben, eine Variable aus einem DB nicht. Da geht der Weg über was temporäres.

Ok Lars,

das wäre aber nicht so, wenn ich statt einer Out-Variablen eine IN_OUT-Variable benutzen würde, richtig?

Dann sollte diese Eigenart (selbst in Zusammenhang mit einem DB) nicht zum Tragen kommen - zumindest habe ich es so verstanden!

Danke!
 
Hi,
ich versuche es mal so: Jedes Programmiersystem kennt statische und dynamische Variablen. Ich definiere das jetzt mal so. Statische sind dabei bei mir Global und Instanzdatenvariablen. Diese sind jetzt mal uninteressant.
Die Funktionsweise der dynamischen Variablen ist ja hier das hinterfragte. Also der sogenannte temporäre Bereich. Dieser ist wie schon im Handbuch beschrieben nur zur Laufzeit des aktuellen Programmteiles gültig. Ist der Programmteil beendet wird dieser Bereich vom anderen, aktiven Programmteil benutzt. Damit ist bei Programmaufruf der Wert unbestimmt.
Wird jetzt eine Übergabevariable definiert bedient sich das Programmiersystem offensichtlich auch aus diesem Variablenbereich. Und damit kann der Zustand hier auch nicht bestimmt werden wenn die Variable nicht definiert gesteuert wird. Das ist ja hier der Fall. Will heißen, es ist gut möglich das auch der Wert 1 angenommen werden kann oder wechselnd oder was auch immer.
Ich würde sowas auch definitiv nicht so lassen, das ist gefährlich für Mensch, Maschine und Reputation.

Gruß
Mario
 
Eben nicht.
Im FC sind Outputs im Verhalten genau wie Temps, da ja keine externe Speicherung stattfindet!

Die Funktionsweise der dynamischen Variablen ist ja hier das hinterfragte. Also der sogenannte temporäre Bereich. Dieser ist wie schon im Handbuch beschrieben nur zur Laufzeit des aktuellen Programmteiles gültig. Ist der Programmteil beendet wird dieser Bereich vom anderen, aktiven Programmteil benutzt. Damit ist bei Programmaufruf der Wert unbestimmt.
Gruß
Mario

Ja eben hier lag/liegt mein Verständnisproblem. Ich dachte bisher, nur wo Temp draufsteht ist auch Temp drin! :p

Insofern ist mir echt völlig neu, dass auch eine Out-Variable zu der Gruppe der Temp-Variablen zählt. Aber ok, dann wäre ja der Fehler gefunden und ich bin (dank euch) wieder ein Stückchen schlauer geworden.

Aber es ist natürlich super, dass das offensichtlich der andere Programmierer auch nicht wusste ... *Schadenfreude*
 
Schau, das ist eben auch das schöne an unserem Beruf.
Wie ich im zweiten Post geschrieben habe, du musst, so bescheiden es auch ist, dir die Grundlagen aneignen.
Ist dir wirklich geholfen, wenn dir die Lösung präsentiert wird?

Sei versichert, dass schon viele hier auch schon in diese Löcher reingefallen sind.


bike
 
Schau, das ist eben auch das schöne an unserem Beruf.
Wie ich im zweiten Post geschrieben habe, du musst, so bescheiden es auch ist, dir die Grundlagen aneignen.
Ist dir wirklich geholfen, wenn dir die Lösung präsentiert wird?

Sei versichert, dass schon viele hier auch schon in diese Löcher reingefallen sind.

bike

Hi bike,

sicherlich ist es richtig, dass es nicht ohne Grundlagen geht. Aber es ist auch nicht leicht in den Büchern (oft sehr theoretisch) immer alles zu verstehen.

Ich weiß z.B. von anderen Firmen, bei denen es mehrere Programmierer gibt und "neue" Leute den alten Hasen zur Seite gesetzt werden um Erfahrungen zu sammeln.
Glaube da tut man sich dann schon um einiges leichter.

Und bei vielen Dingen fehlt halt auch die Praxis und da komme ich dann nicht drauf. Aber es wird schon werden ...

Ist ja noch keine Meisterin vom Himmel gefallen! ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sicherlich ist es richtig, dass es nicht ohne Grundlagen geht.
War in keiner Weise böse oder herablassend gemeint.
Klar kann man dir schreiben, es ist so oder so.
Mein Ansinnen ist es dir zu schreiben, wo du dich über dieses sonderbare? Verhalten einlesen kannst.

Ist ja noch keine Meisterin vom Himmel gefallen! ;)

Ist es wichtig, dass man Meister wird?
Mir sind Leute lieber, die handwerklich gute Arbeit machen.


bike
 
War in keiner Weise böse oder herablassend gemeint.
Klar kann man dir schreiben, es ist so oder so.
Mein Ansinnen ist es dir zu schreiben, wo du dich über dieses sonderbare? Verhalten einlesen kannst.

Nein, nein. Hatte es auch nicht so verstanden ...

Passt scho! Nur manchmal braucht frau einfach trotzdem noch begleitende Erklärungen, auch wenn ich dann weiß, wo etwas steht. ;)


Ist es wichtig, dass man Meister wird?
Mir sind Leute lieber, die handwerklich gute Arbeit machen.
bike

Wie heißt es doch immer so schön - würden nur die Vögel mit den schönsten Stimmen zwitschern, dann wäre es ganz schön ruhig in den Wäldern ... :p
 
Zurück
Oben