Temporäre Variable in FC absolut adressieren

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
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?
 
OP
R

rightsaidtim

Member
Beiträge
12
Punkte Reaktionen
0
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
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
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?
 

Tigerente1974

Well-known member
Beiträge
1.816
Punkte Reaktionen
290
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.
 
OP
R

rightsaidtim

Member
Beiträge
12
Punkte Reaktionen
0
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?
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
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:
OP
R

rightsaidtim

Member
Beiträge
12
Punkte Reaktionen
0
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.
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
19.493
Punkte Reaktionen
5.876
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
 
OP
R

rightsaidtim

Member
Beiträge
12
Punkte Reaktionen
0
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.
 
Oben