# WINCC Shutdown für USV



## high5 (15 Juli 2011)

Hallo Leute,

ich bin auf der Suche nach einer Möglichkeit den Shutdown von Wincc (6.0-7.1 (nicht Flexible!!)) von "extern" also von einem anderen Programm aus zu triggern.

Hintergrund: USV Shutdown bei Stromausfall.

Was mir schon bekannt ist...
Es gibt eine Option von Siemens 
Find ich aber irgendwie witzlos und lächerlich bzw ärgerlich. 
Jedes halbwegs vernünftige Programm ist gemäß dem MS-Guideline Programmiert und hat eine Schnittstelle für den Shutdown wenn z.b. das Betriebssystem beendet wird. Siemens verkauft dies als feature :-D unfassbar!

Ich kenn auch schon den WinCC internen Befehl zum beenden von WinCC bzw auch zum Herunterfahren des Computers.

Meine frage?
Hat vielleicht einer von euch schon mal eine externe Schnittstelle geschaffen bzw. eine Idee wie man das Sinnvol lösen kann.


----------



## thomass5 (15 Juli 2011)

Hat deine USV einen potentialfreien Kontakt? oder du setzt einen Unterspannungswächter(ein einfaches 230VRel. tuts auch) in der Zuleitung ein. Dies fragst du mit der SPS ab und daraufhin kannst du ja den Rechner über ein Script runterfahren. Und die SPS weis auch, das die Visu weg ist.

Thomas


----------



## high5 (15 Juli 2011)

Hallo Thomas,

danke für die rasche Antwort.
Ich hab den vorschlag schon mal im Forum gefunden.
Die Problematik ist dass die USV mit dem VisuPC in der Schaltwarte steht und via Ethernet an den PC angebunden ist (RCCMD-Client).

LG
Robert


----------



## Thomas_v2.1 (15 Juli 2011)

Wie sieht denn deine externe Schnittstelle aus? Ist das ein eigenes Programm, oder gehört dieses zur USV dazu?


----------



## orion (16 Juli 2011)

*usv aps*

Ich habe das selbe Problem mit einer USV von APC.
Auf dem Rechner befindet sich die Software PowerChute die ein SNMP Server anbietet. Meine Idee ist es den Status der USV mittels SNMP abzufragen und da stoße ich auf ein paar Probleme.
Finde nicht wirklich was brauchbares womit ich die SNMP mit Scripten auslesen kann. Es gibt ja ein OPC Server für SNMP aber den würde ich ungern einsetzen (Kosten). 
Mit WMI-Steuerung geht es zwar ganz gut aber da weiß ich nicht wie ich MIB Files einbinde und direkt mit der Objekt-ID (OID) zur arbeiten.
Vielteich weiß einer von euch eine andre Lösung, Lib oder so?


----------



## Thomas_v2.1 (16 Juli 2011)

Ich würde auch gar nicht über so etwas kompliziertes wie SNMP gehen. Denn dann muss man bei Austausch einer USV von einem anderen Hersteller wieder einiges anpassen.

Wenn WinCC die Events selber nicht abfangen kann, muss man sich eben ein kleines Programm schreiben welches das übernimmt.
Bei einer Konsolenanwendung sollte CTRL_LOGOFF_EVENT ausreichen. Die Anwendung schreibt dann einen Wert in eine Textdatei die von WinCC ausgelesen werden kann, und welche veranlasst dass das System heruntergefahren wird.
Nun muss die andere Anwendung noch irgendwie mitbekommen dass WinCC heruntergefahren ist, und sich dann selber beenden damit der Windows Shutdown fortgesetzt wird.
Evtl. über eine Timer noch eine maximale Zeit festlegen nach der generell heruntergefahren wird. Der Shutdown von WinCC kann je nach Anwendung ja schon einmal mehrere 10 Sekunden dauern.


----------



## Oberchefe (16 Juli 2011)

In der PowerChute kannst Du doch angeben, was passieren soll wenn der Strom ausfällt (Programm oder Script).


----------



## high5 (20 Juli 2011)

@Thomas V2.1
Zu: Wie sieht das Programm aus?

Grundsätzlich funktionieren alle USV Programme ohnehin ähnlich.
Mit Powerchute oder RCCMD kann man ein Script oder Programm triggern sobald die USV das verlangt (eventabhängig Stromausfall oder Batterie schwach).

An die Idee mit dem File auslesen habe ich auch schon gedacht, das wär eigentlich sehr schnell umzusetzen. Der Datenaustausch über ein File ist zwar nicht die "Feine Englische" ;-) aber sicher die einfachste Art.

Ich habe eher an eine Softwareschnittstelle gedacht welche so wie der WinCC interne C Befehl "DMExitWinCCEx (DM_SDMODE_SYSTEM);" funktioniert.


LG@all
Robert


----------



## high5 (20 Juli 2011)

Also ich post mal die Quick and Dirty Version... 

Man erstelle sich eine Batchdatei oder CMDdatei mit folgendem Inhalt
Name z.b. usvshutdown.bat

*echo 1 > c:\usvstatus\state.bin*

und rufe diese usvshutdown.bat beim USVevent auf.

-----
In Wincc legt man ein globalScript (C) an welches z.b. im 10 Sekunden Zyklus aufruft 

Inhalt des Skripts

*#include "apdefap.h"*
*int gscAction( void )
{
FILE *f;*
*f=fopen("C:\\USVSTATUS\\STATE.BIN","rb");
if (f!=NULL)
   {
     fclose(f);
     remove("C:\\USVSTATUS\\STATE.BIN");
     DMExitWinCCEx (DM_SDMODE_SYSTEM);
    }
return 0; 
}*


Aber wie gesagt Quick and Dirty


----------

