# .net Controls erstellen



## Zipfelklatscher (3 Mai 2011)

Hallo zusammen,

ich suche ein Tutorial oder ähnliches wie man in Visual Basic ein
.NET Control für WinCC programmiert.

Bei der Suche hab ich leider nichts gefunden.

Denn hier ist mein Problem.

Ich habe vor einiger Zeit ein kleines VB.net Programm geschrieben
welches mir bestimmte Werte berechnet und Grafiken animiert.

Ich wollte nun dieses Programm in ein .Net Control wandeln und
im WinCC Grafik Designer verwenden. WinCC importiert es aber nicht
und meldet, dass es kein .NET Assembly ist.

Bin in VB2010 folgend vorgegangen:

Neues Projekt -> Neue Klassenbibliothek -> nun hab ich die WindowsForm
reinkopiert -> Erstellen -> die erstelle DLL versucht als .NET Control zu laden

Mein Problem ist dass ich nicht genau weiss warum es nicht funktioniert
und wie ich die Schnittstelle zu WinCC progrmmieren muss.

Vielleicht hat jemand ein Tipp oder Link.

Danke im voraus

MfG


WinCC V7.0 SP1
Visual Studio 2010


----------



## mkol (4 Mai 2011)

Moin,

du musst als neues Projekt den Typ "Windows Forms-Steuerelementbibliothek" wählen ... damit kannst du ein UserControl erstellen.
Attribute der Klasse, die von UserControl erbt, werden dann in WinCC als Eigenschaften des Controls dargestellt (soweit ich mich erinnere), d.h. wenn sich die Daten in deinem Control ändern sollen, kannst du über die öffentlichen Attribute Werte ins Control übergeben.

Gruß,
mkol


----------



## david.ka (4 Mai 2011)

Hallo,

hier sind Beispiele von Siemens. Allerdings in C#, sollte aber nicht das Problem sein. 
ist echt gut beschrieben!!

http://support.automation.siemens.c...objaction=csview&extranet=standard&viewreg=WW

Grüße
David


----------



## Zipfelklatscher (4 Mai 2011)

Hallo,

danke für die schnelle Hilfe.

ich schau mir grad das C# Beispiel an.

Da steige ich leider nicht ganz durch. Da ich nicht genau
weiss wie ich anfangen muss und in welcher Reihenfolge es 
weitergeht.

Ein kleines VB.net Beispiel würde mir enorm weiterhelfen.


Gruß


----------



## NochEinProgrammierer (4 Mai 2011)

Eventuell hilft es Dir das C# Beispiel automatisch in VB konvertieren zu lassen, z.B. hier


EDIT: Habe mir gerade die oben verlinkte Seite mit den Beispielen von Siemens angesehen, das ist weder C# noch VB Code sondern XAML. Es handelt sich in den Beispielen um WPF-Controls.
Die kannst Du natürlich auch verwenden. Da aber bitte nicht jedes Control einzeln in eine HMI-Seite einbinden sondern lieber ein großes WPF-Control erstellen das alle Steuerelemente enthält. Dein HMI-Rechner wird es Dir danken mit deutlich performanteren Bildwechseln.


----------



## Zipfelklatscher (5 Mai 2011)

Ja du hast recht ist kein C#.

Ich suche mal weiter nach einem VB Beispiel in dem genau erklärt
wer was und wie von welcher Klasse erbt.

Wenn ich eines gefunden habe, poste ich es hier natürlich.


----------



## david.ka (6 Mai 2011)

NochEinProgrammierer schrieb:


> EDIT: Habe mir gerade die oben verlinkte Seite mit den Beispielen von Siemens angesehen, das ist weder C# noch VB Code sondern XAML. Es handelt sich in den Beispielen um WPF-Controls.



XAML ist keine Programmiersprache. C# ist die dahinterstehende Programmiersprache. Mit XAML erstellst du hier im Beispiel das Layout/die Ansicht der Controls. Die Logik, bzw. der Quellcode ist in C#, wenn in diesem Beispiel auch nicht viel.


hast du schon Erfahrungen mit WPF Controls in Zusammenhang mit WinCC. Wie sind deine Erfahrungen?


----------



## mkol (6 Mai 2011)

david.ka schrieb:


> hast du schon Erfahrungen mit WPF Controls in Zusammenhang mit WinCC. Wie sind deine Erfahrungen?



Das würde mich auch mal interessieren ... wir haben es bisher nur mit Windows.Forms-Controls versucht. Klappt mit WPF alles wie es soll, muss man irgendetwas beachten?


----------



## david.ka (6 Mai 2011)

mkol schrieb:


> Das würde mich auch mal interessieren ... wir haben es bisher nur mit Windows.Forms-Controls versucht. Klappt mit WPF alles wie es soll, muss man irgendetwas beachten?



und wie sind deine Erfahrungen mit WinForms Controls im Zusammenspiel mit WinCC?


----------



## Zipfelklatscher (7 Mai 2011)

