Step 7 einen Wert in mehrere Variablen schreiben

baltciprog

Level-2
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich suche einen einfachen Weg, einen Wert in mehrere Variablen zu schreiben.

In AWL hätte ich es so gemacht

L 0
T M0.0
T M0.1
T M0.2


habe ich da eine andere Alternative als alle einzeln zuzuweisen:

M0.0 := 0;
M0.1 := 0;

Danke im Voraus
 
Da wäre als erstes Mal die Frage, welche Hardware, welche Software?
Um wieviel Variablen geht es denn? Sollen alle false werden?
 
In SCL kannst du unabhängig vom Datentyp die Zuweisung beliebig lang machen.
Int1 := Int2 := Int3 := 0;
Zumindest solange die Variablen vom gleichen Typ sind (oder sich implizit ineinander umwandeln lassen? Teste ich gleich mal.)

Wenn du in FUP/KOP unterwegs bist und Int/Real/Word beschreiben willst, kannst du den MOVE-Befehl aufrufen und zusätzliche Ausgänge anfügen.

EDIT: Test erfolgreich. testDInt := testInt := 10; funktioniert. testInt := testDInt := 10; wird hingegen angemeckert, weil es keine implizite Wandlung von DInt nach Int gibt
 
Zuletzt bearbeitet:
In AWL hätte ich es so gemacht

L 0
T M0.0
T M0.1
T M0.2
Egal in welchem Siemens S7-Programmiersystem (Step7 classic oder TIA) würde das gar nicht gehen.

Um dir was zu empfehlen, was mit deiner Software und deiner SPS geht und zu dem passt, was du vielleicht meinst, musst du uns mitteilen, welche SPS und welche Software und Version du verwendest. Möglicherweise gehen die Hälfte der bereits vorgeschlagenen Wege bei dir gar nicht.
 
Moin,

Vielen Dank zunächst schon einmal für die bisherigen Antworten!

ich hole dann nochmal etwas aus:
Tia v18
CPU 1512SP F-1 PN

es geht tatsächlich INT-Werte.

BSP: ich errechne Werte (Koordinaten) und schreibe diese in einen DB.
X Array [1..60] of INT
Y Array [1..60] of INT
Z Array [1..60] of INT
Habe dann die Funktion zurücksetzen und möchte alle diese Werte mit 0 beschreiben.
Also 0 in alle hineinschreiben

Grüße
Baltci
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe dann die Funktion zurücksetzen und möchte alle diese Werte mit 0 beschreiben.
Wenn die Werte in einem Array liegen, kannst du in einer Schleife allen Werten die 0 zuweisen.
Oder du hast ein gleich großes Array mit alles 0-Werten, dann kannst du das 0-Array auf dein Werte-Array kopieren.

