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

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

Thema: Anfangsadresse einer statischen Variable in einem Multiinstanzaufruf benötigt

  1. #1
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich benötige die Anfangsadresse einer statischen Variable in einem Multiinstanz-FB.

    Genau geht es darum, dass ich den Kommunikations-FB S_RCV (Receive data from ET200S) in einem Multiinstanz-FB aufrufen möchte und die Empfangsdaten zur genaueren Auswertung in den lokalen Bereich übergeben möchte, hierzu habe ich unter den statischen Variablen ein Array eingefügt.
    Der Baustein benötigt allerdings u.a. die Datenbausteinnummer, wollte ich mit DIN0 auslesen, und die Nummer des Anfangsbytes des Datenbereichs wo die Empfangsdaten abgelegt werden sollen (als INT), nur habe ich keine Ahnung wie ich mir diese Adresse beschaffen kann (Absolut eingeben wäre natürlich möglich, wäre mir jedoch anders lieber).

    Schon ein mal vielen Dank für eure Hilfe!

    Liebe Grüße
    LittleJack
    Zitieren Zitieren Anfangsadresse einer statischen Variable in einem Multiinstanzaufruf benötigt  

  2. #2
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    steht nur nicht drin, dass man für multiinstanzfähigkeit des gesamten baustein noch das AR2 zum zeitpunkt des bausteinaufruf addieren muß...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Stimmt.

    Ist übrigens eine Zumutung, dass man so etwas berücksichtigen muss. Genauso wie die "Rettung" der Adressregister...

    Das wollte ich schon IMMER mal sagen.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  5. #5
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also entweder habe ich mich etwas ungünstig ausgedrückt, oder ich verstehe den Lösungsansatz nicht so ganz.

    Also ich habe einen fertigen FB (von Siemens), den FB-S_RCF, dieser liest mir von einer seriellen-Karte Daten ein und übergibt sie an einen Datenbaustein. Damit der FB-S_RCF weiß in welchem DB ich die Daten haben möchte, übergebe ich einen INT-Wert (DB_NO) mit der Nummer des gewünschten DB's, weiters muss ich dem FB-S_RCF mitteilen ab welchem Byte er die Daten in den DB schreiben soll, dies geschiet wiederum mittels INT (DBB_NO).

    Diesen FB-S_RCF möchte ich nun in einen weiteren FB packen, einem Multiinstanzfähigen, dem FB-Multi.
    In diesem FB-Multi habe ich im lokalen Bereich ein ARRAY definiert (Adresse 80), in dieses ARRAY sollen die Daten vom FB-S_RCF übergeben werden.

    Um dies zu bewerkstelligen muss ich dem FB-S_RCF nun wieder eine DB-Nummer übergeben, welche nun die Nummer des Insrtanzdatenbausteins ist,
    weiters auch die Nummer des ersten Bytes im Instazdatenbaustein ab welchem ich die Daten ablegen möchte.
    Das ist momentan bei mir Byte 80, ich könnte also einfach immer zum AR2 einen Versatz von 80Byte hinzuaddiren und müsse dann bei einem Multiinstanzaufruf an der richtigen Stelle im IDB sein, oder irre ich da?
    Die Adresse ist grundsätzlich fix, könnte nur durch Programmerweiterungen verschoben werden, somit bräuchte ich, glaube ich zumindest, keinen Any-Zeiger bauen, das macht mir das Programm nicht gerade übersichtlicher, was ich hald gern hätte wäre aber eine symbolische Variante.

    z.B.
    L P##MeinArray
    >>mache was, damit ich die Nummer des ersten Datenbytes als INT bekomme<<

    nur was könnte das sein?

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

    Standard

    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Um dies zu bewerkstelligen muss ich dem FB-S_RCF nun wieder eine DB-Nummer übergeben, welche nun die Nummer des Insrtanzdatenbausteins ist,
    weiters auch die Nummer des ersten Bytes im Instazdatenbaustein ab welchem ich die Daten ablegen möchte.
    Das ist momentan bei mir Byte 80, ich könnte also einfach immer zum AR2 einen Versatz von 80Byte hinzuaddiren und müsse dann bei einem Multiinstanzaufruf an der richtigen Stelle im IDB sein, oder irre ich da?
    Das siehst du fast richtig. Du musst aus AR2 die Byte-Adresse ermitteln und diese zu deinen 80 addieren.

    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Die Adresse ist grundsätzlich fix, könnte nur durch Programmerweiterungen verschoben werden, somit bräuchte ich, glaube ich zumindest, keinen Any-Zeiger bauen, das macht mir das Programm nicht gerade übersichtlicher, was ich hald gern hätte wäre aber eine symbolische Variante.
    Du kannst dir ja den Poiter auf dein Array laden, die Byte-Adresse ermitteln und dann wie bereits erwähnt die Byte-Adresse aus AR2 addieren.
    mfG Aventinus

  7. Folgender Benutzer sagt Danke zu Aventinus für den nützlichen Beitrag:

    LittleJack86 (29.11.2011)

  8. #7
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    und die db-nummer natürlich noch ermitteln...

    Code:
    L     DINO
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #8
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Aventinus Beitrag anzeigen
    Du kannst dir ja den Poiter auf dein Array laden, die Byte-Adresse ermitteln und dann wie bereits erwähnt die Byte-Adresse aus AR2 addieren.
    Meinst du ca. so?

    Code:
         TAR2  #MemAR2                     //AR2 Sichern
    
          L     #MemAR2
          SRD   3                           //Bit-Bereich von AR2 entfernen
          T     #ByteAR2
    
          L     P##MeinArray                //Pointer mit meinem Array laden
          SRD   3                           //Bit-Bereich entfernen
          L     #ByteAR2                    //Byte-Adresse AR2 laden
          +D                                //zur Byte Adresse von MeinArray addieren
          T     #int_out                    //als INT ausgeben
    
          L     #MemAR2
          LAR2                              //AR2 wiederherstellen
    ...wäre das o.k., oder gibts da noch was zu beachten?

  10. #9
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    und die db-nummer natürlich noch ermitteln...
    Das mit dem Saurier habe ich bereits gelesen , DANKE!

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Meinst du ca. so?

    Code:
         TAR2  #MemAR2                     //AR2 Sichern
    
          L     #MemAR2
          SRD   3                           //Bit-Bereich von AR2 entfernen
          T     #ByteAR2
    
          L     P##MeinArray                //Pointer mit meinem Array laden
          SRD   3                           //Bit-Bereich entfernen
          L     #ByteAR2                    //Byte-Adresse AR2 laden
          +D                                //zur Byte Adresse von MeinArray addieren
          T     #int_out                    //als INT ausgeben
    
          L     #MemAR2
          LAR2                              //AR2 wiederherstellen
    ...wäre das o.k., oder gibts da noch was zu beachten?
    Beim drüberlesen hab ich keinen Fehler entdecken können. Müsste funktionieren. Schon getestet?
    mfG Aventinus

Ähnliche Themen

  1. Was versteht man unter einer "statischen Variablen"?
    Von unbekanntster im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 26.04.2016, 22:26
  2. Antworten: 6
    Letzter Beitrag: 11.03.2010, 07:50
  3. Multiinstanzaufruf in FUP
    Von hank12 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.05.2009, 12:38
  4. Seltsamer Multiinstanzaufruf
    Von Zonk1982 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.11.2008, 12:22
  5. Baugruppe Anfangsadresse
    Von Jelly im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.05.2006, 19:32

Lesezeichen

Berechtigungen

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