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

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

Thema: Mit Pointer auf Bits zugreifen

  1. #1
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum,

    Ich möchte mit einen Zahlenwert der in einem MW geschrieben wird auf Bits in einem DB zugreifen.
    Beispiel:
    In meiner Anlage habe ich ca. 30 Warenträger (1-30), die wenn sie aus der Anl. kommen als fertig gemeldet, gezählt und gesperrt werden sollen!
    Dazu habe ich in einem DB Sperrbits angelegt. Das heißt, wenn WT21 aus der Anl. kommt sollt das entsprechende Bit gesetzt werden.

    Folgenden Code habe ich geschrieben und wollte dazu mal eure Meinung hören. Er funktioniert so bei mir!
    Da ich noch Anfänger bin, freue ich mich über alle Tipps von Euch.

    Gruß

    Jürgen


    Code:
          L     MW    10                        // Warenträgernummer
          L     1                              // um 1 verringern, da ich mit Bit 0 anfangen möchte
          -I    
          LAR1  
          AUF   "werte"                     // DB in dem die Sperrbits liegen
          U     M      0.0                   // nur zum Testen bei abfrage 1 soll das Bit gesetzt werden
          =     DBX [AR1,P#0.0]                // Bit Adresse
    Zitieren Zitieren Mit Pointer auf Bits zugreifen  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Wenn das so in den Programmkonzept passt ist es in Ordnung.

  3. Folgender Benutzer sagt Danke zu borromeus für den nützlichen Beitrag:

    jürgen g (04.01.2016)

  4. #3
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo borromeus,

    ich hätte noch mal eine Frage.

    Kann ich mit einem Pointer kein Bit SETZEN
    Anstatt = DBX [AR1,P#0.0] wollte ich
    s DBX [AR1,P#0.0] machen .
    Das tut bei mir nicht wie gewünscht. Das Bit wird nicht gesetzt,
    sondern es geht wieder auf 0 sobald ich das nächste Bit angewählt habe.

    Ich habe mir überlegt das ganze in einer Schleife umzusetzen ohne Pointer.

    Hättest du mir vielleicht einen simpleren Weg so etwas zu lösen.
    Meist denke ich viel zu umständlich!

    Gruß

    Jürgen

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von jürgen g Beitrag anzeigen
    Das tut bei mir nicht wie gewünscht. Das Bit wird nicht gesetzt,
    sondern es geht wieder auf 0 sobald ich das nächste Bit angewählt habe.
    Wird es nun gesetzt oder nicht??

    Wenn mit "= DBX [AR1,P#0.0]" das Bit auf 1 geht, dann wird es auch mit "S DBX [AR1,P#0.0]" auf 1 gehen. Bis es durch einen anderen Schreibzugriff auf 0 geschrieben wird.

    Ich vermute, ein anderer Programmteil schreibt das Bit später wieder auf 0. Eventuell eine Variablenüberschneidung?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Zitat Zitat von jürgen g Beitrag anzeigen
    Hallo borromeus,

    ich hätte noch mal eine Frage.

    Kann ich mit einem Pointer kein Bit SETZEN
    Anstatt = DBX [AR1,P#0.0] wollte ich
    s DBX [AR1,P#0.0] machen .
    Das tut bei mir nicht wie gewünscht. Das Bit wird nicht gesetzt,
    sondern es geht wieder auf 0 sobald ich das nächste Bit angewählt habe.

    Ich habe mir überlegt das ganze in einer Schleife umzusetzen ohne Pointer.

    Hättest du mir vielleicht einen simpleren Weg so etwas zu lösen.
    Meist denke ich viel zu umständlich!

    Gruß

    Jürgen
    Sicher kannst Du mit einem Pointer das Bit setzen.
    Da ist ein Programmfehler drin.

  7. #6
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich kann den Fehler leider nicht finden.

    Ich habe zum Testen ein neues S7 Projekt erstellt.
    In diesem gibt es nur den FC1 und den DB mit den 30 Bits.
    den Code habe ich so geändert:
    Code:
     
      L     MW    10                    // Warenträgernummer
          LAR1  
          AUF   "werte"                     // DB in dem die Sperrbits liegen
          U     M      0.0
          S     DBX [AR1,P#0.0
    sobald ich einen neuen Zahlenwert in das MW 10 geben geht das vorher angesprochene Bit wieder auf 0 und das neue Bit auf 1.
    Mir ist leider nicht klar wo das Bit wieder auf 0 gesetzt wird!

    Gruß

    Jürgen

  8. #7
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard

    mehr Code ist nicht im FC 1.
    das bedeutet der Pointer muss selbst das Bit wieder auf 0 setzen.
    Das verstehe ich leider nicht!

    jürgen

  9. #8
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard

    OK, jetzt bitte nicht lachen oder sauer werden, aber nun hängt es bei mir total.
    Neues S7 Projekt mit nur FC1 und DB 1.
    im DB 1 wieder die Bits angelegt

    Folgender Code:

    Code:
     U     M      0.0
          S     DB1.DBX    0.1

    gebe ich meinem m0.0 eine 1 hat mein DBX auch eine 1
    hat mein M0.0 wieder eine 0 hat mein DBX auch wieder eine 0.

    Muss ich das verstehen oder sollte ich mir ein neues Hobby suchen?

    Oder hat das mit er Simulation zu tun.
    setze ich mir einen Merker, dann ist alles gut


    Jürgen

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von jürgen g Beitrag anzeigen
    Ich habe zum Testen ein neues S7 Projekt erstellt.
    In diesem gibt es nur den FC1 und den DB mit den 30 Bits.
    Du wirst doch wohl auch noch einen OB1 haben? Und vielleicht auch noch mehr Bausteine? Irgendwo muß der FC1 ja aufgerufen werden.
    Und wie kommt M0.0 auf TRUE?

    Irgendwas schreibt auch noch in den DB. Suche mal in den Referenzdaten nach der Verwendung Deines DB.
    Ist Deine SPS vernetzt? Schreibt irgendwas von außerhalb der SPS in Deinen DB?

    Gib mal dem DB eine andere Nummer.

    Was für eine SPS programmierst Du mit welchem Programmiersystem?
    Kannst Du das neue S7-Projekt hier hochladen?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #10
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Harald,

    Ich habe mir ein neues Projekt angelegt, darin eine CPU ausgewählt in diesem Fall eine 315 2-DP.
    Dann meine Bausteine erstellt. Also ein ganz neues Projekt.

    Meinen Merker und die Variablen habe ich in der Variablentabelle gelegt. Von dort steuere ich den Test.

    Nun habe ich einen neuen DB angelegt leider mit dem gleichen Ergebnis.
    In den Referenzdaten finde ich auch nichts, es gibt ja auch nichts anderes.
    Ja, den OB 1 habe ich natürlich zum aufrufen.

    Habe es gerade im Tia versucht, da geht es.
    Vielleicht liegt es doch an der Simulation.

    Ich habe Step 7 V5.5 aktuelles SP
    und Tia V13 auch aktuelles SP
    Angehängte Dateien Angehängte Dateien

Ähnliche Themen

  1. SCL: Auf Bits eines Word zugreifen.
    Von Aksels im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 28.10.2011, 17:10
  2. Antworten: 12
    Letzter Beitrag: 18.05.2011, 23:57
  3. Auf DB mit Pointer zugreifen
    Von Holger Levetzow im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 03.11.2010, 06:41
  4. Mit Any- Pointer auf Lokaldaten zugreifen
    Von AJ67 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 25.06.2009, 10:01
  5. Mit Any-Pointer auf PAW zugreifen?
    Von merlin im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.06.2007, 20:51

Lesezeichen

Berechtigungen

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