Problem mit Variablen in Step7

soundcraft15

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

seit Gestern habe ich folgendes Problem mit Step7:
Ich habe in meinem Programm TEMP-Variablen deklariert.
Das ganze hat auch ohne Probleme funktioniert.

Doch auf einmal funktionieren diese Variablen nicht mehr!
Des Weiteren lassen sich SR-Glieder, denen diese Variablen zugewiesen wurden nicht mehr setzen.

Wenn ich nun eine neue Variable deklariere, und die somit auch eine neue Adresse vergeben wird, funktioniert diese.

Was ist mit den "alten" variablen passiert?
Das Problem mit den SR-Gliedern ist schon öfter aufgetreten, auch wenn Merker zugewiesen wurden!

Ich hoffe ihr könnt mir helfen;)

Gruß Lukas
 
Die Frage wird hier jetzt schon zum 100000. Mal beantwortet:

Temporäre Variable behalten ihren Wert NUR innerhalb eines Bausteinaufrufs. Im nächsten Zyklus kann Deine Temp-Variable also einen völlig anderen Wert haben. Wenn Du Variable brauchst, die im nächstne Zyklus noch den gleichen Wert haben, wie vorher, dann sind TEMP völlig unbrauchbar, stattdessen musst Du Merker- oder (Instanz-)Datenbausteinbereiche verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist ja gewünscht, dass die Variable den Wert nur für einen Zyklus behält!

Die Variable bekommt am SR-Glied einen Wert (1), wenn ich diese Variable jedoch an einem anderen Baustein abfragen will is der Wert (1) nicht vorhanden!

Dort sollter der Wert jedoch auch (1) sein...oder liege ich da falsch?
 
Hallo,

Du springst in den Baustein, setzt eine LOKALE-Variable (Temporär).
Diese ist bis zum Bausteinende aktuell. Nicht bis zum Zyklusende des Programms

Im nächsten Baustein gibt es diese lokale-Variable des Vorgängerbausteins nicht mehr.

Willst du diese haben, dann brauchst du statische Variablen im FB oder aber globale Variablen (Merker,Datenbaustein...)

Statische Variablen sind dann im Instanzdatenbaustein des FB´s hinterlegt.
 
Okay!

Ich will diese Variable ja auch nur in einem Baustein verwenden.
Das funktionierte auch einwandfrei...bis gestern!

Was könnte nun das Problem sein?

MfG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ist die Variable eine temporäre lokalvariable in einem FB?

Oder eine globale in einme Merker oder Datenbaustein?

Rechtsklick auf die Variable--->gehe zur Verwendungstelle-->Doppelzuweisung?

temporäre Variablen können zufällige Werte enthalten, nachdem der FB aufgerufen wird. Vielleicht wars bei Dir so, daß es zufällig immer passte.
 
Es ist eine lokalvariable in einem FB!

Wenn ich die Ganzen Variablen aus TEMP ausschneide und nach STAT verschiebe und wieder zurück nach TEMP verschiebe geht alles wieder!

Auch die SR-Glieder machen wieder das was sie sollen!
Sehr komisch...
 
Wie wird auf die Temp Variable zugegriffen?
Absolut oder Symbolisch
Wenn Absolut dann wurde vielleicht der Temp Bereich verschoben, sprich es wurde was eingefügt oder z.b. aus einer INT eine DINT gemacht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist eine lokalvariable in einem FB!

Dann gilt die NUR in diesem FB und sonst nirgends!!! Und nur in einem Durchlauf

Wenn ich die Ganzen Variablen aus TEMP ausschneide und nach STAT verschiebe und wieder zurück nach TEMP verschiebe geht alles wieder!

Das sind ZUFÄLLIGE Werte, die du nicht beeinflussen kannst!!!

Auch die SR-Glieder machen wieder das was sie sollen!
Sehr komisch...

SR-Glieder, bei denen der Speicher eine TEMPORÄRE Variable ist, funktionieren nur zur Laufzeit in diesem einen Baustein, und nirgendwo anderst. Temporäre Variablen können beim Aufruf ZUFÄLLIGE Werte enthalten (zB. von einem zuvor aufgerufenen FB)

SR-Glieder, bei denen der Speicher eine Statische(FB) oder Globale(Merker,DBx..) ist, könne überall abgefragt werden.
 
Hallo, falls ich dein Problem richtig verstanden habe dann:

DB löschen, neu generieren über Aufruf


Hoffe ist dir hilfreich
 
Hallo,
also wenn ich das hier so lese fällt mir nur eins ein (und so geht es auch IMMER) :
Wenn man eine TEMP-Variable (egal ob FB oder FC) erst zuweist und dann irgendwo abfragt dann gibt es keine Probleme - allerdings muß auch immer sichergestellt sein, dass es nicht auch noch absolute Zugriffe gibt, die auch die symbolischen Variablen löschen oder manipulieren können. Das wird auch immer wieder gerne gemacht.
Dann wäre da noch der Punkt mit der bedingten Bearbeitung - ist denn sichergestellt, dass die Zuweisung in dem Baustein IMMER erfolgt ?
Es sollte dir schon zu denken geben, dass es funktioniert wenn du eine STAT daraus machst.

Wenn du es genau wissen willst dann stell doch mal deinen Code hier ein - idealerweise in AWL. Dann kann man mal konkreter werden ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
also wenn ich das hier so lese fällt mir nur eins ein (und so geht es auch IMMER) :
Wenn man eine TEMP-Variable (egal ob FB oder FC) erst zuweist und dann irgendwo abfragt dann gibt es keine Probleme...

Das hat doch nichts mehr mit gewollt zu tun, sondern - hoffentlich gibts keinen weiteren FB/FC, der in den Tempbereich schreibt und das ganze überschreibt.

SR-Glied auf Temp mag ja funktionieren, solange die S-Bedingung immer ansteht. Dann ist das eine ständige Zuweisung beim Aufruf. Allerdings macht dann ein SR-Glied ja auch keinen Sinn mehr
 
Also: Das Problem mit den Variablen hat sich durch eine Neugenerierung des DBs behoben!

Allerdings habe ich immernoch Probleme mit den Merkern und den SR-Gliedern.
Wenn ich am SR-Glied z.B den Merker M6.0 habe, lässt es sich nicht setzen!
Ich habe den Merker dann geändert und M106.0 daraus gemacht.
Es hat für eine gewisse Zeit funktioniert, dann wieder das Selbe Problem.

Das Problem ist bei uns schon öfter vorgekommen.
Habt ihr das auch schonmal gehabt?

Gruß Lukas
 
Wenn du es genau wissen willst dann stell doch mal deinen Code hier ein - idealerweise in AWL. Dann kann man mal konkreter werden ...

:rolleyes: so pauschal fällt mir dazu nichts ein ... Es gab zwar mal ein Problem mit dem M4.7, aber mit M106.0 ist mir da Nichts bekannt ... :cool:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich am SR-Glied z.B den Merker M6.0 habe, lässt es sich nicht setzen!
Ich habe den Merker dann geändert und M106.0 daraus gemacht.
Es hat für eine gewisse Zeit funktioniert, dann wieder das Selbe Problem.

Du weißt aber schon, dass Du globale Variable nur in Bausteinen verwenden solltest, die nur einmal aufgerufen werden?
 
Zurück
Oben