Guide pratiche HMIx
Come creare un SVG dinamico (SVGHMI) per WinCC Unified & V8: guida passo passo, a mano o con l'IA
Un SVG dinamico (file .svghmi) è un disegno vettoriale che cambia aspetto in base a un valore della schermata: un serbatoio che si riempie, una valvola che cambia colore… In questa guida adatterai un serbatoio orizzontale reale, lo importerai in TIA Portal e vedrai il liquido salire e scendere in Runtime, senza PLC. Alla fine vedrai come creare i tuoi SVG dinamici con il generatore IA di HMIx.
- Siemens
- SVG dinamico
- SVGHMI
- Widget dinamici
- WinCC Unified
- WinCC V8
- TIA Portal
- IA
- Generatore IA

Tutto il percorso in sintesi
- Scarica
HmixHorizontalTank.svghmie aprilo in un editor di testo - Cambia il valore iniziale di
FillLevel - Copialo in
UserFiles\SVGControlsdel progetto - Trascinalo da Widget dinamici nella schermata
- Collega
FillLevelalla variabileTankLevele prova in Runtime
Che cosa ti serve
- TIA Portal con WinCC Unified (qui, V21.1) e la sua simulazione o Unified PC Runtime
- Un editor di testo, come Visual Studio Code o Notepad++
- Nient'altro: niente PLC, niente JavaScript, niente programmi di disegno
La preparazione dei file è identica per WinCC Unified e WinCC V8. I passaggi di importazione e prova sono illustrati in TIA Portal / WinCC Unified V21.1. In WinCC V8 si lavora con Graphics Designer: verifica le funzioni disponibili nella tua installazione.
Che cos'è un SVG dinamico (SVGHMI) e a che cosa serve
Pensa a un serbatoio disegnato sullo schermo di una macchina. Un'immagine normale mostra sempre lo stesso livello. Un SVG dinamico permette al liquido di salire e scendere in base a un numero, con lo stesso disegno. Serve anche per indicare se una valvola è aperta, cambiare il colore di un motore o mostrare un componente solo quando serve.
SVG è un formato di immagine fatto di forme e linee, quindi si può ingrandire senza che diventi sgranato. Perché WinCC Unified possa modificare parti del disegno, il file dichiara degli ingressi chiamati parametri e viene salvato con l'estensione .svghmi. In TIA Portal compare nella tavolozza Widget dinamici.
Un parametro è un'impostazione che l'autore rende disponibile. In questo serbatoio si chiama FillLevel e accetta un numero da 0 a 100: con 50 il liquido arriva a metà altezza. Più avanti lo collegherai a TankLevel, una variabile HMI: il punto in cui il progetto conserva il numero che scrivi. Hanno nomi diversi perché uno appartiene al disegno e l'altro al progetto.
Lo stesso disegno può mostrare stati diversi
Cambiare il livello
Un numero da 0 a 100 decide fino a che altezza viene disegnato il liquido.
FillLevel = 25
FillLevel = 75
Cambiare un colore
Un parametro di colore può cambiare il riempimento, per esempio per distinguere due liquidi.
Colore del liquido A
Colore del liquido B
Mostrare o nascondere un componente
Un parametro di visibilità può mostrare o nascondere i raccordi del serbatoio.
Con raccordi
Senza raccordi
Ogni risorsa ha i propri parametri. Il download di questa guida include solo FillLevel. Gli esempi di colore e visibilità nello schema mostrano altre possibilità degli SVG dinamici; non sono impostazioni di questo file.
Su HMIx puoi scaricare centinaia di risorse HMI gratuite. Parti da un controllo del catalogo oppure descrivi la tua idea al generatore IA di HMIx per creare una risorsa da adattare al tuo progetto.

