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

Ergebnis 1 bis 8 von 8

Thema: Frage zu variablen symbolischen Adressierung

  1. #1
    Registriert seit
    14.04.2011
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe jetzt schon lange gesucht und probiert und bin nicht auf die Lösung gekommen. Ich habe folgendes Problem:

    Ich habe einen DB der über UDT erstellt wird. In diesem DB sind folgende Struct´s:
    Adresse Name Type
    0.0 DB_Var_1 UDT3
    130.0 DB_Var_2 UDT3
    260.0 DB_Var_3 UDT3
    390.0 DB_Var_4 UDT3

    Jetzt will ich mir einen Funktionsbaustein bauen, dem man eine Zahl (zB 2 ) übergibt und dann soll im Code der Struct DB_Var_2 benutzt werden.

    Folgender massen soll so ein Zugriff aussehn:

    temp:= DBXY.DB_Var_X.Speicherstelle1

    also der DB bleibt ja immer gleich, aber wie kann ich DB_Var_X <--- Dort die Zahl ändern und dann damit auf den DB zugreifen? Geht das überhaupt?
    Habe das mal mit ANY-Pointer ausprobiert, aber klappte nicht. Bin auch noch nicht so ein erfahrener S7 Programmierer^^
    System: CPU 315
    Step 7
    SCL
    Würde es auch gerne in SCL machen, aber wenn nur AWL geht, wäre dies auch nicht so dramatisch. Es ist beabsichtigt Symbolische Adressen zu benutzen, weil sonst müsste ich meinem ganzen Code die Adressen ändern.

    Vielen Dank schonmal
    Zitieren Zitieren Frage zu variablen symbolischen Adressierung  

  2. #2
    Registriert seit
    23.10.2009
    Beiträge
    391
    Danke
    58
    Erhielt 113 Danke für 87 Beiträge

    Standard

    Leg ein Array of UDT3 an, dann kannst Du mit der Eingangsvariablen als Index auf die einzelne Strktur zugreifen.
    Gruß
    Erich

  3. Folgender Benutzer sagt Danke zu LargoD für den nützlichen Beitrag:

    Hanserl84 (17.05.2011)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo,
    SCL wäre hierfür genau richtig - du mußt dabei dann voll symbolisch arbeiten - also etwa so :
    Code:
    myVar := "myDBName".Platz[myIndex].Teil_vorhanden[12] ;
    ... in diesem Fall sollte das SCL-Script den DB kennen (er muß also vorhanden sein) und du würdest hier myIndex übergeben.
    Es geht allerdings keine Misch-Masch-Adressierung - also Teil symbolisch und ein Teil absolut ...

    Gruß
    Larry

  5. #4
    Hanserl84 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.04.2011
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erstmal danke für die schnellen Antworten. Mit den Array´s hab ich noch nicht getestet, aber das von LL

    da gibt mir der Compiler Fehler aus.

    Code:
    Var_temp
    myIndex:INT;
    temp3:byte;
    var_end
    
    temp3:="DB80_HAUPT_DB".DB_VAR_[myIndex].crc_temp;
    das ist mein Code. Aber man kann ihn nicht compilieren. Folgende Fehler tauchen auf:
    Fehlender oder ungültiger Bezeichner ( nach ...DB".)
    Die komponente ist nicht vorhanden (nach ...VAR_)
    ungültige Variable (nach ...VAR_)
    Fehlerhafte Variable, der Punkt ist nicht zulässig (nach index]. )
    Ungültiger Datentyp bei crc_temp. Obwohl temp3 und crc_temp beides Byte sind.
    DB ist auch vorhanden.

    Hoffe mir kann einer weiterhelfen und mir sagen wo ich den Fehler mache. Sehe den Wald vor lauter Bäumen nicht mehr
    lg

  6. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Naja ...
    Du hast myIndex ja im Temp-Bereich deklariert - damit hat der schon mal den Wert 0 - gibt es dieses Array-Element ? Du solltest hier auf jeden Fall erstmal etwas zuweisen ...
    Dann ... sind temp3 und crc_Temp vom gleichen Typ (nämlich Byte) ?

    Gruß
    Larry

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Ha ... noch etwas übersehen ...
    Das mit dem Index geht natürlich nur bei Array's - soweit ich das noch sehen konnte hast du ja kein Array_of_struct definiert sondern nur einzelne UDT's - die kannst du natürlich NICHT indexieren sondern nur per Namen ansprechen und den kannst du auch nicht zusammenbauen - Sorry. An der Stelle mußt du dir dann etwas anderes ausdenken ...

    Gruß
    Larry

    Nachsatz :
    Du kannst das aber (da ja alle Elemente vom typ UDT3 sind) als "DB_Var : array[1..4] - UDT3" in dem DB deklarieren - dann sollte es funktionieren, wie gewünscht ...
    Geändert von Larry Laffer (17.05.2011 um 11:46 Uhr)

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Hanserl84 (17.05.2011)

  9. #7
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Naja ...
    Du hast myIndex ja im Temp-Bereich deklariert - damit hat der schon mal den Wert 0 - gibt es dieses Array-Element ? Du solltest hier auf jeden Fall erstmal etwas zuweisen ...
    Dann ... sind temp3 und crc_Temp vom gleichen Typ (nämlich Byte) ?

    Gruß
    Larry
    Das mit 0 ist soweit nicht richtig, da kann irgendwas drinstehen. Temp-Variablen sind immer als erstes zu beschreiben.
    mfG Aventinus

  10. #8
    Hanserl84 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.04.2011
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So mit den Array´s hat es endlich geklappt. Die Notation im Nachsatz von Dir LL hat den Stein ins rollen gebracht
    Vielen Dank für die schnelle und kompetente Hilfe.

    lg

Ähnliche Themen

  1. Eine Frage zu Variablen in SCL
    Von petzi im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 24.09.2010, 10:19
  2. Darstellung von Symbolischen EA-Feldern
    Von gingele im Forum HMI
    Antworten: 2
    Letzter Beitrag: 16.06.2010, 09:57
  3. Hilfe zur symbolischen Programmierung / DB
    Von MWeng im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 18.03.2010, 23:53
  4. Grundlegen Frage zu den Variablen
    Von franzlurch im Forum HMI
    Antworten: 3
    Letzter Beitrag: 09.05.2008, 13:30
  5. Symbolischen Name aus SCL erzeugen
    Von emotionslos1 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 21.12.2007, 09:28

Lesezeichen

Berechtigungen

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