Step 7 Merker vs DBX

Lipperlandstern

Level-3
Beiträge
6.010
Reaktionspunkte
1.728
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen.

Ich habe einen Baustein (siehe weiter unten) bei dem am Ausgang ein Bit gesetzt werden soll. Diesen Baustein habe ich schon 100fach eingesetzt und als Ausgang immer einen Merker benutzt. Bei meinem aktuellen Projekt habe ich mal ein DBX benutzt und der Ausgang wird nicht mehr gesetzt sondern nur zugewiesen. Das heisst sobald das Signal #lightbarrier 0 wird , wird auch der Ausgang 0.

Warum gibt es da einen Unterschied zwischen Merker (z.B. M450.0) und Datenbit z.B. DB1032.DBX0.1)


Das Datenbit wird an anderen Stellen nur gelesen und an keiner Stelle geschrieben. Auch nicht das Byte, Word oder Doppelwort. Ein Überschreiben findet nicht statt. Ich habe auch mal Testweise einen neuen DB erstellt und bekam das gleiche Ergebnis.

Hat da jemand eine Erklärung ?


Code:
 L     #temporarybuffer
      L     30000
      <I    
      SPB   M005
      L     #delaytime
      T     #temporarybuffer


M005: NOP   0




      U     #lightbarrier
      U     #drive
      SPB   M001
      SPA   M002
M001: NOP   0
      L     #temporarybuffer
      L     1
      +I    
      T     #temporarybuffer
M002: NOP   0
      UN    #lightbarrier
      SPB   M003
      SPA   M004
M003: NOP   0
      L     0
      T     #temporarybuffer
M004: NOP   0
      L     #temporarybuffer
      L     #delaytime
      >=I   
      S     #signal_ok
 
Ganz einfach:
A: MC7 Aufruf mit Merker
Code:
    BLD   1
      =     L     20.0


      UC    "LiLa"
            P#M 0.0
      BLD   2

B: MC7 Aufruf mit Vollqualifizierten DB-Zugriff:
Code:
     BLD   1
      =     L     20.0


      UC    "LiLa"
            P#L 20.1
      U     L     20.1
      AUF   DB    10
      =     DBX    0.0
      BLD   2

Der Einfachheit wegen hat der obige FC jetzt nur einen einzigen OUT-Parameter.

Mfg
Manuel
 
Das Problem ist das der Merker gesetzt wird und bleibt (wie im Baustein "befohlen") . Das Bit im Datenbaustein nicht.
 
Da muss was im Umfeld nicht passen.
Ersetz mal deinen Bausteinaufruf durch was in der Art:
Code:
U Mx.y
FP Mx.z
S DB1032.DB0.1

Programmierfehler OB121 ist nicht zufällig geladen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da muss was im Umfeld nicht passen.
Ersetz mal deinen Bausteinaufruf durch was in der Art:
Code:
U Mx.y
FP Mx.z
S DB1032.DB0.1

Programmierfehler OB121 ist nicht zufällig geladen?


Wenn ich es so mache funktioniert es. Das nutze ich grade als workaround.... OB121 ist nicht geladen
 
Ich denke du rufst den Baustein als Multiinstanz auf?
Schon mal in eine Single-Instanz geändert?

Ist Signal_OK ein Out-Parameter oder ein InOut?
 
Ich hab' noch in Erinnerung, dass das Harald mal irgendwo sehr ausführlich beantwortet hat.
Muss ich (oder Du) mal' nach suchen.

PS: Oder vlt. liest er ja auch gerade mit und beantwortet das noch einmal.
 
Wenn ich's recht im Kopf hab, dann ist das ein Thema aus der Ecke CallByValue und CallByReverence.

Am einfachsten ist es du nimmst eine neue statische Variable Signal_OK_HM und weist diese am Schluß Signal_OK zu.
Dann brauchst du nur die Instanzen neu erzeugen lassen und nicht alle Bausteineaufrufe aktualisieren.

Gruß
Dieter
 
FC, OUT und Setzen?
Anfängerfehler bei so 'nem alten Hasen?

Das beruhigt mich jetzt irgendwie für meine Fehler.
:ROFLMAO:

hucki,
das ist kein Anfängerfehler, sondern ein Fehler wie gemacht für alte Hasen.
In den guten alten S5-Zeiten war es nämlich egal ob IN oder OUT. Das war damals nur eine rein grafische Geschichte.

Wenn ich mich nicht täusche, dann schmeisst einem TIA sogar mittlerweile eine Fehlermeldung bei sowas um die Ohren?

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich's recht im Kopf hab, dann ist das ein Thema aus der Ecke CallByValue und CallByReverence.

Am einfachsten ist es du nimmst eine neue statische Variable Signal_OK_HM und weist diese am Schluß Signal_OK zu.
Dann brauchst du nur die Instanzen neu erzeugen lassen und nicht alle Bausteineaufrufe aktualisieren.
Das hat dann aber nicht mehr die gleiche Funktionalität die er jetzt hat. Um die gleiche Funktionalität wiederzubekommen, muss er ein In/Out verwenden. Jetzt wird die Variable immer nur gesetzt, rücksetzen scheint von außerhalb zu geschehen.

Ich kenne solche Relikte aus S5-Programmen, da muss man höllisch aufpassen wenn solche Programme nach S7 übernommen werden.
 
Der Baustein ist auch noch aus S5-Zeiten und da es mit der Beschaltung mit Merkern immer funktioniert hat habe ich mir nie Gedanken über den Baustein gemacht. Ich ändere das jetzt in IN/OUT und aktualisiere die Aufrufe. Ist ja ne reine Mausklickarbeit. Genau das richtige für einen Sonntag :)

Vielen Dank für die Hilfestellung.
 
Was ich bei S5-Programmen auch schon gesehen habe ist, das Schreiben auf In, oder das Lesen von Outs. Das funktioniert bei der S7 auch nur noch, solange Merker/Eingänge/Ausgänge als Parameter verwendet werden. Der S5-S7-Konverter schluckt das ohne zu murren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das hat dann aber nicht mehr die gleiche Funktionalität die er jetzt hat. Um die gleiche Funktionalität wiederzubekommen, muss er ein In/Out verwenden. Jetzt wird die Variable immer nur gesetzt, rücksetzen scheint von außerhalb zu geschehen.

Diesen Baustein habe ich schon 100fach eingesetzt und als Ausgang immer einen Merker benutzt. Bei meinem aktuellen Projekt habe ich mal ein DBX benutzt und der Ausgang wird nicht mehr gesetzt sondern nur zugewiesen. Das heisst sobald das Signal #lightbarrier 0 wird , wird auch der Ausgang 0.

Ich bin von der angesprochenen Änderung ausgegangen ...
InOut ist natürlich der saubere Weg ... Und wenn man Sonntags gerne klickt ... :ROFLMAO:

Gruß
Dieter
 
An deiner Stelle würde ich einfach die S7 rausschmeißen
und eine S5 verbauen. Dann hast du am Sonntag Zeit um
auf den Leinenweber Markt zu gehen.

Ich fahr jetzt auch Arbeiten.
 
Zurück
Oben