Serveur OPC - temps de lecture/écriture des items

Résolu
moyo13 Messages postés 6 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 27 août 2008 - 25 août 2008 à 17:54
Clad74 Messages postés 44 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 5 avril 2013 - 29 août 2008 à 12:40
Bonjour,

J'utilise actuellement un serveur OPC pour superviser un automate siemens. Plus précisément, il s'agit d'un automate sur PC, j'utilise une carte CP5613 associée au logiciel WinAC.

Le serveur OPC a été codé en VB.

Côté superviseur, il me faut mettre à jour de nombreux items (180 mots) à chaque cycle, ce qui nous prend environ 1 secondes.

Côté automate, la lecture de tous les items prend également environ 1 seconde.

Je trouve ça énorme !

Savez-vous s'il est possible de diminuer ce temps de lecture/écriture des items ? et si oui comment ?

merci !!!

15 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 août 2008 à 08:08
Salut,
Est ce que tu ecris TOUT les mots d'un seul coup (tableau) ou est ce que tu les fait un par un?

Est ce que tu utilises le mode Synchrone ou aSynchrone?

Sinon essaie de regarder le mode Asynchrone

@+: Ju£i€n
Pensez: Réponse acceptée
3
Clad74 Messages postés 44 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 5 avril 2013
26 août 2008 à 09:20
Bonjour,

j'ai le même problème, mon temps de dialogue(ethernet) entre le PC et l'automate est long.

J'utilise un server OPC de KEP, et j'ai remarqué qu'on pouvait en manuel écrire ou lire en sychrone ou Asynchrone mais où faut t'il  dire qu'il faut utiliser le Asynchrone.

Quelqu'un a t'il une idée?

Merci d'avance.
0
moyo13 Messages postés 6 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 09:23
merci jrivet !

J'écris mot par mot. Tu as raison, je vais essayer de passer tous les mots dans un seul tableau.

En revanche, je ne trouve nulle part dans le code le mot synchrone ou asynchrone. Sais-tu où intervient exactement ce paramètre.

Tu as une idée pour le temps de lecture ?

Vincent
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 août 2008 à 09:33
Re,

> [auteur/CLAD74/899754.aspx clad74]: Je crois qu'il y a deux methodes pour la l'écriture.
Pour un OPCGroup il existe les méthodes SyncWrite et AsyncWrite (existe aussi SyncRead et AsyncRead)

>[auteur/MOYO13/1462804.aspx moyo13] : Meme remarque pour la lecture , si je me souviens bien tu peux lire une plage de mot (ils seront retourner dans un tableau non?) pour peu qu'ils soient contigus.

@+: Ju£i€n
Pensez: Réponse acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
moyo13 Messages postés 6 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 09:44
ok, j'essaye ça et je vous tiens au courant!
0
Clad74 Messages postés 44 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 5 avril 2013
26 août 2008 à 10:07
merci jrivet, oui il y a bien ces méthodes mais comment les utiliser? et quelle est la différence entre syncwrite et asyncwrite? de ce que j'ai compris le syncwrite attend quelque chose ne n'attend pas le asyncwrite?

Merci de ton aide
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 août 2008 à 10:19
Re:

>[auteur/CLAD74/899754.aspx clad74] : si je me souviens bien (rien est moins sur)
Un Variable de type OPCGroup
possède un événement AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long

Il faut simplement déclarer ta variable OPCGroup comme étant une variable avec des événements. Private WithEvents GroupeOPC As OPCGroup

Lorsque tu fais un SyncWrite, ton programme VB6 reste bloqué sur cette ligne jusqu'à la fin des écriture. Alors que qu'avec le AsyncWrite, il envoie au serveur tout ce qu'il faut pour les ecritures, et le serveur se "démerde" , ton VB6 continue alors son exécution. puis lorsque le serveur à terminer toutes les écriture il t'envoie un évènement AsyncWriteComplete et ensuite c'est à toi de le traiter comme tu veux.

Donc avant d'utiliser Sync ou Async, il faut que tu saches si tu à besoin que ton programme continue son exécution ou bien si tu à besoin qu'il attende que les Items soient écrits.

@+: Ju£i€n
Pensez: Réponse acceptée
0
Clad74 Messages postés 44 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 5 avril 2013
26 août 2008 à 10:49
a oki, mais dans l'écriture  variable.write, le faite qu'il y ai un temps de dialogue d'environ une seconde avec l'automate provient'il de sunc ou async?

Moi j'utilise l'èvenement "DataChange".
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 août 2008 à 10:59
Re,
Et bien je ne sais pas cela peut venir de plein de chose (PC, Réseau, Automate) Es tu allé voir sur le site du constructeur pour voir si il y a déjà des problème connus?

@+: Ju£i€n
Pensez: Réponse acceptée
0
Clad74 Messages postés 44 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 5 avril 2013
26 août 2008 à 11:05
ui j'ai appelé les constructeur, mais ils n'en savent pas plus. Il m'ont dit que ça pouvait venir du réseau mais je n'est pas vu beaucoup de différence en enlevant les autres appareils branché.

Merci de m'avoir aidé
0
moyo13 Messages postés 6 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 11:12
Je viens de vérifier et au niveau du programme automate j'utilise une bloc SFC20 qui (a priori) copie tous les mots en une seule fois.

La lecture des 362 mots prend 1,4 sec...

Est-ce qu'il vaut mieux utiliser un autre type de bloc?
0
moyo13 Messages postés 6 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 27 août 2008
27 août 2008 à 14:03
Pour info, je viens de modifier le code VB pour envoyer tous les mots dans un seul tableau au lieu de les envoyer 1 par 1. Ca a permis de diminuer le temps d'écriture des 180 mots de 600 ms à 15ms !


Du point de vue de la lecture, l'automate recopie les 180 mots dans une nouvelle DB (base de données) avec un bloc SFC20. Cette opération prend plus de 1 seconde. La solution est sans doute de travailler directement à partir de la DB source dans laquelle le serveur OPC écrit. Ca évite de faire une copier-coller inutile... C'est ce qu'on va tester!
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
27 août 2008 à 14:50
Re,
Sinon est ce que tu as regarder tu coté de l'événement DataChange?

@+: Ju£i€n
Pensez: Réponse acceptée
0
moyo13 Messages postés 6 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 27 août 2008
27 août 2008 à 14:57
Sur certains bites d'état que le superviseur et l'automate s'échangent, la lecture se fait sur évènement.
Dans le cas des 180 mots, ils doivent être complètement écrits avant d'être utilisés par le programme automate. Pour cela, on utilise un bit "flag" que le superviseur passe à 1 lorsqu'il a terminé l'écriture et que l'automate repasse à 0 lorsqu'il a terminé le copier-coller.
0
Clad74 Messages postés 44 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 5 avril 2013
29 août 2008 à 12:40
Comment fait tu dans le programme VB pour envoyé tout tes mot en 1 seule fois et ne pas les écrire 1 par 1???
0
Rejoignez-nous