# OPC-Items aus S7 / SINUMERIK 840D?



## Rückenwind (25 Februar 2008)

Moin!

Ich habe diesen Beitrag vor einigen Tagen im SIMATIC-Forum veröffentlicht und bislang keine Rückmeldung erhalten. Vielleicht ist er in diesem Forums besser aufgehoben:

Ich -als blutiger Anfänger aus der DB-Schiene kommend- soll aus einer Drehmaschine mit S7? SINUMERIK 840 D Daten (unter anderem Taktzeit, Schichtzahl, Stillstände/Werkzeugwechsel, Spindellaufzeit, Not-Aus-Ereignisse und weitere Späße) auslesen und in eine Datenbank (SQL) reinschreiben - zu Dokumentationszwecken.

Dabei soll der OPC-Standard genutzt werden. 

Nach einigen Internet-/Forenrecherchen habe ich folgende Fragen: 
1. Ist dies überhaupt möglich? 
2. Gibt es Alternativen zu OPC?
3. Muss ich diese OPC-items selbst definieren? 
4. Oder gibt es eine Liste mit allen OPC-items für die S7-300 oder 840D -Steuerung aus der ich mir die Items (z. B. für obige Daten) raussuchen kann? 
5. Wo finde ich diese Liste? Wo im Internet?
6. Welche Hard- und Software benötige ich? HW: Netzwerkkarte (Profibus, Ethernet, MPI, RS232), Schaltschrank-PC? SW: OPC-Software (Siemens, Softing/Deltalogic, INAT, ?), SQL-DB)


Gruß,
Tom


----------



## Chrissivo (7 März 2008)

Hallo Tom,
ich stehe zufällig gerade vor demselben Problem und kann dir da leider auch nur teilweise weiterhelfen:
Soweit ich es in Erfahrung gebracht habe, läuft auf jeder Sinumerik PCU-50 ein OPC-Server standardmäßig mit. Dieser Server lässt sich über DCOM ansprechen und ist unter dem Namen "OPC.SINUMERIK.Machineswitch" erreichbar.
Für deine Anwendung muss du sicherstellen, dass sie auf diesen DCOM-Dienst zugreifen kann. Dazu musst du zunächst deine PCU-50 starten. Sobald im Startmenü "SINUMERIK" erscheint, drückst du einmal die Cursor-Down- (Pfeil-Nach-Unten)-Taste und anschließend "Enter" bzw. "Input".
Im folgenden Menü wählst du den 4. Punkt (dann Enter) und dann den 1. Punkt (dann nochmal Enter).
Die PCU-50 startet neu und bietet dir eine Anmeldemöglichkeit an.
Sofern auf dem Ding keine Änderungen vorgenommen worden sind, lautet der Standard-Administrator "auduser" mit dem Passwort "sunrise".
Über Start\Ausführen (oder Windowstaste+R) öffnest du ein Befehlsfenster, indem du mit "dcomcnfg" die DCOM-Konfiguration starten kannst. Unter den Komponentendiensten findest du "Computer" und darunter "Arbeitsplatz". In der "DCOM-Konfiguration" findest du nun "OPC.SINUMERIK.Machineswitch". Im Eigenschaftsfenster dieses Dienstes wählst du den Registerreiter "Sicherheit". Im ersten Unterpunkt "Start- und Aktivierungsberechtigungen" wählst du "Anpassen" und anschließend "Bearbeiten". Hier musst du nun den Nutzer hinzufügen, unter dessen Konto schließlich auch dein Programm ausgeführt wird.
Damit die Änderungen aktiv werden, musst du die PCU-50 neu starten.

Die OPC-Items sind bereits definiert. Nach welcher Konvention kann ich dir leider nicht mit Sicherheit sagen, dies versuche ich selbst in einem anderen Thread gerade herauszufinden. Sie sind aber in jedem Fall von den verwendeten Datenbausteinen (Datablocks) abhängig, diese wiederum sind vom Machinenprogrammierer festgelegt.

