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

Signaler
Messages postés
6
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
27 août 2008
-
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Statut
Membre
Dernière intervention
5 avril 2013
-
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

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Statut
Membre
Dernière intervention
5 avril 2013

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.
Messages postés
6
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
27 août 2008

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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
6
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
27 août 2008

ok, j'essaye ça et je vous tiens au courant!
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Statut
Membre
Dernière intervention
5 avril 2013

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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Statut
Membre
Dernière intervention
5 avril 2013

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".
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Statut
Membre
Dernière intervention
5 avril 2013

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é
Messages postés
6
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
27 août 2008

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?
Messages postés
6
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
27 août 2008

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!
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Re,
Sinon est ce que tu as regarder tu coté de l'événement DataChange?

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
6
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
27 août 2008

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.
Messages postés
44
Date d'inscription
mercredi 18 avril 2012
Statut
Membre
Dernière intervention
5 avril 2013

Comment fait tu dans le programme VB pour envoyé tout tes mot en 1 seule fois et ne pas les écrire 1 par 1???