WinCC per Batch Datei beenden?

Zuviel Werbung?
-> Hier kostenlos registrieren
Lösung leider nur bedingt verwendbar

Hallo
Habe mich interessehalber noch ein wenig mit dem Problem beschäftigt.
In iNet gibt es leider nur unvollständige Lösungen.
Damit dieser Beitrag nicht auch so endet möchte ich noch etwas anmerken.

Die Lösung mit dem Verändern von WinCC Variablen ist meiner Meinung nach die beste Lösung. Leider auch etwas umständlich.

Um Zugriff auf die WinCC Variablen zu bekommen ist die Datei "CCMCPAUTSERVERLib.dll" notwendig. Diese ist allerdings in der WinCC Installation nicht vorhanden sondern muss erst aus der Datei "CCMCPAUTSERVER.tlb" erstellt werden. Dies ist z.B. mit dem Verweis aus Visual Studio oder dem Tool "TLBimp" möglich. Leider sind beides Microsoft Produkte und bedürfen einer Lizenz.
Ob eine Weitergabe der "CCMCPAUTSERVERLib.dll" möglich ist kann ich nicht sagen, da das Copyright der "CCMCPAUTSERVER.tlb" bei Siemens liegt.

Fazit: Sehr guter Ansatz. Leider muss man sich zur Zeit noch das Visual Studio und mit dem Windows SDK installieren.

Hier ein Auszug der Supportantwort
Je nach verwendeten Funktionen benötigen Sie eine WinCC RT oder CS Lizenz, sowie Lizenzen von ggf. genutzten Zusatz-Optionen
Damit ist ein öffentlicher UpLoad leider ausgeschlossen.


Grüsse Holger
 
Zuletzt bearbeitet:
So ganz habe ich diesen COM Mechanismus auch noch nicht durchschaut, aber ich bin mir sehr sicher dass man aus einer tlb keine dll erstellen kann. Das läuft wenn dann eher andersherum, denn in der tlb ist nur eine Beschreibung der Schnittstelle und keine Programmcode.

In diesem Fall ist der COM-Server aber in keiner dll sondern in der CCMcpAutServer.exe. Darum würde ich der Siemens Support Antwort auch keine Bedeutung beimessen, da saß bestimmt jemand ohne einen blassen Schimmer worum es überhaupt geht (Standardantwort: sie brauchen natürlich eine Lizenz). Ein bereitgestellter Quellcode lässt sich nur mit einem lizensierten WinCC verwenden, andernfalls ist das daraus erstellte Programm nutzlos.