Wenn du etwa mit einer S7-300 und einem CP (Kommunikationsprozessor) arbeitest, den Siemens OPC-Server verwendest und dir dann etwa über das S7-Protokoll deine Werte holen willst, dann legst du das während der Projektierung des OPC-Servers mit Step7 an. Bei der Sinumerik ist das - soweit mir bekannt - nicht möglich die OPC-Items frei zu bennen. Wichtig ist schließlich und endlich, dass dein OPC-Client genau den Namen der OPC-Items des OPC-Servers kennt.

Für die Entwicklung deines OPC-Klienten kann ich dir die Entwicklung eines Windows-Systemdienstes empfehlen, da für Programme, die auf einer PCU-50 ausgeführt werden ansonsten spezielle Bedingungen gelten, die ich leider nicht kenne. Man braucht dafür wohl üblicherweise ein Programming-Kit, dass dir Siemens bereit stellt und muss in einer Datei (REGIE.INI ???) entsprechend Einträge hinzufügen.

Für die Entwicklung deines OPC-Klienten etwa mit .NET benötigst du die OPC-Core-Components, die du kostenfrei von der OPC-Foundation herunterladen kannst. Dort sind im Wesentlichen 4 DLLs enthalten, die du nach der Installation etwa unter C:\Programme\Gemeinsam genutze Dateien\OPC Foundation.... oder so ähnlich finden solltest.

Bei OPC läuft das so, dass du dich zunächst auf einem OPC-Server anmeldest, dort eine Gruppe (OPC-Group) anlegst und dieser Gruppe die von dir gewünschten Items hinzufügst, was einem "Abonnieren" gleich kommt.  Sobald sich ein Item ändert, erhälst du eine  "Nachricht", vielmehr wird eine Interrupt-Methode, die du aufgrund deines verwendeten Interface implementieren musst, aufgerufen. In dieser Interrupt-Methode kannst du dir weitgehend frei überlegen, was du mit den gewonnenen Daten nun anstellst (etwa in eine SQL-DB schreiben).


Ich stehe gerade vor dem Problem, dass ich beim Hinzufügen der Items zu einer Gruppe eine COM-Fehlermeldung bekomme (HRESULT: 0x80004004). Wenn du soweit bist, und eine Lösung für dieses Problem gefunden hast, wäre es eine klasse Sache, wenn du mir dazu mal was schreiben könntest.

H2H

Christian


----------



## gravieren (7 März 2008)

Hi

Ich würde einen "anderen" Ansatz wählen.

Alle benötigen Daten , soweit ich das gesehen habe über die PLC "greifbar".

Von der PLC kannst du diese aufbereiten und z.b.  über MPI, TCP/IP  RS232 ...  bereitstellen.

Auf der Gegenstelle (normaler PC) läuft dann der OPC-Server, der die PLC-Daten "einsamelt". Nach dem einsammeln in eine beliebige Datenbank schreiben.


----------



## Chrissivo (7 März 2008)

Hi,
aber über die PLC (Sinumerik 840 D) ist doch meist schon über MPI mit der PCU-50 verbunden und auf die Daten kannst du somit aufbereitet zugreifen.
Um die DCOM-Konfiguration wirst du nicht herumkommen, auch wenn du deinen OPC-Server auf einem normalen PC laufen lässt.
Wenn man die Sinumerik 840 D per TCP/IP anbinden will, braucht man soweit ich weiß noch einen Kommunikationsprozessor. Der kostet für die 840 D alleine schonmal ~1.000€ (CP 343-1 Standard). Hinzu kommt, dass du die PLC noch entsprechend konfigurieren musst (und das vor allen Dingen können musst).
Der extra OPC-Server kostet nochmal, bedeutet eigentlich Redundanz und auch dieser will projektiert werden (Projektierungswerkzeug + Kenntnisse vorhanden?), ganz zu schweigen von dem zusätzlichen PC.

