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

Ergebnis 1 bis 9 von 9

Thema: Abfrage Merkerwort mit Pointer

  1. #1
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    In meinem S7-Programm einer S7-300 frage ich ein Merkerwort auf dezimale Zustände ab und setze mit dem Ergebnis einen Merker mit dem ich im OP eine Betriebsmeldung anzeige.

    L MW80
    L 1
    = I
    = M130.0

    ...
    ...
    ...
    L MW80
    L 20
    = I
    = M132.3

    Dadurch habe ich natürlich Netzwerke ohne Ende. Das Ganze müßte doch auch mit einem Pointer zu machen sein. Hat jemand eine Idee ?
    Zitieren Zitieren Gelöst: Abfrage Merkerwort mit Pointer  

  2. "Hi sps-concept

    Danke für dein Programm, funktioniert wunderbar.

    Ich bräuchte aber noch eine kleine Abänderung: Statt der Abfrage eines Merkerwortes soll ein Wort aus eines Instanz-DB, also eine lokale Stat-Variable verwendet werden. Ebenso natürlich auch statt den Pointer auf ein Merkerbit einen Pointer auf ein Bit in der Instanz, lokale Stat-Variable.

    Vielen Dank"


  3. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Na hallo, würde sagen so:

    Code:
          L     P#M 130.0                   // Pointer auf Anfang
          LAR1  
          L     0
          T     D [AR1,P#0.0]               // zuerst löschen
          T     D [AR1,P#4.0]               // weitere DWORD?
    
          L     MW    80
          +AR1  
          SET   
          =      [AR1,P#0.0]                // entsprechendes Bit setzen  
                                                    // MW80 = 0 -> M130.0
    je nach Grösse des abzufragenden Bereichs sind entsprechend viele MW/MD vor beschreiben zu löschen. Eine Einschränkung des Wertes von MW80 ist auch zu empfehlen, um auch nur gewollte Bereiche zu beschreiben.

    MfG
    André Räppel
    Zitieren Zitieren CODE  

  4. #3
    Anonymous Gast

    Standard

    Zitat Zitat von sps-concept
    Code:
          ...
          LAR1  
          L     0
          T     D [AR1,P#0.0]               // zuerst löschen
          T     D [AR1,P#4.0]               // weitere DWORD?
          ...
    Hallo Andre,
    ich habe einen kleinen, aber feinen Schönheitsfehler entdeckt.
    Du solltest beim Ablöschen eines Doppelwortes immer

    L L#0

    benutzen. Ansonsten kann es sein, dass das Doppelwort nicht richtig abgelöscht wird.

    Gruß
    Max
    Zitieren Zitieren Re: CODE  

  5. #4
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo Max,

    eigentlich nicht. Es wird zwar nur ein Wort geladen... aber das "nicht geladene Wort" des Doppelworts ist trotzdem 0. Siehe auch Siemens-Hilfe:

    L <Operand> lädt den Inhalt des adressierten Bytes, Wortes oder Doppelwortes in AKKU 1, nachdem zuvor der alte Inhalt von AKKU 1 in AKKU 2 gespeichert wurde und AKKU 1 auf "0" zurückgesetzt wurde.

    Das L#0 gibts nur zu Schönheitszwecken oder für Abfragen zB CMP == D wenn mit Typprüfung von Operanden gearbeitet wird - in AWL nicht relevant.

    MfG
    André Räppel
    Zitieren Zitieren Fehler?  

  6. #5
    Anonymous Gast

    Standard

    Hallo,
    habe ein ähnliches Problem, aber genau umgekehrt.
    Störmeldungen laufen auf mehrere MW bitweise auf.
    z.B.
    u e 0.0 reset
    r m 80.0 stm xy
    u e 5.0 eingang stm xy
    s m 80.0 stm xy
    ...
    bis m 84.7

    Diese Merkerworte möchte ich BCD-codiert (als "Störzahl") am AB 10 darstellen.
    Ist dies auch über eine Pointerprogrammierung möglich?

    Vielen Dank für eure Mühe
    sps-fuzzy

  7. #6
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo fuzzy,

    das geht auch über Pointer, aber wesentlich aufwendiger. Musst jede Bitstelle mal abklappern und dir den "Bitindex" merken wenn sie 1 ist. Siehe auch folgende Bausteine als Anregung:

    http://www.sps-concept.de/download/print/BIT_INDX.pdf
    http://www.sps-concept.de/download/print/ME16_SCR.pdf


    MfG
    André Räppel
    Zitieren Zitieren Störungen  

  8. #7
    Registriert seit
    28.06.2003
    Ort
    Nähe Bonn
    Beiträge
    292
    Danke
    15
    Erhielt 92 Danke für 71 Beiträge

    Standard

    Hallo sps-fuzzy,

    ich habe mir so einen Baustein schon vor mehreren Jahren als S5 Baustein geschrieben und auch für S7 angepaßt.


    Funktionsbeschreibung:

    Ein Zähler wird bis Anzahl der Meldungen in jeden SPS Zyklus um 1 erhöht, bei max auf 0 gesetzt.
    Aus dem Zählerstand und der Anfangsadresse der Meldungen wird das jeweilige Meldungsmerkerbit berechnet.
    Wenn das Bit=0 dann weiter
    Wenn das Bit=1 dann starte eine Anzeigezeit und halte für die Dauer der Anzeigezeit den Zähler an und gib den Zählerstand (evtl. BCD codiert) als Meldungsnummer aus.

    Die Berechnung und Abfrage erfolgt so (bei S7):

    L #Anfangsadresse
    SLD 3
    T #MBit // Pointer für Merker-Bit
    L #Zaehler // Zählerstand (MW oder DBW)
    +D
    T #MBit // Pointer für Merker-Bit
    U M [#MBit] // U M (Meldungsmerkerbyte.Bit)


    mfg Peter
    Zitieren Zitieren Störbits als Nummer anzeigen  

  9. Folgender Benutzer sagt Danke zu Peter Wahlen für den nützlichen Beitrag:

    SIGGI (16.02.2009)

  10. #8
    Anonymous Gast

    Standard

    Hi sps-concept

    Danke für dein Programm, funktioniert wunderbar.

    Ich bräuchte aber noch eine kleine Abänderung: Statt der Abfrage eines Merkerwortes soll ein Wort aus eines Instanz-DB, also eine lokale Stat-Variable verwendet werden. Ebenso natürlich auch statt den Pointer auf ein Merkerbit einen Pointer auf ein Bit in der Instanz, lokale Stat-Variable.

    Vielen Dank
    Zitieren Zitieren Abfrage Merkerwort mit Pointer  

  11. #9
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    danke für die Rückmeldung - das is nich immer so. Wenn du ne Variable in nem Instanz-DB nehmen willst dann ist es doch sicher eine Variable aus einem FB. Direkt würde ich diese Variable nicht ansprechen, sonst würde es bei einer Multiintanz nicht funktionieren.

    Code:
          L     P##Variable                  // Pointer auf Anfang 
          LAR1  
          L     0 
          T     D &#91;AR1,P#0.0&#93;               // zuerst löschen 
          T     D &#91;AR1,P#4.0&#93;               // weitere DWORD? 
    
          L     #StoerNr
          +AR1  
          SET    
          =      &#91;AR1,P#0.0&#93;                // entsprechendes Bit setzen
    Habs nich probiert, denke aber es geht so. Die statische Variable verweist ja automatisch auf die Variable im Instanz-DB.

    MfG
    André Räppel
    Zitieren Zitieren Instanz-DB  

  12. Folgender Benutzer sagt Danke zu sps-concept für den nützlichen Beitrag:

    SIGGI (16.02.2009)

Ähnliche Themen

  1. Abfrage Bool und Integer via FC mit Pointer
    Von Waelder im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.03.2011, 16:28
  2. MerkerWort
    Von Mike369 im Forum Simatic
    Antworten: 63
    Letzter Beitrag: 09.01.2009, 19:19
  3. Sekunden ins Merkerwort
    Von tomstl im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 17.10.2007, 00:52
  4. Merkerwort bei PS3 schreiben
    Von dwod im Forum Sonstige Steuerungen
    Antworten: 4
    Letzter Beitrag: 05.03.2007, 19:59
  5. Anfängerfrage Merkerwort
    Von Claudi im Forum Simatic
    Antworten: 67
    Letzter Beitrag: 06.02.2007, 14:26

Lesezeichen

Berechtigungen

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