On 28 juin, 16:55, [EMAIL PROTECTED] wrote: > On 4 juin, 11:32, [EMAIL PROTECTED] 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..- Masquer le texte des messages > précédents - > > - Afficher le texte des messages précédents -
In order to get the GroupEvent, you have to keep a reference to the group you add eg: g1 = groups.Add('G1') group1 = DispatchWithEvents(g1, GroupEvent) etc...
-- http://mail.python.org/mailman/listinfo/python-list