Also ich sehe da nicht, wo das einfacher und vor allen Dingen auch günstiger sein soll, bis auf den Zugriff auf die PCU-50.

Der eigentliche Aufwand liegt wohl auch in der Implementierung eines OPC-Clients, der getestet werden will. Je nachdem, wie flexibel der dann letzten Endes sein soll.

Viele Grüße und schönes WE

Christian

PS: Mit welcher Sprache wolltest du das denn umsetzen?


----------



## MgtDesign (27 Oktober 2015)

Hallo,

7 Jahre später stehe ich vor genau dieser Aufgabe. Ich soll aus einer Sinumerik 840d einen Datenbausstein mit Hilfe von OPC abrufen.
Gibt es dafür nun nachdem alles so lang her ist eine Lösung? Ich wäre für einen Gedankenanstoß sehr dankbar.

Gruß
Marcus


----------



## Hans54216 (27 Oktober 2015)

Hallo,

muss es OPC sein?

Ich verwende die "DotNetSiemensPLCToolBoxLibrary" (LibNoDave) ebenfalls für die 840d sl.
Ist recht einfach zu verwenden, sobald man sich einen kleinen Überblick verschafft hat. ;-)

Gruß


----------



## MgtDesign (27 Oktober 2015)

Hallo Hans,

davon hab ich noch nie was gehört. Ich hab eigentlich nur die Aufgabe diesen Baustein nach jedem Arbeitsgang abzurufen und dessen Inhalt in einer Datenbank zu speichern. Ich verzweifle auch schon daran. Ich habe bis jetzt eine TCP/IP Verbindung zur PCU. Wie zu einem Windowsrechner, mehr nicht. 
Ich habe versucht DCOM zu konfigurieren für den OPC.SINUMERIK.Machineswitch. Ich habe eben versucht zu recherchieren. Ich bin für jede Lösungsmöglichkeit offen.


----------



## Hans54216 (28 Oktober 2015)

Hallo Marcus,

wie mann bereits einigen vorigen Beiträgen in dieser Rubrik entnehmen kann ist LibNoDave eine in C++ programmierte Lib, die die Kommunikation mit der S7 händelt.
Die "DotNetSiemensPLCToolBoxLibrary" ist wie der Name schon sagt eine .Net Lib, in welcher die LibNoDave implementiert ist. Zusätzlich sind noch Beispiele und andere nützliche Tools enthalten.
Diese ist in C# programmiert und über GitHub als OpenSource(Vorteil/Nachteil) zugänglich.

Wenn sich deine Anwendung innerhalb der Beschränkung der OpenSource bewegt, ist dies sicher eine gute Möglichkeit für dein Vorhaben.

In welcher Programmiersprache programmierst du?

Verwende selber C#, wodurch sich die "DotNetSiemensPLCToolBoxLibrary" natürlich anbietet. Auch die Verbindung zur Datenbank z.B. Microsoft SQL oder Access ist mit ein wenig googeln bald programmiert. 

Gruß


----------



## LowLevelMahn (29 Oktober 2015)

@MgtDesign

mit der AGLink Library von Deltalogic kommst du lesend/schreibend an die S7(so wie Libnodave auch) aber auch an die NC-Daten (falls die gebraucht werden)


----------



## MgtDesign (29 Oktober 2015)

Hallo LoWLevelMahn,

danke fürden Hinweis. Ihr seid hier richtige Spezialisten, ich bin nur Student der die Aufgabe bekommen hat einen Datenbaustein einer S7 "irgendwie" auszulesen. Dazu kam der Hinweis das in der Sinumerik bzw. in der PCU50 bereits ein OPC Server läuft den ich dazu nutzen könnte. Ich habe mich darauf versteift und diesen OPC-SINUMERIK-Machineswitch auch gefunden aber mehr ging nicht. Ich hänge seit Wochen daran. Der erste Lichtblick seit langem war der Hinweis das das mit libnodave wohl kein Problem sei von Hans. Ich bin allerdings kein Programmierer sondern nur Mechatroniker. Ich versuche mein Bestes. Im Moment verstehe ich nur Bahnhof und lese einen Thread nach dem anderen. 
Ich bin für die/eure Hilfe hier echt dankbar.


