En demandant à l'IA:
Oui, ce que tu observes est normal avec les zones de liste (List box) dans WinCC Unified : elles renvoient une valeur codée en bit unique (one-hot) dans un mot (WORD/DWORD), pas directement un index entier.

Concrètement :
• Élément 0 → bit 0 à 1 → 0000 0001 = 1
• Élément 1 → bit 1 à 1 → 0000 0010 = 2
• Élément 2 → bit 2 à 1 → 0000 0100 = 4
• etc.
Donc oui, il faut retrouver la position du bit à 1 pour obtenir ton index.
________________________________________

Solutions possibles

1. Le plus simple : ne PAS utiliser une zone de liste
Si ton besoin est juste un numéro de référence, préfère :
• un Drop-down list
• ou un Champ d'E/S avec liste de texte

Ceux-là peuvent directement écrire un entier dans une variable (pas un masque binaire).

C’est clairement la solution la plus propre si tu peux changer de contrôle.
________________________________________

2. Traitement côté IHM avec script (JavaScript Unified)
Oui, tu peux faire ça dans l’IHM

WinCC Unified supporte JavaScript.
Exemple de script
// Lecture du mot venant de la zone de liste
let word = Tags("MaVariableListe").Read();
// Fonction pour trouver l’index du bit à 1
function getBitIndex(value) {
for (let i = 0; i < 32; i++) {
if (value & (1 << i)) {
return i;
}
}
return -1; // aucun bit trouvé
}
// Calcul
let index = getBitIndex(word);
// Écriture dans la variable automate (INT)
Tags("IndexSelection").Write(index);
Où mettre ce script ?
• événement "Value changed" de la variable liée à la liste
ou
• événement "Selection changed" du contrôle (selon version)
________________________________________

3. Traitement côté automate (souvent recommandé)
Vu que tu fais une conversion S5 → TIA, il est souvent plus robuste de gérer ça dans le PLC.
Exemple en SCL (TIA)
VAR_INPUT
ListWord : WORD;
END_VAR
VAR_OUTPUT
Index : INT;
END_VAR
VAR
i : INT;
END_VAR
Index := -1;
FOR i := 0 TO 15 DO
IF (ListWord AND SHL(1, i)) <> 0 THEN
Index := i;
END_IF;
END_FOR;

Avantages :
• Pas de logique métier dans l’IHM
• Plus maintenable
• Testable côté automate
________________________________________

4. Attention aux limites
• Si plusieurs bits peuvent être à 1 → ton index devient ambigu
• Normalement une zone de liste doit être en sélection simple, donc un seul bit actif
________________________________________

Recommandation

Dans ton cas (sélection de référence de travail) :
✔ Meilleur choix :
utiliser un Drop-down list avec une valeur numérique associée
✔ Sinon :
faire la conversion dans le PLC (plus propre industriellement)
✔ Dernier recours :
script JS comme ci dessus
________________________________________

Petit tip Unified
Dans les listes, tu peux associer :
• un texte affiché
• une valeur numérique distincte

Ça évite complètement ce problème

________________________________________
Si tu veux, je peux te montrer comment configurer une liste déroulante avec index direct dans Unified