Code:
FOR #i := 1 TO 60 DO
  X_Array[#i] := 0;
END_FOR;

Y_Array := X_Array;
Z_Array := X_Array;
 
Da solltest du dir mal die FOR-Funktion unter SCL ansehen
Code:
FOR #_tmp_FOR_EmptyCounter := 1 TO 60 BY 1 DO
    "DB".X[#_tmp_FOR_Empty] := 0;
    "DB".Y[#_tmp_FOR_Empty] := 0;
    "DB".Z[#_tmp_FOR_Empty] := 0;
    #_tmp_FOR_Empty := #_tmp_FOR_Empty - 1;
END_FOR;
 
Schreibst dir einen kleinen FC, nennst den "FC_MOVE", und dann übergibst du die Arrays als InOut und deinen gewünschten Wert als Input.

SCSS:
FOR #i := #tempLowerBound TO #tempUpperBound DO
    X[#i] := Y[#i] := Z[#i] := Variable;
END_FOR;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

Vielen Dank zunächst schon einmal für die bisherigen Antworten!

ich hole dann nochmal etwas aus:
Tia v18
CPU 1512SP F-1 PN

es geht tatsächlich INT-Werte.

BSP: ich errechne Werte (Koordinaten) und schreibe diese in einen DB.
X Array [1..60] of INT
Y Array [1..60] of INT
Z Array [1..60] of INT
Habe dann die Funktion zurücksetzen und möchte alle diese Werte mit 0 beschreiben.
Also 0 in alle hineinschreiben

Grüße
Baltci
Strukturen/Arrays/Udts kannst du über eine einfach Zuweisung passend mit einer leeren wieder "leerschreiben", einfach im FB zB im statischen Bereich die gleiche noch mal anlegen
 
Da solltest du dir mal die FOR-Funktion unter SCL ansehen
Code:
FOR #_tmp_FOR_EmptyCounter := 1 TO 60 BY 1 DO
    "DB".X[#_tmp_FOR_Empty] := 0;
    "DB".Y[#_tmp_FOR_Empty] := 0;
    "DB".Z[#_tmp_FOR_Empty] := 0;
    #_tmp_FOR_Empty := #_tmp_FOR_Empty - 1;
END_FOR;
Welches Ziel verfolgst du damit, eine zusätzliche Laufvariable (#_tmp_FOR_Empty) zu nutzen? Warum nimmst du nicht direkt die Laufvariable der Schleife (#_tmp_FOR_EmptyCounter)?

Es würde bestimmt funktionieren, ist aber so ein bisschen "Von hinten durch die Brust ins Auge"...
 
ja an ne Schleife habe ich garnicht gedacht, war so im awl tunnel
und wenn ich nur die Werte sagen wir 15-60 auf 0 schreiben möchte

Code:
FOR #i := 15 TO 60 BY 1 DO
    Array.X[#i] := 0;
    Array.Y[#i] := 0;
    Array.Z[#i] := 0;
END_FOR;
sollte das ja so funktionieren, richtig?


Code:
FOR #i := 1 TO 60 DO
  X_Array[#i] := 0;
END_FOR;

Y_Array := X_Array;
Z_Array := X_Array;
dann fällt diese möglichkeit ja weg, richtig?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Welches Ziel verfolgst du damit, eine zusätzliche Laufvariable (#_tmp_FOR_Empty) zu nutzen? Warum nimmst du nicht direkt die Laufvariable der Schleife (#_tmp_FOR_EmptyCounter)?

Es würde bestimmt funktionieren, ist aber so ein bisschen "Von hinten durch die Brust ins Auge"...
Habe das eben aus einem bestehenden Projekt kopiert, (#_tmp_FOR_Empty) hat darin natürlich nichts zu suchen.

Edit: Natürlich hast du Recht, es wäre einfacher und sinnvoller direkt die Laufvariable zu nehmen.
 
Zuletzt bearbeitet:
dann fällt diese möglichkeit ja weg, richtig?
Ja, weil du dann in X[1]-X[14] noch die alten X-Werte stehen hast, die du dann einfach auf Y und Z überbügelst.

Du kannst aber auch einfach Y und Z in deine Schleife integrieren, vorausgesetzt du willst dort die exakt selben Elemente auf 0 setzen.
 
Ja, weil du dann in X[1]-X[14] noch die alten X-Werte stehen hast, die du dann einfach auf Y und Z überbügelst.

Du kannst aber auch einfach Y und Z in deine Schleife integrieren, vorausgesetzt du willst dort die exakt selben Elemente auf 0 setzen.

ja genau, das ist mir dann klar, danke.
wollte nur einmal für mich wissen, dass es keine alternative gibt, es auf die Art und weise von pn/dp zu machen
 
und wenn ich nur die Werte sagen wir 15-60 auf 0 schreiben möchte

Code:
FOR #i := 15 TO 60 BY 1 DO
    Array.X[#i] := 0;
    Array.Y[#i] := 0;
    Array.Z[#i] := 0;
END_FOR;
sollte das ja so funktionieren, richtig?
Ja.
(das "BY 1" kann man weglassen, das ist Standard)

dann fällt diese möglichkeit ja weg, richtig?
Das ganze komplette Array kopieren geht schneller als allen Werten in der Schleife 0 zuweisen. Wenn aber nur einzelne Werte beschrieben werden sollen und andere Wert erhalten bleiben sollen, dann geht das besser in der Schleife, genau so wie du geschrieben hast.
 
Zurück
Oben