Na sicher. Du kannst auch ein WORD (oder bis 32767 besser lesbar: INT) für die Adresse im DB übergeben und im FC einen Pointer draus machen.
Für bessere Lesbarkeit bietet es sich in Deiner Aufgabe an, statt registerindirekter Adressierung die speicherindirekte Adressierung zu benutzen.
Allerdings finde ich solche Datenzugriffe Scheixxe, weil sie nicht in den Referenzdaten auftauchen!
Wenigstens bist Du darauf gekommen, die DB-Nummer als BLOCK_DB zu übergeben, da erscheint wenigstens der DB-Zugriff in den Referenzdaten.
FC1
Code:
// IN : Start_DB : Block_DB
// : Start_Adresse : Int
// TEMP: Start_OffsetPtr : DWord
// aus #Start_Adresse (INT) einen Adresspointer (P#) machen :
L #Start_Adresse // ( 2 )
SLD 3 // ( 2 -> P#2.0 )
T #Start_OffsetPtr // in LD für speicherindirekte Adressierung
// L [Start_DB].DBW[Start_Adresse] :
AUF #Start_DB // ( DB7001 )
L DBW [#Start_OffsetPtr] // ( DB7001.DBW2 )
Aufruf
Code:
CALL FC 1
Start_DB :=DB7001
Start_Adresse:=2
NOP 0
Tip: Gewöhne Dir nicht so hohe DB-Nummern an (DB7001), meistens mußt Du mit DB1 ... DB255 auskommen.
An Deiner Fragestellung verwirrt allerdings einiges:
- symbolische Parametrierung
- SCL-Quelle - was für eine SCL-Quelle?
- würde gerne mit dem akku1 weiterarbeiten
- mit Parameter Start als POINTER wird die SCL-Quelle nicht mehr richtig ausgeführt
Was hat das mit Deinem Wunsch zu tun, eine Adresse nicht als POINTER zu übergeben?
Was verlangt denn die SCL-Quelle, der Du anscheinend von außen einen variablen Wert übergeben willst?
Harald