Wert eines ANY-Parameter in SCL auslesen

U.Schmidt

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe ein kleines Problem mit ANY-Parametern (FC) in SCL. Die Auswertung des ANY-Parameters (Datentyp, Datenbereich, u.s.w.) ist soweit klar.

1. Um auf den tatsächlichen Wert des ANY-Parameters (also letzendlich auf den Wert, der sich dahinter verbergenden Variablen), würde man in AWL den Pointer in das Adressregister laden, nur wie macht man es in SCL ?

2. Kann man einen ANY-Ausgangsparameter auch so (Datentyp, Datenbereich, u.s.w.) auswerten ?

Kann mir jemand schnell einen kurzen Anstoß geben - Danke. :D
 
Hallo,
das geht in SCL noch viel schicker ...
Du legst eine AT-Sicht auf den ANY. In der AT verweißt du auf eine Struktur, die den Aufbau einzeln darstellt.

Also z.B. so :
Code:
var
Datenquelle : ANY
 
aDatenquelle AT Datenquelle : struct 
   ID_Code : byte ; 
   DatenTyp : byte ;
   Anzahl : word ;
   DB_Nr : word ;
   SpeicherPtr : DWord ;
end_struct ;
end_var ;

über aDatenquelle kannst du jetzt die einzelnen Bestandteile ansprechen ...

Gruß
Larry

Nachtrag zu 2.)
den Ausgangs-ANY kannst du dir auf diese Weise natürlich auch so erstellen.
Wenn der ANY auf eine Variable aus deinem Baustein verweisen soll, so geht das über direkte Zuweisung - also :
Code:
var
Datenquelle : Any ;
myVar : integer ;
end_var ;
 
Datenquelle := myVar ;
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider ist die Frage noch nicht beantwortet

Hallo,
das geht in SCL noch viel schicker ...
Du legst eine AT-Sicht auf den ANY. In der AT verweißt du auf eine Struktur, die den Aufbau einzeln darstellt.

Also z.B. so :
Code:
var
Datenquelle : ANY
 
aDatenquelle AT Datenquelle : struct 
   ID_Code : byte ; 
   DatenTyp : byte ;
   Anzahl : word ;
   DB_Nr : word ;
   SpeicherPtr : DWord ;
end_struct ;
end_var ;

über aDatenquelle kannst du jetzt die einzelnen Bestandteile ansprechen ...

Gruß
Larry

Nachtrag zu 2.)
den Ausgangs-ANY kannst du dir auf diese Weise natürlich auch so erstellen.
Wenn der ANY auf eine Variable aus deinem Baustein verweisen soll, so geht das über direkte Zuweisung - also :
Code:
var
Datenquelle : Any ;
myVar : integer ;
end_var ;
 
Datenquelle := myVar ;


Danke für die schnelle Antwort - aber leider nicht so richtig die Antwort auf meine Frage: :neutral:
  • Ich will es ja, wie geschrieben, in SCL machen.
  • Die Auswertung des ANY-Records habe ich auch schon erledigt (AT-Struktur).
  • Nur wie greife ich jetzt über den Speicherpointer auf den Variablenwert zu. In AWL über die indirekte Adressierung durch z.B. das AR1.
Aber in SCL, und was ist eventuell mit dem DB (wenn DB-Nr. <> 0) ?
Kann man einen ANY-OUT-Parameter auch so abfragen (Lese-Zugriff auf die Parameter, der am Baustein angegebenen Variablen, überhaupt möglich) und wie schreibt man hier den Variablenwert ?
 
... das mußt du dann alles einzeln auswerten.
Also den Datentyp entsprechend seiner Kennung aus .Datentyp entnehmen.
Den Speicherbereich aus dem High-Byte des .SpeicherPtr und die Adresse aus dem verbleibenden Rest des SpeicherPtr's.

Dann bastelst du dir aus dem allem einen absoluten Zugriff zusammen - Sorry ... anders geht es nicht.

Aber jetzt mal meine Gegenfrage : Was ist der Sinn des Ganzen ? Da ich ja sehe, dass das nicht das ist, was du haben willst - was willst du denn machen ? Vielleicht gibt es ja einen besseren Weg, das zu erreichen.

Gruß
Larry
 
naja, nun, ich würde da schon noch einen weg sehen.

den bekannten any-pointer auf länge hin untersuchen, einen entsprechend langen zielbereich bekannter adressierung, also zum beispiel im stat (weil anders als temp per any adressierbar) oder einen globalen datenbaustein zur verfügung stellen (zur laufzeit erstellen oder vorher anlegen) und mit blk_move die quelldaten in den bereich kopieren.

einzig das problem zu wissen, aus was die quelldaten bestanden, also int oder real oder oder oder muß hier noch gelöst werden. aber wenn bekannt ist, was da kommt kann das zumindest symbollos adressiert werden, bei bekannter struktur und dem globalen db der nicht zur laufzeit erstellt wird oder der vorhaltung im instanz-db dann sogar auch symbolisch.
 
Zurück
Oben