Fehler bei AT Funktion in SCL

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe folgenden Programmcoder in SCL érstellt:

Code:
TYPE UDT7
    STRUCT
        Einlesen_alt : BOOL;
        Flanke_Einlesen_pos : BOOL;
        Weiterleiten_alt : BOOL;
        Flanke_Weiterleiten_pos : BOOL;
        Button_Reset : BOOL;
        Req_Reset : BOOL;
        Button_Ja : BOOL;
        Button_Nein : BOOL;
        Reserve_10 : BOOL;
        Reserve_11 : BOOL;
        Reserve_12 : BOOL;
        Reserve_13 : BOOL;
        Reserve_14 : BOOL;
        Reserve_15 : BOOL;
        Reserve_16 : BOOL;
        Reserve_17 : BOOL;        
    END_STRUCT;
END_TYPE
FUNCTION FC60 : VOID
VAR_INPUT
    Einlesen : BOOL;
    Weiterleiten : BOOL;
END_VAR
VAR_IN_OUT
    Quelle : UDT8;
    Zwischenspeicher : ARRAY[0..20] OF UDT8;
    Ausgabe : UDT8;
    Loeschquelle : UDT8;
    Hilfsbits : WORD;
    Zaehler : INT;
    
END_VAR
VAR_TEMP
    Hilfsbits_intern AT Hilfsbits : UDT7;
    Werte_einlesen : BOOL;
    Werte_Weiterleiten : BOOL;
    i : BOOL;
    Max_Array : INT;
    
END_VAR

Bei der AT Funktion, sagt er mir immer ungültige Variable, aber warum? Kann mir da jemand helfen?
 
... du mußt die AT-Sicht in der Rubrik machen, in der auch die Ursprungs-Variable deklariert ist - also in deinem Fall in der Rubrik IN_OUT :
Code:
VAR_IN_OUT
    Quelle : UDT8;
    Zwischenspeicher : ARRAY[0..20] OF UDT8;
    Ausgabe : UDT8;
    Loeschquelle : UDT8;
    Hilfsbits : WORD;
    Hilfsbits_intern AT Hilfsbits : UDT7;
    Zaehler : INT;
  
END_VAR
... du erzeugst mit AT keine neue Variable sondern "nur" eine andere Sichtweise der gleichen (schon vorhandenen) Variablen ...

Gruß
Larry
 
:cool: Sorry ... ich hatte nicht gesehen, dass du einen FC erstellst ... :cool:

In einem FC geht das nur bei den TEMP's. Du mußt deine Variable also erst dahin kopieren, dort die AT-Sicht machen und am Ende wieder zurückschreiben.

Also so :
Code:
VAR_TEMP
    Hilfsbits_Temp : word ;
    Hilfsbits_intern AT Hilfsbits_temp : UDT7;
    Werte_einlesen : BOOL;
    Werte_Weiterleiten : BOOL;
    i : BOOL;
    Max_Array : INT;    
END_VAR
 
 
... und dann am Code-Start :
Hilfsbits_Temp := Hilfsbits ;
 
... und am Code-Ende :
Hilfsbits := Hilfsbits_Temp  ;
 
Zurück
Oben