# DB Inhalt in Multi Panel auflisten (WinCCflex2008 SP1)



## leolilu (19 Januar 2011)

Hallöchen 
ich hab eine kleine Frage und hoffe ihr könnt mir helfen.

Ich möchte eine Liste das Inhalts eines Datenbausteins (Global) in einem Bild am MP277 anzeigen lassen.
Es Handelt sich dabei um einen DB der Namen in Stringform (25 byte lang) speichert. Ich möchte gern, das eine Liste dieser Namen am MP ausgegeben wird, quasi als eine Art Nachschlagewerk.
Zur Zeit habe ich das mit EA-Feldern gelöst, in der Form:
EA-Feld 1 gibt Var_1 aus und Var_1 = DB72.DBB0 (String)
EA-Feld 2 gibt Var_2 aus und Var_2 = DB72.DBB28
etc.
Funktioniert ja recht gut, allerdings wird die Namenliste regelmässig erweitert und mitlerweile bin ich bei 1200 Namen, was mal eben so 40 Bilder voller EA-Felder ergibt... damit ist das keine so elegante Lösung mehr -.-*
Daher wüste ich gern wie ich es bewerkstellige, das der komplette DB Inhalt numeriert in einer Liste, seitenweise oder im Idealfall auch scrollbar, dargestellt wird.

Kann man DBs vieleicht über VBS auslesen ?
Danke schonmal für die Hilfe 

LG Leo


----------



## rostiger Nagel (19 Januar 2011)

Wie wäre es den mit einer Rezeptur, da geht das erstellen einer langen
Variablen Tabelle sehr schnell. Wenn du etwas über VB oder so, an flex
Vorbei machen möchtest solltest du dir zb über die Fremdsprachlichkeit
Gedanken machen.


----------



## leolilu (19 Januar 2011)

hm eine Rezeptur... hm... muss ich mir mal anschauen...
was meinst du dnen mit 'an Flex vorbei'
ich dachte ehr an die scripting möglichkeiten die WinCC Flex selbst bietet


----------



## rostiger Nagel (19 Januar 2011)

das schon, wenn du da irgendetwas automatisierst, z.b. Texte in der 
Oberfläche so werden die nicht in die Projekttexte aufgenommen.

Wenn du über das Script ein indirekte Adressierung schaffst ohne die 
Variabeln in der projektierung anzulegen, werden diese ja nicht auto-
matisch nachgeführt, wenn sich im Step 7 Projekt mal etwas verschiebt.
Unter umständen zeigst du dann auf eine falsche Variabel.

Machen kann mann so einiges, aber ob das immer sinn macht.

Wenn die möglichkeit besteht, das du für deine Variabeln ein Array nutzen
könntest und da nur "DINT", bräuchtest du nur eine Variabel für deinen
DB anlegen das macht das System perfomater.
In deiner Rezeptur musst du dann nur noch die Variabelnbezeichnung angeben.


----------



## thomass5 (19 Januar 2011)

... oder las das Panel "dumm". Mach Dir auf dem Panel nur ne Variable welche Du hoch/runterzählst, und in der Steuerung nen Baustein, welcher damit einen DB-Offset macht und den gewünschten Bereich in einen Visu-DB schaufelt. Den Fehler das der DB am Ende ist fängst Du ab und sagst über ein Bit der Visu letzter Datensatz erreicht.

Thomas


----------



## Jochen Kühner (19 Januar 2011)

leolilu schrieb:


> Hallöchen
> ich hab eine kleine Frage und hoffe ihr könnt mir helfen.
> 
> Ich möchte eine Liste das Inhalts eines Datenbausteins (Global) in einem Bild am MP277 anzeigen lassen.
> ...



Wue wärs mit nur einem Bild mit 10 feldern, zwei Buttons welche eine Zahl hozählen, und dann nutzt du Addressmultiplexen is WinCC Flexible. D.h. du zählst bei dem druck auf eine Taste einen wert in der SPS hoch. diesen wert nimmst du als adresse für deine Variablen, über lineare skalierung kannst du anpassen, das der wert zu deiner Stringaddresse passt!


----------



## Larry Laffer (19 Januar 2011)

Hallo,
das mit ddem Adress-Multiplexen ist mit Strings so eine Sache - Flex kennt ja nun mal leider kein "ARRAY of String".
Wozu sollen denn die Strings überhaupt in der SPS abgelegt sein ?
Du könntest sie doch auch im Panel selbst in einer Datei speichern und dann (falls die SPS den angewählten String tatsächlich benötigt) den gewählten String an die SPS übergeben.

Je nachdem, was der wirkliche Hintergrund bei der Sache ist, wäre aber auch die von Helmut schon genannte Rezeptur ein (eventuell sinnvollerer) Ansatz.

Gruß
Larry


----------