Mit dem OLE Viewer aus dem Visual Studio SDK kann man sich eine idl-Datei aus dem COM Objekt erzeugen lassen, sodass man die tlb überhaupt nicht benötigt. Eigentlich sollte man das COM-Objekt damit z.B. aus einem C++ Programm heraus ansprechen können. Ich habe das vor einiger Zeit bei der Plcsim-Prosim COM Schnittstelle versucht, aber immer nur mit dem Wizard des Visual Studios hinbekommen. Alle meine Versuche das nur mit der idl-Datei, ohne den Wizard oder mit einem Nicht-MS-Compiler (mingw) zu realisieren sind bisher gescheitert :(

Was aber funktioniert ist das Anspechen der Schnittstelle mittels Python und pywin32.
Dazu muss mittels pythonwin.exe mit dem dort enthaltenen COM makepy utility aus der "CCMcpAutServer 1.0 Type Library" ein Modul erzeugt werden.
Dann kann man die Schnittstelle recht einfach mit:
Code:
import win32com.client
wincc = win32com.client.Dispatch("WinCC-Runtime-Project")
val = wincc.GetValue("TestFloat1")
print ("TestFloat1 = " , val)
verwendet werden.

Eine ausführbare exe Datei die man nur auf den WinCC-Rechner kopieren muss ohne weitere Programme installieren oder auszuführen zu müssen wäre natürlich schöner, aber eine Python Installation ist gegenüber dem Visual Studio ein Leichtgewicht, und verursacht keine weiteren Lizenzkosten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine ausführbare exe Datei die man nur auf den WinCC-Rechner kopieren muss ohne weitere Programme installieren oder auszuführen zu müssen wäre natürlich schöner, ...
Genau das macht AutoIt!

Ich kenne es von benutzerdefinierten Programm-Installationen beim unattended Windows-Setup, die das Setup-Programm so nicht automatisch ermöglichen würde. Einmal aufzeichnen, was man manuell machen würde und voila ...
(Notfalls kann man das Script auch noch mehr lassen machen.)

Und das Ganze ist Freeware!

Die erstellte Datei läuft auf jedem Win-Rechner, auch ohne das Aufzeichnungs-/Programmierprogramm. Aufgezeichnete Absolut-Bildschirm-Adressen kann man z.B. auch berechnen lassen, um an unterschiedliche Graphikauflösungen anzupassen.
 
Hallo Thomas
Du hast mich falsch verstanden.
Jennsy hat seine/ihre ? Exe hochgeladen. Da diese aber keinen Schnittstellencode enthält ist so nicht brauchbar. Der Schnittstellencode für das COM Object befindet sich in der DLL. Ich wollte jetzt einfach die DLL und ein kleines Tool ins Forum laden um ein Gesamtpaket für alle die es brauchen bereit zu stellen.
Dies ist aber aus Copyrightgründen nicht möglich (ich würde gegen den Lizenzvertrag verstossen), da sie dann jeder auch der der keine WinCC Lizenz hat runterladen könnte. Was zwar keinen Sinn macht aber ist halt so. Selbstverständlich darfst du ein Programm welches du geschrieben hast mit der DLL auf einem WinCC Rechner betreiben und auch an Kunden weitergeben. Denn diese haben ja mindestens eine gültige RT Lizenz erworben.

aus der "CCMcpAutServer 1.0 Type Library" ein Modul erzeugt werden.
Genau das macht TLBimp. Diese erzeugte DLL kann man dann in einem Net Projekt zuweisen und die Funktionen nutzen. Funktioniert super. Variablen lesen und schreiben in einer WinCC RT. Könnte man sicherlich für vieles nutzen nicht nur zum ausschalten.


Grüsse Holger
 
So, habs mit einer in C geschriebenen Standalone exe am laufen :)
Es wird dabei keine dll, tlb oder was auch immer aus dem WinCC Projekt benötigt, und die exe kann auf einem beliebigen Rechner mit VC++ oder dev-cpp Compiler erstellt werden.
Das Programm benutzt das bei COM mögliche late binding. Das ist zwar etwas langsamer, aber um eine Variable zu lesen und schreiben reichts aus.

Mit Verwendung dieser
http://disphelper.sourceforge.net/

Bibliothek ist das relativ einfach.

Ein Auslesen einer WinCC Variable sieht ohne Fehlerbehandlung so aus:
Code:
void wincctest(void)
{
	DISPATCH_OBJ(winccrt);
	double value;
	dhCreateObject(L"WinCC-Runtime-Project", NULL, &winccrt);	
	dhGetValue(L"%e", &value, winccrt, L".GetValue(%S)", L"TestFloat1");
	printf("TestFloat1 = %e \r\n", value);
}

Ich bin begeistert!
Denn ich habe mir genau wie beim TO bei dem Problem mit dem Runterfahren von WinCC über eine USV vor ein paar Monaten noch einen abgebrochen. Da habe ich es so gemacht dass die USV Software in eine Datei schreibt, und WinCC die Datei einliest und sich dann ggf. beendet.

Evtl. gehts ja auch in Autoit, dann bräuchte man keinen C-Compiler dafür.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Evtl. gehts ja auch in Autoit, dann bräuchte man keinen C-Compiler dafür.
Ist halt, als ob man's manuell beendet.

