[Panorama] Accès aux élements graphiques d'une vue par script

Partie du forum pour tout ce qui concerne la supervision industrielle. Forum, conseil, astuce et entraide sur les logiciels de supervision tels que PC Vue, Vijeo designer, WinCC, win cc, monitor pro, so machine, Citect, Intouch .
Répondre
BruceBacc
Code sa première boucle
Code sa première boucle
Messages : 17
Enregistré le : 09 janv. 2023, 18:40

[Panorama] Accès aux élements graphiques d'une vue par script

Message par BruceBacc »

Bonjour
Contrairement à d'autres SCADA, je suis infichu de trouver dans Panorama comment on accède par script aux éléments graphiques d'une vue tels que bouton, texte, rectangle...
Il existe bien des propriétés d'animation sur l'élément graphique lui-même, mais elle sont limitées.
Et de toute façon, je souhaite le faire par script.
Le script est un sous-composant (un object) de la vue.
Si on peut accéder par script à tous les sous-composants d'une vue tels que External HMI élement (listbox, navigateur web, ...) , je ne vois pas comment accéder aux éléments graphiques.
J'ai pourtat fouillé dans l'aide en ligne de fond en comble...
Une idée ?
Modifié en dernier par BruceBacc le 13 janv. 2023, 13:38, modifié 1 fois.
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: [Panorama] Accès aux élements graphiques par script

Message par DurandO »

Bonjour,
je ne sais pas si cela t'aidera.
Si tu as accès aux divers objet de ta page (Form) tu dois pouvoir en lister les controls.
Une fois que tu connais le nom du controls qui t'interesse, voici de qu'elle manière j'ai procédé pour pointer dessus (en VB) :

Code : Tout sélectionner

Public Function FindObjet(ByVal Forme As Form, [b][highlight=yellow]ByRef[/highlight][/b] [b]ctrl[/b] As Control, ByVal name As String, Optional ByRef Idx As Integer) As Boolean
Dim titi As String
FindObjet = False
For Each ctrl In Forme
' Recherche de l'objet seul
 titi = Forme.name
  If [b]ctrl[/b].name = name Then
    If IsMissing(Idx) Then
      FindObjet = True
      Exit For
    Else
      If ctrl.Index = Idx Then
         FindObjet = True
         Exit For
      End If
    End If
  End If
Next ctrl
End Function
Après cela, Ctrl pointe sur l'objet recherché.
BruceBacc
Code sa première boucle
Code sa première boucle
Messages : 17
Enregistré le : 09 janv. 2023, 18:40

Re: [Panorama] Accès aux élements graphiques d'une vue par script

Message par BruceBacc »

Merci DurandO pour ta réponse
Ton script fonctionne peut-être, mais je ne vois absolument pas comment récupérer l'elément de base 'Form' dans un script IHM de Panorama.

Je peux accéder à l'object 'Vue' à partir du script en utilisant 'Parent.'
Mains une fois là, je n'ai aucune info qui me permet de récupérer le 'Form'
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: [Panorama] Accès aux élements graphiques d'une vue par script

Message par DurandO »

Bonjour,
de ce que je me souviens, car cela fait un bon moment que je n'ai pas pratiqué le développement.
Dans mon cas Form est un type d'objet au même titre que Vue.
Une fois pointé sur Vue, tu dois pouvoir en lister les objets, les controls.
Ton objet vue contient des objets hérités de Vue auquel ensuite tu pourras accéder au propriété et méthode.
BruceBacc
Code sa première boucle
Code sa première boucle
Messages : 17
Enregistré le : 09 janv. 2023, 18:40

Re: [Panorama] Accès aux élements graphiques d'une vue par script

Message par BruceBacc »

Effectivement, je peux accéder aux sous- objets de l'élement 'Vue' par la propriété 'Objects'

For Each o_object In PnGetObjectEx("../Main").Objects
PnMsgBox "", o_object.Name
Next


