Guides pratiques HMIx
Comment créer un Custom Web Control (CWC) pour WinCC Unified & V8 : guide pas à pas, à la main ou avec l’IA
Un Custom Web Control (CWC) est un objet de vue sur mesure pour WinCC Unified ou WinCC V8. Dans ce guide, vous allez en construire un vrai — un graphique circulaire à trois valeurs —, l’importer dans TIA Portal et le voir évoluer dans Runtime, sans automate et sans programmer depuis zéro. À la fin, vous verrez comment faire la même chose en quelques minutes avec le générateur IA de HMIx.
- Siemens
- Custom Web Control
- CWC
- WinCC Unified
- WinCC V8
- TIA Portal
- HTML et JavaScript
- IA
- Générateur IA

Tout le parcours en un coup d’œil
- Téléchargez l’exemple et ouvrez-le dans votre éditeur
- Modifiez un texte pour vous l’approprier
- Compressez le contenu dans
{GUID}.zip - Copiez-le dans
UserFiles\CustomControlset faites-le glisser sur la vue - Reliez
ValueA,ValueBetValueCà des variables et testez dans Runtime
Ce qu’il vous faut
- TIA Portal avec WinCC Unified (ici, V21.1) et sa simulation ou Unified PC Runtime
- Un éditeur de texte, comme Visual Studio Code ou Notepad++
- L’Explorateur de fichiers Windows. Ni automate ni connaissances en programmation
La préparation des fichiers est identique pour WinCC Unified et WinCC V8. Les étapes d’importation et de test sont présentées dans TIA Portal / WinCC Unified V21.1. Dans WinCC V8, vous travaillez avec Graphics Designer : vérifiez les fonctions disponibles dans votre installation.
Qu’est-ce qu’un Custom Web Control (CWC) et à quoi sert-il ?
Un Custom Web Control, ou CWC, est un objet de vue sur mesure réalisé avec des technologies web (HTML, CSS et JavaScript). Vous le placez sur une vue WinCC Unified comme n’importe quel bouton ou champ, mais c’est vous qui décidez de son apparence et de son comportement : un graphique de production, un tableau particulier, un panneau réunissant plusieurs indicateurs…
Notre exemple est un graphique circulaire évidé au centre, où s’affiche le total, avec trois secteurs pour les quantités A, B et C. Quand une quantité change, son secteur grandit ou rétrécit.
Le contrôle reçoit chaque valeur par une propriété : une entrée portant un nom, comme ValueA. Dans TIA Portal, vous relierez cette propriété à une variable IHM, l’endroit où le projet mémorise la valeur. Peu importe au contrôle d’où vient cette valeur : pour ce test, vous la saisirez sur la vue ; sur une vraie machine, elle viendrait d’un automate.
- Utilisez un CWC lorsqu’il vous faut une visualisation ou une interaction que les objets standard de WinCC Unified ne proposent pas.
- Si vous voulez seulement changer la couleur d’un symbole ou afficher le niveau d’un réservoir, commencez par un SVG dynamique : il comporte moins d’éléments.
Sur HMIx, vous pouvez télécharger gratuitement des centaines de ressources IHM. Partez d’un contrôle du catalogue ou décrivez votre idée au générateur IA de HMIx pour créer une ressource à adapter à votre projet.

