IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Utilisation de GetItemProperties OPC


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut Utilisation de GetItemProperties OPC
    Bonjour à tous !

    Je développe une supervision industrielle qui communique avec un automate Schneider, pour cela, j'utilise une DLL nommée "OPCAutomation". Mon petit problème, c'est que je dois mettre au point un outil permettant de récupérer tous les Items (variables) contenu dans l'automate.
    Pour les noms des items aucun soucis, je les récupère ! En revanche impossible de récupérer le type de l'item (ex : BOOL, INT, ARRAY, STRING, ...).
    J'ai trouvé une fonction dans la DLL qui se nomme cherche "GetItemProperties" à priori, celle-ci correspondrait à ce que je cherche mais sans grande certitude.
    J'ai donc essayé de l'utiliser mais impossible, je pense qu'il manque quelque chose dans la syntaxe de la fonction.

    Je vous joins ci-dessous la définition de cette variable et en attendant, je vous remercie d'avance pour votre aide.

    Nom : GetItemPropertie.JPG
Affichages : 437
Taille : 104,0 Ko

    Cordialement.

    JbOne

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En lisant votre autre message, je me pose la question suivante : vous voulez faire du wlangage ou du vb.net ?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Bonjour romulus001 et merci pour votre réponse !

    Je me rends que cela perturbe les gens de lire mes posts sous plusieurs langage, pour répondre à votre question, je développe une supervision sous plusieurs langage (Windev et VB.Net) pourquoi ?
    Je vais peut-être rencontrer dans le futur une contrainte d'un des deux logiciels, c'est à dire, que je ne pourrai peut-être pas pouvoir exploiter une fonctionnalité car celle-ci n'est pas supporté. J'ai le choix au niveau développement, Windev est l'outil que je me sers en priorité mais il a ses limites et j'ai cru d'ailleurs que je ne pourrai tout simplement pas l'utiliser au niveau graphisme mais j'ai réussi à trouver une solution donc pour le moment tout va bien, après VB.net est un peu moins limité mais étant français, je préfère privilégier les outils français ! On nous impose déjà de parler anglais parce que c'est la langue internationale mais le français aurait très pu en faire de même ... enfin bref !

    Je pense avoir répondu à ta question.

    En te remerciant d'avance de ton aide.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jb_One36 Voir le message
    Je me rends que cela perturbe les gens de lire mes posts sous plusieurs langage, pour répondre à votre question, je développe une supervision sous plusieurs langage (Windev et VB.Net) pourquoi ?
    Dans le lien que tu avais posté, tu disais vouloir coder en vb.net alors que le message a été posté dans windev, ce qui prête à confusion. Par ailleurs, il ne faut oublier de mettre la version de windev utilisée, c'est toujours un plus.

    Citation Envoyé par Jb_One36 Voir le message
    VB.net est un peu moins limité mais étant français, je préfère privilégier les outils français ! On nous impose déjà de parler anglais parce que c'est la langue internationale mais le français aurait très pu en faire de même ...
    Je ne comprends pas le rapport entre parler anglais ou français, et utiliser des outils français, l'utilisateur, quant à lui, ne voit pas (et ne doit jamais avoir accès) le code source! Tout ce qu'il voit, c'est le résultat de la compilation, rien de plus...

    A part ça, en revenant dans le vif du sujet, faire du .NET en wlangage, ce n'est pas toujours très évident, moi même, j'ai parfois échoué dans la retranscription d'un code assez coton que j'avais fais en .NET (en VB) vers le wlangage, mais ce que windev sait faire et qui est intéressant, c'est de faire appel à des librairies .NET. Ce que tu peux faire, c'est de mettre tout ton code .NET dans une librairie à l'aide de visual studio, puis, tu ajoutes la librairie générée dans windev, et le tour est joué.
    Dernière modification par Invité ; 13/03/2017 à 16h58.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Lorsque je dis :
    VB.net est un peu moins limité mais étant français, je préfère privilégier les outils français ! On nous impose déjà de parler anglais parce que c'est la langue internationale mais le français aurait très pu en faire de même ... enfin bref !
    Je parle de l'outil de développement, VB .Net est un logiciel de programmation Microsoft donc anglais et Windev est un logiciel de programmation français donc autant maintenir les logiciels français pendant qu'ils sont encore là !

    Pour retranscrire le code VB pour le moment ça va puisque j'avance à petit pas ! Là ! Je suis coincé dans la détection du type de l'item, je n'arrive pas en récupérant le nom de l'item à dire si c'est un BOOL, INT, STRING, etc, j'ai parcouru le Web de fond en comble et je n'ai rien trouvé ou du moins la fonction que je cite dans mon 1er post "GetItemProperties", problème, c'est que l'exemple est donné dans une vielle version de VB, j'ai remplacé dans la déclaration de variable "Varian" par "Object" mais ça ne fonctionne pas je me retrouve avec le message "Le tableau spécifié n'est pas du type attendu".

    Je suis bloqué depuis mercredi de la semaine là dessus et là ! C'est pas cool ! Je perds un temps fou ... Je cherche donc désespérément de l'aide et c'est aussi pour ça que j'ai posté des messages un peu partout dans les forums.

    A croire que je dois être le seul dans le monde à faire ça car aucune réponse mis à part toi ... c'est donc très gentil de ta part de m'apporter un peu de soutient.

    En te remerciant d'avance.

    @+

    JbOne

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Pour défendre la technologie made-in-France, il suffit que tu achètes l'outil de PCSoft, et que tu paies la licence. Si après, tu n'utilises pas l'outil, mais tu utilises un autre outil, ce n'est pas important. Du moment que tu as payé, et que tu continues de payer.

    Bon, ok, je vais prendre mon médicament.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Invité
    Invité(e)
    Par défaut
    tu pourrais mettre ton code qui te cause problème? je suis en train de me noyer dans ce que tu dis

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous et désolé du retard !

    Pour répondre @tbc92:
    Pour défendre la technologie made-in-France, il suffit que tu achètes l'outil de PCSoft, et que tu paies la licence. Si après, tu n'utilises pas l'outil, mais tu utilises un autre outil, ce n'est pas important. Du moment que tu as payé, et que tu continues de payer.
    Je travail sous licence Windev 22, après, comme je l'ai dit : "Je dois mettre sur pied une supervision et peut importante le langage utilisé mais je privilégie Windev. Le fait de payer ne m'apporte aucune solution puisque je n'ai accès à aucun support venant de Windev mise à part le forum gratuit de PcSoft qui est très bien ! Je ne vais pas épiloguer là dessus car ce n'est pas le sujet de ce post et ne le sera jamais.

    Pour répondre @romulus001:
    tu pourrais mettre ton code qui te cause problème? je suis en train de me noyer dans ce que tu dis
    Effectivement, je me disperse trop donc je vais recadrer mon problème. Tu trouveras ci-dessous le code fait sous Windev et sous VB, il y a une fonction qui marche sous VB mais pas sous Windev alors que pourtant la syntaxe me paraît bonne.
    Je l'ai noté en majuscule.

    Alors, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    // La connexion
    PROCEDURE Connexion()
     
    sServeurOPC 	est une chaîne
     
    sServeurOPC = "Schneider-Aut.OFS.2"
     
    OServeur>>Connect(sServeurOPC)
     
    // on crée le groupe d'accès
    oGroupe = OServeur>>OPCGroups>>Add("GRP_Outils")
    SI oGroupe = Null ALORS
    	// le groupe n'a pas pu être créé
    	Erreur("Impossible de créer le groupe.")
    	RETOUR
    FIN
    oGroupe>>IsActive = True
    oGroupe>>IsSubscribed = True
    oGroupe>>UpdateRate = 500
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    // La partie qui permet de lister tous les items d'un automate
    ItemCount 			est un entier sur 8 octets
    PropertyIDs 		est un tableau dynamique
    Data 				est un tableau dynamique
    Errors 				est un tableau dynamique
    sAnOPCTextString  	est une chaîne
    OPCItemID 			est une chaîne
     
    // On vide le contenu du champ table
    TableSupprimeTout(TABLE_Item)
     
    // On récupère le nom de l'alias configuré dans le serveur OPC
    gsNomAlias = COMBO_Branche..ValeurAffichée
     
    // On crééle browser
    nomdeItem est une chaîne = ptabOpcBrowser>>GetItemID(gsNomAlias)
     
    ptabOpcBrowser>>movedown(nomdeItem)
    ptabOpcBrowser>>showLeafs()
     
    JAUGE_Item..BorneMax = ptabOpcBrowser>>Count
    GR_Chargement..Visible = Vrai
     
    POUR i = 1 _A_ ptabOpcBrowser>>Count
    	TableAjouteLigne(TABLE_Item,ptabOpcBrowser>>Item(i))
     
    	OPCItemID = oGroupe>>OPCItems>>AddItem(ptabOpcBrowser>>Item(i), 1)>>ItemID
     
    	// On tente la récupération du type de l'item
    	OServeur>>GetItemProperties(OPCItemID, ItemCount, PropertyIDs, Data, Errors)
     
    	POUR u = 1 _A_ ItemCount
    		sAnOPCTextString = NumériqueVersChaîne(PropertyIDs[u] + " " + Data[u])
    	FIN
    	JAUGE_Item = i
    	Multitâche(-1)
    FIN
    GR_Chargement..Visible = Faux
     
    CAS EXCEPTION:
    	Erreur("Là ! C'est la poisse !", OServeur>>GetErrorString(ExceptionInfo(errCode)))
    et le message d'erreur :
    Nom : erreur_opc.JPG
