Temporäre Variable in FC absolut adressieren

Naja, über Lokaldaten.
Sinnvollerweise sollte Du aber zuerst einen Pointer bilden.

L P##temp_variabel
LAR1

...
...
...
T LD [AR1, P#0.0]

Edit:
Was willst Du eigentlich machen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
leider verstehe ich nicht den Zusammenhang von dem was du mir geschreiben hast. Vielleicht kannst du mir die einzelnen Punkte Erklären?

Ich bin über die S7 Hilfe auf die Lösung gestoßen. Ohne das ich Pointer benutzen muss. Über den Operandenbereich Lokaldaten.

Hier ein Beispiel falls noch jemand auf der Suche ist:

S L 0.0 // Bit
T LB 10 // Byte
L LW 20 // Wort
T LD 30 // Doppelwort
 
S L 0.0 // Bit
T LB 10 // Byte
L LW 20 // Wort
T LD 30 // Doppelwort

was soll das sein,
nochmal: was willst Du eigentlich machen?
 
Ich bin über die S7 Hilfe auf die Lösung gestoßen. Ohne das ich Pointer benutzen muss. Über den Operandenbereich Lokaldaten.

Hier ein Beispiel falls noch jemand auf der Suche ist:

S L 0.0 // Bit
T LB 10 // Byte
L LW 20 // Wort
T LD 30 // Doppelwort

Das funktioniert aber nur, wenn die tmp-Variablen nicht verändert werden. Eine eingeschobene oder gelöschte Variable kann den ganzen Code versauen. Bei der Adressierung über das AR1 passiert das nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich wollte das letzte Bit einer temporären Wort Variable in einem FC abfragen. Das kann man meines Wissens nur in dem man es mit seiner Absoluten adresse anspricht. Z.B.:

Meine Variable "Temp0 INT 0.0"

U L 1.7
= M 100.0

Wie die Adressiereung über das AR1 funktioniert lese ich mich gerade ein.

Gibt es noch eine andere Möglichkeit als meine jetzige Variante?
 
L P##Temp0
LAR1
U L [AR1, P#1.7]
=M100.0

Edit: das macht man aus dem Grund wie auch schon Tigerente beschreibt.
Würdest Du in Deinen Lokaldaten in der Deklaration eine Zeile einfügen hat Temp0 nicht mehr zB L0.0 als Adresse sondern L4.0
Und dann stimmt Dein Code nicht mehr.
Darum über das AR1. Dann stimmt es immer!
 
Zuletzt bearbeitet:
Super,
vielen Dank für die Antwort. Auf diese Art der Abfrage wäre ich nicht gekommen.

Jetzt habe ich verstanden warum ich es so anwenden sollte und wie es funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich wollte das letzte Bit einer temporären Wort Variable in einem FC abfragen. Das kann man meines Wissens nur in dem man es mit seiner Absoluten adresse anspricht. Z.B.:

Meine Variable "Temp0 INT 0.0"

U L 1.7
= M 100.0
Es geht auch ohne absolute Adressierung und es geht auch ohne indirekte Adressierung. Welche der vielen möglichen Varianten man benutzt, sucht man sich anhand seiner Aufgabe heraus - das was halt verständlicher ist.

borromeus hat Dich zweimal gefragt, was Du eigentlich machen willst. Ich präzisiere die Frage:

Was verstehst Du unter "das letzte Bit einer Wort Variable"?
Warum deklarierst Du die Wort-Variable als INT?
Warum willst Du in einer INT-Variable "das letzte Bit" abfragen?
Diese Operation passt nicht zum Datentyp INT.

Bist Du sicher, daß Du mit "das letzte Bit" das Bit.7 der WORD-/INT-Variable meinst oder meinst Du vielleicht das Bit.15 - das INT-Vorzeichen?
Wenn Dein Temp0 an Adresse LW 0 liegt, dann ist L 1.7 das Bit.7 und L 0.7 das Bit.15

Gibt es noch eine andere Möglichkeit als meine jetzige Variante?
Symbolisch saubere Möglichkeiten der Abfrage Bit.15 (INT-Vorzeichen) von INT- oder WORD-Variablen ohne indirekte Adressierung:
Code:
      L     #Temp0
      SLW   1
      U     >0
      =     M    100.1

      L     #Temp0
      UW    W#16#8000
      U     >0
      =     M    100.2

      L     #Temp0
      L     0
      <I    
      =     M    100.3

Abfrage Bit.7 ohne indirekte Adressierung:
Code:
      L     #Temp0
      SRW   8
      U     >0
      =     M    100.5

      L     #Temp0
      UW    W#16#80
      U     >0
      =     M    100.6

Harald
 
Ich habe da leider etwas total durcheinander geschmissen. Ich wollte bei diesem Beispiel das INT Vorzeichen Bit abfragen. Also war deine Vermutung richtig.

Danke für die Beispiele. Sie haben mir gut weiter geholfen.
 
Zurück
Oben