TIA S7 1200 CREATE_DB und DBLG

Olimoli50

Level-1
Beiträge
4
Reaktionspunkte
0
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?:confused:)
Ich habe bis jetzt immer den DB erstellt, Byte1 angelegt und dann nach unten durchgezogen, aber es gibt bestimmt schlauere Lösungen:ROFLMAO:

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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal danke für die Antwort, das mit dem Array wär natürlich ne Möglichkeit:ROFLMAO:

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
 
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.co...programmiersprachen?dti=0&pnid=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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
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
 
Zurück
Oben