Strukturierter Text _Temp need ya help

skillrun

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,
und zwar sitz gerade in der arbeit und hab keinen Plan von ST programmiern (für die SPS)
wallbash.gif

Ich weiß es ist nicht der richtige Thread aber es gab keinen zu ST und daher viele sprachen ähnlich sind, hab ich mir gedacht, vl. wisst ihr mehr darüber.

Codebeispiel:

Schaltspiele := SChaltspiele + (BOOL_TO_DWORD(NOT Befehl AND Befehl_temp);
Befehl_temp := Befehl;

was bitte sagd temp aus... und warum erkennt das programm überhaubt das es sich dabei um eine bestimmte variable handelt, da ja eig. _keine genauere zuweisung von Befehl ist, sondern eig. nur ein normaler name...

bitte um antworten...
danke
mfg
Tobias
 
Temp im Variabelnnamen bedeutet soviel wie Otto, Helmut oder Maria.

Üblicherweise deutet es aber auch darauf hin, dass es sich um eine Lokale und temporäre Variable handelt - dies müsste aber in der Deklaration ersichtlich sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das ist ja das komische, ich weiß das es eine temporäre variable ist, aber wird ganz normal deklariat, (Befehl_temp :BOOL;)
aber wie funktionieren eig. temporäre variablen an sich ?

nehmen irgendwi immer den wert an vom letzten vorgang oder so... ? ? ?
 
Nein, so ist es nicht. Da du dich nicht darüber ausgelassen hast welche Steuerung du verwendest schreib ich mal was ich allgemein über temporäre Variablen sagen kann. Mag sein dass die einzelenen Steuerungen in Details etwas anders sind.

Beim Aufruf deiner Funktion wird in der CPU ein Speicherbereich reserviert, der in der Größe der Summe der temporären Variablen entspricht (Vergleichbar mit einem Stück einer Schultafel)
Du weißt jetzt zwar, welcher Speicherbereich dir gehört, aber es steht noch das drin was der letzte reingeschrieben hat (Schultafel: Unterrichtsstoff der letzten Stunde)
Also löscht du dein Zeugs ab und beschreibst es neu (Schultafel: jetzt steht das aktuelle Zeugs drauf)
Wenn die Funktion abgearbeitet ist wird der Speicher wieder freigegeben (Die Schultafel darf jetzt wieder von anderen benutzt werden - natürlich sollten die erstmal löschen)
 
danke, a hab ich ganz vergessen, TwinCAT PLC Control: ST

Und weisd du zufällig worin da der Sinn bestehen soll ?
->

Summenstoerung := Summenstoerung OR Stoerung;

Also Stoerung wird zuvor so festgelegt; Stoerung := Stoerung_GS OR Stoerung_AS OR Stoerung_Beide OR usw. (alle stoerungen aufgelistet)
für was ist die summenstoerung gut und warum schreibt man summenstoerung := summenstoerung ergibt ja auch keinen Sinn ?
 
du auch, weitere frage ;) endless questions... so much questions... in my head... fuck ^^ so kompliziert .... ich stell mal ein beispiel rein vl. is dann leichter zu verstehn was ich meine
 
Code:
in_GS_temp := Endschalter_GS_temp AND NOT Endschalter_AS_temp AND NOT Befehl;
in_AS_temp := Endschalter_AS_temp AND NOT Endschalter_GS_temp AND Befehl;

TON_GS(IN := in_GS_temp, PT := Applikationszeit_GS, Q => in_GS); 
TON_AS(IN := in_AS_temp, PT := Applikationszeit_AS, Q => in_AS);

Spule_GS := NOT Befehl AND NOT Sperre_GS;
Spule_AS := Befehl AND NOT Sperre_AS;

Stoerung_GS_temp := Spule_GS AND NOT in_GS_temp;
Stoerung_AS_temp := Spule_AS AND NOT in_AS_temp;
Stoerung_beide_temp := (Spule_GS OR Spule_AS) AND Endschalter_AS AND Endschalter_GS;

und dass geht immer so weiter mit den vielen temp, und ich komm nicht dahinter was der sinn davon ist..

und deklariert werden die temp so:

Code:
Endschalter_GS_temp            : BOOL;
    Endschalter_AS_temp            : BOOL;
    in_GS_temp                    : BOOL;
    in_AS_temp                    : BOOL;
    Stoerung_GS_temp            : BOOL;


also wie ganz normale namen, ich verstehs nicht wi das programm mitkriekt das es keine normalen variablen sind... und was das _temp bringt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, die Variable "in_GS_temp" wird wahrscheinlich in deinem Programm mehrmals abgefragt. Man könnte natürlich auch jedes mal den ganzen Ausdruck "Endschalter_GS_temp AND NOT Endschalter_AS_temp AND NOT Befehl" hintippen, aber wer will das schon. Und ausserdem benötigt das dann auch mehr Zeit bei der Bearbeitung.
Also wird erstmal zusammengefasst was zusammengehört und dann damit weitergearbeitet.

Ich bin kein Twincat-Programmierer aber ich gehe davon aus dass dein Baustein irgendwie so aussicht:
Code:
FUNCTION FCxxx : INT


VAR_INPUT
    // Eingangsvariablen
END_VAR


VAR_INPUT
    // Ausgangsvariablen
END_VAR


VAR_TEMP
    // Temporary Variables
     Endschalter_GS_temp            : BOOL;
     Endschalter_AS_temp            : BOOL;
     in_GS_temp                    : BOOL;
