# Start Variablen Zeiger in DB verwenden?



## BorisDieKlinge80 (19 Mai 2008)

Hallo Leute,

ich selber hab keine Ahnung von SPS S7 swl und co.! Nun ich weis man kann DB's anlegen was quasie eine strukturierte Speicherbeireich darstellt.

Nun frag ich mich ob ich in DB nicht nur variablen für werte anlegen kann, sondern auch zeiger welceh auf Varaiblen in anderen DB zeigen anlegen kann.

Bspw.

DB Zeiger{  WORD zeiger_auf_X }

DB Variable { WORD X};

und will ich über den DB Zeiger den wert übe rden zeiger auf X ändern..

hoffe ihr weis was ich meine..


----------



## Larry Laffer (19 Mai 2008)

Ich habe leider das Problem NICHT verstanden ...
Beschreib noch einmal, was du vorhast ...

Unabhängig von dem, was du machen möchtest, wäre ANY-Pointer dein Ziel. Das setzt aber einiges an Programmierwissen in Step7 vorraus ...

Gruß
LL


----------



## BorisDieKlinge80 (19 Mai 2008)

Ok ES exiistiert ein SPS Programm, welche ihre werte in verschieden DBs speichert. Nun wollen wir ein Globalen DB anlagen, in dem die Daten andere DBs drinstehen.

Um nich so viel am SPS programm zu verändern, soll durch schreiben in die ursprünglichen DB auch gleich der Wert automatisch in das Global DB geschrieben werden.
Oder durch schreiben in ein ursprungs DB soll der wert automatisch in den globalen DB geschrieben werden, wobei in den ursprungs DB nur die referenz also speicherort im Globalen DB steht. (Zeiger)


----------



## godi (19 Mai 2008)

Ich verstehe das jetzt nicht ganz warum du von allen DB's die Daten in einem DB ablegen möchtest?

Aber du kannst mit der SFC20 die Daten von einem DB in den nächsten kopieren.

So wie du das haben willst das ein Zeiger in einem DB hinterlegt wird das geht nicht.

godi


----------



## BorisDieKlinge80 (19 Mai 2008)

ne es geht darum, das später daten von mehren DB in ein DB referenziert werden, damit aus diesem mit WinCC per Rohdaten TAg zugegriffen werden kann. Und das um ganz mit wenig SPS code änderung..


----------



## godi (19 Mai 2008)

Naja um Programmänderungen wirst du nicht drumherumkommen.

Aber der Programmierer wird ja die DB's sinnvoll eingeteilt haben und jeden DB einen bestimmten Bereich zugeteilt haben. Dann währe es von der Übersicht auch nicht schlecht wenn du die Strukturierung behältst und einfach mehr Variablen in WinCC verwendest.

godi


----------



## BorisDieKlinge80 (19 Mai 2008)

Es sollen kleinere WinCC lizensien verwendet werden, d.h. tausende von exteren tags welche aufeine varaibel in verschieden DB der SPS zeigen fallen weg. es soll übe rwenige rohdatentags mehre DB gemeinsam übertragen werden... und rohdatentags zeigen auf einen Block im speicher und nich auf mehrer... deswegen der globale DB


----------



## Larry Laffer (19 Mai 2008)

... ich denke, Godi hat es schon ganz passend ausgedrückt ...

Ein DB mit Zeigern in der Art, wie du es vorhast, geht nicht. Wenn du so etwas vorhast, wie geschildert, dann mußt du dir die benötigten Variablen per Lade und Transferiere in den Ziel-DB übertragen. Ob das hinterher WinCC-Tags einsparen kann ...?


----------



## BorisDieKlinge80 (19 Mai 2008)

eben, deswegen will ich mich informieren, ob diese Projekt der Tagseinsparung in dem Umpfang überhaupt möglich ist, oder ob so die komplettte SPS struktur verändert werden muss, und ob die kommunikation zwischen WinCC und SPS deutlich schlechter wird.


----------



