# S7-300  Arbeiten mit Datenbausteinen



## veritas (24 August 2009)

Moin moin,

ich möchte einen Analogwert mit der S7-300 einlesen, und in einem Datenbaustein
schreiben. 
Ich möchte alle 10 Sekunden den Analogwert in DB10 mit dem alten Wert überschreiben.

Danach soll er den Neuen mit dem gespeicherten Wert vergleichen.

Mein Problem ist, ich habe noch nie mit DBś gearbeitet, vllt. könnt ihr mir da weiterhelfen, also fürn "Dummen" erklären step by step....

Vielen Dank für eure Hilfe im voraus.

VERITAS


----------



## Ralle (24 August 2009)

Was genau ist denn dein Problem? Ein Wert in einem Datenbaustein kann genauso behandelt werden, wie der eines Merkers, Merkerwortes etc. 

Prinzip:

Du programmierst einen Timer, der alle 10 Sekunden einen Impuls liefert. Damit ersparst du schon mal eine Flanke, aber zur Sicherheit kannst du diesen Impuls auch noch mal zu einer positiven Flanke machen.

Ein Analogwwert ist i.d.R. ein 16-bit-Wert, z.bsp im DB als Int definiert.

DB10.DW0 --> Neuwert Int
Db10.DW2 --> Altwert Int

Mit dem Flankenmerker springst du in deinen Programmteil.

UN Mx (Flanknmerker)
SPB NIX

Zuerst kopierst du den nun "alten" Neuwert in den Altwert.

L DB10.DBW0
T DB10.DBW2

Dann holst du den Analogwert und normierst ihn

L PEW xyz --> Normierung mit FC105 --> Ausgabe in Temp-Int oder direkt in DB10.DBW0

Dann kommt dein Vergleicher:

L DB10.DBW0
L DB10.DBW2
>=I
= M10.0

Fertig.

NIX: NOP 0

Der M10.0 wird die nächsten 10 Sekunden True sein, so der Vergleicher erfüllt war, auch wenn dort "=" steht, da der Code ja nur alle 10 Sekunden für genau einen Zyklus (daher Impuls oder Flanke) bearbeitet wird.


----------



## AUDSUPERUSER (25 August 2009)

hi ralle

sieht so weit alles gut aus.
nur wenn veritas einen analogwert einliesst, sollte er auch skalieren
aus dem baustein kommt ein realwert
dein beispiel muss dann entsprechen auf realwerte geändert werden


----------



## peter(R) (25 August 2009)

@ Ralle

EINSPRUCH !!

 = M10.0 liegt im Programmteil der übersprungen wird.
Das macht man nicht!
  Muss der Vergleicher überhaupt übersprungen werden ?? Ich denke mal nicht da sich die Werte Alt und Neu zwichen den Flanken ja nicht ändern.
Selbst die Normierung muss nicht übersprungen werden. Es reicht den Transfer das Altwertes zum Neuwert zu überspringen.
Dann sieht man auch immer die aktuellen Daten im Neuwert.


peter(R)


----------



## Ralle (25 August 2009)

peter(R) schrieb:


> @ Ralle
> 
> EINSPRUCH !!
> 
> ...



Wo steht, daß man das nicht macht?
Er weist es einmalig zum Zeitpunkt der Flanke zu, fertig. Er findet den Aufruf in der Querverweisliste, also alles ok.
Ansonsten, kann er den Vergleich auch immer ausführen, das stimmt, aber ich komm ebend noch aus einer Zeit, als man mit jeder Anweisung sparsam umging. 

@aud

Der veritas soll ja auch noch alleine was machen, außerdem, weiß ich, daß er nur ne Anregung braucht, den Rest macht er selbst.


----------



## peter(R) (25 August 2009)

@ Ralle

Natürlich geht es in diesem speziellen Fall. Wenn ich aber überlege wieviele Leute schon fast verrückt geworden sind, weil ihr Ausgang nicht 0 wurde obwohl die Setzbedingungen nicht vorhanden waren (ist mir anfangs auch passiert) gilt für mich:  sowas ist unanständig.
Ausserdem braucht es in beiden Fällen gleich viel Anweisungen.
Ich komme aus einer zeit, da gab es noch gar keine PCs und SPSen.

peter(R)


----------



## veritas (25 August 2009)

Dumme Frage....

wenn ich den Analogwert des PEW72 in DB10 in Wort 0 schreiben will:

AUF DB10
L PEW72
T DB10.W0 

????????????????


----------



## MSB (25 August 2009)

```
L PEW72
T DB10.DBW0

ODER

AUF DB10
L PEW72
T DBW0
```

Mfg
Manuel


----------



## veritas (25 August 2009)

Danke
ob ichs noch lernen werde.....


----------



## veritas (26 August 2009)

wenn ich im Datenbaustein mir den Aktuellen Wert als WORD in Dezimalzahlen anschauen will, was muss ich da eingeben, immo wird der in Hexa dargestellt,
also  z.B. *  W#16#FFFF.
*Als Dezimalzahl dann* B#(0,0) bis B#(255,255) *so steht es im Handbuch.

Was soolen die Zahlen in Klammern bedeuten? 
B#(0,255)  wäre dann eine Darstellung von 0-255 ?


----------



## MW (27 August 2009)

veritas schrieb:


> wenn ich im Datenbaustein mir den Aktuellen Wert als WORD in Dezimalzahlen anschauen will, was muss ich da eingeben, immo wird der in Hexa dargestellt,
> also  z.B. *  W#16#FFFF.
> *



eine Möglichkeit zum umstellen gibt es da meines Wissens nach nicht, wenn du einen WORD Wert in Dezimal sehen willst, kannst du ihn z.b. in einer Variablentabelle (VAT) beobachten, dort kann man das Anzeigeformat der Variablen beliebig umschalten.


----------