## Zefix (19 Januar 2011)

Jochen Kühner schrieb:


> Wue wärs mit nur einem Bild mit 10 feldern, zwei Buttons welche eine Zahl hozählen, und dann nutzt du Addressmultiplexen is WinCC Flexible. D.h. du zählst bei dem druck auf eine Taste einen wert in der SPS hoch. diesen wert nimmst du als adresse für deine Variablen, über lineare skalierung kannst du anpassen, das der wert zu deiner Stringaddresse passt!



So würds ich auch machen,
Hatte auch mal den Fall auf ein paar 100 Strings zugreifen zu müsssen.
Habs auch mit der Multiplexvariante gelöst, hab sogar noch ein Feld gehabt um direkt die Seite auf die gesprungen werden soll, eingeben zu können.

Gruss Andi


----------



## Larry Laffer (19 Januar 2011)

Naja ... dann brauchst du aber immer noch die 100 Strings als einzeln angelegte Variablen ...


----------



## Jochen Kühner (19 Januar 2011)

Larry Laffer schrieb:


> Naja ... dann brauchst du aber immer noch die 100 Strings als einzeln angelegte Variablen ...



Nee brauchst du nicht, du kannst doch die Startadresse des Strings in eine Variable legen! Also keine Multiplexvriable, sondern die Adresse Multiplexen!


----------



## Larry Laffer (19 Januar 2011)

Jochen Kühner schrieb:


> Nee brauchst du nicht, du kannst doch die Startadresse des Strings in eine Variable legen! Also keine Multiplexvriable, sondern die Adresse Multiplexen!


... habe ich noch nicht gemacht und auch noch nicht als Möglichkeit gesehen - werde ich aber wenn ich einen Anwendungsfall habe mal testen ...


----------



## astranik (19 Januar 2011)

So siehts dann bei Flex aus. Dann einfach per Tastendruck die Mux_Adr hochzählen.


----------



## PN/DP (19 Januar 2011)

Man kann die DB-Nummer und die Adresse multiplexen, kommt also an jede Adresse ohne Power-Tag/ohne all die Variablen anzulegen.
Wie funktioniert das Adress-Multiplexen?

Harald


----------



## leolilu (20 Januar 2011)

wow, das ist ja jede Menge Input !!

also erstmal, das die strings in der sps liegen hat keinen tieferen sinn, sind eigentlich nur namen bzw. kennungen für bestimmte einrichtungsdaten

das funktioniert in der form:
maschine soll teil mit kennung 6gf8h54h3g herstellen
maschinenführer gibt die kennung am MP ein mit der das MP dann der sps sagt welche daten geladen werden sollen

demnach sind die strings in der sps eigentlich fehl am platz..
ich hab aber weder die maschine entworfen noch das programm dafür geschrieben.
ich möchte halt nur einen komfortablen weg finden das programm um mehrere maschinendatensätze zu erweitern ohne die DBs FBs MP VARs und arbeitsschritte ins unendliche zu steigern
aktuell existieren allein für die kennungen 1200 variablen wo jede einzelne auf eine adresse im db zeigt wo die kennung als string gespeichert ist

also ich hätte gern das es dabei bleibt, das die strings in der steuerung gespeichert werden

am MP soll eigentlich nur verglichen werden ob Kennung xy mit Nummer xy überein stimmt und über Nummer xy werden dann die nötigen daten geladen


mir ist halt wichtig eine liste zu erstellen ohne eine variable pro kennung erstellen zu müssen
das mit dem multiplexen ist ein sehr gutes stichwort, damit werde ich mich sofort auseinandersetzen


----------



## Zefix (20 Januar 2011)

Eben, das ist ja der Vorteil beim Multiplexen.

Hab das das letzte mal unter Protool vor ein paar Jahren gemacht, dürfte aber in Flexlible ähnlich gehen.

Legst dir ne String Variable an (bei Flex geht glaub ich Array of Char?) und eben in welchem DB. Dann iwie mit häkchen Multiplexen aktivieren. Die multiplex variable ist dann der Offset auf den im DB zugegriffen wird.

Für die Multiplexvariable hab ich nen Script angelegt das mir bei drücken der +/- Seitenbuttons den Offset berechnet hat.

Allerdings brauchst für jede Stringzeile ne eigene Multiplex variable, wenn ich das noch richtig in Erinnerung hab. Zumindest unter Protool.

Gruss Andi


----------



## Larry Laffer (20 Januar 2011)

leolilu schrieb:


> ... am MP soll eigentlich nur verglichen werden ob Kennung xy mit Nummer xy überein stimmt und über Nummer xy werden dann die nötigen daten geladen ...


 
Das wäre dann etwas in der Art wie ein Rezept ... Vielleicht schaust du dir das mal an ...


----------



## leolilu (21 Januar 2011)

