DBW ermitteln

WL7001

Level-2
Beiträge
182
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich übe immer noch mit dem Thema FBs herum. Jetzt hatte ich gerade mal eine konkrete Anwendungsmöglichkeit und komme nicht auf die Lösung.

Also: Ich habe ein OP-Bild. In diesem gibt es ein E/A Feld mit einer Textliste mit 100 Einträgen, die für 100 verschiedene Timer stehen, also Timer 000 bis Timer 100.

Diesen Wert speichere ich im z.B DBx.DBW500 ( da steht dann also ein INTwert zwischen 0 und 100.

Darunter habe ich ein Eingabefeld für einen Zeitwert. Diesen Wert speichere ich z.B. im DBx.DBW502 als S5Time.

Dazu habe ich im DBx. noch 100 Worte für die aktuelle Timerzeit angelegt, für Timer_0 also DBW0, für Timer_1 also DBW2 für Timer_3 also DBW6 usw.

Jetzt wollte ich in einem FB oder FC folgendes machen:

L#DBxDBW500 (Timernummer aus DBW500 holen (int))
L 2
*I
T#TEMP ( damit hätte ich ja den passenden Wert als INT, um in diesem DBword den passenden Zeitwert aus dem OP abzulegen)

Danach nur noch :
L DBx.DBW502 ( also den Timerwert (S5Time) aus dem OP )

und jetzt kommt mein Problem :

T DBx ??? (hier müsste #TEMP hin)

Kann mir mal bitte jemand sagen, wie ich das #TEMP ( ich kann es nicht anders ausdrücken ) programmieren muss, falls ich mich verständlich ausgedrückt habe?

Danke im voraus
Gruß Wilhelm
 
Zuviel Werbung?
-> Hier kostenlos registrieren
d

Any-Zeiger für Datentypen
/quote]

Demnach könnte es so vielleicht aussehen ?

/// WERT des ZielDBW ermitteln ///

L#DB15DBW500 (Timernummer aus DBW500 holen (int))
L 2
*I
T#TEMP

// POINTER herstellen ///

L B#16#10 //10h für s7
T LB 0
L B#16#02 //Typ BYTE
T LB 1

L 4 //4 Byte, da ich ja S5Time Werte kopieren will
T LW 2

L 15 //Datenbausteinnummer
T LW 4

L #TEMP //Anfangsadresse
SLD 3 //Pointer bauen
T LD 6

L B#16#84 //Speicherbereich (hier DB)
T LB 6

( der Pointer hiesse dann P#DB15.DBX(""#TEMP"") BYTE4

// Jetzt will ich den OP-Zeitwert umkopieren //
L DB15.DBW502 ( Zeitwert aus OP )
T :confused::confused:

Weiter weiss ich nicht, ich verstehe nicht, wie ich diesen "Zielpointer" mit dem Wert #TEMP formulieren muss.:confused::confused:
 
Hast du daran gedacht, dass du (je nach Bediengerät) auch innerhalb des Bediengerätes eine Variable indirekt adressieren kannst ? Du mußt dir hierfür nur den Pointer selbst erstellen (Nr. des DW) und den dann anstelle der direkten Adresse der Variablen in der Visu eintragen ...
 
für deine anwendung benötigst du keinen any-zeiger.
ein pointer reicht völlig aus.
siehe link von vierlagig

dein anyzeiger ist nicht ganz richtig. s5time = 1 word = 2 byte
 
Zuviel Werbung?
-> Hier kostenlos registrieren
für deine anwendung benötigst du keinen any-zeiger.
ein pointer reicht völlig aus.
siehe link von vierlagig

dein anyzeiger ist nicht ganz richtig. s5time = 1 word = 2 byte

Dann vielleicht so?

// WERT des ZielDBW ermitteln ///

L#DB15DBW500 (Timernummer aus OP) (Bsp. hier :33)
L 2
*I
T#TEMP (Bsp. hier :66)

// POINTER herstellen ///

L #TEMP
SLD 3
L AR1

AUF DB15
L DBW 500 ( Zeitwert aus OP )
T DBW [AR1, P#0.0] ( hier sollte jetzt 66 stehen, dann wäre ich fertig )

Gruß Wilhelm
 
Dann vielleicht so?
Code:
// WERT des ZielDBW ermitteln ///

L#DB15DBW500  (Timernummer aus OP) (Bsp. hier :33)
L 2 
*I
T#TEMP (Bsp. hier :66)

// POINTER herstellen ///

L #TEMP
SLD 3
L AR1

AUF DB15
L DBW 500 ( Zeitwert aus OP )
T DBW [AR1, P#0.0] ( hier sollte jetzt 66 stehen, dann wäre ich fertig )

wenn beides im selben DB ist funktioniert das so ... kannst auch verschiedene DBs anspringen:

Code:
      U     E      0.0
      SPBN  end
      L     DB10.DBW  500
      L     2
      *I    
      SLD   3
      LAR1  
      L     DB10.DBW  502
      AUF   DB    15
      T     DBW [AR1,P#0.0]
end:  NOP   0
OT: und immer schön die [code ] - [/code ] - Tags nutzen (ohne space)
 
Zurück
Oben