Seite 1 von 1

OpenOPC Verbindung in der Klasse offen halten

Verfasst: Donnerstag 6. September 2012, 11:02
von 0815
Hallo,

ich habe folgendes Problem:

wie halte ich in einer erstellten Klasse die OPC verbindung aufrecht, um mich nicht bei jeder OPC anfrage neu verbinden zu müssen?

Code: Alles auswählen

import OpenOPC

class OPC_Client():
 def __init__:
  self.opc = OpenOPC.client()
  self.opc.connect('Simatic.OPC')
 def OPC_read():
  self.opc.connect('Simatic.OPC') # hier muss .connect nochmals aufgerufen, was ich eigentlich vermeiden will
  xy = self.opc.read('xy')
  self.opc.close() # wird nur verwendet, da ich mich bei jedem aufruf von OPC_read, neu verbinden muss und der OPC Server bei häufigen .connect ohne .close hängt / wenn die verbindung aufrecht erhalten wird, wird .close nurnoch beim beenden des Programms ausgeführt. 
  return xy

opc=OPC_Client()
print opc.read
hätte da jemand einen Lösungsansatz, bzw kleine hilfestellung?

Re: OpenOPC Verbindung in der Klasse offen halten

Verfasst: Donnerstag 6. September 2012, 11:09
von EyDu
Hallo und willkommen im Forum!

Indem du die Verbindung nur ein einziges Mal aufbaust und erst wieder schließt, wenn du die Verbindung nicht mehr brauchst ;-)

Re: OpenOPC Verbindung in der Klasse offen halten

Verfasst: Samstag 8. September 2012, 21:57
von 0815
Hallo,
Danke schonmal für die Antwort.
Vieleicht hab ich es etwas unklar formuliert:
Wenn ich versuche die Verbindung offen zu lassen, und mich nur einmal verbinde, bekomme ich einen fehler da er wieder ein .connect() erwartet (das ist ja mein Problem).
so funktioniert es nicht:

Code: Alles auswählen

import OpenOPC

class OPC_Client():
 def __init__:
  self.opc = OpenOPC.client()
  self.opc.connect('Simatic.OPC')
 def OPC_read():
  xy = self.opc.read('xy')
  return xy

opc=OPC_Client()
while True:
 print opc.read
wenn ich bei jedem OPC_read() aufruf nur eine verbindung herstelle, hängt der Siemens OPC Server kurzzeitig, deshalb habe ich im vorherigen beispiel das .close() mitverwendet, um jeden verbindungsaufbau auch wieder richtig zu beenden.

Noch jemand eine Idee wie ich den OPC Server mit einem einmaligen .connect in OPC_Client.__init__() offenhälte?