# Libnodave mit Wincc 7.0



## hein123 (1 August 2011)

Hallo Leute
 Ich bin neu in diesem Forum mit ein wenig Deutschkenntnisse, aber ich habe Google Translate für diese Übersetzen 

 Ich bin derzeit mit WinCC 7.0, brauchen aber mehr tags, aber diese zusätzlichen tags Kosten viel zu viel. So war ich etwa nur mit libnodave für grundlegende Ein-und Ausgänge für Anzeige auf dem Bildschirm und die 128 tags, die ich derzeit für wichtige Funktionen zu denken.

 Ist das ratsam?
 Und ist das möglich?

 Wenn möglich, wie würde ich nach Updates suchen, wenn der Benutzer eine Taste drückt ein Motor zum Beispiel zu bewegen, um

 Vielen Dank für jede Beratung


----------



## bike (1 August 2011)

hein123 schrieb:


> Hallo Leute
> Ich bin neu in diesem Forum mit ein wenig Deutschkenntnisse, aber ich habe Google Translate für diese Übersetzen
> 
> Ich bin derzeit mit WinCC 7.0, brauchen aber mehr tags, aber diese zusätzlichen tags Kosten viel zu viel. So war ich etwa nur mit libnodave für grundlegende Ein-und Ausgänge für Anzeige auf dem Bildschirm und die 128 tags, die ich derzeit für wichtige Funktionen zu denken.
> ...



Ganz habe ich nicht verstanden was du geschrieben hast. 
Doch grundsätzlich ist ein Mischbetrieb so auf die Schnelle nicht möglich.
Wie willst du dem WinCC erklären, dass jetzt libnodave für die Daten zuständig ist?

Nur wegen Geiz so etwas zu bauen ist nach meiner Meinung suboptimal.


bike


----------



## Thomas_v2.1 (1 August 2011)

Hehe, das funktioniert sogar.

Die Verwendung von externen DLLs ist in WinCC möglich, also kann man auch die libnodave.dll benutzen.
Nur die Winsock Funktionen braucht man zusätzlich, da diese nicht in der libnodave.dll vorhanden sind. Ich gehe jetzt einfach mal davon aus dass du über TCP/IP Daten aus einer SPS lesen möchtest.

Dann kann man entsprechen interne Variablen anlegen die dann mit den Daten die mittels libnodave gelesen werden beschrieben werden.

Im Anhang ein kleines Testprogramm welches du so als WinCC C-Skript anlegen kannst (z.B. als Projekt-Funktion). Ich habe das Ganze mit WinCC7 getestet - prinzipiell funktioniert das.
Der Speicherort der libnodave.dll und die IP-Adresse der SPS muss noch den eigenen Gegebenheiten entsprechend angepasst werden. Momentan ist die IP-Adresse und auch der zu lesende Datenbereich hardcodiert.

Zum Testen z.B. zwei interne Variablen "InternLibnodaveInt1" und "InternLibnodaveRetVal" anlegen.

Die Funktion könnte man dann so aufrufen:

```
// Aufrufbeispiel:
int ret = 0;
int iVal = 0;
ret = ReadWithLibnodave (&iVal);
 
SetTagSWord("InternLibnodaveInt1" ,iVal);	// Interne Variable, Inhalt von DB1.DBW0
SetTagSWord("InternLibnodaveRetVal" ,ret );	// Interne Variable, evtl. Fehlercode
```

Problematisch ist nur dass das Skript so wie es jetzt ist hängen bleibt, sollte die SPS nicht erreichbar sein.
Außerdem wird bei jedem Aufruf die Verbindung zur SPS auf- und wieder abgebaut.

Ich würde sowas äußerst ungern bei einem Kunden einsetzen.
Wenn ich das jedoch machen müsste, würde ich eine eigene DLL mit den libnodave und Winsock Funktionen erstellen, welche bei einem Timeout sofort zurückkehrt, und auch noch die anderen Funktionen und Strukturen beinhaltet. Dann könnte man das Ganze in WinCC wesentlich übersichtlicher gestalten. 
Im einfachsten Falle eine Funktion nach Schema (Pseudocode):
Read(IP, Datenbereich, Buffer)


----------



## Jochen Kühner (2 August 2011)

@Thomas:

Warum nimmst du denn nicht die "openSocket" Funktion in der libnodave?


----------



## Thomas_v2.1 (2 August 2011)

Jochen Kühner schrieb:


> @Thomas:
> 
> Warum nimmst du denn nicht die "openSocket" Funktion in der libnodave?



Oh stimmt, die wird ja auch mit exportiert. War etwas verwirrt weil die Socket Funktionen nicht in der nodave.c sind.

Dann kann er sich zum Programmieren direkt an den Beispielen von libnodave halten.


----------



## Ralle (2 August 2011)

Wir haben Variablen zusammengefaßt in eine Rohdatenvariable. MAn kann dann entweder die Daten in einem Script aus der Rohdatenvariable herausholen oder eine Dll dafür schreiben, die dies tut. Damit kann man schon eine ganze Menge Tags sparen. Z.Bsp.habe ich in einer Anlage alle Störnmeldungen über Rohdatenvariable in WnCC eingelesen und auch über eine Rohdatenvariabel quittiert etc., bei vielen Störungen sehr Tag-sparend!


----------



## hein123 (2 August 2011)

Danke für all die Ratschläge.
 Ich habe aber nur ich nur noch mehr tags bekommen, da dies die zuverlässigste Option.


----------

