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

Page 1 of 5 123 ... LastLast
Results 1 to 10 of 46

Thread: Meldung mit Date and Time in DB schreiben

  1. #1
    Join Date
    14.03.2019
    Posts
    38
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich arbeite seit kurzem mit dem TIA Portal V15.1.
    Derzeit versuche ich mich an der Analogwertverarbeitung/skallierung.
    Ich habe mir bereits meinen Wert 4-20mA (0-30m3/h) skaliert, nun wollte ich gern wenn es zum Max wert also 30m3/h kommt. Das mir dies mit Datum und Uhrzeit in einem DB geschrieben wird.
    Leider klappt dies nicht.


    Danke schon mal im Voraus
    Reply With Quote Reply With Quote Answered: Meldung mit Date and Time in DB schreiben  

  2. "hier mal was. ungetestet.
    den db_neuer_eintrag musst du natürlich noch mit daten versorgen."


  3. #2
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,558
    Danke
    1,090
    Erhielt 4,003 Danke für 3,235 Beiträge

    Default

    Quote Originally Posted by Byte0815 View Post
    Leider klappt dies nicht.
    Aha, meine Glaskugel sagt, Du weißt nicht wie man den Wert auf 30m³/h vergleicht?

    Oder wie man Datum + Uhrzeit kopiert?
    Soll in dem DB nur Datum + Uhrzeit des letzten Ereignisses stehen oder soll das eine Art Logbuch sein? Mit mehreren Einträgen wie in einem Meldearchiv?
    Was genau ist Dein Problem?
    Welche CPU hast Du?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #3
    Join Date
    14.03.2019
    Posts
    38
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ich arbeite mit einer 1212 DC/DC/DC

    Denn Baustein zum Vergleichen habe ich denke ich gefunden

    Genau mein Problem ist das ich nicht weiß wie ich das jetzt in ein Meldearchiv oder Logbuch einfügen soll. Damit mir Zeit und Datum angezeigt werden wenn es zur Überschreitung kommt.
    Ich will Quasi irgendwo sehen wann mein Wert „Max“ erreicht wurde

  5. #4
    Join Date
    06.11.2008
    Location
    Steinhagen
    Posts
    282
    Danke
    31
    Erhielt 17 Danke für 17 Beiträge

    Default

    Moin Byte0815,

    Quote Originally Posted by Byte0815 View Post
    Genau mein Problem ist das ich nicht weiß wie ich das jetzt in ein Meldearchiv oder Logbuch einfügen soll. Damit mir Zeit und Datum angezeigt werden wenn es zur Überschreitung kommt.
    Ich will Quasi irgendwo sehen wann mein Wert „Max“ erreicht wurde
    was jetzt? Meldearchiv oder DB? Oder beides?

    VG

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  6. #5
    Join Date
    14.03.2019
    Posts
    38
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ob Meldearchiv oder Datenbaustein wäre mir egal.
    Wenn ich beides hinbekommen würde wäre das auch super. Aber die Hauptsache wäre wenn eins von beiden realisiert würde

  7. #6
    Join Date
    06.11.2008
    Location
    Steinhagen
    Posts
    282
    Danke
    31
    Erhielt 17 Danke für 17 Beiträge

    Default

    Moin Byte0815,

    vielleicht erst einmal in einen DB.

    Soll immer nur ein Ereignis eingetragen werden oder willst eine Anzahl an Ereignissen (z.B. in einem Ringpuffer) speichern?

    VG

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  8. #7
    Join Date
    14.03.2019
    Posts
    38
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Default

    Theoretisch würde ein Eintrag reichen. Aber ich denke das ganze gleich als Ringpuffer anzulegen wäre wohl am besten.
    Bräuchte immer wenn mein Grenzwert Überschritten wird einen Eintrag mit Datum und Uhrzeit

  9. #8
    Join Date
    06.11.2008
    Location
    Steinhagen
    Posts
    282
    Danke
    31
    Erhielt 17 Danke für 17 Beiträge

    Default

    Moin Byte0815,

    eigentlich brauchst Du ja nur Datum/Uhrzeit. Das die Eintragung von der Grenzwertüberschreitung herrührt ist ja klar.
    Du könntest den DB entsprechend benennen (z.B. "Limit_OF" (Limit Overflow).

    Ließt Du irgendwo schon Datum und Uhrzeit aus? Es gibt die Systemzeit der CPU (bezieht sich auf die UTC) und die Lokalzeit (UTC+1 (für Deutschland (Berlin, etc.)) und Sommer-/Winterzeitumstellung). Zur Sommer-/Winterzeitumstellung gibt es einen entsprechenden Baustein (SET_TIMEZONE) in der CPU.
    Ansonsten für das Auslesen der Uhrzeiten:
    RD_LOC_T für die Lokalzeit (also mit UTC+1 und Sommer-/Winterzeit)
    RD_SYS_T für Systemzeit (also UTC)

    für weitere Anwendungen usw. würde ich die Uhrzeiten immer zyklisch lesen und in einem DB (den Du z.B. "CLOCK" nennst ablegen).
    Uhrzeit dann mit dem Datentyp DT (Date_and_Time) deklarieren.

    So. Jetzt immer wenn Dein Grenzwert überschritten wurde eine positive Flanke erzeugen. Damit kannst Du dann die Eintragung in Deinem Ringpuffer vornehmen.

    Empfehlung: mache Dir eine Anwenderkonstante (z.B. LimitCnt). Die kannst Du dann sinnvoll so einsetzen:

    DB "Limit:OF":

    Lfd_Nr int
    TimeStamp Array[0.."LimitCnt"] of DT


    Programm:

    if "Triggerflanke" then
    TimeStamp[Lfd_Nr] := "CLOCK".LocalTime;
    Lfd_Nr := Lfd_Nr + 1;
    Lfd_Nr := Lfd_Nr MOD (LimitCnt + 1);
    end_if;


    Dann enthält der Ringpuffer so viel Einträge wie LimitCnt + 1. Damit hast Du ja auch dein Array deklariert, also musst Du nichts weiter beachten, wenn Du die Ringpuffergröße änderst (das geht NICHT zur Laufzeit. UND: wenn du die Ringpuffergröße änderst, muss der DB neu initialisiert werden!).

    Zu MOD (Modulo):
    Das ist ja die Restdivision. Also bei 5 Einträgen:

    5 MOD 0 = 0
    5 MOD 1 = 1
    5 MOD 2 = 2
    5 MOD 3 = 3
    5 MOD 4 = 4
    5 MOD 5 = 0 > hier geht es also wieder (automatisch) von vorne los

    Deshalb auch LimitCnt +1, da das Array bei 0 anfängt bzw. anfangen muss.


    VG

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  10. #9
    Join Date
    14.03.2019
    Posts
    38
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Default

    Geht das auch in FUP umzusetzen oder nur in SCL ?

  11. #10
    Join Date
    04.11.2013
    Posts
    186
    Danke
    19
    Erhielt 41 Danke für 31 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du kannst z. B. mit RD_LOC_T die CPU-Uhr auslesen, diesen Wert (DTL) anschliessend mit T_CONV DTL TO Date und T_CONV DTL TO Time_Of_Date in Datum und Uhrzeit wandeln. Zum Speichern in einen DB erstellst du einen UDT aus Arrays [0...x Einträge] der entsprechenden Datentypen (Date; Time_of_day; Int, Real oder was auch immer für deinen Wert).

    Zum Eintragen eines Wertes schiebst du zuerst per MOVE_BLK alle Einträge in den UDT-Arrays um 1 Position weiter und überträgst anschliessend die neuen Daten in die jeweiligen Arrays an die Stelle 0.

    Edit: Das geht auch in FUP
    Last edited by Gleichstromer; 15.03.2019 at 11:21.

  12. Folgender Benutzer sagt Danke zu Gleichstromer für den nützlichen Beitrag:

    Byte0815 (15.03.2019)

Similar Threads

  1. Step 7 In AWL Date and Time mit Pointer im DB speichern.
    By tommylik in forum Simatic
    Replies: 10
    Last Post: 28.09.2017, 19:25
  2. Replies: 4
    Last Post: 14.02.2017, 16:27
  3. Step 7 Date and Time Variable selber schreiben möglich?
    By Chrisxx8 in forum Simatic
    Replies: 5
    Last Post: 05.02.2016, 11:32
  4. TIA Date and Time mit x Monaten addieren
    By rr_zx in forum Simatic
    Replies: 19
    Last Post: 25.11.2014, 12:06
  5. Replies: 0
    Last Post: 13.11.2014, 13:59

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •