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

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

Thema: wie bekomm ich daten in die return variable eines fc?

  1. #11
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du könntest indirek auf die aussen anparametrierte Variable zugreifen.

    Code:
       
          L     P##DatumUhrzeit
          LAR1  
    
          L     P##RET_VAL
          LAR2  
    
          L     D [AR1,P#0.0]
          T     D [AR2,P#0.0]
    
          L     D [AR1,P#4.0]
          T     D [AR2,P#4.0]
    EDIT: Sorry, funktioniert so nicht. Habs grad doch noch getestet.
    Geändert von Aventinus (04.11.2013 um 09:33 Uhr)
    mfG Aventinus

  2. #12
    erzteufele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.11.2008
    Ort
    Schweigen am Weintor
    Beiträge
    707
    Danke
    191
    Erhielt 161 Danke für 92 Beiträge

    Standard

    @Aventinus hab ich auch schon probiert und hier wird zwar nicht gemeckert aber es tut sich nichts´s an der ret_val ... :/

  3. #13
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    jetzt aber:

    Code:
          L     P##DatumUhrzeit
          LAR1  
    
          L     P##RET_VAL
          LAR2  
    // Bei Speicherbereich DB entsprechenden DB aufschlagen
          L     B [AR2,P#2.0]
          L     B#16#84
          ==I   
          SPBN  aufs
          L     W [AR2,P#0.0]
          T     #tmp_int
          AUF   DB [#tmp_int]
    
    // Adresse laden
    aufs: L     D [AR2,P#2.0]
          LAR2  
    
          L     D [AR1,P#0.0]
          T     D [AR2,P#0.0]
    
          L     D [AR1,P#4.0]
          T     D [AR2,P#4.0]
    mfG Aventinus

  4. #14
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Funktioniert das auch, wenn an RET_VAL eine TEMP hängt? Eventuell muss dann noch aus B#16#86 (Lokaldaten) B#16#87 (vorherige Lokaldaten) gemacht werden.
    Gruß
    Michael

  5. #15
    erzteufele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.11.2008
    Ort
    Schweigen am Weintor
    Beiträge
    707
    Danke
    191
    Erhielt 161 Danke für 92 Beiträge

    Standard

    @Aventinus grins das ist der code von siemens
    mein fc wird nicht gefüttert mit einem date_time es soll nur eins raus
    DatumUhrzeit ist eine temp

    2013-11-04_094553.jpg


    FUNCTION "DatumUhrzeit" : DATE_AND_TIME
    TITLE =
    VERSION : 0.1


    VAR_INPUT
    AutoSommerWinter : BOOL ;
    StdPlusZurMEZ : BYTE ;
    END_VAR
    VAR_TEMP
    retval : INT ;
    DatumUhrzeit : DATE_AND_TIME ;
    Schaltjahr : BYTE ;
    Wochentag : BYTE ;
    LetzterSonntag : BOOL ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =Datum Uhrzeit Auslesen


    CALL "READ_CLK" (
    RET_VAL := #retval,
    CDT := #DatumUhrzeit);

    NETWORK
    TITLE =Zum Anschauen

    U L 9.0;
    = L 11.0;
    U L 9.1;
    = L 11.1;
    U L 9.2;
    = L 11.2;
    U L 9.3;
    = L 11.3;

    L #Wochentag; //Wochentag 1=Sonntag
    NETWORK
    TITLE =Plus Stunden Addieren Für MEZ

    L LB 5;
    L #StdPlusZurMEZ;
    +I ;
    T LB 5;
    NETWORK
    TITLE =

    U( ;
    L LB 4;
    L B#16#25;
    ==I ;
    ) ;
    U( ;
    L #Wochentag;
    L B#16#1;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#26;
    ==I ;
    ) ;
    U( ;
    L #Wochentag;
    L B#16#2;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#27;
    ==I ;
    ) ;
    U( ;
    L #Wochentag;
    L B#16#3;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#28;
    ==I ;
    ) ;
    U( ;
    L #Wochentag;
    L B#16#4;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#29;
    ==I ;
    ) ;
    U( ;
    L #Wochentag;
    L B#16#5;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#30;
    ==I ;
    ) ;
    U( ;
    L #Wochentag;
    L B#16#6;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#31;
    ==I ;
    ) ;
    U( ;
    L #Wochentag;
    L B#16#1;
    >=I ;
    ) ;
    = #LetzterSonntag;
    NETWORK
    TITLE =Sommerzeit? Letzten So. im März bis zum Letzten So. im Oktober

    U #AutoSommerWinter;
    U( ;
    U #LetzterSonntag;
    U( ;
    L LB 5;
    L B#16#2;
    >=I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#4;
    >=I ;
    ) ;
    ) ;
    U( ;
    L LB 3;
    L B#16#3;
    >=I ;
    ) ;
    U( ;
    U( ;
    U #LetzterSonntag;
    U( ;
    L LB 5;
    L B#16#3;
    >=I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#11;
    >=I ;
    ) ;
    ) ;
    U( ;
    L LB 3;
    L B#16#10;
    >=I ;
    ) ;
    NOT ;
    ) ;
    SPBNB _001;
    L LB 5;
    L B#16#1;
    +I ;
    T LB 5;
    _001: NOP 0;
    NETWORK
    TITLE =Addierte Stunden ins komische Hex



    U( ;
    U( ;
    L LB 5;
    L B#16#A;
    >=I ;
    ) ;
    U( ;
    L LB 5;
    L B#16#F;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 5;
    L B#16#1A;
    >=I ;


    ) ;
    U( ;
    L LB 5;
    L B#16#1F;
    <=I ;
    ) ;
    ) ;
    SPBNB _002;
    L LB 5;
    L 6;
    +I ;
    T LB 5;
    _002: NOP 0;
    NETWORK
    TITLE =Wenn Stunden Überlauf Stunden von 24 -> 0 und Tag +1

    L LB 5;
    L B#16#24;
    >=I ;
    = L 22.0;
    U L 22.0;
    SPBNB _003;
    L LB 5;
    L B#16#24;
    -I ;
    T LB 5;
    _003: NOP 0;
    U L 22.0;
    SPBNB _004;
    L LB 4;
    L 1;
    +I ;
    T LB 4;
    _004: NOP 0;
    NETWORK
    TITLE =Addierte Tage ins komische Hex

    U( ;
    U( ;
    L LB 4;
    L B#16#A;
    >=I ;
    ) ;
    U( ;
    L LB 4;
    L B#16#F;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#1A;
    >=I ;
    ) ;
    U( ;
    L LB 4;
    L B#16#1F;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#2A;
    >=I ;
    ) ;
    U( ;
    L LB 4;
    L B#16#2F;
    <=I ;
    ) ;
    O ;
    U( ;
    L LB 4;
    L B#16#3A;
    >=I ;
    ) ;
    U( ;
    L LB 4;
    L B#16#3F;
    <=I ;
    ) ;
    ) ;
    SPBNB _005;
    L LB 4;
    L B#16#6;
    +I ;
    T LB 4;
    _005: NOP 0;
    NETWORK
    TITLE =Monate mit 30 Tagen Überlauf 31 Tag -> Tag auf 1 und Monat +1

    U( ;
    L LB 4;
    L B#16#32;
    >=I ;
    ) ;
    U( ;
    O( ;
    L LB 3;
    L B#16#1;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#3;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#5;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#7;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#8;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#10;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#12;
    ==I ;
    ) ;
    ) ;
    = L 22.0;
    U L 22.0;
    SPBNB _006;
    L LB 4;
    L B#16#31;
    -I ;
    T LB 4;
    _006: NOP 0;
    U L 22.0;
    SPBNB _007;
    L LB 3;
    L B#16#1;
    +I ;
    T LB 3;
    _007: NOP 0;
    NETWORK
    TITLE =Monate mit 31 Tagen Überlauf 32 Tag -> Tag auf 1 und Monat +1

    U( ;
    L LB 4;
    L B#16#31;
    >=I ;
    ) ;
    U( ;
    O( ;
    L LB 3;
    L B#16#4;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#6;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#9;
    ==I ;
    ) ;
    O( ;
    L LB 3;
    L B#16#11;
    ==I ;
    ) ;
    ) ;
    = L 22.0;
    U L 22.0;
    SPBNB _008;
    L LB 4;
    L B#16#30;
    -I ;
    T LB 4;
    _008: NOP 0;
    U L 22.0;
    SPBNB _009;
    L LB 3;
    L B#16#1;
    +I ;
    T LB 3;
    _009: NOP 0;
    NETWORK
    TITLE =Schaltjahr? Jahreszahl Durch 4 Teilbar=Schaltjahr

    L LB 2;
    BTI ;
    L B#16#4;
    MOD ;
    T #Schaltjahr;
    NOP 0;
    NETWORK
    TITLE =Monat Februar kein Schaltjahr Überlauf 29 Tag -> Tag auf 1 und M

    U( ;
    L LB 4;
    L B#16#29;
    >=I ;
    ) ;
    U( ;
    L LB 3;
    L B#16#2;
    ==I ;
    ) ;
    U( ;
    L #Schaltjahr;
    L B#16#0;
    <>I ;
    ) ;
    = L 22.0;
    U L 22.0;
    SPBNB _00a;
    L LB 4;
    L B#16#28;
    -I ;
    T LB 4;
    _00a: NOP 0;
    U L 22.0;
    SPBNB _00b;
    L LB 3;
    L B#16#1;
    +I ;
    T LB 3;
    _00b: NOP 0;
    NETWORK
    TITLE =Monat Februar Schaltjahr Überlauf 30 Tag -> Tag auf 1 und Monat

    U( ;
    L LB 4;
    L B#16#30;
    >=I ;
    ) ;
    U( ;
    L LB 3;
    L B#16#2;
    ==I ;
    ) ;
    U( ;
    L #Schaltjahr;
    L B#16#0;
    ==I ;
    ) ;
    = L 22.0;
    U L 22.0;
    SPBNB _00c;
    L LB 4;
    L B#16#2F;
    -I ;
    T LB 4;
    _00c: NOP 0;
    U L 22.0;
    SPBNB _00d;
    L LB 3;
    L B#16#1;
    +I ;
    T LB 3;
    _00d: NOP 0;
    NETWORK
    TITLE =Addierter Monat ins komische Hex

    U( ;
    L LB 3;
    L B#16#A;
    >=I ;
    ) ;
    U( ;
    L LB 3;
    L B#16#F;
    <=I ;
    ) ;
    SPBNB _00e;
    L LB 3;
    L B#16#6;
    +I ;
    T LB 3;
    _00e: NOP 0;
    NETWORK
    TITLE =Überlauf Monat 13 auf 1 und Jahr +1

    L LB 3;
    L B#16#13;
    >=I ;
    = L 22.0;
    U L 22.0;
    SPBNB _00f;
    L LB 3;
    L B#16#12;
    -I ;
    T LB 3;
    _00f: NOP 0;
    U L 22.0;
    SPBNB _010;
    L LB 2;
    L B#16#1;
    +I ;
    T LB 2;
    _010: NOP 0;

    NETWORK
    TITLE =

    L P##RET_VAL;
    LAR1 ;

    L LD 2;
    T D [AR1,P#0.0];

    L LD 6;
    T D [AR1,P#4.0];


    END_FUNCTION

  6. #16
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von M-Ott Beitrag anzeigen
    Funktioniert das auch, wenn an RET_VAL eine TEMP hängt? Eventuell muss dann noch aus B#16#86 (Lokaldaten) B#16#87 (vorherige Lokaldaten) gemacht werden.
    Das sollte auch mit Temp funtktionieren, denn der Speicherberech wird ja an der markierten Stelle mit berücksichtigt:

    Zitat Zitat von Aventinus Beitrag anzeigen
    jetzt aber:

    Code:
          L     P##DatumUhrzeit
          LAR1  
    
          L     P##RET_VAL
          LAR2  
    // Bei Speicherbereich DB entsprechenden DB aufschlagen
          L     B [AR2,P#2.0]
          L     B#16#84
          ==I   
          SPBN  aufs
          L     W [AR2,P#0.0]
          T     #tmp_int
          AUF   DB [#tmp_int]
    
    // Adresse laden
    aufs: L     D [AR2,P#2.0]
          LAR2  
    
          L     D [AR1,P#0.0]
          T     D [AR2,P#0.0]
    
          L     D [AR1,P#4.0]
          T     D [AR2,P#4.0]
    Und innerhalb des aufgerufenen FC´s bezieht sich das ja auf die vorigen Lokaldaten
    Geändert von Aventinus (04.11.2013 um 10:01 Uhr)
    mfG Aventinus

  7. Folgender Benutzer sagt Danke zu Aventinus für den nützlichen Beitrag:

    erzteufele (04.11.2013)

  8. #17
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    @erzteufele: Stimmt, dein FC bekommt nur einen Pointer auf deine Variable - also dein DateAndTime - das raus soll.
    mfG Aventinus

  9. #18
    erzteufele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.11.2008
    Ort
    Schweigen am Weintor
    Beiträge
    707
    Danke
    191
    Erhielt 161 Danke für 92 Beiträge

    Standard

    danke jetzt klappts auch jetzt muss ich nurnoch nachvollziehen warum

  10. #19
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn du den Pointer auf die Variable RET_VAL lädst, bekommst du (bei zusammengesetzten Datentypen) einen Pointer auf einen Pointer der der Adresse auf die eigentliche Variable enthält.
    Der Aufbau des Pointers entspricht einem Any ab Byte 4, also Datenbausteinnummer im ersten Wort und dann Speicherberich und Adresse.

    Das hab ich mir rausgedröselt, den entsprechenden DB geöffnet und die Adresse in AR2 geschrieben.
    mfG Aventinus

  11. Folgende 2 Benutzer sagen Danke zu Aventinus für den nützlichen Beitrag:

    erzteufele (04.11.2013),Thomas450 (04.11.2013)

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 29.09.2012, 13:55
  2. Wie bekomm ich das Icon vom Lizenzmanager weg
    Von Waelder im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 25.04.2012, 19:17
  3. KEB FU an CP343-1 Wie komm ich an die Daten?
    Von DarkLykan im Forum Feldbusse
    Antworten: 2
    Letzter Beitrag: 16.09.2011, 11:02
  4. [VB] wie lege ich die Inhalte eines offenen Array hintereinander?
    Von rostiger Nagel im Forum Programmierstrategien
    Antworten: 26
    Letzter Beitrag: 16.03.2011, 18:16
  5. Antworten: 12
    Letzter Beitrag: 11.03.2010, 08:57

Lesezeichen

Berechtigungen

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