Mais en les parcourant, je n'obtiens que les élements que tu vois dans l'image ci-dessous (listbox, reload, script_open), mais pas la liste des élements graphiques sur la vue
Untitled.png
Untitled.png (4.08 Kio) Vu 1888 fois
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: [Panorama] Accès aux élements graphiques d'une vue par script

Message par DurandO »

Bonjour,
Les objets que tu cherches où sont-ils ?
Dans Main, un niveau au dessus, ou dans une autre class peut-être ?
C'est quoi l'arborescence complète de ton appli?

J'ai trouvé cette vidéo de présentation :
Video Demo Panorama

Je comprends que les objets auxquels tu veux faire référence ce situent au niveau projet.
Ta vue doit d'ailleurs faire partie du projet.
BruceBacc
Code sa première boucle
Code sa première boucle
Messages : 17
Enregistré le : 09 janv. 2023, 18:40

Re: [Panorama] Accès aux élements graphiques d'une vue par script

Message par BruceBacc »

La vue 'Main' est une vue de test simple située à la racine du projet. Elle n'est pas dans un composant.

J'accède bien à l'objet 'Vue' à partir du script en faisant PnGetObjectEx("../Main")

Les objets de la vue auquel je souhaite accéder par script :
- ne sont pas ceux qui sont visibles dans l'arborescence dans l'image jointe précédemment (Connections, Listbox, Reload, ..., ) et que l'on peut récupérer facilement avec PnGetObjectEx("../Main").Objects),
- mais bien les éléments graphiques qui se trouvent dans la vue directement : les boutons, les textes, les images, les traits, rectangles, cercle...

L'aide en ligne indique qu'on peut accéder à ces éléments avec une application externe en C# en utilisant la bibliothèque PERSIST.
Mais comment arriver au même résultat dans un script panorama situé dans la vue (le script 'Reload' en l'occurrence dans l'exemple).
J'ai retourné l'aide en ligne dans tous les sens, testé un tas de choses, mais rien n'y fait : j'ai franchement l'impression que ce n'est pas possible !?!
Ce qui serait un comble pour un SCADA !
Même avec WINCC Pro, tu peux accéder par script à toutes les propriétés graphiques de tous les types d'éléments que tu peux placer sur une vue !

La vidéo de présentation que tu proposes ne montre pas comment on accède aux éléments graphiques par script.
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: [Panorama] Accès aux élements graphiques d'une vue par script

Message par DurandO »

Bonjour,
BruceBacc a écrit : 14 janv. 2023, 02:07 application externe en C# en utilisant la bibliothèque PERSIST.
J'imagines qu'il faut faire appel à cette bibliothèque dans ton script pour disposer de ces fonctions.

As-tu essayé avec l'outil applicationexplorer de retrouver le nom de l'objet qui t’intéresses et sa racine?

Après je ne connais ton but final.
Tu peux peut-être procéder différemment.
Si c'est réaffecter les variables liées à ces objets, tu peux peut-être passer par des variables indirectes comme c'est possible sur Wincc. Animation via une variable interne qui contient le nom de la variable.
Ou un équivalent de SetTagPrefix de wincc que tu pourrais faire sous panorama différemment par exemple via la syntaxe %Zone%Cuve1.
1 ) Zone = "Z1"
variable a pour nom "Z1Cuve1"
2 ) Zone = "Z3"
variable a pour nom "Z3Cuve1"
BruceBacc
Code sa première boucle
Code sa première boucle
Messages : 17
Enregistré le : 09 janv. 2023, 18:40

Re: [Panorama] Accès aux élements graphiques d'une vue par script

Message par BruceBacc »

Encore merci pour ton temps passés à répondre.

Après obtention d'infos complémentaires :

- Il n'est pas possible d'utiliser PERSIST en mode RunTime. risque de conflit avec le fonctionnement de Panorama

- il n'est clairement pas possible par script d'accéder aux propriétés graphiques d'un élement graphique sur la vue en runtime (comme on peut le faire dans d'autres SCADA) : il faut faire autrement !
Répondre