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

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

Thema: Any-Pointer ohne SFC20 verwenden

  1. #1
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.358
    Danke
    456
    Erhielt 695 Danke für 520 Beiträge

    Idee


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute

    Ich möchte aus einem größeren Datenfeld innerhalb eines DB's gezielt 2 INT auslesen und dann in den Temp-Bereich eines FC's schreiben

    Als Vorgabe kann ich anbieten:
    AD_DbNr (Datenbaustein-Nummer)
    AD_ByteNr (Byte Nummer innerhalb des Datenbausteins an dem die 2 INT beginnen)

    Jetzt kann ich mir mit diesen Angaben einen Any-Pointer auf meine Daten bauen, und könnte dann mittels eines Ziel-Any-Zeigers und dem SFB20(Blockmove) diese 4 Byte verschieben.

    Jetzt erscheint es aber ein wenig aufwendig und unschön wegen 2 Int-Werten, 2-Anyzeiger zu erzeugen und dann auch noch den SFC20 zu verwenden.

    Gibst da ne einfachere Lösung
    Zitieren Zitieren Any-Pointer ohne SFC20 verwenden  

  2. #2
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.493
    Danke
    1.142
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    4 Byte = 1 Doppelwort = 32Bit

    32Bit-Befehle kennt die S7 genügend

    Gruß
    Dieter

  3. #3
    Avatar von RONIN
    RONIN ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.358
    Danke
    456
    Erhielt 695 Danke für 520 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    4 Byte = 1 Doppelwort = 32Bit

    32Bit-Befehle kennt die S7 genügend

    Gruß
    Dieter
    Hilf mir mal bitte auf die Sprünge.

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Versuche es mal so:

    Code:
          
          L     #AD_DBNr
          T     #My_Word                    //Temp Word
          AUF   DB [#My_Word]
    
          L     #AD_ByteNr
          T     #My_Dword                   //Temp DWord
          SLD   3
          L     DBD [#My_Dword]
          T     #MyTemp_001                 //Temp DWord
    Geändert von Ralle (21.10.2009 um 23:35 Uhr)
    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

  5. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    RONIN (22.10.2009)

  6. #5
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von RONIN Beitrag anzeigen
    Jetzt kann ich mir mit diesen Angaben einen Any-Pointer auf meine Daten bauen, und könnte dann mittels eines Ziel-Any-Zeigers und dem SFB20(Blockmove) diese 4 Byte verschieben.

    Jetzt erscheint es aber ein wenig aufwendig und unschön wegen 2 Int-Werten, 2-Anyzeiger zu erzeugen und dann auch noch den SFC20 zu verwenden.
    Hallo Ronin,
    ich verstehe Deine Frage nicht.
    Du kannst Any Zeiger erstellen, weißt aber nicht wie auf zwei Int zugreifst?
    L DB x DBW y

    Also wenn Dein Datenfeld Symbolisch geschrieben ist, sollte das doch absolut kein Problem sein.
    L "Daten".Sollwert_1
    L "Daten".Sollwert_2
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  7. #6
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Code:
    L  AD_DbNr
    T  LW0   //DB Nummer in Lokaldaten umspeichern, sonst kann auf nicht verw. werden
    AUF DB [LW0]
    L AD_ByteNr
    SLD 3
    LAR1
    L DBD[AR1,P#0.0]
    etzt hast du beide ints im akku...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren so...  

  8. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    RONIN (21.10.2009)

  9. #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

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Code:
    L  AD_DbNr
    T  LW0   //DB Nummer in Lokaldaten umspeichern, sonst kann auf nicht verw. werden
    AUF DB [LW0]
    L AD_ByteNr
    SLD 3
    LAR1
    L DBD[AR1,P#0.0]
    etzt hast du beide ints im akku...
    sofern sie zusammenhängend drin stehen ^^

    aber die fragestellung an sich versteh ich so ganz auch nicht ... wenn du doch db und byte-adresse hast kann man doch mit DBx.DBWy ansprechen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #8
    Avatar von RONIN
    RONIN ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.358
    Danke
    456
    Erhielt 695 Danke für 520 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Hallo Ronin,
    ich verstehe Deine Frage nicht.
    Du kannst Any Zeiger erstellen, weißt aber nicht wie auf zwei Int zugreifst?
    L DB x DBW y

    Also wenn Dein Datenfeld Symbolisch geschrieben ist, sollte das doch absolut kein Problem sein.
    L "Daten".Sollwert_1
    L "Daten".Sollwert_2
    L DB x DBW y, dass behersche ich gerade so noch. Das Problem ist dass nicht jedesmal die 2 selben Interger aus dem Datenfeld hole, sondern je nach ergebnis einer Berechnung hole ich ein anderer Integerpaar aus dem Datenfeld. Das Feld ist über 200 Byte lang, also über 100 Integerpaare, wenn ich diese Fallabhängig mit direkter Adressierung lade fall ich wegen Altersschwäche vom Stuhl bevor ich das Netzwerk fertig habe.


    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Code:
    L  AD_DbNr
    T  LW0   //DB Nummer in Lokaldaten umspeichern, sonst kann auf nicht verw. werden
    AUF DB [LW0]
    L AD_ByteNr
    SLD 3
    LAR1
    L DBD[AR1,P#0.0]
    jetzt hast du beide ints im akku...
    OHA.... Das ist interessant. Das war eigentlich mein hauptproblem bei der Addressierung über einen Pointer. Da die DB_Nr als Variable konnte ich den AUF-Befehl nicht verwenden. Ich wusste nicht dass es über die Lokaldaten geht. Werde das morgen gleich ausprobieren.

    Warum geht das mit dem AUF-Befehl ausgerechnet über die Lokaldaten.
    Geändert von RONIN (21.10.2009 um 23:42 Uhr)

  11. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von RONIN Beitrag anzeigen
    Warum geht das mit dem AUF-Befehl ausgerechnet über die Lokaldaten.
    Das fragst du besser Siemens, aber nimm nicht LW0, sondern eine symbolisch im Temp definierte Word, das ist sicherer und besser.
    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

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

    RONIN (21.10.2009)

  13. #10
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    integer-paar? aha? wie ist dein DB aufgebaut? ich behaupte, dass su da mit indirekter adressierung genau richtig bist ... es gibt eine abhängigkeit zwischen ergebnis der berechnung und dem wertepaar, welches du abholst, das ist ein klassischer fall für indirekte adressierung!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. B&R Leistungsmodul ohne Rückspeisedrossel verwenden
    Von Nekson im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 23.08.2011, 08:39
  2. Array ohne Pointer übergeben? (SCL)
    Von tahren im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.06.2010, 12:08
  3. Sfc20
    Von stricky im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 22.01.2010, 20:59
  4. CX1000-Zugriff mit Delphi ohne TwinCat und ohne Modbus
    Von jank-automation im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 09.06.2008, 09:50
  5. AG_SEND ohne Pointer?
    Von lariamat im Forum Feldbusse
    Antworten: 3
    Letzter Beitrag: 06.09.2006, 20:35

Lesezeichen

Berechtigungen

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