Step 7 Deklarieren von temporären Variablen unter Step 7 5.5

Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich bin noch ganz am Anfang meiner Programmiererkarriere, habe jetzt ein Problem bei meinen Hausaufgaben.
Ich nutze Siemens Step 7 5.5 SP3 auf Win7Pro 32BIT, habe damit schon ein paar Aufgaben gelöst. Nun hatte ich eine Aufgabe soweit auch schon fertig, in der es darum geht den FB R_Trig nachzubauen, wozu eine temporäre Variable genutzt werden muss. Im ersten Anlauf hatte ich durch Zufall den Reiter mit der Möglichkeit die Variable zu setzen, danach habe ich das ganze Projekt nochmals neu erstellen wollen, schaffe es aber nicht mehr die temporäre Variable zu deklarieren.

Kann mir bitte jemand sagen, wie ich an den Deklarationsteil in Step 7 (Umgebung\Schnittstelle\TEMP) herankomme? (Ein paar Screenshots wären schön.)
Ich habe sämtliche Menüs, Dokus und im Netz zu findende Beiträge abgesucht, konnte aber nur Angaben zu älteren Step 7 Versionen finden, die auch nicht die Herangehensweise für die temporären Variablen erklärten.

Vielen Dank im Voraus für Eure Hilfe...
 
Die Deklaration befindet sich quasi "oberhalb" des Bereichs für den Programmcode. Platziere mal den Mauszeiger ganz oben auf den "Rand" des Codefensters. Dann zieh den Rand nach unten.
Aber Vorsicht! R_TRIG und TEMP klingt so, als würdest Du in eine Falle stolpern. TEMP-Variablen sind nicht geeignet, weil sie den Wert nicht speichern können.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tigerente1974!

Vielen Dank erst einmal für Deine Hilfe, auf das Herunterziehen der Leiste wäre ich selbst nicht drauf gekommen. Mit dem Tip hast Du mir sehr geholfen, denn über den Zugang zu diesen Einstellungen findet man keine Doku. Da hätte Siemens die Optik mal etwas besser gestalten können.
Zu der Warnung bezüglich der temporären Variablen kann ich Dir auch noch etwas zurückgeben. Bei mir wird die Verwendung einer temporären Variablen in der Aufgabenstellung aufgelistet. Dies aber in Zusammenhang mit der Nutzung des OB31, der lt. Aufgabe einen festen Zyklus von einer Sekunde hat. Die Angabe stimmt zwar nicht, bei mir wurden dafür 2000 ms angezeigt, aber der feste Zyklus ermöglicht für diese kleine Lernaufgabe die Auswertung einer steigenden Flanke. Es funktioniert gut, so lange der Eingangspuls auch lang genug ist. Einen kurzen Wisch am Eingang registriert die Funktion jedenfalls nicht.
Das Bildungsinstitut, bei dem ich mein Fernstudium absolviere, sagt jedoch auch schon, daß die Aufgaben nicht unbedingt praxisnah sind.
Ich selbst bin beruflich als Inbetriebnehmer für Industrieanlagen unterwegs, derartige Lösungen mit Zykluszeiten von 2 Sekunden wären für uns gar nicht akzeptabel, da in zwei Sekunden schon zuviel passiert.

Soweit noch ein Mal: Vielen Dank!!! :smile::wink::smile::s12:

Wünsche Dir immer korrekt gestzte Bits... :wink:
 
Zu der Warnung bezüglich der temporären Variablen kann ich Dir auch noch etwas zurückgeben. Bei mir wird die Verwendung einer temporären Variablen in der Aufgabenstellung aufgelistet
Es muss ein fehler bei der Aufgabesteller sein. Er meint vielleicht ein "Zwischenvariabel" oder sowas, nicht ein TEMP Variabel.
Ein temporäre (TEMP) Variabel kann absolut nicht verwendet werden um ein Flankenauswertung zu machen.

Obwohl es scheint zu funktionieren, dann ist es sicherlich nur weil das Anwenderprogram sehr einfach ist.
Das Programspeicher, wo die TEMP Variabeln geschrieben sind, wird in dein Fall nicht von andere Programbausteine überschrieben. Vielleicht gibt es nur OB1 und noch ein Baustein. Auf den Grund funktioniert es zufällig in diesen Fall. Aber in ein 'richtigen' Program wurde es nicht funktionieren.
Du musst entweder ein STAT Variabel in den Baustein deklarieren (wenn FB), oder ein freien DB oder Merker verwenden (wenn FC oder OB).
 
Bei TEMP-Variablen ist der Inhalt zufällig, wenn der Baustein aufgerufen wird. Daher sollte der erste Zugriff auf eine TEMP-Variablen immer schreibend erfolgen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Aufgabe ist schon korrekt gestellt, sie dient eben nur der Schulung im Umgang mit den Programmierwerkzeugen.
Wie bereits erwähnt muss für die kleine Funktion der OB31 verwendet werden, da er eine hohe feste Zykluszeit von 2 Sekunden hat. Würde man die Funktion mit dem Standard OB1 programmieren, dann würde man nie das Setzen des Ausganges sehen können. Es ist nur eine Spielerei für den Anfang, in der Praxis nicht verwendbar.

Man programmiert zwei Netzwerke, im ersten Netzwerk wird der Eingang "IN" mit der Negierung der TEMP-Variablen "IN_OLD" AND-verknüpft und damit der Ausgang "OUT" gebildet. Im zweiten Netzwerk wird der Eingang "IN" mit sich selbst AND-verknüpft und das Ergebnis der TEMP-Variablen "IN_OLD" zugewiesen.