Die Frage dabei ist: Wie gut ist das Script erstellt, um es von Rechner zu Rechner funktionsfähig weiter geben zu können?
Vor allem, wenn sich die Lage von Bedienelementen ändert.
 
Jennsy hat seine/ihre ? Exe hochgeladen. Da diese aber keinen Schnittstellencode enthält ist so nicht brauchbar. Der Schnittstellencode für das COM Object befindet sich in der DLL. Ich wollte jetzt einfach die DLL und ein kleines Tool ins Forum laden um ein Gesamtpaket für alle die es brauchen bereit zu stellen.
Dies ist aber aus Copyrightgründen nicht möglich (ich würde gegen den Lizenzvertrag verstossen), da sie dann jeder auch der der keine WinCC Lizenz hat runterladen könnte. Was zwar keinen Sinn macht aber ist halt so.

Ist das was du meinst sowas wie eine Interop dll die das Visual Studio bei der Verwendung von COM Objekten generiert? Das habe ich bei nettoplcsim auch drin, und wird von mir auch mit ausgeliefert. In der dll ist aber kein wirklicher Programmcode, sondern nur die Beschreibung der Schnittstelle die man so auch im Handbuch findet. Ohne Step7 kann damit aber keiner etwas anfangen, weil die dll mit den eigentlichen Funktionen dann fehlt.
Kennst du dazu offizielle Gerichtsentscheide ob das erlaubt ist oder nicht? Kann mir aber nicht vorstellen dass nicht, denn das wird doch gerade im Zusammenhang mit Office-Programmen massenhaft so (oder so ähnlich) verwendet.
 
Ist das was du meinst sowas wie eine Interop dll
Jep genau das ist sie

http://msdn.microsoft.com/de-de/library/hfac4fky(v=vs.110).aspx

MSDN
Wenn die Assembly auf Typen aus einer COM-Typbibliothek von Drittanbietern verweist, müssen Sie vom Herausgeber eine primäre Interop-Assembly erwerben, bevor Sie eine eigene primäre Interop-Assembly generieren können.

müssen Sie vom Herausgeber eine primäre Interop-Assembly erwerben
Was man mit dem Erwerb von WinCC ja getan hat. Im Lizenzvertrag steht dann ungefähr "eine Vervielfälltigung ist nicht erlaubt"
Darum wollte ich sie nicht ohne Genehmigung von Siemens veröffentlichen.

Gerichtsurteile kenne ich nicht.
Wie gesagt das weitergeben stellt auch kein Problem dar. Nur das veröffentlichen.

Grüsse Holger
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich würde mal die Kirche im Dorf lassen.
In der tlb stehen die uuid und drei Funktionsnamen mit Parameterbezeichnungen. Ich möchte mal bezweifeln dass man nur auf diesen Metadaten ein Copyright beanspruchen kann, bzw. dass dieses vor einem Gericht stand hält. Die tlb wurde auch von Siemens mit dem Microsoft MIDL Compiler erzeugt, ist somit computergeneriert.

Wann man die mitgelieferte tlb nicht verwenden möchte, erstellt man sich mit dem COM Viewer aus der CCMcpAutServer.exe eine eigene IDL-Datei, und erzeugt sich daraus mit dem MIDL nochmal eine eigene tlb.

In diesem konkreten Fall hätte ich keine Bedenken die Interop dll weiterzugeben, das muss natürlich jeder für sich entscheiden.
 
Es gibt jetzt einen FAQ von Siemens zu dem Thema:

http://support.automation.siemens.com/WW/view/de/89257245

zufällig einen Monat, nachdem wir das hier diskutiert haben...

;)

hier gibt's auch das fertig compilierte Programm für alle die kein Visual Studio haben:

http://www.wincc.it/public/StopWinCCRT.zip

http://www.wincc.it/2014/03/31/stopwinccrt-arrestare-wincc-runtime-da-eseguibile/

https://translate.google.de/transla...estare-wincc-runtime-da-eseguibile/&edit-text=

Gruß.
 
Zuletzt bearbeitet:
Zurück
Oben