Hab jetzt rausgefunden warum WinCC meine WPF und .Net Controls
nie geschluckt hat.
Es lag nicht an meinem Code sondern daran das ich alles
mit dem .Net V 4 Framework compiliert habe.
WinCC verträgt aber kein .Net Framework höher V3.5 SP1.

:sb8:


----------



## Silverstone (17 Juni 2011)

Hallo Zipfelklatscher

Wie ich gelesen habe, hast du schon etwas Erfahrung mit dem Einbinden von WPF-Controls in WinCC.
Ich bin leider ziemlich am leiden, weil sich WinCC ziemlich blöd anstellt. Ich verwende WinCC 7 SP2 Update 4 und habe 2 WPF Controls basierend auf .NET3.5 erstellt. Nachdem ich einigermassen Erfolg hatte und diese Controls auch in WinCC verwenden konnte habe ich momentan keine Chance mehr. Die Controls habe ich weiterentwickelt und sind natürlich dementsprechend komplexer geworden. Momentan kann ich die Controls zwar teilweise wieder im Designer darstellen aber in der Runtime sehe ich nur noch einen weissen Fleck.

Hast du noch irgendwelche Tipps?

Vielen Dank!

Gruss Tom


----------



## Zipfelklatscher (17 Juni 2011)

Hallo,

wenn du das Bild in Runtime aufrufst indem das WPF Control
sich befindet, stürzt die Runtime dann ab oder läuft sie normal
weiter ?


----------



## Silverstone (20 Juni 2011)

Hallo

Nein die Runtime stürzt nie ab, das WPF Control wird als weisses Rechteck dargestellt ohne jegliche Funktion. Unterdessen habe ich die Update 4 geladen und das Verhalten scheint momentan wieder etwas anders zu sein. Im Graphics Designer kann ich nun mein Control wieder darstellen ohne Probleme, dies ging mit Update 3 nicht.

Gruss Tom


----------



## Zipfelklatscher (30 Juni 2011)

seltsam. In welcher Sprache programmiert du ? c# vb.net?


----------



## Zipfelklatscher (30 Juni 2011)

Mein Problem welches mich gerade beschäftigt ist, wie ich
aus meinem WPF Control einen Wert (String, Int o.ä.)
wieder an die WinCC Welt übergebe bzw. in eine Variable schreibe.

Danke

Gruß


----------



## Silverstone (30 Juni 2011)

Also ich programmiere in C#.

Die Schnittstelle zu WinCC sind Properties. Du brauchst also einfach eine public Property zu erstellen und in WinCC kannst Du dann deine Variable anhängen. Es ist leider nicht möglich auch Funktionen so anzubieten.

Gruss Tom


----------



## Zipfelklatscher (30 Juni 2011)

Genau beim Variablenanhängen in WinCC scheiter es bei mir
ich hab ein Property programmiert welches jetzt auch unter 
Control-Eigenschaften / Attribute zu sehen ist.

In diesem Attribut steht jetzt bei Statik ein Wert drin.
So weit so gut.

Aber wie lege ich den Wert jetzt auf eine WinCC Variable
um?

gruß


----------



## Silverstone (30 Juni 2011)

Wie bei jedem anderen WinCC Attribut unter der Spalte Dynamik. Klicke mit der rechten Maustaste und wähle Variable.

That's it.


----------



## Zipfelklatscher (30 Juni 2011)

Ich weiss jetzt glaub ich warum dein Control nur noch als weisses 
Rechteck angezeigt wird.

Ist aber nur ne Vermutung denn ich hab grad das selbe Problem. Zwar liegt es an den Propertyeingenschaften wenn einer
dieser Eigenschaften ein falscher Datentyp übergeben wird.

Was auch noch zu beachten ist, wenn du etwas an deinem Control änderst solltest du es im GraphicsDesigner löschen und
anschließend neu einfügen.


----------



## Zipfelklatscher (30 Juni 2011)

Silverstone schrieb:


> Wie bei jedem anderen WinCC Attribut unter der Spalte Dynamik. Klicke mit der rechten Maustaste und wähle Variable.
> 
> That's it.



Aber so wird doch ein Wert in das Control übergeben und nicht
vom Control in die WinCC Variable.

Oder?


----------



## Silverstone (30 Juni 2011)

Okay

Du hast recht. WinCC wird wahrscheinlich so nicht mitbekommen wenn sich die Varaiable ändert. Ich habe bei Änderung der Variable einen Event generiert der dann via Direktverbindung eine Variable ändert. Dies funktioniert bestimmt.

Bezüglich dem Problem, dass gewisse WPF Controls nicht mehr instanziert werden gibt es leider tatsächlich ein Problem in WinCC. Falls du andere Controls als welche von MS in deinem Usercontrol brauchst, kann es passieren, dass WinCC diese nicht sauber instanzieren kann. Es wird wahrscheinlich mit dem Update 5 dann gefixt.


----------



## Zipfelklatscher (30 Juni 2011)

Stimmt du hattest recht wenn man das Property über ein Event
schleust und dann eine Direktverbindung zu der Variable angibt 
funtioniert der Rückgabe an WinCC wunderbar.

Danke
Gruß


----------

