Serveur OPC - temps de lecture/écriture des items [Résolu]

Messages postés
6
Date d'inscription
lundi 25 août 2008
Dernière intervention
27 août 2008
- - Dernière réponse : Clad74
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
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 !!!
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
3
Merci
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

Merci jrivet 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de jrivet
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Dernière intervention
5 avril 2013
0
Merci
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.
Commenter la réponse de Clad74
Messages postés
6
Date d'inscription
lundi 25 août 2008
Dernière intervention
27 août 2008
0
Merci
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
Commenter la réponse de moyo13
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
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
Commenter la réponse de jrivet
Messages postés
6
Date d'inscription
lundi 25 août 2008
Dernière intervention
27 août 2008
0
Merci
ok, j'essaye ça et je vous tiens au courant!
Commenter la réponse de moyo13
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Dernière intervention
5 avril 2013
0
Merci
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
Commenter la réponse de Clad74
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
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
Commenter la réponse de jrivet
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Dernière intervention
5 avril 2013
0
Merci
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".
Commenter la réponse de Clad74
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
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
Commenter la réponse de jrivet
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Dernière intervention
5 avril 2013
0
Merci
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é
Commenter la réponse de Clad74
Messages postés
6
Date d'inscription
lundi 25 août 2008
Dernière intervention
27 août 2008
0
Merci
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?
Commenter la réponse de moyo13
Messages postés
6
Date d'inscription
lundi 25 août 2008
Dernière intervention
27 août 2008
0
Merci
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!
Commenter la réponse de moyo13
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
Sinon est ce que tu as regarder tu coté de l'événement DataChange?

@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
6
Date d'inscription
lundi 25 août 2008
Dernière intervention
27 août 2008
0
Merci
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.
Commenter la réponse de moyo13
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Dernière intervention
5 avril 2013
0
Merci
Comment fait tu dans le programme VB pour envoyé tout tes mot en 1 seule fois et ne pas les écrire 1 par 1???
Commenter la réponse de Clad74

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.