Step 7 SCL ANY-Pointer Eingangsparameter auslesen

tim-othy

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bräuchte bitte etwas Hilfe bei SCL S7-300. Das Problem habe ich soweit schon einkreisen können:

Ich verwende einen ANY-Pointer als aktuellen Eingangsparameter z.B. P#DB1.DBX0.0 BYTE 10 an einem FC.
Dieser FC sieht so aus:

Code:
FUNCTION FC001 : INT

VAR_INPUT

    anyZeiger : ANY;
     
    Sicht AT anyZeiger : STRUCT
        Id  : BYTE;
        Typ : BYTE;
        Anz : INT;
        Dbn : INT;
        Ptr : DWORD;
    END_STRUCT;
    
END_VAR


VAR_TEMP
    int_var : INT;
END_VAR

BEGIN

    int_var  := Sicht.Anz;

    FC001 := 1;
       
END_FUNCTION

Übersetzen lässt sich die SCL-Quelle problemlos.
Jedoch geht die SPS sofort in Stop, wenn die Zeile "int_var := Sicht.Anz;" abgearbeitet werden soll mit dem Hinweis,
dass ein DB nicht vorhanden ist (DB4098 ).

Kann mir jemand erklären woran das liegt?
Ich wollte ganz gern einfach nur in die Variable int_var die Anzahl der Bytes eintragen lassen für spätere Bearbeitungen.
Wie müsste ich dann vorgehen in SCL?

Vielen Dank
 
Übersetzen lässt sich die SCL-Quelle problemlos.
Mit welcher SCL-Version läßt sich die Quelle fehlerfrei übersetzen? :confused:
Bei FC sind Sichten auf ANY-Variablen nur in VAR_TEMP erlaubt. Du müsstest den ANY in eine ANY-Variable in TEMP umkopieren und da kannst Du dann eine Sicht drüber legen.
Code:
VAR_TEMP
    int_var : INT;
    anyTemp : ANY;
    Sicht AT anyTemp : STRUCT
        Id  : BYTE;
        Typ : BYTE;
        Anz : INT;
        Dbn : INT;
        Ptr : DWORD;
    END_STRUCT;
END_VAR

BEGIN

    anyTemp := anyZeiger;
    int_var := Sicht.Anz;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

Danke für die Hilfe. Genau daran lag es.

Bei FC sind Sichten auf ANY-Variablen nur in VAR_TEMP erlaubt. Du müsstest den ANY in eine ANY-Variable in TEMP umkopieren und da kannst Du dann eine Sicht drüber legen.

Mit dem Umkopieren klappt es jetzt.

Ich benutze die Version V5.3 + SP6 + Upd2 (Ausgabestand K5.3.6.2).
Damit bekomme ich 0 Fehler, 0 Warnungen mit obiger Quelle, nur halt die SPS ging damit immer in Stop.

Vielen Dank!
 
Ich benutze die Version V5.3 + SP6 + Upd2 (Ausgabestand K5.3.6.2).
Damit bekomme ich 0 Fehler, 0 Warnungen mit obiger Quelle, nur halt die SPS ging damit immer in Stop.
Was hat Siemens denn da wieder verschlimmbessert :roll: (Fehlermeldungen werden nun standardmäßig abgeschaltet (wie bei KOP/FUP), weil sie verunsichern nur den Programmierer?)

Die SCL-Version K5.3.6.0 meldet beim Übersetzen noch den Fehler
Der Typ der Sicht ist nicht mit dem Typ der Variablen verträglich.
und die Hilfe zu der Meldung 15:4481 klärt darüber auf, daß Sichten auf ANY bei FC nur in VAR bzw. VAR_TEMP erlaubt sind.

Harald
 
PS: Kannst Du vielleicht mal den aus der Quelle in #1 erzeugten FC1 mit dem KOP/AWL/FUP-Editor öffnen (*) und den AWL-Code hier zeigen?
(*) Editor mit beliebigem Baustein öffnen und dann: Datei > Öffnen... > FC1

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, jetzt verstehe ich auch erst warum die SPS seltsamerweise den DB4098 geladen haben will:

Code:
      SET   
      SAVE  
      =     L      2.1
      L     P##anyZeiger
      LAR1  
      L     W [AR1,P#0.0]
      T     LW     4
      AUF   DB [LW 4]
      L     D [AR1,P#2.0]
      LAR1  
      L     W [AR1,P#2.0]
      T     #int_var
      L     1
      T     #RET_VAL
      SAVE  
      BE

Mit einer ältern SCL-Version bekomme ich nun auch den von Dir benannten Fehler aufgelistet.
So ein Hinweis vom Compiler ist echt nützlich, wenn man nicht weiß, dass Sichten auf ANY-Inputs nicht zugelassen sind.
 
Zurück
Oben