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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: Lokalvariablen in Multiinstanzen

  1. #1
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen,

    Ich habe ein Problem mit Multiinstanzen und zwar:

    habe ich einen Funktionsbaustein erstellt der eine Kommunikation via SNMP mit anderen Netzwerk Teilnehmern aufbaut und verarbeitet. Dieser Funktionsbaustein enthält als Eingangsgrößen ANY Zeiger, die im Funktionsbaustein als lokale ANY Zeiger abgespeichert werden. Mein Problem ist nun die Verwendeung von mehreren dieser Funktionsbausteine in einer Multiinstanz. Die Instanz-Datenbausteine dieses Funktoinsbausteine enthalten definierte Lokalevariablen im Temp Bereich, die beim einfügen in einer multiinstanz nicht übernommen werden. Werden nun meherere dieser Funktionsbausteine ausgeführt werden alle ANY Zeiger vom ersten Funktionsbaustein übernommen.

    Ich hoffe ich konnte mein Problem darstellen

    mfg
    Zitieren Zitieren Lokalvariablen in Multiinstanzen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Nein, du hast dich leider nicht ganz klar ausgedrückt. Instanzdatenbausteine enthalten keine Temp-Variablen, nur IN, OUT, INOUT und STAT. Wenn du Temp-Var in deinen FB verwendest, mußt du sicherstellen, dass diese immer vor der Verwendung mit Werten beschrieben werden, also in jedem Durchlauf (Zyklus).
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also ich habe ANY Pointer meinem Funktionsbaustein übergeben (IN Variable). Die übgergebende Variable ist aber ein Pointer der auf das erste Bit des übergebenden ANY Pointer zeigt. Damit ich nun den eigentlichen ANY Pointer in meinem Funktionsbaustein verwenden kann muss ich diesen mit Lokalvariablen neu erstellen. Im nachfolgenden Beispiel übergeb ich einen Speicherbereich dem Funktionsbaustein:

    Code:
          L     P##DATENABLAGE
          LAR1  
          L     D [AR1,P#0.0]
          T     LD    70
          L     D [AR1,P#4.0]
          T     LD    74
          L     W [AR1,P#8.0]
          T     LW    78
    hier wurde nun der ANY zeiger in den Lokalvariablen ab Lokalbyte 70 geschrieben.

    Dieser Schritt wurde mehrmals im Programm mit unterschiedlichen Eingängen durchgeführt.
    Geändert von Grisu88 (10.01.2013 um 08:17 Uhr)

  4. #4
    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,
    ich habe es auch nicht wirklich verstanden.
    Ich nenn mal Beispielhaft Namen :
    - du hast einen FB1, dem du den ANY übergibst.
    - in dem FB1 hast du als MultiInstanz mehrmals den Aufruf des FB2 drin, der mit dem ANY der an den FB1 übergeben wurde, arbeiten soll.
    Ist es das ?
    Wenn ja, dann mußt du den Inhalt des ursprünglichen ANY's in deinem neuen ANY abbilden, den du dem "FB2" übergeben willst ...

    Gruß
    Larry

  5. #5
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    nicht ganz

    FB1 bekommt ANY zeiger

    und FB1 liegt mehrmals in FB2

    das hat den Grund das FB1 sehr oft mit unterschiedlichen ANY zeiger aufgerufen werden soll und durch die Multiinstanzen soll die Anzahl der Instanzdatenbausteine gering gehalten werden.

    Das Problem ist jedoch das alle FB1 die übergebenden ANY Zeiger vom ersten FB1 aufruf bekommen

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.182
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Wie kann man die Variablenadresse in multiinstanzfähigen Funktionsbausteinen ermitteln?

    In multiinstanzfähigen Funktionsbausteinen wird bei den Bausteinparametern und den statischen Lokaldaten die absolute Adresse relativ zum Adressregister AR2 geladen. Wenn man die absolute Adresse der Variablen im Instanzdatenbaustein ermitteln will, muss man den bereichsinternen Zeiger (nur die Adresse von AR2) zur geladenen Variablenadresse addieren.

    Beispiel:
    Code:
    TAR2                  // Lade Adressregister in den AKKU 1 (Offset)
    UD DW#16#00FF_FFFF    // Ausblenden der Bereichskennung
    L P##variable         // Lade Adresse der Variablen
    +D                    // Addiere Offset und Variablenadresse
    LAR1                  // Speichere das Ergebnis im Adressregister AR1
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Multiinstanz-Offset in AR2 beachten  

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

    Standard

    ich glaube zu wissen wo das Problem liegt. Wie kopierst du den Any-Pointer in de Temp-Bereich? Wenn du das indirekt oder absolut adressiert machst hast du wahrscheinlich übersehen, dass der Instanz-Offset aus AR2 nicht berücksichtigit wird.
    mfG Aventinus

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

    Standard

    Harald, da hatten wir den gleichen Gedanken...
    mfG Aventinus

  9. #9
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Einmal so:

    Code:
          L     P##COMMUNITY
          LAR1  
          L     D [AR1,P#0.0]               //übergebender Pointer wird in einen ANY Zeiger gewandelt
          T     LD     0
          L     D [AR1,P#4.0]
          T     LD     4
          L     W [AR1,P#8.0]
          T     LW     8
    und so

    Code:
          L     B#16#10                     //Syntax beinhaltet immer 10hex
          T     LB    20
          L     B#16#2                      //Datentyp 02hex := BYTE
          T     LB    21
          L     #LEN_COMMUNITY              //Wiederholungsfaktor
          T     LW    22
          L     DBNO                        //Datenbausteinnummer der beinhaltenen Informationen (hier wurde die aufgeschlagene 
          T     LW    24                    //Datenbank mit L DBNO geladen 
          L     2                           //Anfangsadresse
          SLD   3                           //Pointer aus der Anfangsadresse generieren
          T     LD    26
          L     B#16#84                     //Speicherbereich (84hex := Datenbaustein)
          T     LB    26

  10. #10
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ganz verstanden hab ich das noch nicht mit dem AR2 :-p

Ähnliche Themen

  1. Lokalvariablen in Organisationsbausteinen
    Von Blueglasstalisman im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.08.2011, 14:33
  2. Lokalvariablen im DB weg
    Von Wassermann im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 28.04.2010, 19:35
  3. temporäre Lokalvariablen
    Von Earny im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 08.12.2009, 08:48
  4. keine Lokalvariablen im Datenbaustein
    Von Hans.S im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 02.10.2009, 12:52
  5. Problem mit S7 Lokalvariablen
    Von mrcmm300 im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 26.11.2007, 23:12

Lesezeichen

Berechtigungen

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