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

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

Thema: symbolische Adressierung eines DB als IN Parameter einer Funktion

  1. #1
    Registriert seit
    02.10.2013
    Beiträge
    16
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Experten,
    Ein FC soll Ausschnitte aus einer (Global DB)Tabelle kopieren auf die Instanzdaten eines FB.
    Ich will nun den Quell DB, der die Tabelle enthält symbolisch adressieren. Deswegen ist der In Parameter
    "in_Nu_Daten_DB" kein Integer, sondern vom Typ Any Zeiger.

    Beim Aufruf des FCs (Tabelle kopieren) kann ich den symbolischen Namen bei "in_Nu_Daten_DB" ("EinsNeunNeun") eingeben.


    Der folgende Programmcode schreibt mir aber nicht die DB Nummer (199) in "#DB_No_Foreign":

    Code:
        L     P##in_Nu_Daten_DB
        LAR2
    //DB ermitteln
          L W [ AR2 , P#4.0 ]
         T     #DB_No_foreign
    Was mache ich falsch?
    Zitieren Zitieren symbolische Adressierung eines DB als IN Parameter einer Funktion  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Versuche mal

    L LW [AR2,P#4.0]
    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
    joru_sps ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.10.2013
    Beiträge
    16
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das "L" bringt die CPU in STOP wegen Bereichslängenfehler beim Lesen. Die Adresse ist eben nicht Local.
    Gruß joru_sps

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo,
    ich habe das so in Erinnerung, dass hier ein Pointer steht, der auf die Adresse zeigt, die den Inhalt des ANY-Pointers wiedergibt. Du mußt das dann also auch genau so handhaben ...

    Es ginge aber auch einfacher : Du machst als IN_Parameter einen Typ Block-DB. In der steht der DB dann also echte Zahl drin (also 198 für DB 19.

    Gruß
    Larry

  5. #5
    joru_sps ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.10.2013
    Beiträge
    16
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ..und wie greife ich auf den Block DB zu?
    Wenn ich ihn als IN Parameter am FC deklariere wie "verwandelt" sich die symblische Adresse in einen Integer?
    Code:
    L "in_Nu_Daten_DB" // nun vom Typ "Block_DB"
    t MW200
    wird als Code nicht akzeptiert.
    Gruß Joru_sps

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Nein ... du bildest dir einen Pointer auf die Adresse (wie weißt du ja schon) und lädst den Wert als Word oder Int in deinen Zielspeicher.

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

    joru_sps (16.10.2013)

  8. #7
    Registriert seit
    15.09.2008
    Beiträge
    165
    Danke
    10
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hi.

    Ich habe grade ein ähnliches Problem.
    Ich habe einen IN Parameter vom Typ INT wo ich die DB Nummer übergebe.
    Dann kann ich mir damit einen Pointer bauen, um mit der SFC14 Daten vom DP Slave da rein zu schieben.
    Soweit so gut, aber jetzt möchte ich aus dem DB auch wieder einzelne Daten auslesen.

    Da steh ich grade total auf dem Schlauch...
    Hab schon einiges probiert, aber das Brett vorm Kopf geht grad nicht weg.
    Code:
          LAR1  P##DatenDB_Auma
    
          U     DBX [AR1,P#0.0]             // Endlage Auf WÖL
          =     #S_Endschalter_Auf
    Code:
          L     #DatenDB_Auma
          SLD 3
          LAR1
    
          U     DBX [AR1,P#0.0]             // Endlage Auf WÖL
          =     #S_Endschalter_Auf
    Wenn ich den IN als Block_DB nehme, kann ich die Zahl nicht mehr als INT verwenden.?.??
    Wäre natürlich schöner an der Stelle mit AUF DB zu arbeiten, aber dann kann ich meinen Pointer für die SFC14 nicht mehr bauen, da da ja ein INT gebraucht wird.
    Kann ich aus dem Block DB irgendwie die DB Nummer auslesen?
    Hat jemand ne andere Idee?

    Hier noch der Pointerbau:
    Code:
          L     B#16#10                     //10h für s7
          T     LB    14
          L     B#16#2                      //Typ Byte 
          T     LB    15
          L     32                          //Anzahl (Wiederholungsfaktor) 32 Byte
          T     LW    16
          L     #DatenDB_Auma               //Datenbaustein Nummer
          T     LW    18
          L     0                           //Anfangsadresse Byte 0
          SLD   3                           //Pointer bauen
          T     LD    20
          L     B#16#84                     //Speicherbereich (hier DB)
          T     LB    20
    Step7 5.5
    TIA 11 / 13
    WinCC flexible 2008
    WinCC 7.0 / 7.3

  9. #8
    joru_sps ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.10.2013
    Beiträge
    16
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Kann ich aus dem Block DB irgendwie die DB Nummer auslesen?

    Code:
    L P##IN_Parameter_Block_DB // IN Parameter
    T MB100 // zurück kommt ein BYTE!!!!
    [\QUOTE]

    Hier noch der Pointerbau:
    Code:
          L     B#16#10                     //10h für s7
          T     LB    14
          L     B#16#2                      //Typ Byte 
          T     LB    15
          L     32                          //Anzahl (Wiederholungsfaktor) 32 Byte
          T     LW    16
          L     #DatenDB_Auma               //Datenbaustein Nummer
          T     LW    18
          L     0                           //Anfangsadresse Byte 0
          SLD   3                           //Pointer bauen
          T     LD    20
          L     B#16#84                     //Speicherbereich (hier DB)
          T     LB    20
    Warum bastelst du dir den Pointer so zusammen? 10h für s7
    z.B. macht doch S7 alleine!
    Gruß joru_sps

  10. #9
    Registriert seit
    15.09.2008
    Beiträge
    165
    Danke
    10
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Das funktioniert irgendwie nicht so ganz.
    Code:
    L P##IN_Parameter_Block_DB // IN Parameter
    T Temp_Int // zurück kommt ein BYTE!!!!
    Wenn ich im IN DB104 angebe, gibt die SFC14 die Meldung dass der DB nicht geladen ist. Also stimmt bei der Wandlung von Block_DB in INT irgendwas nicht.
    Irgendwas versteh ich da noch nicht richtig...

    Das mit dem Pointer habe ich so aus der Anleitung hier im Forum übernommen.
    Mag sein, dass das anders geht, aber so weit bin ich noch lange nicht... Solange nenne ich mich noch COPPY/PASTE-Programmierer...

    Gruß
    Thomas
    Geändert von PBO-WE (17.10.2013 um 09:44 Uhr)
    Step7 5.5
    TIA 11 / 13
    WinCC flexible 2008
    WinCC 7.0 / 7.3

  11. #10
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.751
    Danke
    323
    Erhielt 1.526 Danke für 1.286 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Naja z.b. so:
    Auf block-db
    L DBNO
    T Temp-INT

    Mfg
    Manuel

    Gesendet von meinem GT-I9505 mit Tapatalk
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  12. Folgender Benutzer sagt Danke zu MSB für den nützlichen Beitrag:

    PBO-WE (17.10.2013)

Ähnliche Themen

  1. Symbolische indirekte Adressierung
    Von Isha im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 18.06.2010, 13:10
  2. Pointer als Rückgabewert einer Funktion
    Von kai86 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 12.04.2010, 12:07
  3. Antworten: 31
    Letzter Beitrag: 10.01.2009, 13:10
  4. symbolische Adressierung in AWL
    Von wiede im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 09.02.2008, 15:36
  5. Timer Nummer als parameter in Funktion ?
    Von Anonymous im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.06.2005, 13:36

Stichworte

Lesezeichen

Berechtigungen

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