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

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

Thema: Dynamischer Datenbaustein

  1. #1
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ist es möglich einen Datenbaustein dynamisch zur Laufzeit zu erweitern, bzw. verkleinern?

    Hintergrund ist folgender:
    Ich bekomme über einen Zeitraum eine zufällige Anzahl an Telegrammen rein, die ich alle zwischenspeichern möchte, damit der Anwender sich diese später anschauen kann.
    Dabei kann die Anzahl der eintreffenden Telegramme von 1 bis 10 variieren.

    Ich weiss ich könnte auch direkt einen DB mit bis zu 10 "Speicherbereichen" für die Telegramme erstellen, aber evtl. gibt es ja euch eine elegantere Lösung.

    Habe etwas vom SFC22 (Create_DB) gelesen, war mir aber nicht sicher ob das, das richtige ist.

    Gruß
    timeout
    Zitieren Zitieren Dynamischer Datenbaustein  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    im Prinzip kannst du das natürlich machen (gemacht habe ich so etwas aber noch nie) - bei deiner Anwendung aber nach meiner Meinung schon wieder nicht. In dem Moment, wo du das z.B. 9.Telegramm reinbekommst muss es den Speicherplatz dafür ja schon geben. Darüber hinaus müßtest du deinen DB-Inhalt ja dann auch irgendwohin sichern, damit du den DB löschen um ihn neu (in anderer Größe) erzeugen zu können. Nun die gesicherten Daten da rein und die neuen da hinzu.

    Ich würde da dann doch zu der Variante des vordefinierten DB greifen - da "sparst" du m.E. an der falschen Stelle ...

    Gruß
    Larry

  3. #3
    Registriert seit
    03.09.2009
    Beiträge
    129
    Danke
    15
    Erhielt 19 Danke für 19 Beiträge

    Standard

    Hi,
    eine dynamische Erweiterung eines DBs ist während der Laufzeit nicht möglich! Ich habe für ein "Hochschulprojekt" mal den Weg gewählt einen DB dyn. zu löschen und anschließend mit einer anderen Länge wieder anzulegen. In der Praxis würde ich so ein Vorgehen aber nicht empfehlen.
    ==> Mein Tipp: Erstelle dir ein DB mit 10 "Speicherbereichen"

  4. #4
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Alles klar!

    Vielen Dank für die Tipps

    /edit:

    Ich habe jetzt mal einen DB700 erstellt, in dem ich eine Struktur angelegt habe, die mir das Telegramm zwischenspeichert.

    Jetzt versuche ich mit einem ANY-Pointer und BLKMOV die eintreffenden Telegramme in den DB zu kopieren. Aber anscheinend ist meine Notation des Pointers nicht ganz korrekt.
    Ich habe mich an diversen Beiträgen im Forum mal orientiert:

    -Data_Pointer im FB als ANY in temp angelegt

    Code:
    LAR1 P##Data_Pointer
    L W#16#1002
    T LW [AR1, P#0.0]
    L #Length_IN
    T LW [AR1, P#2.0]
    L 700
    T LW [AR1, P#4.0]
    L 0
    SLD 3
    OD DW#16#84000000
    T LW [AR1, P#6.0]
    
    CALL "BLKMOV"
    SRCBLK := #InData1
    RET_VAL := #RetVal_SFC20
    DSTBLK := #Data_Pointer
    Ich nehme an das ihm was mit Laden der Anfangsadresse nicht passt.

    Gruß
    Geändert von TimeOUT (22.07.2013 um 14:11 Uhr)

  5. #5
    Registriert seit
    27.08.2008
    Beiträge
    8
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    mach mal

    T LD [AR1, P#6.0]

    draus

  6. #6
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Ich frage mich in welcher Konstellation es nötig oder sinnvoll sein könnte einen DB aus dem Programm heraus während der Laufzeit zu erzeugen. Man spart ja überhaupt nichts. Die Software die man runterläd ist so gross wie sie ja nunmal ist. Es macht also keinen Sinn Platz zu sparen. Und wenn der Platz vorhanden ist, kann man ja diesen gleich für einen SpeicherDB nutzen, wenn er nicht vorhanden ist, nützt es ja auch nichts wenn die Software einen DB generieren kann, denn der Platz ist ja eh nicht da.
    Und man hat auch keine Vorteile wenn ungenutzter Platz vorhanden ist, oder?

    mfG René

  7. Folgende 3 Benutzer sagen Danke zu vollmi für den nützlichen Beitrag:

    Aventinus (23.07.2013),Blockmove (22.07.2013),ducati (23.07.2013)

  8. #7
    Registriert seit
    22.01.2008
    Ort
    Allgäu, da wo die Kühe schöner sind als die Mädels
    Beiträge
    1.774
    Danke
    50
    Erhielt 729 Danke für 434 Beiträge

    Standard

    Vorallem such da mal einen Fehler. Wenn ein DB ständig neu erzeugt wird.
    Halte ich für keine gute Idee.
    Ich habe die Funktion mal genutzt, um Parameterdaten zu sichern, bevor der eigentliche Parameter DB neu runtergeladen wurde.
    War ein mords Fuck bis das sauber gelaufen ist.
    Gruss Audsuperuser

    Herzlich Willkommen im Chat:
    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  9. #8
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    LAR1  P##Data_Pointer
          L     W#16#1002
          T     LW [AR1,P#0.0]
          L     #Length_IN
          T     LW [AR1,P#2.0]
          L     W#16#700
          T     LW [AR1,P#4.0]
          L     0
          SLD   3
          T     LD [AR1,P#6.0]
          L     B#16#84
          T     LB [AR1,P#6.0]
    
          CALL  "BLKMOV"
           SRCBLK :=#InData
           RET_VAL:=#RetVal_SFC20
           DSTBLK :=#Data_Pointer
    Scheint nicht zu funktionieren..
    Wenn ich über Laden und transferieren gehe schreibt er sie mir in den DB700, nur irgendwie will der Pointer einfach nicht.
    Er soll mir ab Adresse 0.0 anfangen in den Baustein zu schreiben

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von TimeOUT Beitrag anzeigen
    Scheint nicht zu funktionieren..
    Dann scheint wohl irgendwas falsch zu sein..







    Mal konkreter werden: Was sagt der RET_VAL der SFC20? Was sagt der Diagnosepuffer der CPU ?
    Woher kommt #InData, was steht da drin?

    Wenn Du nicht sicher bist, ob Du den/die ANY-Pointer richtig erzeugst, dann versuche den SFC20 zunächst mit fest angegebenen Adressen, z.B.
    Code:
          CALL  "BLKMOV"
           SRCBLK :=P#DB123.DBX 0.0 BYTE 10
           RET_VAL:=#RetVal_SFC20
           DSTBLK :=P#DB700.DBX 0.0 BYTE 10
    Wenn das funktioniert, dann ersetze die festen Adressen durch ANY-Pointer.

    Ändere mal so:
    Code:
          LAR1  P##Data_Pointer
          L     W#16#1002
          T     LW [AR1,P#0.0]
          L     #Length_IN
          T     LW [AR1,P#2.0]
          L     700
          T     LW [AR1,P#4.0]
          L     P#DBX0.0
          T     LD [AR1,P#6.0]
    
          CALL  "BLKMOV"
           SRCBLK :=#InData
           RET_VAL:=#RetVal_SFC20
           DSTBLK :=#Data_Pointer
    Zeilenkommentare wären auch nicht verkehrt, besonders wenn man nicht weiß was der geschriebene Code tut.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    TimeOUT (23.07.2013)

  12. #10
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    BOING!

    Ich Depp hatte in die Variable für den DB = B#16#700 anstatt den 700 HExwert eingetragen
    Habe noch ein paar Änderungen vorgenommen und jetzt geht es auf jedenfall

    /Edit:
    Um nochmal auf meine ursprüngliche Frage zurückzukommen.
    Ich habe ja jetzt einen festen DB erstellt in den er mir meine InData reinschreibt. Das funktioniert auch ohne Probleme.
    Wie ich bis jetzt gelesen habe ist es sehr aufwendig einen DB zur LAufzeit zu erzeugen.

    Kann ich meinen DB700 wie eine Art "Muster" benutzen?
    In ihm befinden sich für jedes Telegramm eine separate Struktur (also: Telegramm1, Telegramm2, usw.)
    Ist es möglich, dass er mir mit jedem übertragenem Telegramm eine neue Struktur in diesem DB erstellt, nach dem gleichen aufbau wie der vorangegangenen Telegramme?

    Die telegramme sind ähnlich wie Messwerte die auch über einen Zeitraum irgendwo gespeichert werden müssen.
    Geändert von TimeOUT (23.07.2013 um 14:31 Uhr)

Ähnliche Themen

  1. dynamischer Datenbaustein
    Von S-Victor im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 08.03.2013, 20:01
  2. Dynamischer Bitzugriff in Datenbaustein
    Von ffutsi im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 11.11.2011, 16:35
  3. dynamischer db aufruf
    Von misconduct im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.11.2007, 22:42
  4. Aufbau dynamischer Arrays
    Von Ralle im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 27.02.2007, 17:36
  5. Dynamischer Pointer???
    Von klauserl im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.11.2006, 20:28

Lesezeichen

Berechtigungen

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