# Enum mit String vergleichen



## RennV4.1 (12 November 2014)

Hallo Zusammen,
  ich habe ein Problem bei dem Vorhaben eine Enum-Variable mit einem String zu vergleichen.
  Das Grundproblem:
  Das Ganze ist für ein VORHANDENES Baukastensystem für Standardanwendungen gedacht, daher keine gravierenden, kostenintensiven Änderungen mehr möglich (hinterher ist man immer schlauer!)
  In einer Enum-deklaration sind die Namen für diverse Instanzen angegeben. 
  Diese werden in einer, in der WebVisu laufenden, Auswahlmaske selektiert um diese zu verknüpfen. Soweit so gut. Leider ist die Anzahl der Namen stark gewachsen, sodass die Selektion total unübersichtlich wird.
  Die Idee:
  In der Auswahlmaske eine Vorselektion treffen (über ein String) in der man die, z.B. ersten drei Zeichen des gewünschten Namens eingibt. Dadurch soll dann die Möglichkeit der zu selektierenden Namen auf die eingegrenzt werden, die diese ersten drei Zeichen enthalten.
  z.B.:
  Namen (Enum): 
  „ST1_WP“
  „ST1_HP“
  “ST9_S1_HP”
  “ST9_S1_WP”
  …
  Frei einzugebende Vorselektion (als String) = “ST1*” 
  Ergibt mögliche Auswahl von „ST1_WP“ und „ST1_HP“

  Wie ich den Zahlenwert, der hinter einer Enum Variable steht über Pointer ermittle, ist klar!
  ABER:
  Weiß Irgendjemand wie man unter CoDeSys2.3 den NAMEN einer Enumvariable zu Laufzeit ermitteln kann um diesen dann mittels MID,Left, usw. mit einem String zu vergleichen?
  Für Anregungen oder Hilfe wäre ich echt dankbar!


----------



## shrimps (12 November 2014)

Dito Hallo,
ich bin zwar nicht Fit in Twincat aber glaube folgendes erkannt zu haben:
ENUM ist eine "virtuelle Nummerierung", d.h. man hat zur Entwicklungszeit symbolische Namen, welche vom Zielcompiler in feste Adressen (Nummern) übersetzt werden.
Von daher ist es eigentlich unmöglich auf dem Laufzeitsystem die Symbolk "zurückzuverfolgen"...
Ich hoffe, das ich es so richtig verstanden habe, die anderen werden es mir dann ggf. erklären.

Du hast daher nur eine Chance, wenn du diesen Wunsch mit zusätzlichen Strings abbildest.
Bsp.: Entweder in einem String mit Trennzeichen und eigener Suchfunktion oder als Array. 
Auch bietet sich bei einer solchen Lösung eine Gruppenbildung an: Gruppe/Name
Dann könnte der Anwender den / die Gruppennamen oder Nummer (schneller zu tippen) eingrenzen.

LG
Shrimps


----------



## RennV4.1 (12 November 2014)

Hallo Shrimps,
  generell hatte ich früher auch diese Vermutung (ähnlich der Symbolik), aber ich wurde durch Versuche, eines bessern belehrt, das die Namen auch zur Laufzeit vorhanden sind.
  Der Grund meiner Behauptung:
  Wir haben in dem Projekt eine dynamische Auswahlmaske programmiert. Die besteht im Wesentlichen aus fünf Tasten für die Namen und je links und rechts eine „Scrolltaste“. Durch eine Funktion werden beim Aufruf der Seite die Tastenbeschriftungen mit den ersten fünf ENUM Namen geladen. Betätigt man nun die rechte „Scrolltaste“ werden die fünf Tasten mit den nächsten fünf Namen geladen, usw. 
  Diese Namen stehen in keinem Array oder sonstigen Variablen, sondern sind die ENUMNamen, die in einer Struktur im Globaldatenbereich deklariert sind. 
  Das heißt für mich, dass die ENUM Namen auch zur Laufzeit irgendwo im Speicher stehen. Nur WO?
  Oder sollte der Compiler so schlau sein zu erkennen, das ich eine dynamische Auswahlmaske programmiert habe und er „vorsichthalber“ alle ENUMNamen auf Tasten schreibt und diese dann einblendet…Nee, das ist glaube ich total Quatsch! – HAL 9000 lässt grüßen -
  Aber Trotzdem erst mal danke für den Denkanstoß.
  Gruß


----------



## Larry Laffer (12 November 2014)

@TE:
Du mußt schon zwischen dem SPS-Programm und dem .Net-Programm der Visu unterscheiden. Das .Net-Programm der Visu kann die numeration wieder auflösen - die SPS n.m.M. nicht ...

Gruß
Larry


----------



## RennV4.1 (12 November 2014)

Tachchen Larry,
  so, jetzt bin ich verwirrt. Deiner Aussage nach ist die Visu eine .Net? Also ich weiß nicht ob ich mich falsch ausgedrückt habe, aber ich meine schon die Web-Visu die Lizenzfrei unter CoDeSys erstellt werden kann  (Reiter“Visualisierung“). Ich muss zugeben, das ich mich mit dem Thema der Verschiedenen Visualisierungsarten noch nicht ausgiebig auseinander gesetzt habe.
  Und sollte dies trotzdem eine .Net sein, so müssten doch die Namen der ENUMwerte irgendwo dort in nem XML stehen, oder?
  Oder gibt es einen Umweg über die VISU den ENUMNamen in eine String Variable zu schreiben?
  Ich wüsste zwar nicht ob es wichtig ist, aber es handelt sich bei der Hardware um einen* Wago Controller 750-880*.


----------