## godi (19 Mai 2008)

Welche CPU hast du den da in diesem Projekt?

Ich bin mir da nicht ganz sicher wann die Variablen von und zur HMI übertragen werden. Sprich mitten im Zyklus oder wenn der OB1 abgearbeitet ist. Also das komplette Programm bearbeitet wurde.
Ich glaube bei einer 300er erfolgt immer die Übertragung am ende des OB1.
Wenn das so ist dann kannst du dir 2 FC's machen. Einen rufst du am Anfang des OB1 auf. In diesem FC schreibst du alle Daten von deinem großen DB in die ganzen kleinen DB's und Merker usw... (Bei CPU start also wenn der OB1 das erste mal aufgerufen wird dann würde ich diesen FC nicht ausführen weil sonst falsche Daten geschrieben werden könnten)
Den zweiten FC rufst du am Ende des OB1 auf. Darin kannst du alle Daten von deine DB's zusammenholen und in deinen großen DB schreiben.

godi


----------



## BorisDieKlinge80 (19 Mai 2008)

die CPU? hmm.. glaub irgenwas mit 418-2DP oder ??? hmm was wäre das für ein aufwand? müsste jeder FC spezielle für jeden FB geschrieben sein??


----------



## Perfektionist (19 Mai 2008)

*418 erinnert mich an*

http://www.sps-forum.de/showthread.php?p=116838&highlight=418#post116838


----------



## BorisDieKlinge80 (19 Mai 2008)

sorry, hab noch nie eine einzige zeile SPS code geschrieben


----------



## godi (19 Mai 2008)

BorisDieKlinge80 schrieb:


> die CPU? hmm.. glaub irgenwas mit 418-2DP oder ??? hmm was wäre das für ein aufwand? müsste jeder FC spezielle für jeden FB geschrieben sein??



Also wichtig währe einmal zu Wissen wann die HMI (WinCC oder WinCC flexible?) auf die Daten in einem DB zugreift. Das weiß ich leider auch nicht aber vielleicht kann uns ein Forummitglied sagen ob die Werte im DB mitten unterm OB1 von der HMI geändert werden können oder nur wenn der OB 1 fertig ist.


Programmieraufwand:
Kommt ganz drauf an wieviele Variablen es sind und wie sie eingeteilt sind.
Sprich wenn du nur 10 DB's (mit zb 10000 Variablen) in einem DB zusammenfassen willst dann ist es nicht viel arbeit. Wenn es aber 500Variablen sind die in DB's und Merker verteilt sind dann ist es viel arbeit da du jede Variable einzeln ansprechen musst.


----------



## BorisDieKlinge80 (20 Mai 2008)

wir benutzen WinCC, sorry FC, OB etc. keine ahnung.. SPS ist neuland.. enn nur DB das ist mit ner structur in ANSI C zu vergleichen denk ich..

Es sind seerhhr viele FB sicher so um die 2000-4000... ich weis nur das die SPS structur Objektorienterit gestaltet wurde, deswegen viele DBs durch Objekte.. naja wird wohl kein kinderspiel..

Das problem ist würde man bspw. am ende des SPS zyklus verscheiden DBs in eine Großen DB kopieren, und am anfagn der SPS zyklus die Date nder großen DB ins die DB verzeilen würde nich gehen, meine daten würden nie ankommen...


----------



## godi (20 Mai 2008)

Wenn du so ein großes Projekt hast dann leiste dir die größere Lizenz für WinCC.
Das rentiert sich auf jeden Fall weil du musst ja deine Arbeitszeit auch rechnen die du damit verbringst die Daten zu Sammeln.

Aber was mich noch interessiert, besteht dein Programm nur aus FB's?
Willst du dann auf die Instanz DB's mit deiner HMI zugreifen?
Wenn das so ist dann währe es doch besser die Struktur deiner FB's zu überdenken und bei deinen FB's IN_OUT Variablen Anlegen und da schreibst du dann deinen großen DB an.

godi


----------

