Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 46422

TIA Wie DB-Nummer aus Symbol ermitteln?

$
0
0
Mit dem Step7 Manager und der S7-300/400 und AWL war das kein Problem.

Code:

FUNCTION "FCNumDB" : VOID
TITLE =DB-Nummer aus Symbol ermitteln
VERSION : 1.0

VAR_INPUT
  Sym: BLOCK_DB;
 END_VAR

VAR_IN_OUT
  Num: INT;
 END_VAR

BEGIN
NETWORK
TITLE =

L P#Sym;SRD 16; T #Num;

END_FUNCTION

Im TIA-Portal (V13) für die S7-1500 ist der BLOCK_DB als Datentyp nicht mehr zulässig. Als Ersatz wird DB_ANY empfohlen und die Konvertierungsfunktionen DB_ANY_TO_VARIANT oder DB_ANY_TO_UINT. Als SCL-Code sieht die Funktion nun so aus:

Code:

FUNCTION "FCNumDB" : Void
TITLE = DB-Nummer aus Symbol ermitteln
VERSION : 0.1

  VAR_INPUT
      Sym : DB_ANY;
  END_VAR

  VAR_IN_OUT
      Num : INT;
  END_VAR
 
BEGIN

      Num := DB_ANY_TO_UINT(#Sym);
       
END_FUNCTION

Sie lässt sich fehlerfrei übersetzen und laden. Nur leider liefert sie im Einsatz nichts anderes als 0 zurück.

In der Hilfe steht zu DB_ANY_TO_UINT so gut wie nichts. Dafür steht bei DB_ANY_TO_VARIANT etwas, was vermutlich auch auf DB_ANY_TO_UINT zutrifft :

...einen Datenbaustein, der ein Instanz-Datenbaustein eines Funktionsbausteins oder ein globaler Datenbaustein ist. Die Konvertierung der Ausgangsvariablen in den Datentyp VARIANT ist nicht möglich.

Im Klartext: Für die meisten Datenbausteine ist DB_ANY nicht zu gebrauchen. Weiß da jemand eine Lösung?

Es wird zurecht immer wieder empfohlen, rein symbolisch zu programmieren. Dummerweise wird aber immer wieder die Nummer gebraucht. Und mit dem Wegfall der Symboltabelle sind die Nummern nicht mal fest zugeordnet. Seit ich mit TIA arbeiten muss, beginne ich den alten Manager zu lieben.

Viewing all articles
Browse latest Browse all 46422


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>