Step 7 Wert aus DB in MW schreiben: Hilfe benötigt

zingarra

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

mit dem Move-Befehl kann ich einen Wert aus einem Datenbaustein schreiben, soweit ist das kein Problem. Nun zum Problem: ich versuche, einen zweiten Wert aus einem anderen Datenbaustein in das gleiche Merkerwort zu schreiben, im gleichen FC. Der Wert verändert sich schon, nur sollte ich keine 0 als Resultat bekommen. Sprich: irgendwo liegt ein Fehler beim Transferieren vor, den ich so nicht finde. Ich kann mir das nicht ergründen, ein Merker kann ja auch in einem beliebigen Netzwerk im gleichen FC gesetzt werden, warum funktioniert das nicht mit einem Merkerwort? Es handelt sich sowohl im DB wie auch beim MW um das Format Integer, also sollten eigentlich keine Probleme von dieser Seite auftreten.
Verwendete Hardware: CPU 315SB von der Firma Vipa (sehr interessantes Produkt :D), OP 277, verbunden via Profibus.

Hier die beiden Move-Befehle (programmiert mit FUP, angezeigt als AWL)

Code:
NW1
      A     "EL"
      A     "NG"
      JNB   _00a
      L     "REF_DB".RB10POS
      T     "RPB10"
_00a: NOP   0

NW2
      A     "HL"
      A     "NG"
      JNB   _019
      L     "REF_DB2".PB10
      T     "RPB10"
_019: NOP   0


Den Wert benötige ich für einen Counter (SFB2, CTUD), mit welchem ich die Position auf einem OP 277 von verschiedenen Elementen ändern kann.

Code:
NW3
      A     "CUV"
      A(    
      A     "RS"
      R     "B10S"
      A(    
      A     "B10S"
      L     S5T#500MS
      SE    T     11
      NOP   0
      NOP   0
      NOP   0
      A     T     11
      )     
      S     "B10S"
      A     "B10S"
      )     
      =     L      0.0
      BLD   103
      A     "CDV"
      A     "B10S"
      =     L      0.1
      BLD   103
      A     "NG"
      =     L      0.3
      BLD   103
      CALL  "CTUD" , DB20
       CU  :=L0.0
       CD  :=L0.1
       R   :=
       LOAD:=L0.3
       PV  :="RPB10"
       QU  :=
       QD  :=
       CV  :="POS_BLOCK".B10POS
      NOP   0

Es geht um eine Umsetzung von Rushhour auf einem Panel, wobei mir abgesehen von dem Problem nur noch ein DB mit Kollisionsdaten fehlt.

Mfg zingarra
 
Zuletzt bearbeitet:
ich versuche, einen zweiten Wert aus einem anderen Datenbaustein in das gleiche Merkerwort zu schreiben
[...]

Code:
NW1
      A     "EL"
      A     "NG"
      JNB   _00a
      L     "REF_DB".RB10POS
      T     "RPB10"
_00a: NOP   0

NW2
      A     "HL"
      A     "NG"
      JNB   _019
      L     "REF_DB2".PB11
      T     [COLOR="#FF0000"]"RPB11"[/COLOR]
_019: NOP   0
Beim zweiten MOVE schreibst Du in eine andere Variable. Sollte das vielleicht ebenfalls "RPB10" heißen?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

danke für deine Antwort!

Was du bemerkt hast, spielt im Grunde genommen keine Rolle, es sind mehrere Move-Befehle im FC für verschiedene Variabeln verwendet, da mir keine Umschaltung des L-Einganges des Move-Baustein's bekannt ist, respektive nicht zwei Variabeln an einen analogen Eingang gelegt werden können. Der Grund für mehrere Move-Befehle im selben FC bezieht sich auf mehrere Objekte, die bewegt werden und je nach Fenster eine andere Grundposition haben.

Ich werde den Fehler korrigieren, danke das du mich darauf aufmerksam gemacht hast.

Mfg zingarra
 
da mir keine Umschaltung des L-Einganges des Move-Baustein's bekannt ist, respektive nicht zwei Variabeln an einen analogen Eingang gelegt werden können.
Was für einen L-Eingang meinst Du? Mit was für einer Software programmierst Du?

In Siemens Step7 aktiviert man MOVE mit Logik am Eingang EN. Vielleicht gibt es in Deinem Programmiersystem eine SEL-Anweisung (damit kann man zwischen zwei Variablen selektieren)?

Man kann mehrere MOVE auf die selbe Zielvariable haben, man muß dann aber sinnvoll steuern welcher MOVE ausgeführt (EN-abled) wird. Falls mehrere MOVE auf die selbe Variable ausgeführt werden, dann gewinnt der letzte MOVE - d.h. im Ziel steht der Wert des zuletzt ausgeführten MOVE.

Bei Deinem NW1 + NW2 ist es z.B. so, daß wenn "EL", "NG" und "HL" alle 1 sind, dann werden beide MOVE ausgeführt. Wenn "NG" 0 ist, dann wird kein MOVE ausgeführt.

Harald
 
Hallo,

was den L-Eingang betrifft, ich hab mich wohl verschrieben oder nicht gut nachgeschaut..:oops: Ich nutze schon Step7, jedoch bin ich noch nie wirklich mit Software von Siemens zufrieden gewesen, alles ist so stark ineinander verschachtelt, dass es manchmal schwer wird, gewisse Funktionen zu finden. Ähnlich ist es auch bei Android resp der Touchwiz Oberfläche, das ist aber ein anderes Thema..:rolleyes:

Die Variabeln "EL" und "HL" werden niemals zur selben Zeit gesetzt, darauf habe ich bei der Programmierung geachtet (natürlich auch wieder zurückgesetzt). Der erste Move-Befehel wird auch sauber ausgeführt (NW1) der zweite jedoch (NW2) nicht. Der Ausgabewert ist 0, unabhängig davon, was vorher für ein Wert im MW war. In der Datenbank sind mehrere Werte hinterlegt, ich kann mir das Problem weiterhin nicht ergründen. Es würde mir schon viel helfen, wenn ich den Move-Befehl im Programm beobachten könnte, jedoch ist Siemens anscheinend nicht in der Lage, alle Variabeln und Bausteine mit allen Werten gleichzeitig anzuzeigen, dass ist mir nicht das erste Mal aufgefallen.

Mfg zingarra
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein Bild sagt mehr als tausend Worte. Mach doch mal bitte einen Screenshot beim beobachten des Netzwerks, wo Du meinst, daß Dein MOVE nicht richtig ausgeführt wird, und einen Screenshot, wo die Zielvariable dann verwendet wird. Mach das Bild so, daß man die Variablenadressen sieht und sieht, wie die CPU den Programmteil ausführt. Wenn Step7 den Status von FUP-Anweisungen anzeigt, dann klicke mal auf einen Ausgang der Anweisung (also klicke mal auf den Strich am OUT- oder ENO-Ausgang des MOVE). Manche CPU liefern nicht so viele Statuswerte, so daß man das beobachten auf die Umgebung der markierten Stelle fokussieren muß.

Wird Dein MW vielleicht nach dem MOVE nochmal überschrieben? Hast Du vielleicht Adress-Überschneidungen mit anderen Variablen (wie z.B. MW1, MW2, MB3 und MD0, welche alle teilweise den selben Speicherplatz benutzen)?

Harald
 
Nach etlichen Klicks ist es mir endlich gelungen, den Wert aus dem DB im FC anzeigen zu lassen. Das Resultat ist nicht gerade schön..
NW2.PNG
Zum Vergleich das 1 Netzwerk:
NW1.PNG

Hier noch den DB4 und das Netzwerk aus einem zweiten FC, in welchem das Merkerwort verarbeitet wird:
DB4.PNG FC1.PNG

Das Merkerwort wird nur zwei Mal beschrieben, je mit dem Move-Befehl. Adress-Überschneidungen gibt es keine, sämtliche Merkerwörter haben immer zwei Merkerbyte zur Verfügung (MW100= M100.0-M101.7, nächstes MW ist 102), ich verwende abgesehen von normalen Merkern keine anderen Merkertypen. Nun habe ich durch die ewige Klickerei, bis mir im Netzwerk alle Werte angezeigt wurden, herausgefunden, das der Wert aus dem DB4 aus irgend einem Grund nicht übernommen wird. Der DB ist geladen und die Adresse stimmt auch (Differenzen zum ersten Post des Thread's sind möglich, da ich einige kosmetische Änderungen vorgenommen habe, was den Namen der Variable betrifft). Ich weiss echt nicht, wo sich der Fehler versteckt, ich habe die CPU bestimmt 10 mal neu gestartet und den Move-Befehl aus Adressgründen drei mal neu geschrieben, jedoch hat nichts eine Besserung hervorgerufen.

Mfg zingarra
 
Hallo erstmal,

die werte stehen bei dir in den Anfangswerten. Hast du den DB initialisiert? Also Anfangswerte in aktual werte übertragen oder gibt es im Programm einen Teil der auf den DB 4 noch schreibt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau Dir mal die Werte Deiner Variablen DB4.DBW18, DB2.DBW18 und MW18 mit einer Variablentabelle an
Zielsystem > Variable beobachten/steuern

Sinnvolle Werte in die DB-Variablen bringen:
* im SPS-Programm Werte in die Variablen schreiben
* im offline Projekt DB öffnen
-- Ansicht > Datensicht
-- in Spalte "Aktualwert" Werte eintragen
-- Bearbeiten > Datenbaustein initialisieren --> überträgt alle Anfangswerte in die Aktualwerte

(die DB-Anfangswerte haben mit den Werten in der SPS nichts zu tun, die werden nur im offline-Projekt verwendet)

Btw. Deine Bilder sehen mir irgendwie ungewöhnlich aus. Welches Step7 verwendest Du?

Harald
 
Hallo,

ja, den DB habe ich initialisiert. Der DB 4 wird nirgends im Programm beschrieben, also bleiben die Werte wie sie sind.

Ich verwende V5.5, es ist aber gut möglich, dass einer der Lernenden die Farben geändert hat. Ein sehr nützliches Feature, dass muss ich Siemens gestehen.

Mfg zingarra
 
Zuletzt bearbeitet:
Also kannst mir gerne das Programm mal zukommen lassen dann schaue ich mal.
Finde es merkwürdig, Werte sind in Aktualwerten und DB wird nicht beschrieben? Das kann eigentlich nicht sein! Kann man den die werte im DB Online sehen wenn man eine Variablentabelle macht?
Werden die Werte von einem Panel beschrieben? Das wäre auch noch eine Möglichkeit das deine werte in dem DB 0 sind.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe einen anderen Lernenden gefragt, welcher sich etwas besser mit Step7 auskennt. In der Gewerbeschule haben wir trotz der Ausbildung zum Automatiker nie mit DB's gearbeitet (herzliche Grüsse an unseren Lehrer :ROFLMAO:). Es hat sich herausgestellt, dass der DB nicht initialisiert war. Wie es dazu kam: ich habe mir aufgrund der Notwendigkeit eines DB's bei IEC Bausteinen angewöhnt, diese gleich nach dem erstellen auf die CPU zu laden. Ich habe den DB auch initialisiert, jedoch noch keine Werte an den Variabeln geschrieben. Tut mir leid..

Mfg zingarra
 
Zurück
Oben