----------



## LowLevelMahn (29 Oktober 2015)

> Ich bin allerdings kein Programmierer sondern nur Mechatroniker.



Nur zur Klärung: Du kann in keiner Programmiersprache eine einzige Zeile kodieren?

Was ist das Ziel der Daten (wenn wir mal so tun als würde das schon gehen) - eine andere SPS, SAP, Software von euch?


----------



## MgtDesign (29 Oktober 2015)

Ich habe gerade mit meinem Betreuer gesprochen. Ich habe ein Sinumerik 840d Powerline. die Kommuniziert über MPI mit einer PCU50. Der Datenbaustein ist in der S7 und enthält Prozessdaten die Ausgelesen werden sollen. Danach soll alles in eine Datenbank zur Archivierung oder in eine CSV Datei die man später dann in die Datenbank einlesen kann.

Im Studium habe ich in C Miniprogramme geschrieben mit den Grundbedingung (if, while; case etc.) Also nicht wirklich viel.

Ich denke vieleicht ist das Programmieren zu hoch für mich und ich muß andere Lösungen finden oder kaufen, Es ist gerade ein wenig frustrierend.

Dennoch danke für eure Hilfe!


----------



## LowLevelMahn (29 Oktober 2015)

> Ich denke vieleicht ist das Programmieren zu hoch für mich und ich muß andere Lösungen finden oder kaufen, Es ist gerade ein wenig frustrierend.



Wie ist denn deine Vorgabe? etwa so? "Mach irgendeine Lösung - programmieren, fertig Lösung kaufen oder sonstiges - aber mach einfach was?"
solltest du laut deinem Betreuer war programmieren (welche Programmiersprache) - oder es können, oder hat der genau so wenig einen Plan wie du? - alles sehr wirr

von wem kommt die OPC-Server-Info?, habt ihr den schonmal in einem Projekt verwendet - kann der Umsetzer helfen?


----------



## st_rupp (17 November 2015)

Hallo Zusammen, 

ich stehe vor einem ähnlichen Problem: Für ein Forschungsprojekt an der Uni soll ich aus einer GROB G350, BJ 2012 mit SINUMERIK 840D SL Daten zu den Zuständen der verschiedenen Aggregate, zum aktuellen Programm, etc. auslesen. 

Hintergrund ist, dass an den einzelnen Modulen der Maschine Sensoren zur Leistungsmessung installiert werden und die so gewonnenen Energiedaten mit den Zustandsdaten der Maschine verknüpft werden sollen.
Idealerweise möchte ich das so lösen, dass in einem bestimmten Takt (z.B. jede Sekunde) die Daten der Maschine ausgelesen und zusammen mit den Daten der Leistungsmessung in eine SQL Datenbank geschrieben werden. Von dort aus soll dann die weitere Analyse erfolgen. 

Das Ganze steht noch am Anfang und ich habe noch nie mit CNC Steuerungen gearbeitet. Aktuell bin ich dabei zu recherchieren wie ich auf die Steuerung zugreifen kann. Dabei bin ich auf die OPC Spezifikation gestoßen.. kann mir jemand sagen, ob die für das Vorhaben prinzipiell geeignet ist bzw. ob es irgendwelche Alternativen gibt? 
Wird der OPC-Server auf der NCU installiert oder auf einem extra Rechner? Leider bekomme ich aktuell kaum Unterstützung vom Lehrstuhl, dem Hersteller oder irgendwem, daher bin ich mehr oder weniger auf mich allein gestellt. Wenn ich jetzt anfange etwas an der Maschine zu ändern und nachher geht die nicht mehr hab ich ein größeres Problem. Daher wäre eine Lösung bei der ich möglichst wenig an der Steuerung der Maschine muss sehr angenehm... Vorgaben gibt es praktisch keine, es soll nur möglichst auch auf andere Werkzeugmaschinen (auch mit Nicht-Siemens-Steuerung) übertragbar sein und wenn möglich open-source oder Eigenentwicklung.. kommerziell ist eher schlecht. 
Bislang einziger Erfolg war ein SSH und VNC Zugriff auf die NCU.. aber das bringt mich auch irgendwie nicht weiter.

