Problem mit Lokalvariable

hubsi64

Level-2
Beiträge
27
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe da ein Problem beim Arbeiten mit lokalen Daten eines FBs und finde keine Lösung.
es gibt darin ein statische Variable "SR_Band_li" (Word), die ich als Schieberegister benutzen möchte. Die Variable hat im Instanz-DB die Adresse 18.0.
Ich möchte jetzt einzelne Bits dieser Variablen mit U L18.1 logisch verknüpfen. Das funktioniert aber nicht, weil das LW 18 einen anderen Wert hat als die Variable SR_Band_li. Wieso das?
 
Hallo,

es ist immer interessant zu wissen, welche Software und welche SPS verwendet wird. Anhang dessen kann man dir wesentlich bessere Tipps (ohne nachzufragen) geben.

Du schreibst doch schon, du hast eine statische Variable. Diese werden im Instanz-DB des FB abgelegt.
Das sind keine lokale Variablen.
Die Variablen, die du mit L anspricht, sind temporäre Variablen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch ein Tipp:
Wenn du ein Schieberegister aufbauen möchtest, schaue dir mal den Datentype ARRAY an,
und für den Bitzugriff auf eine int/word Variable schaue dir bitte den SLICE Zugriff an.
 
Ich möchte jetzt einzelne Bits dieser Variablen mit U L18.1 logisch verknüpfen. Das funktioniert aber nicht, weil das LW 18 einen anderen Wert hat als die Variable SR_Band_li. Wieso das?
L18.1 adressiert ein Bit in TEMP (temporäre Lokaldaten).
Bits in Static (statische Lokaldaten) werden mit DIX18.1 oder DBX18.1 adressiert. Aber nicht nachmachen! Die Adresse stimmt nur bei Einzel-Instanzen mit eigenem Instanz-DB. Bei Multiinstanzen kommt da noch der Offset der Instanz im Instanz-DB dazu. Und bei "optimierten" Bausteinen geht die Adressierung überhaupt gar nicht, weil die Variablen da keine Adresse haben.

Je nachdem, was für eine SPS Du hast und mit welcher Software Du programmierst, könntest Du das Static-Word in ein Word in TEMP kopieren und da per AT mit einem Bool-Struct oder Bool-Array überlagern. Oder das Static-Word über das Bool-Struct oder Bool-Array in TEMP kopieren und da die Bits ansprechen. Oder per SLICE die Bits im Word ansprechen. Oder was immer geht (auch "optimiert"), die Bits maskieren, z.B. #Bit3 := (#tempWord AND W#16#0008) <> 0;

Harald
 
Hallo,
vielen Dank für die Informationen.
@ Peter : ich hab keinen Steuerungstyp genannt, da ich der Meinung war, dass mein Problem ein generelles Verständnisproblem ist, was sich ja bestätigt hat (Ist eine S7-315, ich arbeite mit S7 V5.6). L sind nur die Temporären. Ich hab stundenlang im Netzt nach Informationen gesucht und nix verständliches gefunden.
@ Harald : auch Dir, danke für die Tipps. Da muss ich mich wohl erst noch ein bisschen genauer zu dem Thema einlesen (Instanzen und Multiinstanzen für Anfänger).
Habt Ihr vielleicht noch einen Tipp wo man das nachlesen kann (wie gesagt für Anfänger), oder muss ich mir die Infos zusammensuchen?

Hubert
 
Auch wenn du es sehr wahrscheinlich schon genutzt hast, aber bei Siemens ist die Hilfe Funktion oftmals sehr hilfreich. Und das meine ich definitiv nicht sarkastisch^^
 
Ich bin für jeden Tipp dankbar! Selbst wenn er sarkastisch ist. Auch ein A...tritt kann manchmal eine wichtige Information sein.
Die Informationen die ich hier erhalten hab, bringen mich erstmal weiter. Das Programm läuft so wie ich es mir vorgestellt hatte.
Jetzt hängt es aber an einer anderen Stelle!
Ich setze in meinem FB einige SFC-Timer ein. Damit wird meine FB-Instanz zur Multiinstanz. Das funktioniert auch soweit. Aber! Schließe ich den FB und öffne ihn anschließend wieder sind einige der SFBs im Deklarationsteil "rot". Will ich den FB speichern erhalte ich die Meldung " kann nicht gespeichert werden .... ungültige Einträge in der Deklarationstabelle". In der Statuszeile steht, dass der Datentyp an dieser stelle nicht erlaubt ist. Die "roten Einträge" bekomm ich auch weg (Deklaration aktualisieren).
Schließe ich den FB mit Speichern, habe ich nach dem Öffnen wieder aber wieder das gleiche Problem. Irgendwas hab ich da falsch gemacht.
Ich hab mal ein Bild von der Deklaration angehängt.
 

Anhänge

  • Deklarationsfehler.JPG
    Deklarationsfehler.JPG
    55,1 KB · Aufrufe: 39
