String indirekt adressieren

The Dude

Level-1
Beiträge
31
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo habe mal ne Frage,
ich habe in einen DB eine String-Adresse hinterlegt. Nun da ich Zwischen zwei Programmen mit unterschiedlichem Namen wählen möchte, muss ich irgendwie den Namen/ String variabel gestalten. Dachte da an eine indirekte Adressierung. Gibt es die Möglichkeit dies so zu machen oder gibt es da auch andere Möglichkkeiten. Prog.-Name wird von einem FB aufgerufen und das Programm steht in einem FM-Modul.
Danke
 
Du könntest mit Hilfe des SCF20 BLKMOV in Abhängigkeit von dem gewählten Programm einen von 2 Strings aus einem Datenbaustein an die Stelle im Datenbaustein kopieren, von wo er ausgelesen werden soll. Dann sparst Du Dir die indirekte Adressierung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
was bedeutet hier "variabel gestalten" ?
Hast du in einem DBxyz eine Anzahl von Strings (mit gleicher Länge) als Konstanten hintelegt zwischen denen du wählen möchtest ?
Oder etwas anderes ?

Gruß
Larry
 
Hallo,
was bedeutet hier "variabel gestalten" ?
Hast du in einem DBxyz eine Anzahl von Strings (mit gleicher Länge) als Konstanten hintelegt zwischen denen du wählen möchtest ?
Oder etwas anderes ?

Gruß
Larry

Ne also ich habe zwei nc-programme in einem fm 357-2 hinterlegt diese werden durch ansteuerung eines fb abgerufen. Ich will zwischen den zwei prog auswählen. Nur leider muss ich den pfadnemen in string und in einem db angeben. Ich will den pfadnamen im db variabel gestalten.
 
:confused: Es tut mir leid ... aber ich bin jetzt immer noch nicht schlauer ...
Wozu brauchst du die Strings und was steht da drin ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
CALL "FM_PI" , DB10
REQ :=DB1.DBX74.0
PISERVICE:="PI_DI".SELECT
UNIT :=1
ADDR1 :=DB1.Path
ADDR2 :=DB1.P_Name
ADDR3 :=
ADDR4 :=
WVAR1 :=
WVAR2 :=
WVAR3 :=
WVAR4 :=
WVAR5 :=
WVAR6 :=
WVAR7 :=
WVAR8 :=
WVAR9 :=
WVAR10 :=
FMDB_NO :=30
ERROR :=DB1.DBX70.0
DONE :=DB1.DBX70.1
STATE :=DB1.DBW72
in DB-Adresse die rot hinterlegt ist steht
P_Name STRING[32] '_N_PROG_MPF'
dies gilt für ein Programm. gelb=Programmname
diesen Namen möchte ich auch ändern können um zwischen zwei oder mehreren Programmen wählen zu können.
Diese Änderung wollte ich über eine indirekte Adressierung bearbeiten.
 
Ich schlage dir mal eine ganz einfache Variante vor:

Du legst einen DB an, in dem deine Programmnamen stehen

DB100.P_Name_1
DB100.P_Name_2
DB100.P_Name_3
DB100.P_Name_4
DB100.P_Name_5
...

Deine Programmnummer hast du z.Bsp. als Int

dann kannst du eine SPL nutzen und benötigst keine indirekte Adressierung (etwa so):
Code:
// Sprunverteiler
      L     PRG_Nummer
      SPL   ENDE
      SPA   LEER                        //00 - empty
      SPA   PRG1                        //Programm 01
      SPA   PRG2                        //Programm 02
      SPA   PRG3                        //Programm 03
      ENDE: SPA   LEER

PRG1: NOP 0   
    
      CALL  "BLKMOV"
       SRCBLK := DB100.P_Name_1
       RET_VAL:= Ret
       DSTBLK := DB1.P_Name

      SPA   LEER
    
PRG2: NOP 0   
    
      CALL  "BLKMOV"
       SRCBLK := DB100.P_Name_2
       RET_VAL:= Ret
       DSTBLK := DB1.P_Name

      SPA   LEER

PRG3: SET   
    
      CALL  "BLKMOV"
       SRCBLK := DB100.P_Name_3
       RET_VAL:= Ret
       DSTBLK := DB1.P_Name

      SPA   LEER

LEER: NOP 0

Du kannst natürlich auch den Namen per indirekter Adressierung dynamisch zusammenbauen und dann in DB1.P_Name kopieren. Das hätte den Vorteil, dass du nicht alle Namen bereits in einem DB stehen haben mußt.
 
Zurück
Oben