Siemens · Creazione di grafica SVG dinamica (109782045)Siemens · Gestione della grafica SVG dinamicaSiemens · Grafica SVGHMI in WinCC V8
Prepara il file e una schermata di prova (5 minuti)
Ti serve TIA Portal con WinCC Unified (i passaggi sono illustrati in V21.1) e la sua simulazione o Unified PC Runtime, il programma che esegue la schermata. Userai una variabile interna, che vive dentro la HMI, quindi non serve un PLC.
Attiva le estensioni dei file in Windows (Esplora file → Visualizza → Mostra → Estensioni nomi file). Così vedrai se il file termina davvero in .svghmi e non in .svghmi.txt, l'errore più comune al momento del salvataggio.
Il file che useremo
Scarica questo punto di partenza per seguire la guida con gli stessi nomi e valori.
Scarica il serbatoio per seguire la guidaUn unico file HmixHorizontalTank.svghmi, con FillLevel da 0 a 100 e valore iniziale 50. Struttura e calcoli verificati; importazione ed esecuzione in WinCC Unified V21.1 vanno controllate nel tuo ambiente.
Dove · Esplora file → cartella di lavoro
Scarica il serbatoio e conserva una copia di lavoro
Scarica
HmixHorizontalTank.svghmicon il pulsante di questa sezione. È un unico file: non c'è nulla da decomprimere. Conserva l'originale e copia il file in una cartella chiamataMioSerbatoio. Apri la copia con un editor di testo come Visual Studio Code o Notepad++ (clic destro → Apri con). Vedrai del testo, perché il disegno è descritto con istruzioni modificabili.Verifica: Hai
MioSerbatoio\HmixHorizontalTank.svghmiaperto nell'editor.Dove · TIA Portal → dispositivo Unified → Pagine
Prepara la schermata in cui lo inserirai
Apri o crea un progetto di prova con un dispositivo WinCC Unified. Crea una schermata vuota chiamata
ProvaSerbatoioe salva il progetto. Annota dove si trova la sua cartella: per impostazione predefinita,Documenti\Automation\<NomeProgetto>.Verifica: Hai il file del disegno nell'editor e la schermata
ProvaSerbatoioin TIA Portal, e sai dove si trova la cartella del progetto.
Prima di continuare
Sai dove trovare il file scaricato, la schermata vuota e la cartella del progetto. Per ora non devi creare variabili.
Crea la tua variante: capisci il disegno e cambia il livello iniziale
Il serbatoio ha tre parti: un corpo fisso, un rettangolo blu che rappresenta il liquido e un ritaglio con la forma interna del serbatoio. Il ritaglio funziona come una mascherina: nasconde tutto ciò che sporge. Quando cambia il livello, cambia solo la parte visibile del liquido.
Se disegni una risorsa da zero, crea prima le parti in un editor vettoriale e salvala come SVG; poi aggiungi la parte HMI (parametri e collegamenti) con un editor di testo, come in questo esempio. Rinominare un .svg in .svghmi non lo rende dinamico. Qui le parti sono già disegnate e ne adatterai il comportamento.
Dove · Editor di testo → cerca (Ctrl+F)
id="liquid"Trova la parte che cambierà
Cerca
id="liquid": è il rettangolo che rappresenta il liquido. Il corpo e i supporti sono in altre righe e non cambiano. Il gruppo che lo contiene usaclip-path, il ritaglio che tiene il blu dentro il contorno arrotondato.Come è costruito il serbatoio a strati
Disegno fisso
Corpo, supporti e raccordi non cambiano quando il livello sale.
Rettangolo del liquido
Cambiano la sua altezza e la posizione del bordo superiore. Il fondo resta al suo posto.
Ritaglio interno
Mostra il liquido solo dentro il contorno arrotondato del serbatoio.
Gli strati formano un'unica grafica
FillLevel = 50
Il liquido arriva a metà altezza ed è ritagliato alle estremità. Il corpo e i supporti mantengono la loro forma.
FillLevel rappresenta l'altezza del liquido: 50 significa metà dell'altezza interna. In un serbatoio orizzontale altezza e volume non hanno una relazione lineare. Verifica: Sai qual è il liquido e perché può crescere senza uscire dal serbatoio.
Dove · Editor di testo → cerca
hmi:paramDefTrova il parametro e cambia il suo valore iniziale
Vicino all'inizio, dentro
<hmi:self>, c'è la riga che dichiaraFillLevel.type="number"indica che riceve un numero edefault="50"ne fissa il valore iniziale. Cambia solodefault="50"indefault="25". Non cambiare il nomeFillLevel: è quello che vedrai in TIA Portal.Verifica: Con la tua variante ogni nuovo serbatoio parte dal 25 % dell'altezza invece che dal 50 % originale.
Dove · Editor di testo → torna a
id="liquid"Segui il collegamento tra il numero e il liquido
Il rettangolo ha due collegamenti:
hmi-bind:heightcambia l'altezza del liquido ehmi-bind:ysposta il suo bordo superiore; insieme mantengono fisso il fondo. Entrambi usanoSafeLevel, un valore calcolato inhmi:localDefconConverter.Bounds, che mantieneFillLeveltra 0 e 100. Così, anche se arriva 140 o −20, il liquido non esce mai dal serbatoio. Non toccare queste righe.Verifica: Hai capito tutto il percorso: il parametro riceve un numero e i collegamenti lo trasformano in un'altezza visibile.
Dove · Editor di testo → Salva
Salva il file con l'estensione completa
Salva le modifiche (Ctrl+S) con codifica UTF-8, mantenendo il nome
HmixHorizontalTank.svghmi. Controlla in Esplora file che non termini in.svghmi.txt. Non aprire né salvare questo file con un programma di disegno generico: potrebbe eliminare gli attributihmi:ehmi-bind:che lo rendono dinamico.Verifica: Hai un
.svghmicon il disegno, il suo parametro e i collegamenti tra i due, pronto per TIA Portal.
In questo esempio la percentuale esprime l'altezza del liquido. In un serbatoio orizzontale il 25 % dell'altezza non equivale al 25 % del volume: per mostrare litri servirebbe una conversione basata sulla geometria del serbatoio.
Visualizza il codice dell'esempio
Facoltativo: il download contiene l'esempio completo. Non devi scrivere questo codice per seguire la prova.
HmixHorizontalTank.svghmi
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//SIEMENS//DTD SVG 1.0 TIA-HMI//EN" "http://tia.siemens.com/graphics/svg/1.8/dtd/svg18-hmi.dtd">
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:hmi-bind--xlink="http://svg.siemens.com/hmi/bind/xlink/"
xmlns:hmi="http://svg.siemens.com/hmi/"
xmlns:hmi-bind="http://svg.siemens.com/hmi/bind/"
xmlns:hmi-element="http://svg.siemens.com/hmi/element/"
xmlns:hmi-feature="http://svg.siemens.com/hmi/feature/"
xmlns:hmi-event="http://svg.siemens.com/hmi/event/"
width="400" height="250" viewBox="0 0 400 250" preserveAspectRatio="xMidYMid meet">
<hmi:self type="widget" displayName="HMIx Horizontal Tank"
name="extended.HmixHorizontalTank" version="1.0.0">
<hmi:paramDef name="FillLevel" type="number" default="50" />
</hmi:self>
<defs>
<hmi:localDef name="SafeLevel" type="number"
hmi-bind:value="{{ Converter.Bounds(ParamProps.FillLevel, 0, 100) }}" />
<linearGradient id="steel" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#7f949f" />
<stop offset="0.28" stop-color="#edf3f5" />
<stop offset="0.52" stop-color="#bdcbd1" />
<stop offset="1" stop-color="#667d88" />
</linearGradient>
<linearGradient id="water" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#4cc4df" />
<stop offset="1" stop-color="#176184" />
</linearGradient>
<clipPath id="inside"><rect x="40" y="60" width="320" height="120" rx="60" /></clipPath>
</defs>
<!-- One parameter changes liquid height, not volume percentage. -->
<path d="M100 170L90 220H130L120 170M280 170L270 220H310L300 170" fill="#405866" stroke="#273d49" stroke-width="2" />
<path d="M86 224H134M266 224H314" stroke="#607987" stroke-width="8" />
<rect x="180" y="43" width="40" height="17" rx="3" fill="url(#steel)" stroke="#546e7a" />
<rect x="175" y="54" width="50" height="8" rx="2" fill="#adbec7" stroke="#546e7a" />
<rect x="40" y="60" width="320" height="120" rx="60" fill="url(#steel)" />
<g clip-path="url(#inside)">
<rect id="liquid" x="40" y="120" width="320" height="60" fill="url(#water)"
hmi-bind:height="{{ LocalProps.SafeLevel * 1.2 }}"
hmi-bind:y="{{ 180 - LocalProps.SafeLevel * 1.2 }}" />
<path d="M120 60V180M280 60V180" stroke="#254b60" stroke-opacity="0.22" stroke-width="2" />
<path d="M55 78H345" stroke="#ffffff" stroke-opacity="0.28" stroke-width="8" />
</g>
<rect x="40" y="60" width="320" height="120" rx="60" fill="none" stroke="#546e7a" stroke-width="2" />
<rect x="354" y="109" width="14" height="28" rx="2" fill="url(#steel)" stroke="#546e7a" />
<path d="M369 115V131" stroke="#8ea5b1" stroke-width="6" />
</svg>
Prima di continuare
Hai cambiato una sola cosa: il valore iniziale di FillLevel, da 50 a 25. Il nome del file e quello del parametro sono invariati.
Importa l'SVG dinamico in TIA Portal
TIA Portal cerca gli SVG dinamici di ogni progetto in una cartella precisa e li mostra nella tavolozza Widget dinamici, da cui li trascini nella schermata.
Dove · Esplora file → cartella del tuo progetto TIA
Copia il file nella cartella del progetto
Nella cartella del progetto entra in
UserFiles(creala se non esiste). Al suo interno creaSVGControls, se non esiste ancora, e copia lì il file modificato. La destinazione è la cartella del progetto, non la cartella di installazione Siemens.Dove salvare il file del serbatoio
Dentro la cartella del tuo progetto
Il tuo progetto/UserFiles/SVGControls/HmixHorizontalTank.svghmi
Crea SVGControls se non esiste ancora e copia qui il file.
Poi, nell'editor delle schermate
Aggiorna la tavolozza Widget dinamici nella task card Tool e trascina il serbatoio in una schermata del dispositivo Unified.
Mantieni il nome e l'estensione completi: HmixHorizontalTank.svghmi. Un SVG dinamico si copia come file singolo, senza ZIP. Verifica: Il percorso termina con
UserFiles\SVGControls\HmixHorizontalTank.svghmi.Dove · TIA Portal →
ProvaSerbatoio→ Tool → Widget dinamiciAggiorna la tavolozza e trascina il serbatoio
Con la schermata aperta, espandi Widget dinamici (Dynamic widgets) nella task card Tool e fai clic sul suo pulsante di aggiornamento. Cerca il serbatoio — compare come HMIx Horizontal Tank o con il nome del file, HmixHorizontalTank — e trascinalo nella schermata. Se non compare, controlla il percorso del passaggio precedente prima di continuare.
Verifica: Hai un'istanza del serbatoio in
ProvaSerbatoio.Dove · Serbatoio selezionato → Finestra di ispezione → Proprietà
Controlla il parametro prima di collegarlo
Con il serbatoio selezionato, trova
FillLeveltra le sue proprietà (puoi scriverlo nella casella di ricerca della Finestra di ispezione). Il valore iniziale dovrebbe essere 25 se hai fatto la modifica, oppure 50 se hai importato l'originale. Scrivi un valore fisso di 50 e conferma: nell'editor delle schermate il liquido dovrebbe trovarsi a metà altezza.Verifica: Il disegno risponde a un valore fisso: il file funziona prima ancora di aggiungere una variabile.
Prima di continuare
Vedi il serbatoio e trovi FillLevel tra le sue proprietà. Se quel parametro manca, controlla il file prima di passare alla prova dinamica.
Siemens · Gestione della grafica SVG dinamicaSiemens · Aggiornamento degli SVG dinamici
Collega una variabile e fai riempire il serbatoio in Runtime
Finora il livello era un valore fisso. Ora lo collegherai a una variabile che puoi cambiare mentre la schermata è in esecuzione: un campo I/O (ingresso/uscita) scrive in TankLevel e il serbatoio legge la stessa variabile attraverso FillLevel. Non serve JavaScript.
Prima osserva che cosa deve succedere
Prova qui il livello prima di configurarlo in TIA Portal: muovi il cursore e osserva come cambia solo l'altezza del liquido.
Dove · TIA Portal → dispositivo Unified → Variabili HMI
Crea la variabile che conserva il livello
Apri la tabella delle variabili standard e aggiungi
TankLevel. Nella colonna Collegamento scegli Variabile interna e seleziona un tipo di dati numerico, per esempioReal.Verifica: Il tuo progetto ha la variabile
TankLevel; il file SVG mantiene il parametroFillLevel.Dove ·
ProvaSerbatoio→ serbatoio selezionato → proprietàFillLevelCollega il parametro del serbatoio a quella variabile
Nella colonna Dinamizzazione di
FillLevelscegli Variabile (Tag) e selezionaTankLevel. In questo modo sostituisci il valore fisso 50 con il valore attuale della variabile.Dal numero che scrivi al livello che vedi
Scrivi 50 nel campo I/O
- Valore
- 50
Il campo di ingresso/uscita permette di inserire un numero durante la prova.
La variabile HMI conserva 50
- TankLevel
- 50
TankLevel è una variabile interna. Puoi provarla senza collegare un PLC.
Il parametro FillLevel riceve 50
- FillLevel
- 50
Nelle proprietà del serbatoio collega FillLevel a TankLevel.
Il liquido arriva a metà altezza
50%
Poi prova 0 e 100 per controllare i due estremi.
Il campo I/O e FillLevel condividono la variabile TankLevel. Quando cambi il campo in Runtime, il serbatoio riceve il nuovo valore e modifica l'altezza del liquido. Verifica:
FillLevelprende il suo valore daTankLevel.Dove · Tool → Elementi → Campo I/O
Aggiungi un campo per scrivere il livello
Trascina un campo I/O accanto al serbatoio. Scegli la modalità Ingresso/uscita e collega il suo Valore di processo a
TankLevel, la stessa variabile. Se vuoi, aggiungi accanto il testo «Livello, 0–100 %».Verifica: Il serbatoio e il campo numerico usano entrambi
TankLevel, quindi il numero che scrivi si vedrà nel disegno.Dove · TIA Portal → albero del progetto → dispositivo HMI
Compila, apri Runtime e prova 0, 50 e 100
Fai clic destro su
ProvaSerbatoioe scegli Definisci come pagina iniziale. Compila il dispositivo HMI (clic destro → Compila → Software), correggi eventuali errori e fai clic su Avvia simulazione oppure carica il progetto nel tuo Unified PC Runtime. Accedi al client web con un utente del progetto (se non ne hai, creane uno in Impostazioni di sicurezza → Utenti e ruoli con un ruolo HMI e compila di nuovo). Scrivi 0 nel campo I/O e premi Invio; ripeti con 50 e 100.Verifica: Con 0 non si vede liquido, con 50 arriva a metà altezza e con 100 riempie l'interno. Il contorno e i supporti non si muovono.
Il cursore di questa pagina illustra soltanto il comportamento previsto. Non controlla il tuo progetto TIA Portal e non sostituisce la prova in Runtime.
Prima di continuare
Il campo I/O e il serbatoio mostrano lo stesso livello. Ricarica la pagina del client (F5) e verifica che il disegno rifletta ancora il valore attuale di TankLevel.
Se qualcosa non torna: sintomi e soluzioni
- Non compare in Widget dinamici: controlla che il file si trovi in
UserFiles\SVGControlsdel progetto aperto e termini in.svghmi(non.svghmi.txt). Fai clic su aggiorna nella tavolozza; se ancora non compare, confronta l'inizio del file con il download originale. - Il serbatoio compare ma non trovi
FillLevel: verifica di averlo inserito da Widget dinamici. Un SVG importato come grafica normale non ha parametri. - Il valore fisso funziona ma il campo I/O non muove il liquido: controlla che il campo e
FillLevelusino la stessa variabileTankLevele che il campo sia in modalità Ingresso/uscita. Conferma ogni numero con Invio. - Non riesci ad accedere a Runtime: il client chiede un utente del progetto. Creane uno in Impostazioni di sicurezza → Utenti e ruoli con un ruolo HMI, compila e carica di nuovo.
- Non vedi la tua modifica da 50 a 25: controlla quale copia hai salvato in
SVGControls. Aggiorna la tavolozza e prova con una nuova istanza: un'istanza esistente conserva il valore che aveva già. - L'aspetto è diverso da quello nel browser: WinCC Unified supporta un sottoinsieme di SVG. Usa forme ed effetti supportati e controlla il risultato sul dispositivo di destinazione.
Quando questa prova funziona, puoi estendere il tuo SVG con parametri di colore (HmiColor) o di visibilità (boolean). Per riutilizzarlo nei faceplate, consulta la procedura Siemens per creare un tipo di SVG dinamico in una libreria.
Siemens · Aggiornamento degli SVG dinamiciSiemens · Formato SVG supportato e restrizioniSiemens · SVG dinamici come tipi di libreria
Scorciatoia: crea i tuoi SVG dinamici con l'IA
Disegnare apparecchiature industriali e scrivere a mano i loro collegamenti hmi-bind richiede tempo. Il generatore IA di HMIx (ai.hmix.tech) crea SVG dinamici per WinCC Unified e V8 a partire da una descrizione o da un'immagine di riferimento: disegna il simbolo o l'apparecchiatura, propone i parametri (livello, colori, visibilità, rotazione) e genera il file .svghmi. Puoi iniziare gratis con il piano Community.
Ciò che hai imparato qui resta valido: l'importazione da UserFiles\SVGControls, il collegamento dei parametri alle variabili e la prova in Runtime sono identici.
Dove · ai.hmix.tech → SVG dinamico
Descrivi la grafica che ti serve
Indica l'apparecchiatura, la vista e gli stati, per esempio: «Serbatoio orizzontale in acciaio inox, vista frontale, livello del liquido 0–100 % e colore del liquido configurabile». Scegli se vuoi un simbolo schematico (P&ID) o un'apparecchiatura dettagliata.
Verifica: L'IA disegna una prima versione che puoi perfezionare nella chat o nell'editor vettoriale.
Dove · Generatore → passaggi di definizione e simulazione
Controlla i parametri e la simulazione
Verifica i parametri proposti (per esempio, un livello come
FillLevel) e modificali nella simulazione per confermare che il liquido salga dal fondo e resti dentro il contorno.Verifica: Il disegno risponde nella simulazione come ti aspetti.
Dove · Generatore → passaggio di generazione e installazione
Scarica il file .svghmi
Scarica il
.svghmigenerato. È un unico file, come quello di questa guida.Verifica: Hai un
.svghmipronto da copiare inUserFiles\SVGControls.Dove · TIA Portal → Widget dinamici
Importalo e provalo come qui
Segui «Importa l'SVG dinamico in TIA Portal» e «Collega una variabile» usando i nomi dei tuoi parametri.
Verifica: Il tuo SVG generato con l'IA cambia in Runtime con le tue variabili.
Con il piano gratuito, le risorse generate vengono pubblicate nel catalogo HMIx perché anche altri utenti possano usarle; i piani a pagamento ti permettono di mantenerle private.
Prima di continuare
L'IA accelera il disegno e i collegamenti, ma non sostituisce la prova. Verifica sempre il risultato in Runtime e sul dispositivo di destinazione.
Domande frequenti
Qual è la differenza tra FillLevel e TankLevel?
FillLevel è il parametro definito all'interno del disegno (hmi:paramDef). TankLevel è la variabile che conserva il numero nel tuo progetto HMI. Quando li colleghi in TIA Portal, il disegno riceve quel numero e cambia l'altezza del liquido.
Posso cambiare il colore dalle proprietà di questo esempio?
Questo download espone solo FillLevel; i suoi colori sono fissi all'interno del file. Per cambiarli da TIA Portal dovresti aggiungere un parametro HmiColor e collegarlo al riempimento con Converter.RGBA, scegliere una risorsa del catalogo che lo includa già oppure generarla con l'IA di HMIx.
Basta rinominare un SVG in .svghmi?
No. Il file deve dichiarare i parametri (hmi:paramDef dentro hmi:self) e i collegamenti hmi-bind che li legano al disegno. L'esempio scaricabile contiene già entrambi.
Posso creare un SVG dinamico con l'IA?
Sì. Il generatore IA di HMIx (ai.hmix.tech) crea SVG dinamici (.svghmi) per WinCC Unified e V8 a partire da una descrizione o da un'immagine: disegno, parametri e collegamenti. Poi lo importi e lo provi come spiega questa guida.
Mi servono un PLC o JavaScript?
Non per questa prova. Il livello è memorizzato in una variabile HMI interna e le espressioni dentro l'SVG cambiano il disegno. Ti servono però TIA Portal con WinCC Unified e la sua simulazione o Unified PC Runtime.