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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

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

  1. #1
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    bezugnehmend auf: http://sps-forum.de/showpost.php?p=262452&postcount=86

    wiederhole ich meine Bitte:

    jetzt brauch ich nur noch nen SCL-guru, der mir erklärt, wie ich in SCL auf die lokaldaten des vorgängerbausteins zugreifen kann, damit aus der quelle wieder ein any werden kann...

    konkret: der IN-ANY verweist auf die Lokaldaten des aufrufenden Bausteins. Wie kann ich auf diese Daten zugreifen?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]
    Zitieren Zitieren SCL: Lokaldaten des Vorgängerbausteins (87h)  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo 4L,
    um dir helfen zu können (vielleicht) müsste ich doch erstmal verstehen, was du machen willst - ich habe es nämlich (auch) nicht verstanden ...

    Gruß
    LL

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo 4L,
    um dir helfen zu können (vielleicht) müsste ich doch erstmal verstehen, was du machen willst - ich habe es nämlich (auch) nicht verstanden ...

    Gruß
    LL
    irgendwie geht mir das bei all meinen fragen so... und irgendwann verlaufen sie im sand... so richtig aktiv geholfen wurde mir hier zumindest (fast) noch nie...

    anyway. ich probier es noch mal.

    funktionalität des bausteines ist klar? date_and_time in 8 word zerlegen und beginnend bei dem word, welches an anyDestination übergeben wird ablegen.
    nun habe ich im AWL-baustein ( http://sps-forum.de/showpost.php?p=262292&postcount=74 ) die quelle auch als any übergeben. bei SCL mußte ich die quelle als DATE_AND_TIME übergeben.

    a) wie kann ich anyInput so verarbeiten, dass ich auf die verwiesenen daten zugreifen kann, wenn es sich um lokaldaten der aufrufenden bausteins (z.b. OB1) handelt? (den rest kann ich mir ja ähnlich, wie ich es bei anyDestination gemacht habe, zusammen zerlegen...)
    b) kann es sein, dass mein AWL-baustein nur mit lokaldaten funktioniert? (rhethorische frage, das find ich noch selber raus )
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo 4L,
    ich versuche mich mal daran ...

    Vielleicht ganz grundsätzlich : viele der vielleicht liebgewonnenen Dinge, die in AWL gehen sind in SCL nicht oder nur mit Umweg umsetztbar. Dazu gehört auch der Zugriff auf Lokaldaten. Eine absolute Adressierung ist nur im Bereich der "echten" Speicherbereiche möglich. Willst du an irgendwelche anderen Sachen ran, so hilft dir oft nur der Umweg über die Sicht (AT). Hier werden dadurch natürlich auch viele Dinge vereinfacht. Das zerlegen eines (ANY-)Pointers, eines Strings oder einer zusammengesetzten Variable (wie DATE_TIME) ist hier gar kein Problem. Du müßtest es dir nicht einmal zwischenpuffern.

    Das Beispiel für DATE_TIME ginge z.B. sinnvoll so :
    Code:
    FUNCTION FC430 : TOD                  // UP DT nach TOD umwandeln
    Title   = 'UP DT nach TOD umwandeln'  // UP DT nach TOD umwandeln
    AUTHOR  : 'Larry'
    VERSION : '1.0'     //    18.01.2008
    
    //     Bausteinparameter
    
    VAR_INPUT 
       IN_Date_Time : DT ;                 // Date_and_Time für Umwandlung 
          b_Date_Time AT IN_Date_Time : ARRAY [0..7] OF BYTE ;
    END_VAR
    VAR_IN_OUT 
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR_TEMP
       Stunde            : INT ;
       Minute            : INT ;
       Sekunde           : INT ;
       MilliSekunden     : INT ;
       MilliSekunden_E   : INT ;
       tByte             : BYTE ;
    END_VAR
     
    BEGIN
      Stunde  := BCD_TO_INT (b_Date_Time [3]) ;
      Minute  := BCD_TO_INT (b_Date_Time [4]) ;
      Sekunde := BCD_TO_INT (b_Date_Time [5]) ;
      
      MilliSekunden_E := WORD_TO_INT (SHR (IN:=INT_TO_WORD (BCD_TO_INT (b_Date_Time [7])) , n:=4)) ;
      MilliSekunden   := (BCD_TO_INT (b_Date_Time [6]) *10) + MilliSekunden_E ;
      FC430  := DINT_TO_TOD(INT_TO_DINT(MilliSekunden) + (INT_TO_DINT(Sekunde) + INT_TO_DINT(Minute)*60 + INT_TO_DINT(Stunde)*3600) * 1000) ;
        
    END_FUNCTION
    ... das ist einer der Bausteine, den ich so im Einsatz habe ...

    irgendwie geht mir das bei all meinen fragen so... und irgendwann verlaufen sie im sand... so richtig aktiv geholfen wurde mir hier zumindest (fast) noch nie...
    Das Schicksal teile ich auch sehr oft ... trotzdem ergeben sich auch aus nicht in meinem Sinne beantworteten Threads im Nachhinein immer noch irgendwelche Inspirationen.

    Ich hoffe nicht, dass es dir jetzt mit diesem Thread genauso ergeht.
    Bewegen wir uns in die richtige Richtung ? Sonst bitte eine Kurskorrektur eingeben ...

    Gruß
    LL

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Also ich glaube fast dass es in SCL nicht geht.
    Und zwar weil es in SCL keinen Dereferenzierungsoperator für einen ANY gibt. Die einzige Möglichkeit in SCL an die Daten zu gelangen auf die ein Any-Pointer zeigt, ist das Aufrufen einer anderen Funktion wie z.B. BLKMOV. Wenn ich diesem aber als Bereichskennung "Vorgänger Lokaldaten" mitteile, sind das für den Baustein dann letztendlich die Lokaldaten meines Bausteins.

    Um sowas umzusetzen fehlt dann etwas wie "Inline-AWL" (gibt in C ja auch Inline-Assembler).

  6. #6
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    danke, larry, dass du dir immer die zeit nimmst, mir die welt zu erklären!

    fazit: geht nicht, weil nicht bekannt.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    Standard

    Warum verwendest du keine Durchgangsvariable VAR_IN_OUT?
    Dann kannst du dir die Pointergeschichte sparen, arbeitest mit normalen Datentypen (auch UDT) und der Compiler soll sich um die ganze Pointerei kümmern.

  8. #8
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Also ich glaube fast dass es in SCL nicht geht.
    Und zwar weil es in SCL keinen Dereferenzierungsoperator für einen ANY gibt. Die einzige Möglichkeit in SCL an die Daten zu gelangen auf die ein Any-Pointer zeigt, ist das Aufrufen einer anderen Funktion wie z.B. BLKMOV. Wenn ich diesem aber als Bereichskennung "Vorgänger Lokaldaten" mitteile, sind das für den Baustein dann letztendlich die Lokaldaten meines Bausteins.

    Um sowas umzusetzen fehlt dann etwas wie "Inline-AWL" (gibt in C ja auch Inline-Assembler).
    funktioniert, nach meinen bisherigen erkenntnissen in diesem fall, auch nicht mit BLKMOV ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    funktioniert, nach meinen bisherigen erkenntnissen in diesem fall, auch nicht mit BLKMOV ...
    Hatte ich auch so gemeint dass es mit BLKMOV nicht funktioniert, und letztendlich auch mit allen anderen unterlagerten FCs.

    Code:
    OB1 <-Vorgänger Lokaldaten-< FC1500 <-Vorgänger Lokaldaten-< BLKMOV
    Um von BLKMOV auf die Lokaldaten von OB1 zuzugreifen bräuchte man die hypothetische Bereichskennung "Vor-Vorgänger Lokaldaten".

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich steh da noch etwas auf dem Schlauch, wozu brauchst du Zugriff auf die Lokaldaten des Vor-Vorgänger bausteins?

    Was versteht ihr unter Lokaldaten, Tempvariablen?


    Ich frage nur so blöde sachen, weil ich bisher auch in Umfangreichen Programmen (alles in SCL) noch nie das Bedürfniss hatte, über irgendwelche Pointer auf Lokaldaten des Vorgängers zuzugreiffen. Wenn ich auf die Daten vom Aufrufenden Baustein schreiben will, mach ich das über OUT oder IN_OUT Variablen...
    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!!
    Geändert von Chefmech (31.05.2010 um 18:54 Uhr)

Ä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
  •