# OPC-DA und Python (OpenOPC for Python)



## derhendrik (2 November 2014)

Hallo SPS-Forum! 

Kurzer Hintergrund: Zurzeit beschäftige ich mich in einem Uniprojekt mit der Programmierung einer Fertigungsstraße. Diese besteht aus einzelnen, autonomen Modulen, welche durch SPSen verschiedener Hersteller gesteuert werden.
Meine Aufgabe ist es nun, diese Module zu einer gesamten Anlage zusammenzuführen und eine Anbindung an z.B. ein HMI zu ermöglichen. Da es keine Forderung nach Echtzeit gibt und Windows eben gut mit dem OPC-Standard umgehen kann , plane ich die Ablaufsteuerung auf dem PC laufen zu lassen.

Jetzt zu meiner eigentlichen Frage:
Irgendwie muss ich ja die Logik hinter der Ablaufsteuerung implementieren. Da ich eine freie Python Bibliothek gefunden habe (http://openopc.sourceforge.net/) plane ich, das auch in Python umzusetzen. 

Hat jemand von euch die schonmal benutzt?
Ist es möglich, sich gleichzeitig mit mehreren Servern der SPSen zu verbinden?

Mit opc.servers() lasse ich mir die Server anzeigen, nun würde ich gerne statt opc.connect('Server_1') eben soetwas wie opc.connect('Server_1','Server_2','Server_3') umsetzen.

Schlussendlich soll das dann ungefähr so laufen:

Wenn (Modul_1_Status == Vorgang_abgeschlossen && Eingabe_in_HMI_erfolgt == True):
          Modul_2_Status == Vorgang_starten;

Hier muss ich ja sowohl Zugriff zum Server_1 (Modul_1_Status) als auch zum Server_2 (Modul_2_Status) haben.

Ich würde mich freuen, wenn ihr mir hierbei weiterhelfen könntet. Ich glaube, dass ich hier wieder mehr abgebissen habe, als ich kauen kann.
Falls ich mich komplett auf dem Holzweg befinde, lasst es mich bitte wissen!
So ganz glücklich bin ich mit dem Ansatz (Ablaufsteuerung auf PC) ebenfalls noch nicht. Leider ist es sehr schwer, an eine gute Dokumentation bzw. Gratistools für OPC zu kommen.
Gibt es vielleicht weitere kostenlose Bibliotheken, die sich besser anbieten (zB für Java oder C?)

PS: Den OPC-DA Standard habe ich gewählt, weil wir unter anderem auch einige Mikrocontroller benutzen, für die es ebenfalls eine OPC-DA Bibliothek gibt. Das funktioniert auch soweit ganz gut.

Wünsche euch einen schönen Sonntag Abend

Hendrik


----------



## TFTD (3 November 2014)

Hallo Hendrik,

da ich mich zufällig mit dem Thema die letzte  Woche beschäftigt habe mal meine wenigen Erkenntnisse. Ich musste mich  nur zu einem OPC Server verbinden, aber probieren würde ich es so:


```
import OpenOPC
opc1 = OpenOPC.client() #oder den anderen Befehl den es da gibt nehmen.
opc2 = OpenOPC.client()


opc1.connect(''Server_1')
opc2.connect(''Server_2')
```

An die Variablennamen zu kommen, kann ein wenig knifflig sein.
Worauf  man auch achten sollte, über die OPC Schnittstelle kannst du unabhängig  davon in welchem Status die SPS gerade ist, Variablen lesen und  schreiben. Also auch mal übertrieben gesagt, während er einen Block  gerade noch auswertet. Da sollte man evtl. noch eine Logik definieren  die das mit einem "Handshake" regelt. Da wir jetzt bei uns  wahrscheinlich einen anderen Weg gehen (Send/Receive via TCP bei einer  Simatic) hört hier man wissen auch schon fast wieder auf.

Zu Alternativen zu Python kann ich nichts sagen.


----------



## derhendrik (3 November 2014)

Haha, muss gerade echt in mich hineingrinsen, passt perfekt. Vielen 1000 Dank!

Meine andere Idee wäre es gewesen, mit einem Tool aus dem Internet verschiedene OPC-Tags der SPSen zu "bridgen" und dann die Logik auf einer der SPSen ablaufen zu lassen.
Außerdem habe ich gestern noch ein bisschen freeware für Java (openSCADA oder JEasyOPC) gefunden, nur leider stelle ich mich damit (Java und Eclipse IDE) immer ein bisschen dämlich an =)

Nochmals vielen Dank und dir viel Erfolg bei deinen Vorhaben!


----------

