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

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

Thema: Spezielle Step7 Code-Frage

  1. #1
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi S7-Progger,

    ich bräuchte bitte mal nen Tipp von Euch.
    CPU = 315-2DP.

    Hier ein Kurzauszug aus dem Code (der in Wirklichkeit wesentlich länger ist und in dieser Art häufig vorkommt).

    Code:
    M10:  AUF DB510
          U     M    121.1
          U     DBX  126.x  
          O     
          U     M    121.5
          U     DBX  152.x  
          O     
          U     M    122.1
          U     DBX  178.x
          O     
          ...
    Ich würde den Code gerne in eine eigene "Standard FC" packen.
    Einziger Knackpunkt: Die Bit-Nummer bei den DBX Zugriffen muss flexibel bleiben (soll in der FC-Schnittstelle übergeben werden)

    Hat jemand hierzu einen Lösungsvorschlag?

    Danke für Eure Zeit.
    Gruß
    Zitieren Zitieren Spezielle Step7 Code-Frage  

  2. #2
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Rückfrage: Bleibt x konstant im FC oder nicht ?
    Das Grauen lauert in der Zwischenablage !!

  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

    ich kann da überhaupt keinen zusammenhang zwischen den operanden erkennen

    wie dem auch sei, der zugriff über einen pointer sollte hier sehr gut funktionieren

    mit

    Code:
    *
          L     #iByteByNumber              //LOAD MW NUMBER
          SLD   3                           //MADE POINTER  
          LAR1                              //AND LOAD IN AR1
    erzeugst du den zugriff auf das byte, welches in iByteByNumber im INT format liegt ... die 3 stellen, die du verschiebst stellen die bitadresse dar und würde durch obiges eben null sein muß also erweitert werden durch:

    Code:
    *
          L     #iByteByNumber
          SLD   3
          L     #iBitByNumber
          +D    
          LAR1
    dann kannst du direkt mit

    Code:
    *
          U     DBX [AR1,P#0.0]
    auf dein eingestelltes bit im eingestellten byte zugreifen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Hi,

    Vielen Dank für Eure Antworten.

    Die Byte-Nummern sind so wie im Code unten beschrieben (also fest vergeben).
    Die Bit-Nummer soll vom Aufrufenden Baustein an die FC übergeben werben. Sie bleibt dann die ganze FC über unverändert.

    Ich wollte mir eben diese ganze AR1 Geschichte sparen (für jede DBX Abfrage neu addieren usw.)

    Hier nochmal der komplette Code ... (kommt im Prog gut 30x vor).
    Jedesmal ist x dann eine bestimmte Bit-Nummer.
    Gibt es keinen kürzeren Weg - also irgendwie x durch einen Pointer zu ersetzen?

    Code:
    M10:  U     M    121.1
          U     DBX  126.x
          O     
          U     M    121.5
          U     DBX  152.x
          O     
          U     M    122.1
          U     DBX  178.x
          O     
          U     M    122.5
          U     DBX  204.x
          O     
          U     M    123.1
          U     DBX  230.x
          O     
          U     M    123.5
          U     DBX  256.x
          O     
          U     M    124.1
          U     DBX  282.x
          O     
          U     M    124.5
          U     DBX  308.x
          O     
          U     M    125.1
          U     DBX  334.x
          O     
          U     M    125.5
          U     DBX  360.x
          O     
          U     M    126.1
          U     DBX  386.x
          O     
          U     M    126.5
          U     DBX  412.x
          O     
          U     M    127.1
          U     DBX  438.x
          O     
          U     M    127.5
          U     DBX  464.x
          O     
          U     M    128.1
          U     DBX  490.x
          O     
          U     M    128.5
          U     DBX  516.x
          =     #FK

  5. #5
    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 ssound1de Beitrag anzeigen
    Gibt es keinen kürzeren Weg - also irgendwie x durch einen Pointer zu ersetzen?
    ...nein...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    nach gründlicher analyse deines codes habe ich folgendes festgestellt:

    es sind 16 und-verknüpfungen
    die schrittweite bei den merkern ist 4 bit
    die schrittweite bei den datenbaustein-bits ist 26 byte

    diese erkenntnisse schlagen sich im folgenden code nieder:

    Code:
    *
          TAR1  
          T     #dAR1Save
          TAR2  
          T     #dAR2Save
    
          L     #iByteMerker
          SLD   3
          L     #iBitMerker
          +D    
          LAR1  
    
          L     #iByteDB
          SLD   3
          L     #iBitDB
          +D    
          LAR2  
    
          AUF   #DBnumber
    
          L     16
    next: T     #iLoopCounter
          U     M [AR1,P#0.0]
          U     DBX [AR2,P#0.0]
          SPB   ok
          +AR1  P#0.4
          +AR2  P#26.0
          L     #iLoopCounter
          LOOP  next
          R     #FK
          SPA   end
    ok:   =     #FK
    
    end:  L     #dAR1Save
          LAR1  
          L     #dAR2Save
          LAR2
    Geändert von vierlagig (06.11.2008 um 13:46 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    Registriert seit
    09.08.2004
    Ort
    Münsterland
    Beiträge
    232
    Danke
    21
    Erhielt 13 Danke für 10 Beiträge

    Standard

    Zitat Zitat von ssound1de Beitrag anzeigen
    Ich wollte mir eben diese ganze AR1 Geschichte sparen (für jede DBX Abfrage neu addieren usw.)

    U M 121.5
    U DBX 152.x
    O
    U M 122.1
    U DBX 178.x
    O
    U M 122.5
    U DBX 204.x
    O
    U M 123.1
    U DBX 230.x
    O
    U M 123.5
    U DBX 256.x
    [/code]
    ich würde das so machen .... zwar nicht ohne ar aber fast !

    L Wert // Dein wert von 0-7 für die Bitposi
    LAR1

    U M 121.5
    U DBX [AR1,P#152.0]
    O
    U M 122.1
    U DBX [AR1,P#178.0]
    O
    U M 122.5
    U DBX [AR1,P#204.0]
    O
    U M 123.1
    U DBX [AR1,P#230.0]
    O
    U M 123.5
    U DBX [AR1,P#256.0]

    so sollte es gehen ... einfach den Wert ändern und schon wird das in ein anderes Bit geschrieben

    gruß

  8. #8
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    @vierlagig
    Das ist doch mal ne schöne Schleife.
    In der S5 hätt ich das im Schlaf gemacht, aber in der S7 bin ich leider nur selten unterwegs - letztes Projekt ist 2 Jahre her (habe deshalb Syntax-Probs).

    DANKE!!!

    Ähm - der AR Save nur falls nötig, oder?!

    @stricky
    Hmm - das andersherum zu machen ist auch gut - hab ich garnicht dran gedacht (wie gesagt - Syntax-Probs).
    DANKE!!!
    Geändert von ssound1de (06.11.2008 um 14:04 Uhr)

  9. #9
    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 ssound1de Beitrag anzeigen
    Ähm - der AR Save nur falls nötig, oder?!
    sicher is sicher! gerade beim AR2! ich speichere lieber, bevor mich irgendwas später aus der bahn wirft ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #10
    Registriert seit
    09.08.2004
    Ort
    Münsterland
    Beiträge
    232
    Danke
    21
    Erhielt 13 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von vierlagig Beitrag anzeigen
    nach gründlicher analyse deines codes habe ich folgendes festgestellt:

    es sind 16 und-verknüpfungen
    die schrittweite bei den merkern ist 4 bit
    die schrittweite bei den datenbaustein-bits ist 26 byte

    diese erkenntnisse schlagen sich im folgenden code nieder:

    Code:
    *
          TAR1  
          T     #dAR1Save
          TAR2  
          T     #dAR2Save
    
          L     #iByteMerker
          SLD   3
          L     #iBitMerker
          +D    
          LAR1  
    
          L     #iByteDB
          SLD   3
          L     #iBitDB
          +D    
          LAR2  
    
          AUF   #DBnumber
    
          L     16
    next: T     #iLoopCounter
          U     M [AR1,P#0.0]
          U     DBX [AR2,P#0.0]
          SPB   ok
          +AR1  P#0.4
          +AR2  P#26.0
          L     #iLoopCounter
          LOOP  next
          R     #FK
          SPA   end
    ok:   =     #FK
    
    end:  L     #dAR1Save
          LAR1  
          L     #dAR2Save
          LAR2
    so gehts natürlich auch

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 14.08.2012, 06:04
  2. OB86 - spezielle Daten
    Von Gerri im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.11.2008, 15:46
  3. WinCC - spezielle Fragestellungen
    Von Ralle im Forum HMI
    Antworten: 26
    Letzter Beitrag: 22.01.2008, 17:10
  4. Frage zu Step7
    Von RainBow im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 24.10.2006, 20:55
  5. code aus step7 rauscopieren
    Von Hobby programmierer im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 31.01.2006, 13:30

Lesezeichen

Berechtigungen

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