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

Ergebnis 1 bis 8 von 8

Thema: S7 1200 CREATE_DB und DBLG

  1. #1
    Registriert seit
    20.08.2016
    Beiträge
    4
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hey Leute,

    ich programmiere gerade einen Datenlogger welcher mir Daten in einem DB speichert und sie dann an ein MES System weiter sendet. Es soll ein Standardbaustein werden, den wir bei uns immer wieder anwenden können. Dabei werden verschieden Strukturen in den DB geschrieben und über eine ID weiß das MES System was für Daten es bekommt.

    Ursprünglich wurde auf der 300er dazu Create DB verwendet, um den DB nicht jedes mal händisch anlegen zu müssen. Dort konnte man auch Projektspezifisch einen entweder großen oder kleinen Puffer erstellen.

    Laut meiner foren und google suche ist es nicht möglich einen DB in der 1200 im Programm zu erzeugen, stimmt das?

    Gibt es andere Möglichkeiten einen DB "einfach" anzulegen, auch wenn er 10.000 Bytes hat? (vl indem man irgendwas importiert oder mit Excel arbeitet?)
    Ich habe bis jetzt immer den DB erstellt, Byte1 angelegt und dann nach unten durchgezogen, aber es gibt bestimmt schlauere Lösungen

    Es wäre schon wenn man die Länge des DB im Programm ermitteln kann, um unötig viele Eingänge am DB_Logger Baustein zu vermeiden. Gibt es da was? ( Hatte im Forum nur was zu TEST_DB gefunden, aber das geht bei der 1200 wohl nicht)


    LG Oli
    Zitieren Zitieren Gelöst: S7 1200 CREATE_DB und DBLG  

  2. "Hallo Oli,

    ich hatte jüngst das selbe Problem, die Datenlänge eines DBs zu ermitteln. Ich bin mit TIA und vor allem der S71200 auch noch nicht warm geworden, daher keine Gewähr auf Perfektion .

    Code:
    FUNCTION "DB_LENGTH" : UInt
    TITLE = DB_LENGTH
    { S7_Optimized_Access := 'FALSE' }
    AUTHOR : ;-)
    FAMILY : 'STANDARD'
    NAME : 'FC1201'
    VERSION : 0.1
    //Ermittelt die Datenlänge nichtoptimierter Datenbausteine.
       VAR_INPUT 
          "DB" : DB_ANY;
       END_VAR
       VAR_OUTPUT 
          DB_NUMBER : UInt;
       END_VAR
       VAR_TEMP 
          TEMP_WORD : Word;
          ADRESSE : UInt;
          ADRESSOFFSET : UInt;
       END_VAR
    
    BEGIN
     
     #ADRESSE := 32768;
     #ADRESSOFFSET := 32768;
     
     REPEAT
         ENO := TRUE;
         #ADRESSOFFSET := #ADRESSOFFSET / 2;
         #TEMP_WORD := PEEK_WORD(area := 16#84, byteOffset := #ADRESSE, dbNumber := #DB);
         IF ENO THEN
             #ADRESSE := #ADRESSE + #ADRESSOFFSET;
         ELSE
             #ADRESSE := #ADRESSE - #ADRESSOFFSET;
         END_IF;
     UNTIL #ADRESSOFFSET = 1
     END_REPEAT;
     #DB_LENGTH := #ADRESSE + 1;
     #DB_NUMBER := DB_ANY_TO_UINT(#DB);
     
    END_FUNCTION
    "


  3. #2
    Registriert seit
    25.02.2016
    Beiträge
    182
    Danke
    8
    Erhielt 38 Danke für 35 Beiträge

    Standard

    Hallo Olimoli,

    also einen Großen DB anzulegen ähnlich wie Create DB wäre halt einfach ein Array of Byte mit entsprechender länge.

    MFG TIA

  4. Folgender Benutzer sagt Danke zu Wincctia für den nützlichen Beitrag:

    Olimoli50 (20.08.2016)

  5. #3
    Olimoli50 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2016
    Beiträge
    4
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erstmal danke für die Antwort, das mit dem Array wär natürlich ne Möglichkeit

    Also gibt es keinen Weg einen DB im Programm zu Erzeugen wie beim CREATE_DB (SFC22) ?

    Kann man bei einem Array die Länge irgendwie auslesen? (ähnlich "L DBLG" in AWL)


    Grüße Oli

  6. #4
    Registriert seit
    25.02.2016
    Beiträge
    182
    Danke
    8
    Erhielt 38 Danke für 35 Beiträge

    Standard

    Hallo Olimoli50

    mich interessiesrt das Thema auch selber nach diesen Siemens Dokument geht das DB erstellen bei einer 1200 SPS ab einer bestimmten FW hier mal der Link
    https://support.industry.siemens.com...13683&lc=de-DE
    Zu deiner Frage oben es gibt anscheinend befehle die auch die Ober und Untergrenzen von Array zurückgeben.
    Soweit bin ich im TIA bis jetzt nicht gekommen ich hoffe ich konnte dir etwas helfen.

    Gruß TIA

  7. Folgende 2 Benutzer sagen Danke zu Wincctia für den nützlichen Beitrag:

    Olimoli50 (21.08.2016),Onkel Dagobert (21.08.2016)

  8. #5
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.214
    Danke
    430
    Erhielt 650 Danke für 490 Beiträge

    Standard

    Eine Variante müsste Create-DB sein. Sollte laut Liste für die 1200 v4.1 gehen.
    Da weißt du die Größe je eh, wenn du ihn online erstellst.
    Mit Create-DB bekommst du einen "nicht optimierten" Datenbaustein, also wäre auch die Möglichkeit die Größe mittels "ATTR_DB" (1200 v4.1) auszulesen.

    ATTR_DB geht nur bei nicht optimierten DBs, sonst bekommt man 0 als Länge zurück.

    Wenn du den DB fest erstellst (z.B.) Array_of_Byte, dann wäre das einfachste die Array-Größe über eine System-Konstante festzulegen. Beim Übersetzen wird dein Array automatisch so groß wie es die Konstante vorgibt und im Programm kannst du diese auch nutzen. Das würde den Vorteil bringen dass du die Größe des DBs bequem per Anpassung der Konstanten einstellen kannst und auf das ganze "dynamisch die Größe auslesen" verzichten könntest.

    Wenn du eine Array-Größe unbedingt online herausfinden musst, dann schau der mal die Befehle...
    • TypeOf
    • TypeOfElements
    • CountOfElements

    ...an.

    Laut Liste ebenfalls 1200 v4.1 und sollte alles sein was finden der Größe braucht.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  9. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Olimoli50 (21.08.2016)

  10. #6
    Olimoli50 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2016
    Beiträge
    4
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Verrückte TIA-welt… aber erstmal riesen dank an euch beide für den Support, vorallem an Wincctia für das Auffinden des schon fast da-vinci-codehaften, versteckten Dokument von Siemens, das hilft mir theoretisch enorm weiter.

    Aber zum Dokument und Siemens selber:
    Ich nutze gerade die CPU1211C DC/DC/DC und davon die größte (…-1AE40-…) V4.1. Laut „Betroffene Produkte“ wird diese CPU sowie alle großen CPU’s aus jedem Familienbaum NICHT unterstützt (also immer die mit dem meisten Arbeitsspeicher mein ich,). Was an sich ja schon mal sinnlos ist…
    Dazu kommt das fast alle “betroffenen Produkte“ von dem Dokument FW 3.0 oder meist geringer haben. Also de facto habe ich keine 1200er CPU gefunden die diese Funktionen haben…
    Das gleiche Dokument in der Ausgabe 2014/2 sagt übrigens auch schon aus, dass die 1200er diese Funktionen unterstützt… also danke dafür Siemens.

    Gerade HW-Katalog geupdatet und das aktuelle Update 9 fürs TIA geladen, trotzdem nicht verfügbar. (bei der 1500 geht’s übrigens problemlos)

    TIA is echt nicht meine Welt..


    Grüße Oli

  11. #7
    Registriert seit
    17.12.2010
    Beiträge
    222
    Danke
    21
    Erhielt 75 Danke für 53 Beiträge

    Standard

    Hallo Oli
    ich verstehe gerade dein Problem nicht ganz. Du willst mit deiner 12xx CPU Create_DB machen oder.
    In diesem Dokument:
    https://support.industry.siemens.com...13683&lc=de-DE
    ist die Funktion drin aber blau hinterlegt. Und in der Legende dazu ist Beschrieben das diese Funktion mit V14 und Fw4.2 verfügbar ist.
    Also musst du da drauf noch ein bisschen warten.
    Oder habe ich da jetzt was falsch interpretiert?

    christoph

  12. #8
    Registriert seit
    06.10.2003
    Beiträge
    3.259
    Danke
    426
    Erhielt 476 Danke für 384 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Oli,

    ich hatte jüngst das selbe Problem, die Datenlänge eines DBs zu ermitteln. Ich bin mit TIA und vor allem der S71200 auch noch nicht warm geworden, daher keine Gewähr auf Perfektion .

    Code:
    FUNCTION "DB_LENGTH" : UInt
    TITLE = DB_LENGTH
    { S7_Optimized_Access := 'FALSE' }
    AUTHOR : ;-)
    FAMILY : 'STANDARD'
    NAME : 'FC1201'
    VERSION : 0.1
    //Ermittelt die Datenlänge nichtoptimierter Datenbausteine.
       VAR_INPUT 
          "DB" : DB_ANY;
       END_VAR
       VAR_OUTPUT 
          DB_NUMBER : UInt;
       END_VAR
       VAR_TEMP 
          TEMP_WORD : Word;
          ADRESSE : UInt;
          ADRESSOFFSET : UInt;
       END_VAR
    
    BEGIN
     
     #ADRESSE := 32768;
     #ADRESSOFFSET := 32768;
     
     REPEAT
         ENO := TRUE;
         #ADRESSOFFSET := #ADRESSOFFSET / 2;
         #TEMP_WORD := PEEK_WORD(area := 16#84, byteOffset := #ADRESSE, dbNumber := #DB);
         IF ENO THEN
             #ADRESSE := #ADRESSE + #ADRESSOFFSET;
         ELSE
             #ADRESSE := #ADRESSE - #ADRESSOFFSET;
         END_IF;
     UNTIL #ADRESSOFFSET = 1
     END_REPEAT;
     #DB_LENGTH := #ADRESSE + 1;
     #DB_NUMBER := DB_ANY_TO_UINT(#DB);
     
    END_FUNCTION
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  13. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    Olimoli50 (23.08.2016)

Ähnliche Themen

  1. TIA S7-1200 und C# (S7.Net Plus)
    Von Scor1987 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 14.10.2015, 21:56
  2. WinCC 7.3 und S7 1200
    Von Aksels im Forum HMI
    Antworten: 5
    Letzter Beitrag: 13.02.2015, 10:48
  3. Antworten: 15
    Letzter Beitrag: 20.10.2014, 10:26
  4. S7-1200 und Step 7
    Von Sigi112 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.04.2013, 07:56
  5. Datenaustausch zwischen S7-1200 und S7-1200
    Von baschan im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 09.12.2011, 00:27

Stichworte

Lesezeichen

Berechtigungen

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