Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > making a opc client in Python and use opc server Events

Reply
Thread Tools

making a opc client in Python and use opc server Events

 
 
getelectronic@gmail.com
Guest
Posts: n/a
 
      06-04-2007
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:

 
Reply With Quote
 
 
 
 
jp.eugster@googlemail.com
Guest
Posts: n/a
 
      06-28-2007
On 4 juin, 11:32, (E-Mail Removed) 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..

 
Reply With Quote
 
 
 
 
jp.eugster@googlemail.com
Guest
Posts: n/a
 
      08-07-2007
On 28 juin, 16:55, (E-Mail Removed) wrote:
> On 4 juin, 11:32, (E-Mail Removed) 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...

 
Reply With Quote
 
getgroup
Guest
Posts: n/a
 
      08-08-2007
On 7 août, 07:17, (E-Mail Removed) wrote:
> On 28 juin, 16:55, (E-Mail Removed) wrote:
>
>
>
>
>
> > On 4 juin, 11:32, (E-Mail Removed) wrote:

>
> > > Hi all
> > > I have a sample code to implementopcclientinPython. i use a
> > > file .py making by makepy with pythonwin for Com Interface.
> > > i can get all server in machine, connect to serveropc, disconnect,
> > > add group, add item, read, write item in serveropc.

>
> > > import win32com.client # librairie pour utiliser l'interface COM/DCOM
> > > from win32com.clientimport gencache
> > > gencache.EnsureModule('{DFB83232-A952-11D2-A46B-00C04F796375}', 0, 1,
> > > 0)

>
> > > for svr in opcserver.GetOPCServers():
> > > print svr

>
> > > #connect to serverOPCDemo 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 serveropc
> > > 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 fromopcserver 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 fromopcserver. 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...- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -


Hi Yes i try it.
But when a client get a datachange the script is bloked
you must kill a main thread, this solution is not good.

i have experimented this programme:

http://groups.google.fr/group/cn.bbs...cb94a0aca9e8d6

it run when a item in Group is changed But you can't do anything in a
loop WHEN.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Writing an OPC client with Python ? pierlau Python 6 3 Weeks Ago 10:41 AM
Python OPC Client for RSLINX baner Python 3 10-27-2011 06:38 PM
RE: Writing an OPC client with Python ? Walter S. Leipold Python 0 03-03-2006 09:03 PM
Events Events Events Please Help Chris ASP .Net Web Controls 0 08-30-2005 08:21 PM
OPC Server in Python F. GEIGER Python 4 05-18-2004 04:00 PM



Advertisments