Avant de continuer
Le parcours est toujours le même : fichiers du contrôle → paquet {GUID}.zip → vue dans TIA Portal → valeurs qui changent dans Runtime.
Siemens · Programmation des Custom Web ControlsSiemens · Custom Web Controls dans WinCC V8
Préparez votre poste de travail (5 minutes)
Vous travaillerez à deux endroits : un éditeur de texte pour préparer le contrôle et TIA Portal pour le placer sur une vue. Les fichiers de départ contiennent déjà un graphique complet et fonctionnel : vous n’avez pas de code à écrire, seulement à comprendre chaque partie et à faire une première modification.
Avant de commencer, affichez les extensions de fichiers dans Windows (Explorateur de fichiers → Affichage → Afficher → Extensions de noms de fichiers). Vous verrez ainsi si un fichier se termine vraiment par .zip ou .json, et vous éviterez l’erreur la plus fréquente : des noms comme fichier.zip.zip.
- Il vous faut TIA Portal avec WinCC Unified (les étapes sont présentées en V21.1) et sa simulation ou Unified PC Runtime. Runtime est le programme qui exécute la vue IHM.
- Utilisez un éditeur de texte comme Visual Studio Code et l’Explorateur de fichiers Windows, qui sait déjà créer des fichiers ZIP. Aucun automate n’est nécessaire.
Le fichier que nous allons utiliser
Téléchargez ce point de départ pour suivre le guide avec les mêmes noms et les mêmes valeurs.
Télécharger les fichiers du graphique circulaireZIP avec trois propriétés et la bibliothèque WebCC originale de Siemens. Extrayez-le pour suivre le guide, ou copiez-le tel quel dans UserFiles\CustomControls pour l’essayer. Code et structure vérifiés ; l’importation et l’exécution dans WinCC Unified V21.1 doivent être contrôlées dans votre environnement.
Où · TIA Portal → arborescence du projet → appareil IHM → Vues
Préparez une vue vide
Ouvrez ou créez un projet de test avec un appareil WinCC Unified (par exemple, Unified PC). Dans l’appareil, sous Vues (Screens), créez une vue nommée
TestCWCet enregistrez le projet. Notez l’emplacement de son dossier : par défaut, TIA Portal le crée dansDocuments\Automation\<NomDuProjet>.À vérifier: Vous avez une vue vide et vous savez quel dossier de votre PC contient le projet.
Où · Explorateur de fichiers Windows
Téléchargez et extrayez les fichiers de départ
Téléchargez le graphique circulaire avec le bouton de cette section : c’est un ZIP nommé
{8D821B43-4EF5-4BF1-A31D-931D283C7C04}.zip. Gardez-en une copie intacte. Clic droit → Extraire tout et, dans la boîte de dialogue, remplacez le nom du dossier de destination parHmixPieChart(Windows propose le long nom du GUID).À vérifier: Dans
HmixPieChart, vous voyezmanifest.jsonet les dossiersassetsetcontrol.Où · Visual Studio Code ou votre éditeur de texte
Ouvrez le dossier dans votre éditeur
Dans Visual Studio Code, choisissez Fichier → Ouvrir le dossier et sélectionnez
HmixPieChart. Si l’arborescence des fichiers n’apparaît pas, ouvrez le panneau Explorateur (Ctrl+Maj+E). C’est depuis ce panneau que vous ouvrirez chaque fichier dans la section suivante.À vérifier: L’arborescence des fichiers du contrôle apparaît dans la barre latérale de l’éditeur.
Avant de continuer
Avant de continuer, laissez l’éditeur ouvert sur HmixPieChart et TIA Portal sur TestCWC. Utilisez le téléchargement de ce guide : le produit Pie Chart du catalogue a d’autres propriétés.
Construisez le contrôle, fichier par fichier
Un CWC n’est qu’une poignée de fichiers texte. Inutile de les mémoriser : il suffit de savoir à quoi sert chacun. manifest.json présente le contrôle à TIA Portal, index.html contient ce que vous voyez et code.js décide comment le graphique change quand une valeur arrive.
Où · Éditeur → panneau Explorateur de
HmixPieChartVérifiez l’emplacement de chaque fichier
Le premier niveau contient
manifest.jsonet les dossiersassetsetcontrol. Danscontrolse trouventindex.html,code.jsetwebcc.min.js. Ce dernier est la bibliothèque officielle de Siemens qui relie le contrôle à WinCC Unified : il est déjà inclus et vous ne devez pas le modifier.assetsconserve sa licence et, dans vos propres contrôles, peut accueillir l’icône.Un dossier, trois parties qui travaillent ensemble
HmixPieChart/manifest.jsonLa carte d’identité du contrôle : son nom, son identifiant (GUID) et les valeurs qu’il peut recevoir de WinCC Unified.
assets/SIEMENS-LICENSE.mdLa licence fournie avec la bibliothèque de communication de Siemens.
control/index.htmlLa page qui dessine le graphique. Son apparence y est aussi définie : couleurs, dimensions et disposition.
code.jsLes instructions qui actualisent le graphique quand une valeur change.
webcc.min.jsLe pont de communication avec WinCC Unified. C’est le fichier officiel de Siemens : ne le modifiez pas.
Voici la structure réelle de l’exemple téléchargeable. Conservez les noms et les dossiers : le manifeste indique à WinCC Unified où se trouve la page du contrôle. À vérifier: Votre dossier a la même structure que le schéma, sans fichier mal placé.
Où · Éditeur →
manifest.jsonRepérez les trois entrées du graphique
Ouvrez
manifest.jsonet cherchezproperties. Vous verrezValueA,ValueBetValueC. Chacune indique"type": "number"(elle reçoit un nombre) et une valeur initiale dansdefault: 45, 35 et 20. Ce sont les trois propriétés qui apparaîtront dans TIA Portal. Plus haut, sousidentity, vous trouverez aussidisplayname(le nom affiché par TIA Portal, HMIx Pie Chart) ettype, avec l’identifiant unique du contrôle. Ne modifiez rien dans ce fichier pendant ce premier test.À vérifier: Vous savez quelles trois quantités le contrôle reçoit, comment elles s’appellent et où se trouve son identifiant.
Où · Éditeur →
control/index.htmlFaites votre première modification visible
Ce fichier utilise HTML pour organiser le contenu et, dans la balise
<style>, des règles CSS qui définissent couleurs et dimensions. Recherchez (Ctrl+F) le textePIE CHARTet remplacez-le parPRODUCTION. Changez uniquement ces lettres, pas les balises<span>qui les entourent, puis enregistrez le fichier (Ctrl+S).À vérifier: L’en-tête du graphique affiche PRODUCTION : vous avez personnalisé votre contrôle avec une modification facile à vérifier.
Où · Éditeur →
control/code.jsRepérez la partie qui actualise les valeurs
code.jsest écrit en JavaScript, le langage qui décrit les actions du contrôle. CherchezdrawChart: cette fonction calcule le total et dessine les secteurs. Plus bas,WebCC.startétablit la connexion avec WinCC Unified etonPropertyChangedsignale chaque changement de propriété. Remarquez queValueA,ValueBetValueCs’écrivent exactement comme dans le manifeste. Vous n’avez rien à toucher ici.À vérifier: Vous distinguez l’apparence (index.html) de la logique qui reçoit et dessine les données (code.js).
Où · Explorateur Windows →
HmixPieChart→controlVérifiez le rendu avant de créer le paquet
Double-cliquez sur
index.htmlpour l’ouvrir dans votre navigateur. Vous devez voir l’en-tête PRODUCTION et le graphique avec 45, 35 et 20. Il est normal qu’il ne réagisse à rien : en dehors de WinCC, le contrôle n’a pas de variables et affiche ses valeurs initiales. Si PIE CHART apparaît encore, enregistrez la modification dans l’éditeur et rechargez la page (F5).À vérifier: Le graphique s’affiche avec le texte que vous venez de modifier.
Où · Explorateur Windows → à l’intérieur de
HmixPieChartCréez le ZIP que TIA Portal importera
Entrez dans
HmixPieChartet sélectionnez ensemblemanifest.json,assetsetcontrol(Ctrl+clic). Clic droit → Compresser dans un fichier ZIP (sous Windows 10 : Envoyer vers → Dossier compressé). Sélectionnez ces trois éléments, pas le dossierHmixPieChart. Renommez le ZIP obtenu exactement{8D821B43-4EF5-4BF1-A31D-931D283C7C04}.zip, accolades comprises : c’est le GUID indiqué dansidentity→typedu manifeste. Si le nom diffère, TIA Portal n’affichera pas le contrôle.Du dossier de travail au projet TIA Portal
Sélectionnez le contenu du dossier
manifest.jsonassets/control/Entrez dans HmixPieChart et sélectionnez ces trois éléments. Le dossier HmixPieChart lui-même ne va pas dans le ZIP.
Compressez et nommez le ZIP avec le GUID
{8D821B43-4EF5-4BF1-A31D-931D283C7C04}.zipLe nom du ZIP correspond au GUID de manifest.json. Les accolades font partie du nom.
Copiez le ZIP complet à cet emplacement
Votre projet/UserFiles/CustomControls/{8D821B43-4EF5-4BF1-A31D-931D283C7C04}.zip
Le ZIP va ici, toujours compressé. Créez UserFiles et CustomControls s’ils n’existent pas.
À l’ouverture du ZIP, vous devez voir directement manifest.json, assets et control. Si vous voyez un dossier HmixPieChart qui contient tout le reste, vous avez compressé un niveau de trop. À vérifier: À l’ouverture du ZIP, vous voyez directement
manifest.json,assetsetcontrol, et son nom correspond au GUID.
Pour suivre ce guide, conservez l’identité de l’exemple. Quand vous créerez un contrôle indépendant, générez un nouveau GUID (par exemple dans PowerShell avec [guid]::NewGuid()), écrivez-le en majuscules dans identity → type (guid://…) et utilisez le même GUID, entre accolades, comme nom du ZIP. Renommer uniquement le ZIP ne change pas l’identité.
Voir le code de l’exemple
Facultatif : le téléchargement contient l’exemple complet. Vous n’avez pas besoin d’écrire ce code pour suivre le test.
manifest.json
{
"mver": "1.2.0",
"control": {
"identity": {
"name": "HmixPieChart",
"version": "1.0",
"displayname": "HMIx Pie Chart",
"type": "guid://8D821B43-4EF5-4BF1-A31D-931D283C7C04",
"start": "./control/index.html"
},
"metadata": {
"author": "HMIx",
"description": "Educational read-only three-value pie chart"
},
"contracts": {
"api": {
"methods": {},
"events": {},
"properties": {
"ValueA": { "type": "number", "default": 45 },
"ValueB": { "type": "number", "default": 35 },
"ValueC": { "type": "number", "default": 20 }
}
}
},
"types": {}
}
}
control/index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>HMIx Pie Chart</title>
<style>
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 20px;
background: #171e26;
color: #f3f5f6;
font:
14px system-ui,
sans-serif;
}
header {
display: flex;
justify-content: space-between;
color: #bac5ce;
font-size: 11px;
letter-spacing: 0.14em;
}
main {
display: flex;
align-items: center;
justify-content: center;
gap: 24px;
min-height: 240px;
}
svg {
width: 55%;
max-width: 300px;
flex-shrink: 0;
}
ul {
list-style: none;
padding: 0;
min-width: 110px;
}
li {
display: grid;
grid-template-columns: 10px 1fr auto;
align-items: center;
gap: 10px;
padding: 14px 0;
border-bottom: 1px solid #35404a;
}
.dot {
width: 8px;
height: 8px;
border-radius: 50%;
}
small {
display: block;
margin-top: 4px;
color: #bac5ce;
font-variant-numeric: tabular-nums;
}
strong {
font-variant-numeric: tabular-nums;
}
@media (max-width: 360px) {
body {
padding: 12px;
}
main {
gap: 12px;
}
}
</style>
</head>
<body>
<header><span>HMIx</span><span>PIE CHART</span></header>
<main>
<svg viewBox="0 0 220 220" role="img" aria-labelledby="chart-title">
<title id="chart-title">Distribution of A, B and C</title>
<circle
cx="110"
cy="110"
r="76"
fill="none"
stroke="#35404a"
stroke-width="28"
/>
<g transform="rotate(-90 110 110)" fill="none" stroke-width="28">
<circle id="ValueA" cx="110" cy="110" r="76" stroke="#47d2c8" />
<circle id="ValueB" cx="110" cy="110" r="76" stroke="#79a9ed" />
<circle id="ValueC" cx="110" cy="110" r="76" stroke="#f5c16c" />
</g>
<text
id="total"
x="110"
y="115"
text-anchor="middle"
fill="#f3f5f6"
font-size="30"
font-weight="600"
>
100
</text>
<text
x="110"
y="139"
text-anchor="middle"
fill="#bac5ce"
font-size="10"
letter-spacing="2"
>
A + B + C
</text>
</svg>
<ul aria-label="Values and shares">
<li>
<i class="dot" style="background: #47d2c8"></i
><span>A<small id="ValueA-amount">45</small></span
><strong id="ValueA-percent">45%</strong>
</li>
<li>
<i class="dot" style="background: #79a9ed"></i
><span>B<small id="ValueB-amount">35</small></span
><strong id="ValueB-percent">35%</strong>
</li>
<li>
<i class="dot" style="background: #f5c16c"></i
><span>C<small id="ValueC-amount">20</small></span
><strong id="ValueC-percent">20%</strong>
</li>
</ul>
</main>
<script src="webcc.min.js"></script>
<script src="code.js"></script>
</body>
</html>
control/code.js
/* HMIx educational pie chart. Values are amounts, not required percentages. */
var values = { ValueA: 45, ValueB: 35, ValueC: 20 };
var keys = ['ValueA', 'ValueB', 'ValueC'];
var circumference = 2 * Math.PI * 76;
function drawChart() {
// Normalize before adding to avoid overflow for very large finite values.
var maximum = Math.max(values.ValueA, values.ValueB, values.ValueC, 1);
var sum = keys.reduce(function (n, key) {
return n + values[key] / maximum;
}, 0);
var offset = 0;
keys.forEach(function (key) {
var fraction = sum ? values[key] / maximum / sum : 0;
var arc = document.getElementById(key);
var length = fraction * circumference;
arc.setAttribute('stroke-dasharray', length + ' ' + circumference);
arc.setAttribute('stroke-dashoffset', String(-offset));
arc.setAttribute('visibility', fraction ? 'visible' : 'hidden');
document.getElementById(key + '-amount').textContent = String(values[key]);
document.getElementById(key + '-percent').textContent =
Math.round(fraction * 100) + '%';
offset += length;
});
var total = values.ValueA + values.ValueB + values.ValueC;
document.getElementById('total').textContent = isFinite(total)
? String(total)
: '—';
}
function setValue(key, value) {
if (keys.indexOf(key) === -1 || typeof value !== 'number' || !isFinite(value))
return;
values[key] = Math.max(0, value);
}
drawChart();
if (typeof WebCC !== 'undefined') {
WebCC.start(
function (connected) {
if (!connected) return;
keys.forEach(function (key) {
setValue(key, WebCC.Properties[key]);
});
drawChart();
WebCC.onPropertyChanged.subscribe(function (change) {
setValue(change.key, change.value);
drawChart();
});
},
{
methods: {},
events: [],
properties: { ValueA: 45, ValueB: 35, ValueC: 20 },
},
['HMI'],
10000,
);
}
Avant de continuer
Vous avez un contrôle modifiable (le dossier) et son paquet d’importation avec votre changement de texte (le ZIP). Gardez les deux : le dossier sert à modifier, le ZIP transporte le résultat jusqu’à TIA Portal.
Siemens · Structure du manifesteSiemens · WebCC et interface avec RuntimeSiemens · Fichiers d’exemple et bibliothèque WebCCSiemens · Création du fichier ZIP
Importez le CWC dans TIA Portal et placez-le sur la vue
Le paquet est prêt. Vous passez maintenant de l’éditeur de texte à TIA Portal. Le ZIP se place dans le dossier du projet, dans un sous-dossier précis, pour que TIA Portal puisse le trouver.
Où · Explorateur Windows → dossier de votre projet TIA
Copiez le ZIP dans son dossier de destination
Ouvrez le dossier du projet noté au début et entrez dans
UserFiles(créez-le s’il n’existe pas). À l’intérieur, créez un dossier nomméCustomControlss’il n’existe pas et copiez-y le ZIP. Laissez-le compressé : ne l’extrayez pas et ne copiez pas uniquementindex.html.À vérifier: Le chemin se termine par
UserFiles\CustomControls\{8D821B43-4EF5-4BF1-A31D-931D283C7C04}.zip.Où · TIA Portal → vue
TestCWC→ task card OutilsFaites-le apparaître dans TIA Portal
Ouvrez la vue
TestCWC. Dans la task card Outils (Tools), à droite, développez la palette Mes contrôles (My controls) et cliquez sur son bouton Actualiser.À vérifier: HMIx Pie Chart apparaît dans la palette Mes contrôles.
Où · TIA Portal → Mes contrôles → vue
TestCWCPlacez-le sur la vue
Faites glisser HMIx Pie Chart de la palette vers la vue. Donnez-lui une taille d’environ 480 × 300 pixels et laissez de la place sur un côté pour les trois champs numériques que vous ajouterez ensuite.
À vérifier: La vue contient une instance de votre graphique avec l’en-tête PRODUCTION.
Où · Contrôle sélectionné → fenêtre d’inspection → Propriétés → Propriétés → Interface
Retrouvez les entrées que vous avez préparées
Sélectionnez le contrôle et, dans la fenêtre d’inspection, ouvrez Propriétés → Propriétés → Interface. Vous y trouvez
ValueA,ValueBetValueCavec leurs valeurs initiales 45, 35 et 20. Dans la section suivante, vous remplacerez ces valeurs fixes par des variables.
Repère visuel Siemens pour trouver Mes contrôles et Interface. Leur capture montre le contrôle GaugeMeter ; dans ce guide, choisissez HMIx Pie Chart et cherchez ValueA, ValueB et ValueC. Référence · © Siemens AG · Licence et attribution À vérifier: Vous voyez les trois propriétés définies dans
manifest.json.
Avant de continuer
Ne continuez pas si HMIx Pie Chart ou ses trois propriétés manquent. Vérifiez le nom, le contenu et l’emplacement du ZIP avec la liste de « Si vous êtes bloqué ».
Reliez des variables et testez dans Runtime, sans automate
Le contrôle a trois entrées ; vous allez maintenant leur fournir des données. Vous créerez trois variables internes (elles vivent dans l’IHM, sans automate) et trois champs E/S. Un champ E/S (entrée/sortie) est une case de la vue dans laquelle on peut lire et saisir un nombre. Chaque case et son secteur du graphique partageront la même variable.
Voyez d’abord ce qui doit se passer
Cette démonstration résume le test : changez A, B ou C et observez son secteur et le total. Les valeurs sont des quantités ; leur somme n’a pas besoin de faire 100.
Où · TIA Portal → appareil IHM → Variables IHM → table de variables
Créez les trois variables de test
Ouvrez la table de variables standard et ajoutez
ProductionA,ProductionBetProductionC. Dans la colonne Connexion, choisissez Variable interne et sélectionnez un type de données numérique, par exempleReal.À vérifier: La table contient trois variables internes numériques portant ces noms.
Où · Vue
TestCWC→ CWC sélectionné → Propriétés → Propriétés → InterfaceReliez chaque variable à son entrée
Sur la ligne
ValueA, ouvrez la colonne Dynamisation, choisissez Variable et sélectionnezProductionA. « Dynamiser » signifie que la propriété prend sa valeur dans une variable au lieu d’un nombre fixe. Répétez avecValueB→ProductionBetValueC→ProductionC. Laissez Lecture seule activé : le graphique ne fait qu’afficher les données ; vous les écrirez depuis les champs.Comment les trois valeurs arrivent jusqu’au graphique
Vous saisissez un nombre dans chaque champ E/S
- A
- 45
- B
- 35
- C
- 20
E/S signifie entrée/sortie : le champ affiche une valeur et permet de la modifier pendant le test.
La variable IHM mémorise ce nombre
- ProductionA
- 45
- ProductionB
- 35
- ProductionC
- 20
Ce sont des variables internes du projet. Ce test ne nécessite pas d’automate.
La propriété du contrôle reçoit la valeur
- ValueA
- 45
- ValueB
- 35
- ValueC
- 20
Reliez chaque propriété à sa variable dans la colonne Dynamisation de l’Interface.
Le graphique se redessine
A: 45% · B: 35% · C: 20%
Avec 45, 35 et 20, la somme est 100. Si vous changez un nombre, les trois parts sont recalculées.
Chaque champ et sa propriété du graphique sont reliés à la même variable IHM : A avec A, B avec B et C avec C. Les pourcentages sont calculés à partir de la somme des trois valeurs. 
Voici comment une propriété est reliée dans l’exemple Siemens. Pour votre test, reliez ValueA à ProductionA et répétez pour B et C, avec Lecture seule activé. Référence · © Siemens AG · Licence et attribution À vérifier: Chaque entrée du graphique reçoit une variable différente, comme le montre le schéma.
Où · Vue
TestCWC→ Outils → Éléments → Champ E/SAjoutez les champs pour saisir les nombres
Faites glisser trois champs E/S à côté du graphique. Pour chacun, choisissez le mode Entrée/sortie et reliez sa Valeur de processus à
ProductionA,ProductionBetProductionCrespectivement. Ajoutez à côté les textes A, B et C pour les distinguer.À vérifier: Vous avez le graphique et trois champs : un pour A, un pour B et un pour C.
Où · TIA Portal → arborescence du projet → appareil IHM
Compilez et ouvrez la vue dans Runtime
Faites un clic droit sur
TestCWCet choisissez Définir comme vue initiale (vous pouvez aussi la définir dans Paramètres Runtime → Général). Sélectionnez l’appareil IHM, compilez-le (clic droit → Compiler → Logiciel) et corrigez les erreurs éventuelles. Cliquez ensuite sur Démarrer la simulation ou chargez le projet dans votre Unified PC Runtime. Le client web s’ouvre : connectez-vous avec un utilisateur du projet. Si vous n’en avez pas, créez-en un dans Paramètres de sécurité → Utilisateurs et rôles, attribuez-lui un rôle IHM (par exemple HMI Administrator) et compilez à nouveau.À vérifier: La vue s’exécute et vous pouvez saisir des nombres dans les champs E/S.
Où · Vue dans Runtime → champs A, B et C
Vérifiez la première répartition, puis changez A
Saisissez 45 dans A, 35 dans B et 20 dans C, en validant chaque nombre avec Entrée. Le total doit être 100. Changez maintenant uniquement A à 90 et validez : son secteur grandit et le total passe à 145. Ces nombres sont des quantités, pas des pourcentages : le contrôle calcule la part de chacune dans le total.
À vérifier: Le graphique change dès que vous validez un nombre, sans recharger la vue.
Où · Vue dans Runtime → champs A, B et C
Vérifiez aussi l’état vide
Saisissez 0 dans les trois champs : les secteurs colorés disparaissent et il reste un anneau vide avec un total de 0. Saisissez de nouveau 45, 35 et 20, puis rechargez la page du navigateur (F5) pour vérifier que le contrôle lit les valeurs actuelles à son ouverture.
À vérifier: Le contrôle affiche aussi bien les données normales que le cas sans production.
Avant de continuer
Le test est terminé quand une modification dans une case met à jour son secteur et le total. Avoir vu le dessin dans le navigateur ne vérifie pas cette liaison : seul Runtime le fait.
Siemens · Installation et utilisation des CWCSiemens · Exemple de configuration et captures originales
Si vous êtes bloqué : symptômes et solutions
- HMIx Pie Chart n’apparaît pas dans Mes contrôles : ouvrez le ZIP ; son premier niveau doit contenir
manifest.json,assetsetcontrol, sans dossier intermédiaire. Vérifiez qu’il s’appelle exactement{8D821B43-4EF5-4BF1-A31D-931D283C7C04}.zip(extensions affichées, pour qu’il ne soit pas en.zip.zip), qu’il se trouve dansUserFiles\CustomControlsdu projet ouvert, puis cliquez sur Actualiser. ValueA,ValueBouValueCmanque : utilisez le ZIP de ce guide et ne renommez rien dansmanifest.json; les noms distinguent majuscules et minuscules. Le produit Pie Chart du catalogue a d’autres propriétés.- Le graphique ne change pas dans Runtime : validez le nombre avec Entrée. Vérifiez ensuite que le champ E/S est en mode Entrée/sortie et que le champ et la propriété du contrôle utilisent la même variable.
- Vous ne pouvez pas vous connecter à Runtime : le client demande un utilisateur du projet. Créez-en un dans Paramètres de sécurité → Utilisateurs et rôles avec un rôle IHM, compilez et chargez à nouveau.
- PIE CHART s’affiche encore : enregistrez
index.html, recréez le ZIP et remplacez celui du projet. Cliquez sur Actualiser dans Mes contrôles : la fenêtre d’inspection indique que l’objet a été mis à jour. Compilez et chargez de nouveau l’IHM. Modifier seulement le dossier de travail ne change pas ce qui se trouve déjà dans TIA Portal. - Il fonctionne sur le PC mais échoue sur un Unified Comfort Panel : assurez-vous que toutes les dépendances voyagent dans le ZIP et consultez les restrictions de Siemens pour cet appareil, notamment sur les ressources externes et les requêtes de données.
Une fois que tout fonctionne, changez une seule chose à la fois : d’abord un texte ou une couleur, puis une autre façon de présenter les données. Si vous renommez une propriété ou changez son type, TIA Portal peut perdre sa configuration sur les instances existantes. Validez toujours le contrôle sur l’appareil où il sera utilisé.
Siemens · Restrictions des CWC sur les Unified Comfort Panels
Raccourci : créez votre propre CWC avec l’IA
Vous savez maintenant à quoi ressemble un CWC de l’intérieur. Pour créer de nouveaux contrôles sans écrire de HTML ni de JavaScript, vous pouvez utiliser le générateur IA de HMIx (ai.hmix.tech) : décrivez le contrôle en langage courant et l’IA prépare le design, les propriétés, le manifest.json et le paquet {GUID}.zip prêt pour TIA Portal. Vous pouvez commencer gratuitement avec le plan Community.
Ce que vous avez appris ici reste valable : l’importation, la liaison des variables et le test dans Runtime fonctionnent exactement de la même façon.
Où · ai.hmix.tech → Custom Web Control
Décrivez le contrôle dont vous avez besoin
Indiquez ce qu’il doit afficher et quelles données il reçoit, par exemple : « Graphique circulaire avec trois quantités de production A, B et C, total au centre et légende avec pourcentages ». Vous pouvez aussi joindre une image de référence.
À vérifier: L’IA génère une première version visuelle que vous pouvez affiner dans le chat ou l’éditeur visuel.
Où · Générateur → étapes de définition et de simulation
Vérifiez les propriétés et la simulation
Contrôlez les propriétés proposées par l’IA (les équivalents de
ValueA,ValueBetValueC) et faites-les varier avec les commandes de simulation pour voir comment le contrôle réagit avant de le télécharger.À vérifier: Le contrôle réagit dans la simulation comme vous l’attendez.
Où · Générateur → étape de génération et d’installation
Téléchargez le paquet
Téléchargez le résultat. Le ZIP téléchargé contient la documentation et, à l’intérieur, le paquet
{GUID}.zipdu contrôle : c’est ce fichier intérieur que vous copiez, toujours compressé, dansUserFiles\CustomControls.À vérifier: Vous avez un
{GUID}.zipau même format que celui de ce guide.Où · TIA Portal → Mes contrôles
Importez-le et testez-le comme ici
Suivez « Importez le CWC dans TIA Portal » et « Reliez des variables et testez dans Runtime » avec les noms de votre nouveau contrôle.
À vérifier: Votre contrôle généré par IA fonctionne sur votre vue WinCC Unified.
Avec le plan gratuit, les contrôles générés sont publiés dans le catalogue HMIx pour que d’autres utilisateurs puissent aussi s’en servir ; les plans payants permettent de les garder privés.
Avant de continuer
L’IA accélère la création ; elle ne remplace pas le test. Validez toujours le contrôle dans Runtime et sur l’appareil cible.
Questions fréquentes
Faut-il savoir programmer pour créer un Custom Web Control ?
Pas pour suivre ce guide : vous travaillez avec des fichiers complets, comprenez le rôle de chacun et modifiez un texte. Pour créer vous-même de nouveaux comportements, il vous faudra quelques notions de HTML, CSS et JavaScript ; avec le générateur IA de HMIx, vous pouvez décrire le contrôle en langage courant et obtenir un paquet prêt à importer.
Quelle est la différence entre ValueA et ProductionA ?
ValueA est une propriété du contrôle, définie dans manifest.json. ProductionA est une variable que vous créez dans votre projet IHM. Vous les reliez dans TIA Portal pour que le contrôle reçoive le nombre mémorisé dans ProductionA. Elles n’ont pas besoin de porter le même nom.
Pourquoi le ZIP doit-il porter le nom du GUID entre accolades ?
TIA Portal identifie chaque CWC par le GUID indiqué dans identity → type de manifest.json et s’attend à ce que le paquet porte le même nom, accolades comprises : {GUID}.zip. Si le nom ne correspond pas, le contrôle n’apparaît pas dans Mes contrôles.
Puis-je créer un CWC avec l’IA ?
Oui. Le générateur IA de HMIx (ai.hmix.tech) crée des Custom Web Controls pour WinCC Unified et V8 à partir d’une description : design, propriétés, manifest.json et paquet {GUID}.zip. Vous l’importez et le testez ensuite comme l’explique ce guide.
Puis-je utiliser le contrôle dans un autre projet ?
Oui. Copiez le même ZIP dans UserFiles\CustomControls de l’autre projet, cliquez sur Actualiser dans Mes contrôles et reliez de nouveau ses propriétés à des variables. Pour un contrôle différent, créez son propre GUID dans le manifeste et dans le nom du paquet.
Sources et lectures complémentaires
- Siemens · Programmation des Custom Web Controls
- Siemens · Custom Web Controls dans WinCC V8
- Siemens · Installation et utilisation des CWC
- Siemens · Structure du manifeste
- Siemens · WebCC et interface avec Runtime
- Siemens · Fichiers d’exemple et bibliothèque WebCC
- Siemens · Création du fichier ZIP
- Siemens · Exemple de configuration et captures originales
- Siemens · Restrictions des CWC sur les Unified Comfort Panels