récupérer le texte d'une liste dans wincc V7.4

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
dpo
Dieu du process
Dieu du process
Messages : 817
Enregistré le : 27 nov. 2015, 20:03

récupérer le texte d'une liste dans wincc V7.4

Message par dpo »

Bonjour
j'ai configuré une liste de texte (correspondance d'un texte différent pour chaque valeur entière d'un index)
j'ai animé une liste de texte sur un synoptique, quand je cliques j'ai tous les textes qui s'affichent et celui que je sélectionne donne la valeur de l'index.
et le texte sélectionné s'affiche. Jusque là tout va bien.
L'utilisation d'une liste paramétrée est pratique car je m'en sers pour plusieurs choses, et l'index me permet des animations de couleur.
Maintenant je voudrais récupérer le texte sélectionné pour le copier dans une variable de type string
je n'ai pas trouvé le paramètres de l'objet "list text" qui me le permette, une idée ? (action directe ou C ou VB )
je pourrais par exemple le faire sur changement de valeur de l'index
dpo
Dieu du process
Dieu du process
Messages : 817
Enregistré le : 27 nov. 2015, 20:03

Re: récupérer le texte d'une liste dans wincc V7.4

Message par dpo »

réponse du support
pas de solution magique avec une variable que j'aurais ratée
il faut se taper du code en VB car on peut retrouver la valeur entière et la liste de texte de référence puis la parcourir

Début du code fourni par le support
Dim objTextList
Dim strAssignments, strValue

Set objTextList = ScreenItems("TextList1")

strValue = objTextList.OutputValue
strAssignments = objTextList.Assignments
HMIRuntime.Trace strValue & vbNewline
HMIRuntime.Trace strAssignments & vbNewline

Ouvrez l'ApDiag pour observer le résultat.

A partir de ces éléments il vous faut faire du traitement supplémentaire pour sortir la correspondance Valeur / Texte.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: récupérer le texte d'une liste dans wincc V7.4

Message par philou77 »

Salut
Moins souple mais plus simple.
Tu crées un tableau string au démarrage de l’ihm. Même textes et même ordre que ta liste.
Utilise l’index de l’élément sélectionné de ta liste pour afficher le texte souhaité.

C’est simple mais si la liste change faut reprogrammer ton script de démarrage 😔
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
dpo
Dieu du process
Dieu du process
Messages : 817
Enregistré le : 27 nov. 2015, 20:03

Re: récupérer le texte d'une liste dans wincc V7.4

Message par dpo »

y a deux types d'objet "liste" dans wincc, le premier fait référence à une liste pré-paramétrée facile à manipuler avec excel (import/export)
Mais elle ne renvoie que l'index
Une autre se paramètres directe sur l"objet et renvoie index et chaine de caractère.(mais moins convivial à modifier si la liste change)
Merci pour ton idée, Y a plein de solutions le tout est de choisir la meilleure
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: récupérer le texte d'une liste dans wincc V7.4

Message par DurandO »

Bonjour,
dpo a écrit : 20 juin 2024, 18:50 Y a plein de solutions le tout est de choisir la meilleure
peut-être pas la meilleur mais j'aurai fait ainsi (dans le principe aux erreurs syntaxe prêt, car il y a bien 10 ans que je n'ai pas touché à WinCC) :
Créer une variable interne de type String ("VariableInterne")
ajouter ce script à l’événement listselect

Code : Tout sélectionner

Dim objTextList
Dim strAssignments, strValue

Set objTextList = ScreenItems("TextList1")

SetTagValue("VariableInterne",objTextList.OutputValue);
Tu peux ensuite ailleurs ré-utiliser ton texte par un GetTagValue("VariableInterne").

Le fenêtre de debug est une très bonne idée pour la mise au point en effet. C'est grâce à cela qu'on peut découvrir des erreurs qu'on ne verrait pas autrement.

Une idée : pour initialiser la liste ça peut aussi se faire dans un script au démarrage de la vue . On pourrait, par exemple, l'initialiser à partir d'un fichier texte que tu peux alors modifier sans même avoir à arrêter l'application.
J'ai conçu une appli VB il y a une vingtaine d'année basée sur ce principe : tout était paramétrable à partir de fichier d'initialisation (.ini).

Est-ce vraiment utile de faire si compliqué?
A toi de voir.
dpo
Dieu du process
Dieu du process
Messages : 817
Enregistré le : 27 nov. 2015, 20:03

Re: récupérer le texte d'une liste dans wincc V7.4

Message par dpo »

DurandO a écrit : 21 juin 2024, 11:23 Dim objTextList
Dim strAssignments, strValue

Set objTextList = ScreenItems("TextList1")

SetTagValue("VariableInterne",objTextList.OutputValue);
Dixit le support et ma recherche je n'ai pas trouvée l'équivalent du Oupvalue pour une TextList (on peut récupérer la valeur d'index mais pas la chaine de caractère)

j'ai trouvé une solution bestiale, au lieu d'utiliser une textlist j'ai utilisé une listbox, cette dernière renvoie à la fois l'index et la chaine de caractère
je la remplis à la sauvage avec un script VB sur ouverture de la fenêtre

Set objTextbox = ScreenItems("TextBox1")

objTextbox.Index=1
objTextbox.Text=" texte 1"
objTextbox.Index=objTextbox.Index+1
objTextbox.Text=" texte 2"

sur clic dans la liste je récupère la chaine de caractère que je transfère dans ma variable (action directe sur relâcher du clic :
thisobjet.Text vers mavariable


.....

A voir pour dépiler un fichier texte ou une liste de texte pré-paramétrée au lieu de faire la brute, les textes ne sont pas amenés à bouger souvent
Au pire modifier le script est super rapide, au moins j'ai une solution qui fonctionne
Répondre