making a opc client in Python and use opc server Events

jp.eugster at googlemail.com jp.eugster at googlemail.com
Thu Jun 28 10:55:22 EDT 2007


On 4 juin, 11:32, getelectro... at gmail.com wrote:
> Hi all
> I have a sample code to implement opc client in Python. i use a
> file .py making by makepy with pythonwin for Com Interface.
> i can get all server in machine, connect to server opc, disconnect,
> add group, add item, read, write item in server opc.
>
> import win32com.client  # librairie pour utiliser l'interface COM/DCOM
> from win32com.client import gencache
> gencache.EnsureModule('{DFB83232-A952-11D2-A46B-00C04F796375}', 0, 1,
> 0)
>
> for svr in opcserver.GetOPCServers():
>     print svr
>
> #connect to server OPC Demo Simulation from Matrikon
> opcserver.Connect('Matrikon.OPC.Simulation.1')
>
> # Instance object Groups
> groups=opcserver.OPCGroups
> #add group
> group=groups.Add('Group1')
>
> #instance onject Items
> items=group.OPCItems
> # add item in server opc
> tem=items.AddItem('File1.item1',1)
>
> #read item value
> item.Read(win32com.client.constants.OPCDevice)
>
> # write a new value
> item.Write(100)
>
> #read item value
> item.Read(win32com.client.constants.OPCDevice)
> #if no pb you have 100 :)
>
> #Disconnect
> #opcserver.Disconnect()
>
> BUT, and BUT, i want to use a event from opc server for uodating item
> value with this below class. And i don't konw how make it!!!!!!!!
> help me plz
>
> opcserver=win32com.client.Dispatch('OPC.Automation.1')
> and now i want to use events from opc server. in a class:
> class DIOPCGroupEvent:
> class DIOPCGroupsEvent:
> class DIOPCServerEvent:

Try this:

# Event Handlers
class ServerEvent:
	def __init__(self):
		print 'Init ServerEvent'

	def OnServerShutDown(self, Reason):
		print 'OnServerShutDown', Reason

class GroupEvent:
	def __init__(self):
		print 'Init GroupEvent'

	def OnAsyncCancelComplete(self, CancelID):
		print 'OnAsyncCancelComplete', CancelID

	def OnDataChange(self, TransactionID, NumItems, ClientHandles,
ItemValues, Qualities, TimeStamps):
		print 'OnDataChange', zip(ClientHandles, ItemValues, Qualities)

	def OnAsyncReadComplete(self, TransactionID, NumItems, ClientHandles,
ItemValues, Qualities,
						 TimeStamps, Errors):
		print 'OnAsyncReadComplete', zip(ClientHandles, ItemValues,
Qualities)

	def OnAsyncWriteComplete(self, TransactionID, NumItems,
ClientHandles, Errors):
		print 'OnAsyncWriteComplete', zip(ClientHandles, Errors)

class GroupsEvent:
	def __init__(self):
		print 'Init GroupsEvent'

	def OnGlobalDataChange(self, TransactionID, GroupHandle, NumItems,
ClientHandles, ItemValues,
						 Qualities, TimeStamps):
		print 'OnGlobalDataChange', zip(ClientHandles, ItemValues,
Qualities)

opc = DispatchWithEvents('Matrikon.OPC.Automation.1', ServerEvent)

groups = DispatchWithEvents(opc.OPCGroups, GroupsEvent)
groups.DefaultGroupIsActive = True
groups.DefaultGroupUpdateRate = 2000

group1 = DispatchWithEvents(groups.Add('G1'), GroupEvent)
group2 = DispatchWithEvents(groups.Add('G2'), GroupEvent)
#etc ...

It works for the GroupsEvents but I don't get the GroupEvent for each
group, I may still do someting wrong..




More information about the Python-list mailing list