Code:
[FONT=Times New Roman]   in_AS_temp                    : BOOL;
END_VAR
[FONT=arial]

END_FUNCTION


[/FONT][/FONT]

Und dann kennt der Compiler anhand des Schlüsselworts VAR_TEMP dass es sich um temporäre Variablen handelt.

 
Zuletzt bearbeitet:
dasselbe hab ich mir auch schon gedacht, aber das sicke daran ist, das der ganze spaß

VAR
>>>>hier deklariert ist - in den normalen variablen<<<<<<<
END_VAR
 
Dann müssten es statische Variablen sein. Das ändert an der Funtion nix, nur der Speicherbereich und Speicherbedarf sind dann anders. Die Daten stehen in einem Statischen Speicherbereich und haben immer den gleichen Platz der nur von ihnen verwendet wird. Also nix mit Tafel und löschen.
Ergo ist das Temp im Variablennamen irreführend.

Bitte die TwinCat-Programmierer mich zu korrigieren wenn ich Käse schreibe.
 
Genau, und ich denke dass es da sogar fälschlicherweise steht. Es ist ja nur ein Name. Die Variable könnte genausogu Otto heißen. Absolut egal. die Eigenschaften ergeben sich aus der Deklaration. Mann wird aber versuchen, sich das Leben leichter zu machen und in den Namen gewisse Infos packen damit es lesbarer wird
 
dass kann ich mir eig. überhaubt nicht vorstellen, daher das in 20 - 30 verschiedenen programmen immerwider vorkommt und deshalb glaub ich nicht dass hier ein fehler vorliegt... aber bald werd ich von einem Mitarbeiter darüber aufgeklärt.-. bin scho gespannt
 
Bei TwinCat sind nur die Variablen von Funktionen temporär, alles andere ist statisch. Ich habe allerdings gerade mal etwas ausprobiert: Der Compiler schluckt das Schlüsselwort "VAR_TEMP", aber soweit ich nach meinem kurzen Versuch beurteilen kann, sind so deklarierte Variablen trotzdem statisch.
 
Code:
Schaltspiele := SChaltspiele + (BOOL_TO_DWORD(NOT Befehl AND Befehl_temp);
Befehl_temp := Befehl;

Die Variable mit dem "temp" am Ende des Namens dient hier zur Flankenbildung (negative Flanke von "Befehl"). Das funktioniert nur wenn es eben keine temporäre sondern eine statische Variable ist. Ein anderer Programmierer würde ggf. "Hilfsmerker" oder dergleichen in den Namen der Variable einbauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Zusatz _temp dient dem Programmierer hier offenbar nur zur besseren Lesbarkeit des Programms. Das, was Du bisher hier an Programmschnipseln veröffentlich hast ist auch ohne Kommentar sofort verständlich. Stell Dir vor, wenn da nur Merker0 bis Merker0815 deklariert wäre! Da könnte man das Programm kaum verstehen -geschweige denn- Fehler suchen!
Beispiel: Ich möchte wissen, ob ein Taster gedrückt wurde oder nicht. Taster1 ist als Öffner verdrahtet, Taster2 als Schließer. Ich möchte aber TRUE haben, wenn der Taster gedrückt wird. Also könnte ich Variablen anlegen, die mir diesen Zustand anzeigen. Um beim späteren lesen des Programms den Bezug zum Taster1 und Taster2 herzustellen ist es gut, wenn der Name Taster1 und Taster2 auch im Variablennnamen auftacht. Was liegt also näher, die Variablen Taster1_temp und Taster2_temp zu nennen?
Deklaration
VAR_GLOBAL
Taster1 AT %I*:BOOL;(*hier ist Taster1 angeschlossen*)
Taster2 AT %I*:BOOL;(*hier ist Taster2 angeschlossen*)
END_VAR

VAR
Taster1_temp:BOOL;(*ist TRUE, wenn Taster1 gedrückt*)
Taster2_temp:BOOL;(*ist TRUE, wenn Taster2 gedrückt*)
END_VAR

Programm
Taster1_temp:=NOT Taster1;
Taster2_temp:=Taster2;
 
Taster1 ist als Öffner verdrahtet, Taster2 als Schließer. Ich möchte aber TRUE haben, wenn der Taster gedrückt wird. Also könnte ich Variablen anlegen, die mir diesen Zustand anzeigen. Um beim späteren lesen des Programms den Bezug zum Taster1 und Taster2 herzustellen ist es gut, wenn der Name Taster1 und Taster2 auch im Variablennnamen auftacht. Was liegt also näher, die Variablen Taster1_temp und Taster2_temp zu nennen?
"_betaetigt" oder "_gedrueckt" würde ich als näherliegend empfinden. Der Zusatz "_temp" ist dagegen irreführend und sagt nichts über Sinn und Zweck der Variablen aus.
 
Hi,
diese Zeile macht für mich keinen Sinn, vieleicht übersehe ich auch was und stehe auf dem Schlauch:


Code:
Schaltspiele := SChaltspiele + (BOOL_TO_DWORD(NOT Befehl AND Befehl_temp); Befehl_temp := Befehl;

Das heisst anders geschrieben doch eigentlich:

Code:
Schaltspiele := Schaltspiele + (BOOL_TO_DWORD(Not Befehl AND Befehl);

also kann die Logik Not Befehl AND Befehl niemals true werden.


Haut mir verbal eine auf die Schnauze, wenn ich falsch liege :/

Grüße
 
Zurück
Oben