# WinCC flex Structur --> Array



## supergrobi (2 April 2009)

Hallo Forum,  ich stehe vor dem Problem, das ich ca. 400 Werte aus einem DB in flexible anzeigen und ändern muss. Jetzt kann ich ja, wenn die Werte hintereinander stehen würden, ein Array definieren. Die Werte stehen jedoch nicht hintereinander, sondern in einer Struct mit 200 Bytes Abstand.     Gibt es eine Möglichkeit, den DB komplett in ein Array zu laden und anschließend die Werte, die ich benötige mit einen Script herauszupicken, oder geht das nur als einzelne Tags ?   Ein Array in Flex geht leider nur bis zu einer größe von 2000. Also als DINT definiert könnte ich 8000 Bytes in ein Array einlesen. Der DB hat jedoch eine Größe von 16000 Bytes.   Hat von euch jemand schon Erfahrungen mit solchen Datenmengen gemacht ? Ist Flexible dann Systemtechnisch am Ende und Ausgelastet ?  lg Thomas


----------



## Ralle (2 April 2009)

Ich hab das mal mit Multiplexvariablen in ProTool gemacht, allerdings nur für 50 Werte, nicht für 400. Dabei wird für jeden einzelen Wert eine Variable angelegt, auf welche man dann per Multiplexvariable zugreifen kann. Gibts eigentlich in WinCCFlex auch, wenn das Gerät das unterstützt. Vorteil ist eigentlich, daß man am Panel über ein Auswahlfeld auswählen kann, auf welche der 400 Variablen man zugreifen möchte.


----------



## supergrobi (3 April 2009)

Hallo Ralle,  danke, jedoch bringt mich das nicht im wirklich weiter, da ich alle 400 Variablen anzeigen lassen muss. Das wären also 400 Tags. Wenn ich das irgendwie aus einem Array rausfischen könnte, wären es nur 1 Tag.


----------



## Kai (3 April 2009)

supergrobi schrieb:


> Ein Array in Flex geht leider nur bis zu einer größe von 2000. Also als DINT definiert könnte ich 8000 Bytes in ein Array einlesen. Der DB hat jedoch eine Größe von 16000 Bytes.


 
Du könntest in WinCC flexible mehrere Arrays anlegen:


```
ARRAY_1  DB100.DBB0      Länge 2000 Bytes
 
ARRAY_2  DB100.DBB2000   Länge 2000 Bytes
 
:
 
ARRAY_8  DB100.DBB14000  Länge 2000 Bytes
```
 


supergrobi schrieb:


> Hat von euch jemand schon Erfahrungen mit solchen Datenmengen gemacht ? Ist Flexible dann Systemtechnisch am Ende und Ausgelastet ? lg Thomas


 
Mit solchen großen Arrays habe ich auch noch nicht gearbeitet.

Was hast Du eigentlich für ein Bediengerät? Hast Du ein Panel oder arbeitest Du mit WinCC flexible Runtime?

Gruß Kai


----------



## Ralle (3 April 2009)

supergrobi schrieb:


> Hallo Ralle,  danke, jedoch bringt mich das nicht im wirklich weiter, da ich alle 400 Variablen anzeigen lassen muss. Das wären also 400 Tags. Wenn ich das irgendwie aus einem Array rausfischen könnte, wären es nur 1 Tag.



Willst du wirklich alle 400 Werte gleichzeitig anzeigen?


----------



## supergrobi (3 April 2009)

@ Kai
ja, so etwas denke ich mir auch.. schön, wäre es, wenn es eine bessere Möglichkeit geben würde. So wird das Script halt etwas aufwändiger. 
Die Werte sind normale Integer Variablen. Na ich versuch es einfach mal. Achso, ich arbeite zum Glück mit einer Runtime  

@ Ralle
ja, ich möchte wirklich 400 Werte gleichzeitig anzeigen lassen. Das läuft auch schon ganz gut. Der Hintergrund an der Sache ist, bis jetzt waren diese Werte in Verschiedenen DBs in einer Reihe fortlaufend untergebracht. Also alle 400 Werte nacheinander. Jetzt gibt es einen "SammelDB" mit entsprechender Structur in dem die Werte leider nicht mehr Nacheinander stehen. Dieser ist aufgrund der Erweiterbarkeit dazu gekommen.


----------



## Kai (3 April 2009)

supergrobi schrieb:


> Gibt es eine Möglichkeit, den DB komplett in ein Array zu laden und anschließend die Werte, die ich benötige mit einen Script herauszupicken, oder geht das nur als einzelne Tags ?


 
In WinCC flexible kannst Du auf die einzelnen Array-Elemente und damit auf die einzelnen Variablen direkt zugreifen, Du brauchst dafür kein VBScirpt.

Siehe dazu auch das folgende Programmbeispiel:

http://www.sps-forum.de/showthread.php?t=22745

Gruß Kai


----------



## PhilippL (3 April 2009)

Hi,

und wie wäre es die Werte auf der SPS-Seite gemeinsam hintereinander in einen (neuen) DB zu kopieren, so daß deinen 200 Byte Reserve oder was auch immer nicht dazwischen stehen??? und du arbeitest auf Panelseite einfach mit dem neuen DB...

Gruß

PhilippL


----------



## supergrobi (3 April 2009)

@ Kai

oops ja, hast Recht, ich kann die ja direkt auswählen.. Manchmal sieht man den Wald vor lauter Bäumen nicht. Egal, ich hab es jetzt erst mal mit einem 2000er Array versucht und daraus 20 Variablen benutzt. Dabei ist der Bildaufbau schon recht langsam geworden - nur beim Simulator. Also vergessen wir das besser. 
Ich werde also die Werte nach dem alten Schema in einem Extra DB als Extrawurst behandeln müssen 

@ PhillipL

das geht leider nicht, da die Werte auch von der VISU verändert werden können (sollen). Dies wäre Programmtechnisch noch aufwendiger, da man prüfen muss, wo sich der Wert jetzt geändert hat, von der SPS oder Benutzereingabe.


----------



## xhasx (3 April 2009)

Bildbaustein!
Da kannst du Strukturen zuweisen 
Geht ganz gut mach ich auch...


----------



## santero (8 März 2010)

mahlzeit,

hab da auch ein ähnliches problem.und zwar habe ich in step 7 in einem DB ein array of bool [0..19] erzeugt.

wie kann ich jetzt mit buttons aus der winn cc felx oberfläche z.b mit setze bit auf die einzellnen array elemente zugreifen.

hab schon versucht eine array variable in win cc flex zu generieren ging aber nicht


----------



## supergrobi (8 März 2010)

willkommen im Club !  jede einzelne Taste entweder mit "setzen während gedrückt" oder  setzen/rücksetzen.   gruß Thomas


----------



## santero (10 März 2010)

ja danke aber das mit dem setzen kenn ich schon.

es geht darum welche syntax ich da verwenden muss.

z.b in simatic manager erstelle ich in einem DB ein array [0..19] of int.

wie kann ich jetzt mit einer schaltfläche in win cc flex z.b array [5] auf 1 setzen???

habs mit [zahl] probiert aber will er nicth annehmen


----------



## Ralle (10 März 2010)

Was denn nun? 

0..19 of bool oder 0..19 of int?

Aber egal, die gehst in WinCCFlex auf den Button, dann unter Eigenschaften auf Ereignisse, Drücken, dort als Funktion "SetzeWert" und suchst dir aus der SPS die gewünschte Variable aus, dann noch den zu setzenden Wert (0 oder 1), fertig.


----------

