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

Ergebnis 1 bis 7 von 7

Thema: Array of Struct anlegen und beschreiben

  1. #1
    Registriert seit
    13.08.2012
    Beiträge
    112
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo...

    ich möchte zur datensicherung ein array mit den entsprechenden daten befüllen. die daten setzen sich in form eines struct´s aus mehreren teildaten zusammen.
    auf grund des mir nur begrenzt zur verfügung stehenden speichers möchte ich diese structe direkt in den datenbaustein schreiben, wo das "array of struct" angelegt ist.

    ich bekomme jedoch eine fehlermeldung: " eine implizite Konvertierunf von Datentyp "Struct" nach "Struct" ist nicht möglich".

    habe in der suche nachgelesen, aber einen ähnlichen fall nicht finden können.
    programmiert wird mit TIA V11 und auf einer 1200er SPS in SCL

    edit: das Array of struct im datenbaustein konnte ich nur als einfaches array anlegen: Messung: Array[1..1500] of struct; der innere Aufbau des structes fehlt da ja. das könnte evtl der fehler sein, aber ich weiss nicht recht, wie ich da rangehen soll

    hier noch zur näheren erläuterung der Programmcode

    Code:
    // Zaehler Rücksetzen, bei Start einer neuen Pruefung
    IF #Pruef_Start = True
      THEN  
        #Zaehl_Sp := 1;
    END_IF;
       
    //-------------------------------------------------------------------------------
    // Beginn der Wertspeicherung in das "Array of Struct" im Datenbaustein Messwerte
    //-------------------------------------------------------------------------------
    IF #Pruef_Ein = TRUE AND #Empf_Trig = TRUE
      THEN
      
      IF #Zaehl_Sp <= 1500
        THEN
          
          #Einz_Mess.Zeit := #Zeit;
          #Einz_Mess.Druck := #Druck;
          #Einz_Mess.Durchm := #Durchm;
          
          "Messwerte".Messung[#Zaehl_Sp] := #Einz_Mess;
          
          #Zaehl_Sp := #Zaehl_Sp + 1;
          
      END_IF;
    END_IF;
    Geändert von fk- princess (17.10.2012 um 09:40 Uhr)
    Zitieren Zitieren Array of Struct anlegen und beschreiben  

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

    Standard

    Sorry ... was willst du machen ? Das habe ich aus deiner Beschreibung nicht herauslesen können.
    Als Einziges vielleicht : eine dynamische Belegung des Speichers läßt die SPS nicht zu. Du kannst dein Array_of_Struct nicht unterschiedlich groß sein lassen ... werder von den Indexen her noch von den Inhalten ...

    Gruß
    Larry

  3. #3
    fk- princess ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.08.2012
    Beiträge
    112
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich möchte drei zusammenhängende daten abspeichern (druck, druchm und zeit). diese stehen in einem struct, damit sie zuordbar sind.
    das wiederholt sich 1500 mal.

    ich dacht mir halt, das ich ein array anlege, in welchem die 1500 structe stehen.

    ich könnte ja auch ein array anlegen, in dem keins structe stehen, sondern arrays

    edit: zudem habe ich das problem, das die datentypen unterschiedlich sind. einmal TOD und zweimal REAL. deswegen bin ich ja auf struct gekommen.

    also wenn das nicht dynamisch funktioniert, muss ich nich etwa 1500 structe in meinem DB erzeugen, per hand??? oooooje
    Geändert von fk- princess (17.10.2012 um 10:27 Uhr)

  4. #4
    fk- princess ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.08.2012
    Beiträge
    112
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    habe mir jetzt in der Funktion, wird wohl noch ein funktionsbaustein, ein array of struct als temp variable erzeugt. dort kann ich ja die struct-Datentypen angeben. Wie im code zu sehen beschreibe ich diese strukte auch, je nach variablenindex. nur ich bekomme dieses array einfach nicht in den DB... mmmmh

    ich glaub ich schreibe das alles in einen funktionsbaustein und nehme die gesamten Messdaten aus dem instanzbaustein. ob das nun in nem globalen oder in einem instanzbaustein liegt, is bei der zusammenstellung der übertragungsnachricht an das tableau egal...

    Code:
    //-------------------------------------------------------------------------------
    // Beginn der Wertspeicherung in das "Array of Struct" im Datenbaustein Messwerte
    //-------------------------------------------------------------------------------
    IF #Pruef_Ein = TRUE AND #Empf_Trig = TRUE
      THEN
      
      IF #Zaehl_Sp <= 1500
        THEN
          
          #Einz_Mess.Zeit := #Zeit;
          #Einz_Mess.Druck := #Druck;
          #Einz_Mess.Durchm := #Durchm;
          
          #Messung[#Zaehl_Sp].Zeit := #Zeit;
          #Messung[#Zaehl_Sp].Druck := #Druck;
          #Messung[#Zaehl_Sp].Durchm := #Durchm;
          
          "Messwerte".Messung := #Messung; // auch hier ist es wieder mit der selben Fehlermeldung rot markiert
          
          
          #Zaehl_Sp := #Zaehl_Sp + 1;
          
      END_IF;
    END_IF;

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    na in dem Fall sollte das allerdings schon gehen - ich bin jetzt allerdings nicht mit S7-1200 unterwegs ...
    Du legst dir in dem DB eine Variable an (z.B. meinArray), die vom Typ array ist. Der Datentyp des Array's wäre dann Struct und in der Struct legst du dann die Variablen Zeitstempel als TOD und Messwert1 und Messwert2 jeweils als REAL (die Namen sind hier natürlich ziemlich beliebig).
    So, wie du es im STAT-Bereich eines FB deklarierst, so kannst du es auch in einem Global-DB deklarieren.
    Wenn du mit dem Kram allerdings schick in SCL arbeiten willst dann ist das mit dem Global-DB schon wieder so eine Sache ... da kannst du nämlich eigentlich nur die Speicher-Adressen ansprechen. Das wäre bei deiner Instanz schöner ...

    Gruß
    Larry

  6. #6
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    "Messwerte".Messung := #Messung; // auch hier ist es wieder mit der selben Fehlermeldung rot markiert

    Das musst du mit einem Blockmove machen, da du keine Variable sondern einen Bereich übergibst.Ansonsten müsste im TIA-Portal auch in SCL die Variablendeklaration tabellarisch zu machen sein.Ggf. solltest du die Struct aber als Datentyp deklarierenund dann ein Array dieses Datentyps deklarieren.MfG MK
    and we all support the team (S.King - Die Arena)

  7. #7
    fk- princess ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.08.2012
    Beiträge
    112
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    habe das gerade getestet. im instanzbaustein werden alle structe so beschrieben wie ich das auch vor hatte. da das "array of struct" im bereich STATIC liegt, bleibt der wert auch erhalten..
    an den ollen BLK_MOV habe ich garnicht mehr gedacht . werd ich gleich mal mit einbauen... dank euch für die hilfe

Ähnliche Themen

  1. Datentyp ARRAY und STRUCT
    Von Quoellfrisch im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 06.12.2015, 19:40
  2. Array beschreiben
    Von focus81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.08.2010, 14:25
  3. Eindimensionales Array beschreiben
    Von SPS_LB im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 06.09.2009, 03:04
  4. Array indirekt beschreiben
    Von Airpower im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.06.2009, 08:34
  5. Array im Script beschreiben
    Von Neuling74 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 16.06.2007, 08:59

Lesezeichen

Berechtigungen

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