Affichages : 384
Taille : 11,7 Ko

    Alors je vais apporter une petite précision :
    Le code ci-dessus qui est en Windev et un copié/collé du code VB.Net mais à la différence que la fonction ItemID qui retourne un String ne fonctionne pas en Windev, j'ai un message d'erreur alors qu'en VB.Net cela fonctionne sans soucis avec la même syntaxe (je vais d'ailleurs noter ci-dessous le code en VB.Net pour que vous voyez si j'ai omis quelque chose)

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
            Dim ItemCount As Long
            Dim PropertyIDs() As Array
            Dim Data() As Array
            Dim Errors() As Array
            Dim OPCItemID As String
     
            ConnectedOPCServer = New OPCAutomation.OPCServerClass()
     
            If cbbServerList.Text <> "" Then
     
                Try
                    ConnectedOPCServer.Connect("Schneider-Aut.OFS.2")
                    'Set property for Group connection
                    ConnectedOPCServer.OPCGroups.DefaultGroupIsActive = True
                    ConnectedOPCServer.OPCGroups.DefaultGroupDeadband = 0
                    'Add group
                    ConnectedGroup = ConnectedOPCServer.OPCGroups.Add()
                    ConnectedGroup.UpdateRate = 3 * 1000
                    ConnectedGroup.IsSubscribed = True
     
                    'Browser
                    OpcBrowser = ConnectedOPCServer.CreateBrowser()
     
                    ' Le nom de l'alias du serveur OPC je l'ai mis en dur
                    OpcBrowser.GetItemID("Alias1")
     
                    OpcBrowser.MoveDown("Alias1")
     
                    OpcBrowser.ShowLeafs()
     
                    For i = 1 To OpcBrowser.Count
                        ListBox.Items.Add(OpcBrowser.Item(i))
     
                        ' ICI CA FONCTIONNE MAIS PAS EN WINDEV
                        OPCItemID = ConnectedGroup.OPCItems.AddItem("Alias1!" + OpcBrowser.Item(i), 1).ItemID
     
                        ' ICI C'EST LA FONCTION QUI NE FONCTIONNE PAS COMME EN WINDEV, JE VAIS DIRECTEMENT DANS L'EXCEPTION AVEC LE MESSAGE NOTE PLUS HAT
                        ConnectedOPCServer.GetItemProperties(OPCItemID, ItemCount, PropertyIDs, Data, Errors)
     
                        For u = 1 To ItemCount
                            'AnOPCTextString = Str(PropertyIDs(i)) + " " + Data(i)
                            'ListBox.Items.Add(AnOPCTextString)
                        Next
     
                        System.Threading.Thread.Sleep(1)
                    Next
     
                    'Add items
                    'GlobalOPCItems(0) = ConnectedGroup.OPCItems.AddItem("MP_GARE!MPG_Debit_T702", 1)
                    'GlobalOPCItems(1) = ConnectedGroup.OPCItems.AddItem("MP_GARE!MPG_StockSilo[3].NH", 1)
                    'GlobalOPCItems(2) = ConnectedGroup.OPCItems.AddItem("Reader_Device.CardNO", 2)
     
                    MessageBox.Show("connecté", "opc", MessageBoxButtons.OK)
                Catch ex As Exception
                    MessageBox.Show(ConnectedOPCServer.GetErrorString(ex.HResult), "OPCSample", MessageBoxButtons.OK)
                End Try
            End If

    J'espère vous avoir apporté toutes les précisions souhaitées ?

    En attendant, je vous remercie grandement pour votre aide.

    Cordialement.

    JbOne

  9. #9
    Invité
    Invité(e)
    Par défaut
    Et ce qui ne marche pas, c'est quoi? la fonction Connexion? l'appel de GetItemProperties?
    Sinon, quelle ligne est en erreur?

    A ta place, je ferais au plus simple, si ton code vb fonctionne, tu fais une dll à l'aide de visual studio contenant ce code, ainsi, dans windev, tu importes cette librairie dans ton projet.

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Pour répondre à tes questions :
    Ce qui ne fonctionne c'est l'appel de "GetItemProperties" et cela ne fonctionne ni en Windev ni en VB.Net.
    J'ai noté tout le code que j'utilise pour ma supervision afin de vous permettre de voir si je n'ai pas fait une erreur à un endroit.
    La connexion fonctionne parfaitement, la récupération de l'ensemble des items idem, c'est uniquement la fonction "GetItemProperties" qui ne fonctionne pas, c'est à dire le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    POUR i = 1 _A_ ptabOpcBrowser>>Count
    	TableAjouteLigne(TABLE_Item,ptabOpcBrowser>>Item(i))
     
    	OPCItemID = oGroupe>>OPCItems>>AddItem(ptabOpcBrowser>>Item(i), 1)>>ItemID
     
    	// On tente la récupération du type de l'item
    	OServeur>>GetItemProperties(OPCItemID, ItemCount, PropertyIDs, Data, Errors)
     
    	POUR u = 1 _A_ ItemCount
    		sAnOPCTextString = NumériqueVersChaîne(PropertyIDs[u] + " " + Data[u])
    	FIN
    	JAUGE_Item = i
    	Multitâche(-1)
    FIN
    Il se trouve à la ligne 28 de mon précédent post dans le second code, ici, je l'ai représenté en rouge, gras et souligné.

    En te remerciant d'avance.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jb_One36 Voir le message
    Effectivement, je me disperse trop donc je vais recadrer mon problème. Tu trouveras ci-dessous le code fait sous Windev et sous VB, il y a une fonction qui marche sous VB mais pas sous Windev
    Pourtant, tu précisais que ça marchait en vb...

    Sinon, ce que je verrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PropertyIDs 		est un tableau dynamique d'entiers
    Data 				est un tableau dynamique de Variant
    Errors 				est un tableau dynamique d'entiers
    Et essayer de voir si l'appel à la méthode de cette manière fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OServeur>>GetItemProperties(OPCItemID, ItemCount, &PropertyIDs, &Data, &Errors)

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Merci romulus001 pour ta réponse, je viens d'essayer ton code et malheureusement ça ne fonctionne pas ! C'est chiant !
    Je viens encore de passer la journée à chercher et je ne trouve rien, j'essai dans les sens (en VB et en Windev) et c'est le néant ...

    Bon ! J'ai encore dû mal m'exprimer :
    En VB la fonction "GetItemProperties" ne fonctionne pas tout comme en Windev, ce qui fonctionnait en VB mais pas en Windev c'était la fonction "ItemID" mais j'ai trouvé le problème donc tout est identique maintenant.

    En te remerciant d'avance.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Tu aurais une adresse email du support technique de la société qui a fait cette librairie?
    Si ton code marche maintenant en vb, comme je l'ai dit, tu te fais ta propre librairie .NET que tu importes dans windev, c'est précisément ce que j'ai fait l'an dernier quand je devais développer chez un client, j'ai passé beaucoup plus de temps à comprendre pourquoi la fonction de connexion ne fonctionnait pas, plutôt qu'à faire les traitements eux mêmes (on m'avait dit que le pc que j'avais était relié à leur base de données, sauf que ce n'était pas le cas).

Discussions similaires

  1. Problème utilisation fonction GetErrorString OPC
    Par Jb_One36 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 12/06/2017, 12h59
  2. [WD22] Problème utilisation fonction GetErrorString OPC
    Par Jb_One36 dans le forum WinDev
    Réponses: 1
    Dernier message: 13/03/2017, 10h01
  3. OPC jcl dynamique par utilisation de squelette
    Par pascalmagna dans le forum JCL - SORT
    Réponses: 1
    Dernier message: 17/07/2012, 11h10
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo