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

Ergebnis 1 bis 7 von 7

Thema: S7-1200 Länge eines DB ermitteln

  1. #1
    Registriert seit
    14.08.2003
    Beiträge
    53
    Danke
    3
    Erhielt 6 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    gibt es bei der S7-1200 eine Möglichkeit die Länge eines DB's zu ermitteln?



    Gruß

    Robert
    Zitieren Zitieren S7-1200 Länge eines DB ermitteln  

  2. #2
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hi Robert

    die steht in den Eigenschaften des DB

    aber vermutlich willst du das im Programm heraus finden. Das gibt es nicht. Wozu auch?

    Ich hatte das bei der Übernahme von Programmen aus Step7 V5 auch schon manches Problem. Bis ich letztlich dahinter gekommen bin, dass es viel einfacher geht und das ganze Gehampel mit ANY und Adressregistern unnötig ist. Leider gibt es kein Patentrezept für alle Fälle. Und ein paar Lücken gibt es auch noch. Vielleicht löst die V13 die offenen Punkte. Die Hoffnung stirbt zu letzt.


    In AWL schreibt man wie bei der 300/400 L DBLG -- oder so ähnlich -- das gibt es aber nicht auf der 1200. Die 1500 kann das, liefert aber "falsche" Werte. Also richtig falsch sind sie nicht, aber brauchbar sind sie auch nicht. Der Wert der da kommt ist unterschiedlich zu dem aus den Bausteineigenschaften.

    Auf 1200 und 1500 gibt es Optimierte und Standard Bausteine. Das gilt sowohl für die DB als auch für FC/FB und OB. Faustregel: optimiert ist schneller, meist auch kleiner, aber nicht immer. Richtig blöd ist es wenn man mischt. Man sollte alles optimiert machen. Aber dummerweise klappen dann die Tricks aus der Vergangenheit (AT ANY Adressregister) nicht mehr. D.h. manchmal muss man eben doch Standard. Und dann vermischt es sich So richtig schlimm wird es wenn man in Static eines FB eine Instanz eines anderen FB hat. Der eine Optimiert, der andere Standard.
    Darüber hinaus kann man für jedes Element im FB angeben, ob es RETAIN , NON_RETAIN oder SET_IN_IDB ist. "Hergottsakrament ... wos is ets dees". Wie schon in Zeiten von Step7 V5 kann man am DB angeben, ob dieser RETAIN sein soll oder nicht. Soweit so schlecht, denn das galt ja immer für den gesamten DB und war damit eigentlich gar nicht nach IEC61131. Wie hat S. bloß das Siegel bekommen? Egal. Im TIA-Portal hat man sich nun eines besseren belehrn lassen und wie von der Norm vorgedacht die RETAIN Eigenschaft einzeln an die Elemente im FB/DB definiert. Aber Siemens wird seine Vergangenheit nicht los, und hat demnach drei Möglichkeiten. Für die optimierten Teile gilt die Einzeldefinition nach Norm, für die standard Teile die bisherige Definition nach Step7 V5.

    Für die nach standard definierten Elemente eines FB und seines daraus entstehenden DB bekommst du auch Adressen angezeigt und kannst (bei der 1500) mit Adressregister und ANY und AT und ... den ganzen Schmarrn halt ... zugreifen. Und L DBLG liefert die Größe des Standard Bereichs eines DB. Für die Optimierten geht das alles nicht. Und deswegen verrät L DBLG diese Größe nicht. Und auf der 1200 gibt es gar keine Möglichkeit, denn was würdest du damit machen wollen? Das geht ja auch nicht

    'n schön' Tach auch
    HB

  3. #3
    Registriert seit
    14.08.2003
    Beiträge
    53
    Danke
    3
    Erhielt 6 Danke für 2 Beiträge

    Standard

    Hallo,

    Hintergrund für die Frage: Kommunikation zu einem PLS.
    Optimierte DB können nicht eingesetzt werden, da das PLS auf Adressen zugreift.
    Mit der Länge des DB wäre es halt möglich gewesen, z.B. Änderungen von Werten zu ermitteln.


    Gruß

    Robert

  4. #4
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hallo Robert

    stimmt, wenn man von außen in die 1200 rein greift, also auf der anderen CPU PUT und GET verwendet, dann kommt man nur auf die Standard Adressen von 1200 und 1500.
    Wenn man von 1200 oder 1500 nach außen greift, dann kann man durchaus auch optimierte Daten der 1200 oder 1500 verwenden.

    Irgendwie stehe ich auf dem Schlauch. Wie willst du an der Länge eines DB die Änderung seines Inhalts erkennen? Wenn die AS ein paar Bytes ausspuckt, ist doch keinerlei Wissen über die Interpretation dabei. Diese muss doch sowieso vorher geklärt sein. Und wenn das vorher geklärt ist, dann ist damit auch die Länge der Daten klar.

    Wenn ich bisher Daten der Produktion zwischen Simatics hin und her geschubst habe, dann habe ich immer eine Art Header vorne dran, die mir sagt, was und wieviel drin ist. Die Länge des DB war noch nie Gegenstand der Kommunikation.

    'n schön' Tach auch
    HB

  5. #5
    Registriert seit
    14.08.2003
    Beiträge
    53
    Danke
    3
    Erhielt 6 Danke für 2 Beiträge

    Standard

    Hallo,

    es ist natürlich nicht nur eine Anlage, sondern sehr viele.
    Auf jeder Anlage ist der Aufbau der Daten entsprechend angepaßt und somit sind die DB's auch unterschiedlich.
    Mit Hilfe der DB-Länge kann dann automatisch eine Auswertung gemacht werden (Schleife), ohne jedes mal selbst
    die Länge irgendwo von Hand einzutzragen.
    Anhand der Länge kann ich natürlich keine Änderung von Werten erkennen, aber die Länge brauche ich, für andere
    Funktionen auzuführen.

    Gruß

    Robert

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.180
    Danke
    923
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Erstmal Kritik:

    Wenn das PLS absolut auf Adressen in einem DB zugreift dann muß es die Struktur des DB kennen um den Inhalt der Speicherstellen korrekt zu interpretieren. Dann weiß es doch auch, wie lang der DB mindestens sein muß?
    Du willst jetzt umgekehrt aus der Länge eines DB auf eine bestimmte Struktur schließen... wenn das mal gut geht...

    Woher weiß Dein PLS, wieviele lokale Variablen es selber für den Kommunikationspartner vorhalten muß? Oder willst Du die Variablen im PLS erst zur Laufzeit dynamisch erzeugen?? Also alles völlig ohne Symbolik und Kommentare?

    Was meinst Du, wird in 2 Jahren noch irgendjemand nachvollziehen können was Du heute programmieren willst - Dich eingeschlossen?
    Bist Du jetzt nur zu faul die ganzen Variablen sauber im PLS anzulegen oder willst Du einfach nur Powertags sparen auf Kosten der Nachvollziehbarkeit?

    Steuert Dein PLS irgendwas gefährliches? Ich hoffe kein KKW, wo das PLS "automatisch" erkennen soll wieviele Brennstäbe es kontrollieren muß...


    Lösungsvorschlag:

    Schreibe doch die Länge des DB oder irgendeine vereinbarte (Typ-)Kennung in das erste Datenword der DB.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    14.11.2008
    Beiträge
    66
    Danke
    3
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Erstmal Kritik:
    Beispiel: Wenn nur verglichen werden soll, muss auch die Länge, aber nicht die Struktur bekannt sein. BLKMOV kommt auch ohne die Struktur-Info aus, aber braucht die Länge.

    Wenn so eine Vergleichsfunktion anstatt der Länge die komplette Strukturinfo kennen wollte, um jedes Element einzeln zu vergleichen - ja, dann würde es gefährlich werden. Bei Programmänderungen in 2 Jahren würden sich Bugs in so eine Funktion einschleichen.

    Andererseits habe ich selbst noch nie eine DB-Länge zwingend abfragen müssen, und kann mich nicht erinnern, sie mal abgefragt zu haben. Vielleicht gibt es ganz andere Lösungsansätze.

    Zitat Zitat von PN/DP Beitrag anzeigen
    Du willst jetzt umgekehrt aus der Länge eines DB auf eine bestimmte Struktur schließen...
    Das wäre absurd und nach #3 ist es wohl auch nicht der Fall.

Ähnliche Themen

  1. SCL DB Länge ermitteln
    Von Dotzi im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.07.2010, 20:01
  2. Länge eines UDT ermitteln
    Von Woto im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 20.04.2009, 08:21
  3. DB-Länge ermitteln
    Von Fliegertiger im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 18.12.2007, 15:39
  4. SCL Befehl um die Länge eines Datenbausteins zu ermitteln?
    Von 1.0er im Forum Programmierstrategien
    Antworten: 1
    Letzter Beitrag: 13.01.2006, 02:18
  5. Gechwindigkeit aus Länge ermitteln
    Von capri-fan im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.02.2005, 15:43

Lesezeichen

Berechtigungen

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