In der Simulation muss man den Eingang "IN" mindestens für einen halben Zyklus high setzen, damit der Ausgang "OUT" für einen Zyklus des OB31 high wird. Lässt man den Eingang "IN" für längere Zeit high, so sieht man, dass für einen Zyklus der Ausgang "OUT" gesetzt wird und dann wieder auf low zurückfällt.
Das klappt nur durch die langsame Abarbeitung. :wink:

Wie gesagt: Ist nur eine Spielerei zu Schulungszwecken...
 
Man programmiert zwei Netzwerke, im ersten Netzwerk wird der Eingang "IN" mit der Negierung der TEMP-Variablen "IN_OLD" AND-verknüpft und damit der Ausgang "OUT" gebildet. Im zweiten Netzwerk wird der Eingang "IN" mit sich selbst AND-verknüpft und das Ergebnis der TEMP-Variablen "IN_OLD" zugewiesen.

...

Das klappt nur durch die langsame Abarbeitung. :wink:
Aber auch bei langsamer Abarbeitung im OB31 ist nicht sicher gestellt, das die Zuweisung für "IN_OLD" im nächsten Zyklus noch gültig ist!
(Der OB verlängert nur die Sichtbarkeit der Flanke. Er verändert aber nicht das Verhalten der Variablen.)

Wenn sonst weiter nichts programmiert ist, kann das offensichtlich klappen. Das ist jedoch reiner Zufall! Mit Beendigung des Bausteins, in dem die Temp-Variable deklariert ist (hier der OB31) wird der Speicherplatz für die Temp-Variable wieder zur allgemeinen Verwendung für alle anderen Bausteine freigegeben. Wenn man Glück hat, verwendet jedoch kein anderer Baustein diesen Speicherplatz, so dass er beim nächsten Aufruf des Bausteins noch seinen Inhalt hat.

Jedoch hat man nicht immer Glück im Leben.

Deshalb finde auch ich es keinesfalls korrekt, so eine Programmierweise auch noch zu lehren. Nicht mal als schlechtes Beispiel würde ich das zeigen.

Wenn Du hier mal die Suche bemühst, wirst Du feststellen, das sich gefühlt die Hälfte der Threads genau um dieses Problem der temporären Variablen dreht. Vergiss also lieber diesen Sch... und gewöhn' Dir gleich die richtige Verwendung von Variablen an.


In diesem Fall wäre z.B. eine globale Variable für IN_OLD angebracht.
 
Hallo Hucki!

Zum einen ging es mir bei meiner Fragestellung hier nicht um das Thema TEMP-Variablen und ob und wie man damit sinnvoll programmiert, sondern darum eine Antwort darauf zu erhalten, wie ich diese Variable deklarieren kann, da bei mir im Step7 das Fenster dazu nicht zu sehen war.
Zum anderen habe ich die anderen Forenbeiträge zum Thema TEMP-Variablen bei meiner Suche schon gelesen. Was für den Einsatz im Feld, bzw. der Programmierung von Maschinen, an denen eventuell auch Menschenleben hängen können, richtig ist, das hätte mir aber nicht dabei geholfen einer klaren Aufgabenstellung nachzukommen, die die Verwendung einer TEMP-Variablen vorsah. Die Aufgabe ist entsprechend den Vorgaben korrekt gelöst.

Ich habe mit meinem Fernlehrgang erst begonnen, gewöhne mich so langsam an die Tools wie Step7, TIA-Portal und CoDeSys. Zum Lernprozess sollten dann meiner Meinung nach auch solche nicht praxisgerechten Dinge gehören.
Es nützt nichts, von einem System nur zu lernen, wie man es richtig bedient, man muss auch lernen, wie man es nicht bedienen sollte.
Wenn es soetwas wie die TEMP-Variablen gibt, dann muss man auch lernen, wozu sie da sind, und wie man mit ihnen umgeht oder eben auch nicht.

Aber trotzdem vielen Dank für Deine Einwände



Meine hier gestellte Frage wurde korrekt und ausreichend von Tigerente1974 beantwortet.
Wie idealerweise mit kurzfristig zu speichernden Werten umzugehen ist, dass wird in vielen anderen Forenbeiträgen behandelt und sollte an dieser Stelle nicht zu weiteren Diskussionen führen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Vorwurf geht auch nicht an Dich, sondern an den Unterricht der Fernschule.
Ich find' das mehr als fahrlässig. Auch wenn der Hauptsinn das Erstellen und Verwenden lokaler Variablen ist, gibt es dafür sicher auch fachlich richtige Aufgaben. Du hast den Fehler durch Belesen erkannt, aber wieviele Schüler vor und nach Dir übernehmen das so in ihr Grundwissen?

Die Aufgabe ist schon korrekt gestellt, ...
Und an Deiner Stelle würde ich beim Abgeben der Aufgabe auch darauf hinweisen, das und warum das Verwenden der Temp-Variable für diese Aufgabe eben nicht korrekt ist.



Meine hier gestellte Frage wurde korrekt und ausreichend von Tigerente1974 beantwortet.
Wie idealerweise mit kurzfristig zu speichernden Werten umzugehen ist, dass wird in vielen anderen Forenbeiträgen behandelt und sollte an dieser Stelle nicht zu weiteren Diskussionen führen.
Und weil Dein Problem bereits mit der ersten Antwort gelöst wurde und das auch andere Suchende so nachvollziehen können, können wir hier im Anschluss auch darauf hinweisen, dass - und diskutieren, warum - ein Lehrinstitut solche fachlich inkorrekten Aufgaben verwendet.
;)
 
Zurück
Oben