ich bedanke mich erstmal für die zahlreichen und sehr hilfreichen antworten
ich bin dabei eine lösung mit hilfe vom multiplexen zu entwickeln, das kann sich noch etwas hinziehen, weil ich das programm noch vorbereiten muss
ich melde mich wieder wenn fragen aufkommen bzw wenn ich eine gute lösung gefunden habe
vielen dank nochmal an alle 

lg leo


----------



## leolilu (8 Februar 2011)

Hallöchen, ich bin mal wieder 

hab ich bei WinCC flex auf nem MP277 die Möglichkeit eine Liste von werten auszugeben ?
ich hätte die vorher erwähnten Strings aus dem DB in der SPS gern als scrollbare Liste am MP ausgegeben in dieser Form etwa

1. |String1
2. |String2
3. |String3
.
.
.


und da es ja mehrere Tausend Strings sind, wäre scrollbar wohl unumgänglich ^^

danke schonmal

LG Leo


----------



## Jochen Kühner (8 Februar 2011)

leolilu schrieb:


> Hallöchen, ich bin mal wieder
> 
> hab ich bei WinCC flex auf nem MP277 die Möglichkeit eine Liste von werten auszugeben ?
> ich hätte die vorher erwähnten Strings aus dem DB in der SPS gern als scrollbare Liste am MP ausgegeben in dieser Form etwa
> ...




Du kannst dir z.B. eine Bild machen in dem du in 10 Textfelder 10 Strings anzeigst. Dann machst du dir 4 Buttons zur Navigation. Mit dem einen Zählst du eine Varaible um 10 hoch mit dem anderen um 100. Genauso mit den 2 anderen Buttons nur in die andere Richtung. Nun tust du mit diesem Wert die Adresse für die 10 Strings multiplexen. (Ich mach das immer so, das Ich diesen Wert in der SPS Speichere, und dann Verschiedene Tags auf den Wert anlege und über Lineare Skallierung, mir die richtige Adresse berechne!)


----------



## leolilu (8 Februar 2011)

danke für die schnelle antwort
das ist genau das, was ich aktuell habe
ein bild mit 30 textfeldern, ddie die strings anzeigen und per button weiter gezählt werden
allerdings ist es so höchst unproduktiv auf der suche nach einem string 100 ''seiten'' a 30 strings durchklicken zu müssen

am liebsten wäre mir eine art listenfeld mit scrollbalken wo ale strings drin stehen, idealerweise nach bedarf auch alphabetisch sortierbar
aber damit ist wincc flex vermutlich überfordert :/

kann ich da vieleicht mit vbs was basteln ?


----------



## Zefix (8 Februar 2011)

Dann mach halt ne Suchzeile, die schreibst in die SPS.
In der SPS ne Schleife wo dein String gesucht wird.
Die Fundstelle schreibst dann wieder in deinen Mux im HMI.
Somit sollte die Seite mit deinem gesuchten Wert angezeigt werden.


----------



## leolilu (8 Februar 2011)

ein suchfunktion gibt es schon, die ist nur leider sehr langsam
man gibt den gesuchten string ein und die sps arbeiten den db mit den ca 2000 strings im 0,1s takt durch, wenn der gesuchte string weiter hinten ist kann das schonmal über 3 min dauern
dazu kommt noch, das die liste dazu dienst nachzuschauen welche string veraltet sind und nicht mehr benötigt bzw überschrieben werden können
nunja... die funktion wird eigentlich selten benötigt, ich werd das einfach so lassen wie es ist, da dauerts halt einmal die woche etwas länger ^^

aber zur suchfunktion:
sollte ich mal probieren die suche zyklusweise takten zu lassen oder würde das die sps überfordern, ist eine 317-2 DP Cpu mit 1MB arbeitsspeciher wenn das als aussage reicht, ansonsten muss ich nochmal genau drauf schauen


----------



## Jochen Kühner (8 Februar 2011)

Dann mach ein listenfeld wo man auswählen kann : string1-30, string31-60, usw


----------



## Zefix (10 Februar 2011)

leolilu schrieb:


> aber zur suchfunktion:
> sollte ich mal probieren die suche zyklusweise takten zu lassen oder würde das die sps überfordern, ist eine 317-2 DP Cpu mit 1MB arbeitsspeciher wenn das als aussage reicht, ansonsten muss ich nochmal genau drauf schauen





Wenn du mit takten , immer ne Handvoll Strings vergleich meinst, dann sollte es keine Zyklusprobs geben.

Ich würde ne Schleife machen in der immer eine bestimmte anzahl, ich nehm mal jetzt 50, Strings nur auf den ersten Buchstaben verglichen werden.
Bei Gleichheit wird dann der Komplette String verglichen und wenn nicht dann eben im nächsten Zyklus die nächsten 50 usw.


----------

