Indirekte adressierung DB

elko

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe folgende Aufgabenstellung.

Auf einer Maschine werden verschiedene Programme gefahren.
Die Parameter liegen für jedes Programm in einem eigenem Datenbaustein. Die Programmnummer ist im MW200.

Im Programmablauf muss auf dynamisch auf Werte zugegriffen werden. Die Gebindenummer befindet sich im MW202.

Im Augenblick wurde ein FB programmiert der den benötigten Wert bereitstellt. Das müsste doch mit indierekter Adressierung eleganter zu machen sein. Ich habe schon einiges ohne Erfolg probiert.

Wie kann ich auf die benötigten Werte zugreifen?
Gruß Georg Koller
 
Hallo elko
Vorschlag

Code:
FUNCTION_BLOCK FB 100
TITLE =Test
VERSION : 1.0


VAR_INPUT
  _DB    : INT ;      // aus MW
  Nummer : INT ;    // aus MW    
END_VAR
VAR_TEMP
  HM_DB : WORD ;    
  Wert : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =

      SET   ; 
      SAVE  ; 
      =     L      4.1;   // Temp Variable
      L     #_DB;        // der DB aus MW (_DB)
      T     #HM_DB; 
      L     #HM_DB; 
      T     LW     6;     // Temp Variable
      L     #Nummer;    // welches Daten_word
      ITD   ; 
      L     L#8;               // Zeiger bereitstellen
      *D    ;                   // Zeiger bereitstellen     
      AUF   DB [LW 6];     // DB indirekt oeffnen
      LAR1  ;                  // ins Adressregister
      L     DBW [AR1,P#0.0];    // DW indirekt oeffnen von MW (Nummer )
      T     #Wert;                  // den Inhalt aus dem DW nach Wert
      SAVE  ; 
      BE    ; 
END_FUNCTION_BLOCK
mfG
hg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier ein paar AWL-Anweisungen, die dir helfen könnten.


AUF DB [MW10] // MW10 = DB-Nr. die geöffnet werden soll als INT-Variable

U DBX[MD10] // MD10 = Adresse*8 + Bit-Nr. (0-7) mit der die Verknüpfung durch geführt werden soll

L DBB[MD10] // MD10 = Adresse*8 vom Bytewert der geladen werden soll

L DBW[MD10] // MD10 = Adresse*8 vom 2-Bytewert der geladen werden soll

L DBD[MD10] // MD10 = Adresse*8 vom 4-Bytewert der geladen werden soll


Wenn du noch Fragen hast, dann kruze E-Mail.
 
Zurück
Oben