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

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

Thema: FC mit Date_And_Time

  1. #1
    Registriert seit
    25.01.2011
    Ort
    97980
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich habe mir 2 FC erstellt wie auf dieser Seite beschrieben:
    https://support.automation.siemens.c...26&caller=view

    Also bei mir FC2 zum Lesen und FC3 zum Schreiben der Uhrzeit in db100

    allerding Funktioniert nur der FC2

    FC3 schreibt irgend wie nicht die Uhrzeit in die CPU

    Die Daten schreibe ich in DB100, lesen aktiviere ich mit e124.6
    schreiben mit e124.7

    hier die 2 Quellen der FC2 und FC3, DB100 und OB1 Aufruf (AWL-Quelle):
    CPU ist denk ich net so wichtig - ist eine 313C V2.0
    Woran liegt das ?


    ****************************FC2************
    FUNCTION "DT_VAR" : VOID
    TITLE =
    VERSION : 0.1

    VAR_OUTPUT
    Jahre : BYTE ;
    Monate : BYTE ;
    Tage : BYTE ;
    Stunden : BYTE ;
    Minuten : BYTE ;
    Sekunden : BYTE ;
    Millisekunden : WORD ;
    Wochentag : BYTE ;
    END_VAR
    VAR_TEMP
    DT_IN : DATE_AND_TIME ;
    SFC1error : INT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    CALL "READ_CLK" (
    RET_VAL := #SFC1error,
    CDT := #DT_IN);

    NETWORK
    TITLE =
    LAR1 P##DT_IN;
    L B [AR1,P#0.0];
    T #Jahre;
    L B [AR1,P#1.0];
    T #Monate;
    L B [AR1,P#2.0];
    T #Tage;
    L B [AR1,P#3.0];
    T #Stunden;
    L B [AR1,P#4.0];
    T #Minuten;
    L B [AR1,P#5.0];
    T #Sekunden;
    L W#16#FFF0;
    L W [AR1,P#6.0];
    UW ;
    T #Millisekunden;
    L B#16#F;
    L B [AR1,P#7.0];
    UW ;
    T #Wochentag;
    CLR ;
    END_FUNCTION

    ****************************FC3************
    FUNCTION "VAR_DT" : VOID
    TITLE =
    VERSION : 0.1

    VAR_INPUT
    S_Jahre : BYTE ;
    S_Monate : BYTE ;
    S_Tage : BYTE ;
    S_Stunden : BYTE ;
    S_Minuten : BYTE ;
    S_Sekunden : BYTE ;
    S_Millisekunden : WORD ;
    S_Wochentag : BYTE ;
    END_VAR
    VAR_TEMP
    dt_out : DATE_AND_TIME ;
    SFC0error : INT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    LAR1 P##dt_out;
    L #S_Jahre;
    T B [AR1,P#0.0];
    L #S_Monate;
    T B [AR1,P#1.0];
    L #S_Tage;
    T B [AR1,P#2.0];
    L #S_Stunden;
    T B [AR1,P#3.0];
    L #S_Minuten;
    T B [AR1,P#4.0];
    L #S_Sekunden;
    T B [AR1,P#5.0];
    L #S_Wochentag;
    T B [AR1,P#7.0];
    CALL "SET_CLK" (
    PDT := #dt_out,
    RET_VAL := #SFC0error);

    END_FUNCTION

    ****************************DB100************
    DATA_BLOCK "DatumUhrzeit"
    TITLE =
    VERSION : 0.1

    STRUCT
    Jahre : BYTE ; //Jahre
    Monate : BYTE ; //Monate
    Tage : BYTE ; //Tage
    Stunden : BYTE ; //Stunden
    Minuten : BYTE ; //Minuten
    Sekunden : BYTE ; //Sekunden
    Millisekunden : WORD ; //Millisekunden
    Wochentag : BYTE ; //Wochentag
    Stellen : BYTE ; //Reserve Byte
    S_Jahre : BYTE ; //Stellen Jahre
    S_Monate : BYTE ; //Stellen Monate
    S_Tage : BYTE ; //Stellen Tage
    S_Stunden : BYTE ; //Stellen Stunden
    S_Minuten : BYTE ; //Stellen Minuten
    S_Sekunden : BYTE ; //Stellen Sekunde
    S_Millisekunden : WORD ; //Stellen Millisekunden
    S_Wochentag : BYTE ; //Stellen Wochentag
    END_STRUCT ;
    BEGIN
    Jahre := B#16#0;
    Monate := B#16#0;
    Tage := B#16#0;
    Stunden := B#16#0;
    Minuten := B#16#0;
    Sekunden := B#16#0;
    Millisekunden := W#16#0;
    Wochentag := B#16#0;
    Stellen := B#16#0;
    S_Jahre := B#16#0;
    S_Monate := B#16#0;
    S_Tage := B#16#0;
    S_Stunden := B#16#0;
    S_Minuten := B#16#0;
    S_Sekunden := B#16#0;
    S_Millisekunden := W#16#0;
    S_Wochentag := B#16#0;
    END_DATA_BLOCK


    ****************************OB1 AUfruf************
    NETWORK
    TITLE =
    U E 124.6;
    SPBNB _001;
    CALL "DT_VAR" (
    Jahre := "DatumUhrzeit".Jahre,
    Monate := "DatumUhrzeit".Monate,
    Tage := "DatumUhrzeit".Tage,
    Stunden := "DatumUhrzeit".Stunden,
    Minuten := "DatumUhrzeit".Minuten,
    Sekunden := "DatumUhrzeit".Sekunden,
    Millisekunden := "DatumUhrzeit".Millisekunden,
    Wochentag := "DatumUhrzeit".Wochentag);

    _001: NOP 0;
    NETWORK
    TITLE =
    U E 124.7;
    SPBNB _002;
    CALL "VAR_DT" (
    S_Jahre := "DatumUhrzeit".S_Jahre,
    S_Monate := "DatumUhrzeit".S_Monate,
    S_Tage := "DatumUhrzeit".S_Tage,
    S_Stunden := "DatumUhrzeit".S_Stunden,
    S_Minuten := "DatumUhrzeit".S_Minuten,
    S_Sekunden := "DatumUhrzeit".S_Sekunden,
    S_Millisekunden := "DatumUhrzeit".S_Millisekunden,
    S_Wochentag := "DatumUhrzeit".S_Wochentag);
    _002: NOP 0;
    Zitieren Zitieren FC mit Date_And_Time  

  2. #2
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    wie werden die Zahlen vorgegeben? BCD oder Dezimal?

    So wie es ist muss es in BCD angegeben werden also z.B. B#16#12 für eine 12.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  3. #3
    Heinz2011 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.01.2011
    Ort
    97980
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    vorgegeben sind die zahlen als byte , so wie die felder dafür in db100 angelegt sind,
    also fc2 lesen der uhrzeit und in db100 ablegen funktioniert
    nur eben fc3 schreiben, also daten aus db100 holen und mit fc3 in die cpu uhr schreiben funktioniert eben nicht

    ist eigentlich im awl-code siehe oben ersichtlich...

  4. #4
    Heinz2011 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.01.2011
    Ort
    97980
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    nochmal kürzer:
    fc2:
    CALL "READ_CLK"
    RET_VAL:=#SFC1error
    CDT :=#DT_IN
    LAR1 P##DT_IN
    L B [AR1,P#0.0]
    T #Jahre
    L B [AR1,P#1.0]
    T #Monate
    L B [AR1,P#2.0]
    T #Tage
    L B [AR1,P#3.0]
    T #Stunden
    L B [AR1,P#4.0]
    T #Minuten
    L B [AR1,P#5.0]
    T #Sekunden
    L W#16#FFF0
    L W [AR1,P#6.0]
    UW
    T #Millisekunden
    L B#16#F
    L B [AR1,P#7.0]
    UW
    T #Wochentag
    CLR
    ------------------------------------------
    und dann noch fc3:
    ------------------------------------------
    LAR1 P##dt_out
    L #S_Jahre
    T B [AR1,P#0.0]
    L #S_Monate
    T B [AR1,P#1.0]
    L #S_Tage
    T B [AR1,P#2.0]
    L #S_Stunden
    T B [AR1,P#3.0]
    L #S_Minuten
    T B [AR1,P#4.0]
    L #S_Sekunden
    T B [AR1,P#5.0]
    L #S_Wochentag
    T B [AR1,P#7.0]
    CALL "SET_CLK"
    PDT :=#dt_out
    RET_VAL:=#SFC0error

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Was gibt SET_CLK als RET_VAL (was steht in #SFC0error)?

    2 Kleinigkeiten würde ich noch hinzufügen und dann mal schauen:
    Code:
    //OB1
    U E 124.7; 
    FP M 10.0 ;
    SPBNB _002; 
    CALL "VAR_DT" (
    //...
    Code:
    //FC3
    
    L #S_Sekunden; 
    T B [AR1,P#5.0]; 
    L 0 ;
    T B [AR1,P#6.0]; 
    L #S_Wochentag; 
    T B [AR1,P#7.0];
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Bitte benutze doch aml die CODE Funktion, dann sieht es so wie bei PN/DP aus. Dann kann man den Code auch besser lesen.
    Es ist dieser Button #. Hier ein Besipiel http://www.sps-forum.de/misc.php?do=bbcode#code
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  7. #7
    Heinz2011 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.01.2011
    Ort
    97980
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ok das mit code hab ich nun verstanden.

    also nochmal siehe siemens seite..
    zu fc3 glaub ich hab den fehler
    ar1 wird ja nicht mehr dt_out zugewiesen also ändert sich dt_out nichtmehr

    aber wie mache ich das dann ?
    kann ich ar1 das nun als Date_And_Time formatiert ist irgendwie in eine variable schreiben oder direkt in den sfc0 ?

    (OB1 Aufruf hab ich auch geändert mit P-Flanke)

    Code:
      LAR1  P##dt_out
          L     #S_Jahre
          T     B [AR1,P#0.0]
          L     #S_Monate
          T     B [AR1,P#1.0]
          L     #S_Tage
          T     B [AR1,P#2.0]
          L     #S_Stunden
          T     B [AR1,P#3.0]
          L     #S_Minuten
          T     B [AR1,P#4.0]
          L     #S_Sekunden
          T     B [AR1,P#5.0]
          L     0
          T     B [AR1,P#6.0]
          L     #S_Wochentag
          T     B [AR1,P#7.0]
              CALL  "SET_CLK"
           PDT    :=#dt_out
           RET_VAL:=#SFC0error
    Geändert von Heinz2011 (02.02.2011 um 11:41 Uhr)

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    AR1 ist ein Adressregister und enthält z.B. die Adresse, an welcher eine Variable beginnt. Welchen Variablentyp diese Variable hat ist dem AR1 herzlich egal. Mit "LAR1 P##dt_out" weist Du dem AR1 die Anfangsadresse von #dt_out zu. Wenn #dt_out eine Date_and_Time-Variable in TEMP ist, dann müßte Dein FC3 funktionieren.
    Wo oder Was ist Dein Problem?
    Wenn die Uhrzeit nicht gestellt wird nochmal meine Frage: Was gibt SET_CLK als RET_VAL aus (was steht in #SFC0error)? Tip: zum Testen den RET_VAL auf ein Merkerwort legen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Heinz2011 (07.02.2011)

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

    Standard

    Hallo,
    ich kann jetzt so ad-hoc auch keinen Fehler erkennen.
    Ich würde also gerne die Frage von Daniel noch einmal aufgreifen :
    Zitat Zitat von dalbi Beitrag anzeigen
    wie werden die Zahlen vorgegeben? BCD oder Dezimal?

    So wie es ist muss es in BCD angegeben werden also z.B. B#16#12 für eine 12.
    ... das wurde für mich nämlich nicht brauchbar beantwortet - würde aber ggf. das Verhalten erklären ...

    Gruß
    Larry

  11. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Heinz2011 (07.02.2011)

  12. #10
    Heinz2011 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.01.2011
    Ort
    97980
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also die Zahlen werden in bytes vorgegeben dezimal
    und der retval den ich bekomme ist wenn ich mir das mw in einer vat ansehe w#16#8080

    ups ich habs wohl überlesen das bcd gefordert wurde
    das probier ich dann nochmal..aber ich hatte im db alles 0 drinstehen und dies wurde nicht an die uhr übertragen

    ups x2 ich vermute mal das 0 an alle variablen die uhr/datum nicht annimmt..das sollte ich wohl mit zahlen füllen

    ich probier das gleich mal...ich danke Euch
    Geändert von Heinz2011 (02.02.2011 um 20:03 Uhr)

Ähnliche Themen

  1. String-->date_and_time
    Von rolusch im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.12.2009, 09:16
  2. Date_and_Time vom OB auslesen
    Von taucherd im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 10.12.2008, 22:36
  3. Date_and_time
    Von uz71 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 31.03.2006, 15:05
  4. Date_And_Time
    Von pm im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.01.2005, 12:18
  5. Date_and_time
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 06.10.2003, 16:05

Lesezeichen

Berechtigungen

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