Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: SCL: Lokaldaten des Vorgängerbausteins (87h)

  1. #11
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Chefmech Beitrag anzeigen
    Dabei ist nur etwas vorsicht geboten, weil Temp-Variablen nicht über mehrere Bausteinaufrufe gültigkeit haben, ich glaub als IN_OUT kann ich einen Temp nur einem Baustein weiterleiten, danach verliert die Variable an Gültigkeit und ich muss ev. umkopieren!!
    Und genau da liegt das Problem das 4l hat (glaub ich zumindest ).
    Weil man als Funktionsparameter in SCL eben an einen Anypointer keine Lokaldaten eintragen darf (darf schon, aber damit kommt man nicht weiter), wenn man den Anypointer im eigenen Baustein dereferenzieren möchte, also auf die Daten auf die der Anypointer zeigt zugreifen möchte. In AWL geht das, in SCL jedoch nicht, da es in der Sprache zumindest zum jetzigen Wissensstand nur über einen weiteren Baustein wie BLKMOV möglich ist, auf die ANY-Daten zuzugreifen.

    Das ist das Problem was du beim Durchreichen von Temp-Variablen kennst, nur dass es in SCL schon eine Verschachtelungsebene früher auftritt.

  2. #12
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    673
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    kann mal bitte einer ein Beispiel posten, wo ein Baustein seine Lokaldaten verliert????

    Das glaub ich erst wenn ich es gesehen habe.

    Ich kann eine Temporärvariable an 100 Bausteine als IN/OUT weitergeben und da steht immer der korrekte Wert drin.

    Man muss nur die Verschachtelungstiefe beachten.
    Aber da komm ich eh nicht hin.

    Den Speicherbedarf deckt der OB. Das kann man sogar einstellen...
    Zumindest bei 400ern.
    "arbeite klug, nicht hart" - deutsches Sprichwort

  3. #13
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Hab das jetzt nich ausprobiert, aber das sollte so nicht gehen:


    Code:
    //---------------------------------------------------------------
    FUNCTION "fcMyFunction2" : void
    
    VAR_IN_OUT
        D_nMyInt    :INT;
    END_VAR
    
    VAR_TEMP
        T_nIrgendwas :INT;
    END_VAR
    
    BEGIN
        
        //Nur so zum Spass
        T_nIrgendwas := 4;
        
        //Inc
        D_nMyInt := D_nMyInt + 1;
    
    END_FUNCTION
    
    //---------------------------------------------------------------
    FUNCTION "fcMyFunction1" : void
    
    VAR_IN_OUT
        D_nMyInt    :INT;
    END_VAR
    
    VAR_TEMP
        T_nIrgendwas :INT;
    END_VAR
    
    BEGIN
        
        //Nur so zum Spass
        T_nIrgendwas := 6;
    
        //Call Funtion 2
        "fcMyFunction2"(D_nMyInt := D_nMyInt);
    
    END_FUNCTION
    
    //---------------------------------------------------------------
    ORGANISATION_BLOCK "obCycle" 
    
    VAR_TEMP
        T_nMyInt    :INT;
    END_VAR
    
    BEGIN
        
        T_nMyInt := 1; //INIT
    
        "fcMyFunction1"(D_nMyInt := T_nMyInt);
    
        T_nMyInt := T_nMyInt; //Debug: Zum beobachten, sollte 2 sein...
    
    END_FUNCTION
    Eigentlich sollte als Ergebnis im OB1 die Variable T_nMyInt zum Schluss =2 sein, ist sie aber eben vielleicht nicht!

    Hab das ganze jetzt nicht ausprobiert...

  4. #14
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ev. geht's mit den IN_OUT doch, nur nicht mit dem Datentyp Pointer. Wenn IN_OUT schlussendlich aber auch nur ein Pointer ist.

    Das glaub ich erst wenn ich es gesehen habe.

    Ich kann eine Temporärvariable an 100 Bausteine als IN/OUT weitergeben und da steht immer der korrekte Wert drin.
    http://support.automation.siemens.co...&docid=5581928

    --> Seite 7-17:

    Einschränkungen
    • Der Datentyp POINTER ist für formale Eingangsparameter,
    Durchgangsparameter von FB und FC und für Ausgangsparameter von FC
    erlaubt. Konstanten sind als Aktualparameter nicht zulässig (mit Ausnahme er
    Konstanten NIL).
    • Wenn Sie beim Aufruf eines FB oder FC einen Formalparameter vom Typ
    POINTER mit einer temporären Variable versorgen, können Sie diesen
    Parameter nicht an einen weiteren Baustein durchreichen. Die temporären
    Variablen verlieren beim Durchreichen ihre Gültigkeit.

Ähnliche Themen

  1. Lokaldaten
    Von S7 Frischling im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 12.08.2013, 14:20
  2. Problem mit Lokaldaten
    Von Carsten81 im Forum Simatic
    Antworten: 30
    Letzter Beitrag: 22.10.2010, 08:46
  3. Lokaldaten
    Von michael77 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.11.2008, 16:07
  4. SCL und Lokaldaten
    Von derwestermann im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.03.2008, 11:53
  5. Lokaldatenbereich des Vorgängerbausteins
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.11.2003, 10:23

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •