# DB-Werte nacheinander einem FB zuweisen



## Herrminator (18 Februar 2009)

Hallo zusammen, 

ich habe in einem DB eine Rezeptur die aus Zeiten besteht:

1 Wert 2min
2 Wert 5min 
3 Wert 1min
4 Wert 9min

Ich habe einen FB Zeit mit den Parametern:

Start --> IN
TW-->IN
Fertig <-- OUT

Jetzt sollen die Werte nacheinander durch den FB Zeit abgearbeitet werden.

(Das ganze ist nur ein Ansatz)

Meine Frage:

Wie weise ich dem TW nacheinander die Werte aus dem DB zu?
Gibt es da ne elegante Möglichkeit?
Mir reichen auch Stichworte nach was ich Suchen soll.

Vielen Dank schonmal.

Gruß Tobias


----------



## Ralle (18 Februar 2009)

Die Zeit mittels *indirekter Adressierung* und einem Zählwert (1 bis Anzahl der Zeiten im DB) einem temp Word zuweisen und dieses an TW schreiben.
Nach Ablaufen der Zeit den Zählwert +1 und weiter gehts.


----------



## Antonio (18 Februar 2009)

Der code könnte dann ungefähr so aussehen


auf db 1
l mw1   // MW der entsprechend erhöt werden muss
l p#2.0 // Pointer mit zwei Byte
lar1      // Übernehme in AR1
l dbw[ar1,p#0.0] // Datenwort in abhängigkeit von MW1
t mw3 // MW in dem dein Zeitwert übertragen wird

MW3 wäre dann dein TW

MW1 solltest du dann über eine Schleifen entprechen erhöhen


----------



## Ralle (18 Februar 2009)

Antonio schrieb:


> Der code könnte dann ungefähr so aussehen
> 
> 
> auf db 1
> ...



Aber nur gaaaanz ungefähr, so liest du immer das selbe aus, egal was in MW1 steht. 

Herminator: Lies mal hier im FAQ und in der Step7-Hilfe zum Stichwort.


----------



## Antonio (18 Februar 2009)

auf db 1
l mw1   // MW der entsprechend erhöt werden muss
l p#2.0 // Pointer mit zwei Byte

*D // Stimmt kleinigkeit vergessen

lar1      // Übernehme in AR1
l dbw[ar1,p#0.0] // Datenwort in abhängigkeit von MW1
t mw3 // MW in dem dein Zeitwert übertragen wird


----------



## Herrminator (18 Februar 2009)

Danke ihr 2, ich werde es Morgen gleich probieren. Vielen Dank für den gedankenanstoss.

Danke nochmal.

Gruß


----------



## Herrminator (25 Februar 2009)

*Jetzt brauch ich doch nochmal Input*

Hallo zusammen

Meine Anlage sieht so aus:
Eine Verfahrachse (X-Achse) soll über eine Hubachse (Z-Achse) Materialkörbe aufnehmen, und je nach Rezeptur in Behälter getaucht werden. 
Es gibt 2 verschiedene Typen von Behältern (insgesagmt sind es 6 Behälter):

Typ A Reihenfolge / Position / Verweilzeit / Soll-Temperatur / Ultraschall(ja/nein)
Typ E Reihenfolge / Position / Verweilzeit
Die Rezeptur sieht vor, das der Bediener über Reihenfolge der Behälter frei Wählen kann.

Bis jetzt habe ich für jeden Behältertyp einen FB geschrieben der die jeweilige Funktion ausführt. 
Jetzt müsste ich ja eine Fc schreiben, die nach der Reihenfolge von 0 bis x den jeweiligen Behältern ihre Werte zuordnet.(Und später auch steuert)
Macht es jetzt Sinn die Parameter erst mal in die Richtige Reihenfolge zu bringen? Oder ist es besser sie so zu belassen, und gleich mit einem Pointer zu arbeiten?
Wie reagiere ich am geschicktesten darauf, dass die Rezeturteile nicht gleichlang sind?
Ich hoffe, ich konnte mein Vorhaben halbwegs verständlich rüberbringen. 

Gruß Tobias


----------



## Larry Laffer (25 Februar 2009)

Hallo,
ich würde hier als Basis eine *Struktur* mit gleichem Aufbau wählen. Nicht benötigte Feld-Einträge würde ich dann dabei einfach nicht benutzen.
Die Quelle dieser Struktur wird ja sehr wahrscheinlich ein DB sein.
Hier könntest du deine Daten (Rezept) dann ggf. sogar als ARRAY_of_STRUCT für die verschiedenen Rezepte anlegen ...

Gruß
LL


----------



## Herrminator (26 Februar 2009)

JA genau die Quelle ist ein DB.

Und wie verteile ich die Werte dann an die einzelnen Funktionen ??
Oder verstehe ich da jetzt was falsch?

Gruß Tobias


----------



## Larry Laffer (26 Februar 2009)

Hallo,
ich würde die Werte indiziert (entsprechend der Rezept-Anwahl) aus der Struktur heraus laden. Du baust dir mit Hilfe des Indexes und des dir bekannten Struktur-Anfangs einen Pointer (ist ja weiter oben im Thread schon mal angerissen) und über den lädst du dir dann die Einzel-Variablen (ggf. in den TEMP-Bereich deines Bausteins) und übergibst die dann den jeweiligen Unter-Bausteinen.
Ich würde mir dafür sogar eine eigenständige Funktion erstellen, der ich den gewünschten Index übergebe und die mir dann per OUT-Parameter die angewählten Werte zurück gibt ...

Gruß
LL


----------



## Herrminator (26 Februar 2009)

Ah jetzt wirds langsam Tag 

Wenn ich das richtig verstanden habe, sortiere ich meine einzelnen Rezeptur-Segmente. Mache sie alle gleich groß, und lese sie dann mit einem Pointer aus und schreibe sie an die gewünschte Zielfunktion.

Sozusagen Lese Schritt 1 ---> Wert 1, Wert 2 ,.....
Und Welcher Block an Welches Ziel Kopiert wird, mache ich über einen Ident Parameter  Lese Schritt 1--> Ident A kopiere Werte ---> Funktion A--> Wert 1, Wert 2


----------



## Larry Laffer (26 Februar 2009)

Holla,
ich denke, du bist jetzt auf der richtigen Spur.
Wichtig ist jetzt nur (auch) noch, welche (Neben-)Info's du noch so in deiner Struktur versteckst. Hier könnte nun z.B. auch drinstehen, welchen Typ du benutzen willst/sollst usw.

Kommst du nun klar ?

Gruß
LL


----------