Zuviel Werbung?
-> Hier kostenlos registrieren
Seltsamerweise haben die beiden Timer einen statischen Bereich in der Deklaration. Die Funktionierenden haben das nicht.
Ich hab Sie mal gelöscht und neu angelegt. Das gleiche Problem. Dann hab ich Sie gelöscht und nicht neu angelegt. Dann waren jeweils die beiden ersten SFB4 und SFB5 rot und mit statischen Teil. Bei der Konsistenzprüfung wird der FB und sein DB fehlerhaft angezeigt. Bei der Übersetzung gibt es zwar keine Fehler die Bausteine sind danach auch konsistent, das Problem ist aber immer noch da.
 
Hast du danach dann die Instanz deines FB's, in dem du das angelegt hast, aktualisiert (das geht z.B. dort, wo du den Baustein aufrufst) und dann den geänderten FB und dessen I-DB an die SPS übertragen ?
 
Ich hab die beiden SFCs in der Deklaration des FB entfernt, die Verwendung im Code natürlich entfernt und den FB gespeichert und verlassen.
Den FB im OB neu aufgerufen und neue Instanz erstellt und gespeichert.
Dann Konsistenz geprüft (FB und DB i.O.) In die SPS habe ich nichts übertragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In TIA/S7-1500 kümmert TIA um dass die Programme konsistent sind. In STEP7 Klassik/S7-300/400 bekommt man eventuell mit rot markierte Bausteine den Hinweis das etwas nicht konsistent ist, aber man ist nicht gezwungen die Bausteine zu laden. Dies kann für eine erfahrener Programmierer ein Vorteil sein, wenn man bei eine Online Update die Aktualwerte nicht verlieren will. Aber kann auch gefährlich sein.

Wenn du die Deklaration von ein FB änderst, musst du die auch die Instanze Updaten, und die Bausteinaufrufe Updaten. Dann speichern und in die SPS laden. Ein offline/online Vergleich muss keine Unterschiede finden.
 
Seltsamerweise sind in der Deklaration bei den fehlerhaften SFCs 3 stat Variablen vorhanden, bei den anderen nich (Bild2)t. In der Instanz haben alle SFCs 3 stat-Variablen (Bild3).
 

Anhänge

  • Deklarationsfehler2.JPG
    Deklarationsfehler2.JPG
    33,5 KB · Aufrufe: 11
  • Deklarationsfehler3.JPG
    Deklarationsfehler3.JPG
    79,3 KB · Aufrufe: 12
Zum Thema Schieberegister.
Erklär mal die Aufgabe genauer.
Ich wurde eine ARRAY für den Schieberegister erstellen und die Aufgabe in SCL programmieren. Ohne SCL gibt es auch einige Möglichkeiten, auch so dass man nicht zu etwas 'schmutziges' gezwungen ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@JesperMP In der Steuerung funktioniert ja alles. Das Programm läuft auch so wie ich es möchte. Es stört halt, dass ich bei jeder Codeänderung im FC diese beiden Deklarationseinträge aktualisieren muss.
 
Kann es sein, dass an meiner Bibliothek was defekt ist? Bei der Konsistenzprüfung werden alle SFCs als nicht konsistent gemeldet.
 

Anhänge

  • Deklarationsfehler4.JPG
    Deklarationsfehler4.JPG
    92,9 KB · Aufrufe: 13
Zuviel Werbung?
-> Hier kostenlos registrieren
Seltsamerweise sind in der Deklaration bei den fehlerhaften SFCs 3 stat Variablen vorhanden, bei den anderen nich (Bild2)t. In der Instanz haben alle SFCs 3 stat-Variablen (Bild3).
Etwas ist schief gegangen. Die Symbolik passt nicht. Anstatt die .IN0, .IN1, OUT3. usw zu sehen solltest du .IN, .PT, .Q, .ET sehen können.

@JesperMP In der Steuerung funktioniert ja alles. Das Programm läuft auch so wie ich es möchte. Es stört halt, dass ich bei jeder Codeänderung im FC diese beiden Deklarationseinträge aktualisieren muss.
Das kann gut sein. Vermutlich lasst STEP7 dich nicht zu auf den FB online zu gehen.
 
Also nochmal dazu :
Wenn du in der Deklaration deines FB's etwas änderst dann MUSST du die Instanz aktualisieren :

Hast du danach dann die Instanz deines FB's, in dem du das angelegt hast, aktualisiert (das geht z.B. dort, wo du den Baustein aufrufst) und dann den geänderten FB und dessen I-DB an die SPS übertragen ?

Machst du das nicht dann zeigt dir das System über die rote Markierung das da etwas nicht passt.

Du kannst in die Deklaration keine SFC's einfügen sondern nur FB's und/oder SFB's - das ist vermutlich ein Schreibfehler von dir ... aber ich erwähne es hier trotzdem weil deine Angaben teilweise "etwas" konfus sind.

Wenn du aber einen SFB einfügst und bekommst dann nicht, wie von Jesper erwähnt, dessen Unter-Deklarationen angezeigt dann stimmt etwas mit DEM Baustein nicht - oder der Quelle aus der er kommt ...
 
Zurück
Oben