OpenOPC Verbindung in der Klasse offen halten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
0815
User
Beiträge: 3
Registriert: Donnerstag 6. September 2012, 10:38

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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 ;-)
Das Leben ist wie ein Tennisball.
0815
User
Beiträge: 3
Registriert: Donnerstag 6. September 2012, 10:38

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?
Antworten