Step 7 Mit Pointer auf Bits zugreifen

jürgen g

Level-1
Beiträge
31
Reaktionspunkte
1
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
:confused: 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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 

Anhänge

  • Pointer_.zip
    768,5 KB · Aufrufe: 9
Noch die 2.Test Version.

Habe bei der Hardwarekonfig keine Ein und Ausgänge gesteckt, kann es damit zusammen hängen?

Jürgen
 

Anhänge

  • Db_bit_s.zip
    888,2 KB · Aufrufe: 2
Beide Deiner Projekte funktionieren so wie sie sollen - die gesetzten Bits bleiben gesetzt.

Falls Du in der Variablentabelle mit der Schaltfläche "Variable steuern" die Variablen steuerst, dann werden alle sichtbaren Zeilen mit aktiven Steuerwerten in die CPU geschrieben - in Deinen VAT würdest Du damit auch bereits gesetzte DB-Bits löschen. Du solltest die nicht gewollten Steuerwerte löschen oder auskommentieren (F3 oder letzte Schaltfläche).
Tipp: Cursor in eine Zeile der VAT setzen (z.B. auf den Statuswert) und dann mit Tastenkombination Strg+0 und Strg+1 steuern - dann wird nur diese Variable gesteuert.

Harald
 
Vielen Dank an Euch beide,

ich schäme mich gerade in Grund und Boden dafür, dass ich das übersehen habe.
Jetzt sitze ich schon weiß Gott wie lange daran und sehe vor lauter Bäume den Wald nicht.
Den Pointer bekomme ich hin, nicht aber das Steuern der Variablen! Meine Güte!!

Habt vielen Dank für Eure kostbare Zeit die ich Euch damit geraubt habe.

Entschuldigt bitte vielmals dafür!

Viele Grüße

Jürgen
 
Zurück
Oben