Welche Daten kann ich denn aus der SINUMERIK überhaupt auslesen? Gibt es da irgendeine Liste oder Tabelle? Sollte ja eigentlich in der Doku der Maschine stehen, habs aber noch nicht gefunden.. Interessant wären z.B. Status bzw. Drehzahlen der Antriebe und Aggregate, aktuelles Programm, Beginn und Fertigstellung eines Programms usw. 


Bin für jeden Hinweis sehr dankbar!

Ps: Habe mein Problem auch mal im Siemens Forum gepostet: https://support.industry.siemens.com/tf/ww/de/posts/sinumerik-840d-daten-auslesen-f-r-energetische-analyse-opc/138344/?page=0&pageSize=10


----------



## MgtDesign (3 Dezember 2015)

Hallo an alle,

ich habe jetzt viel recherchiert und ausprobiert. Hier meine Ergebnisse:
Der OPC Server (OPC.SINUMERIK.Machineswitch) Zugriff über die PCU50 ist unglaublich kompliziert und nicht sehr stabil durch die DCOM Verbindung. Mit Alternativen die kostenfrei verfügbar sind also beispielsweise Bibliotheken wie LibnoDave kann man mit einem MPI-Adapter aber "nur" auf den PLC Teil zugreifen. Auch Kaufprogramme wie von Deltalogic machen bei der PLC Schluss. Wobei ich persönlich mich für diese Lösung entschieden habe und sie funktioniert sehr gut. Wenn man jetzt noch die NC Variablen will gäbe es noch die RPC (Remote Procedure Call) von Siemens. Kostet aber richtig Geld und selbst Siemens sagt das es für eine neue Projektierung auch eigentlich zu alt ist.
Jetzt bringt Siemens ein komplett neues System auf den Markt, ich hatte mit Vertretern von Siemens vor einigen Tagen einen Termin. Es wird eine Software geben bzw. Pakete die keine wünsche mehr offen lassen, d.h. alles aus dem HMI bekommen was die Steuerung hergibt. Das ganze nennt sich dann "Analyze My Condition". Allerdings wahrscheinlich sehr teuer. Die neue Palette hört auf den Namen " SINUMERIK integrate for production"
Wenn man kein "Hardcore-Programmierer" ist, bin ich zu dem Schluss gekommen, ist die Kombination SINUMERIK und Prozessdaten ein ziemlich schwieriges Thema.


----------



## LowLevelMahn (3 Dezember 2015)

> Der OPC Server (OPC.SINUMERIK.Machineswitch) Zugriff über die PCU50 ist unglaublich kompliziert und nicht sehr stabil durch die DCOM Verbindung.



der ist auch ohne DCOM nicht besonders stabil 



> Auch Kaufprogramme wie von Deltalogic machen bei der PLC Schluss. Wobei ich persönlich mich für diese Lösung entschieden habe und sie funktioniert sehr gut.



also ich lese/schreibe mit Deltalogic/AGLink problemlos NCK-Variablen (R-Parameter, Achsenpositionen, GUDs usw.) von 840D PL und SL, und auch PLC-Variablen (DBs, Merker, ...)


----------



## MgtDesign (3 Dezember 2015)

Da geb ich dir absolut recht. Ich meinte mit Kaufprogramm Deltalogic Accon EasyLog. Damit komm ich nicht auf die NC- Variablen. Und ich sagte ja Programmierer wie du die schaffen das auch. Das war eher mein Fazit, und da mir hier wirklich geholfen wurde und alle sehr nett sind, dachte ich ich lasse nochmal einen Abschlusskommentar hier.


----------

