Simulated
Des signaux synthétiques internes à l'application, pour essayer, se former et construire des tableaux de bord sans matériel.
Le pilote Simulated produit des signaux synthétiques à l'intérieur de l'application, sans matériel ni réseau. C'est un pilote à part entière, pas un raccourci : ses équipements sont enrôlés, scrutés et mis en cache par exactement le même chemin d'exécution que du matériel réel, si bien que les tracés, les types de donnée, les indicateurs de qualité et le comportement en écriture fonctionnent comme sur le terrain. Employez-le pour essayer le modèle du Connector, construire des tableaux de bord avant l'arrivée du matériel, ou préparer une démonstration.
Équipement
Un équipement simulé n'a aucun champ de connexion : seulement son nom et la
période de scrutation (ms) par défaut (1000 par défaut). Son URI de base est
simulated://<équipement> ; le segment d'équipement n'est qu'indicatif, parce que chaque
comportement vit sur les tags.
Découverte
Découvrir n'a besoin d'aucune cible et liste le catalogue intégré : une instance prête à ajouter de chaque archétype, tags compris. Décochez les voies dont vous ne voulez pas avant d'ajouter.
| Modèle | Instance | Voies |
|---|---|---|
| Universal Controller | UC-01 | ProcessValue (sinus), SetPoint (consigne inscriptible, 50 par défaut), Output (rampe), RunStatus (Run/Stop/Pause/Fault) |
| Electrical Power Meter | PM-01 | Voltage, Current, ActivePower et Frequency (marches aléatoires autour de 230, 10, 2300 et 60, scrutées à 250 ms), PowerFactor (sinus) |
| Production Counter | CNT-01 | Count (compteur Int32), Rate (marche aléatoire autour de 100), Running (booléen alterné) |
| Status Panel | STS-01 | State (Run/Stop/Pause/Fault), Alarm (booléen alterné), Uptime (compteur Int64) |
| Type Showcase | SHOW-01 | Une voie par type intégré OPC UA, quinze en tout, utile pour exercer chaque affichage de valeur |
Tags
Un tag simulé n'a pas d'adresse à taper : le nom du tag est le point. Chaque type de donnée intégré OPC UA est disponible, ainsi que les trois modes d'accès. Ce que le tag produit se choisit avec Type de signal sur la carte Source ; le sélecteur ne propose que les formes compatibles avec le type de donnée du tag, et changer le type de donnée aligne une forme incompatible vers une valeur par défaut sensée. Un tag dont l'accès autorise l'écriture ne se voit proposer que les formes qui acceptent une écriture, Maintien de consigne et Impulsion, et changer l'accès aligne la forme de la même manière.
| Type de signal | Produit | Types compatibles | Inscriptible |
|---|---|---|---|
| Sinus | Une onde lisse avec une légère ondulation, amorcée depuis le nom du tag, si bien que des tags aux noms différents bougent différemment et qu'un redémarrage reproduit la même courbe | numériques | non |
| Rampe | Une onde triangulaire (montée, puis descente), de période 10 à 59 s amorcée depuis le nom du tag | numériques | non |
| Marche aléatoire | Un bruit de capteur réaliste : des pas à partir de la dernière valeur avec un rappel vers la valeur par défaut (50 quand elle n'est pas réglée), d'un pas de 1 % du centre (0,5 au minimum) | numériques | non |
| Compteur | Un entier croissant : part de la valeur par défaut (0 quand elle n'est pas réglée) et ajoute 1 par lecture, si bien que la cadence suit la période de scrutation | numériques | non |
| Booléen alterné | Un booléen qui alterne chaque seconde | Boolean | non |
| Texte énuméré | Une chaîne qui parcourt une liste fixe d'états, d'un pas toutes les 3 s | String | non |
| Horloge | L'heure courante, échantillonnée à chaque lecture | DateTime | non |
| GUID aléatoire | Un nouveau Guid aléatoire par lecture | Guid | non |
| Octets aléatoires | Une charge utile aléatoire de 8 octets par lecture | ByteString | non |
| Maintien de consigne | Maintient une valeur par défaut jusqu'à une écriture ; une écriture remplace ce que répond chaque lecture suivante | tous | oui |
| Impulsion | Un point momentané : il repose sur une valeur de repos, et une écriture maintient la valeur écrite pendant un nombre de secondes annoncé avant de retomber d'elle-même | tous | oui |
Un tag créé sans type explicite reçoit une valeur par défaut vivante : les tags inscriptibles deviennent Maintien de consigne (pour que les écritures tiennent), et les tags en lecture seule reçoivent un générateur adapté au type (numérique → Sinus, Boolean → Booléen alterné, String → Texte énuméré, DateTime → Horloge, Guid → GUID aléatoire, ByteString → Octets aléatoires). Impulsion n'est jamais une valeur par défaut : un point qui rend une valeur écrite puis l'abandonne est un choix délibéré.
Les paramètres du volet
Deux paramètres se modifient directement sur la carte Source :
| Champ | Affiché pour | Sens |
|---|---|---|
| Valeur par défaut | Marche aléatoire, Compteur, Maintien de consigne | Le centre de la marche, la valeur de départ du compteur, ou la réponse de la consigne tant que rien n'est écrit. Le champ suit le type du tag (case pour Boolean, sélecteur de date pour DateTime, texte sinon). |
| États | Texte énuméré | La liste séparée par des points-virgules à parcourir, par exemple Run;Stop;Pause. Une liste vide ou sans membre retombe sur Run;Stop;Pause. |
Les paramètres de signal avancés
Les autres paramètres de forme voyagent en arguments de requête sur l'adresse conservée du
tag (par exemple ProcessValue?min=20&max=80&period=30). Le volet ne les modifie pas
mais les conserve à travers chaque modification ; les exemples amorcés les emploient, et
un agent peut les régler par les outils de tag de la surface agent.
| Argument | S'applique à | Sens | Quand il est absent |
|---|---|---|---|
min, max |
Sinus | La bande dans laquelle l'onde évolue ; la sortie y est écrêtée | Une bande amorcée depuis le nom du tag (amplitude de 10 à 49 autour d'un décalage de 20 à 49), sans écrêtage |
period |
Sinus | La période de l'onde en secondes | Une fréquence amorcée depuis le nom du tag (de 0,05 à 0,24 Hz) |
phase |
Sinus | Le décalage de phase en degrés | Amorcé depuis le nom du tag |
default |
Marche aléatoire, Compteur, Maintien de consigne | La même valeur que modifie le champ Valeur par défaut du volet | 50 / 0 / la valeur par défaut du type |
values |
Texte énuméré | La même liste que modifie le champ États du volet | Run;Stop;Pause |
baseline |
Impulsion | La valeur sur laquelle le point repose entre deux épisodes, interprétée selon le type du tag | La valeur zéro du type (l'heure courante pour DateTime, vide pour String) |
hold |
Impulsion | Combien de secondes dure un épisode écrit | 10 s |
warmup |
tous | Les secondes après la connexion avant que la première lecture ne réponde, comme un instrument qui doit se stabiliser ; la boucle de scrutation absorbe l'attente | aucune |
Écritures
- Maintien de consigne accepte les écritures et répond ensuite avec la valeur écrite. La valeur maintenue vit en mémoire tant que l'équipement reste connecté ; elle n'est pas conservée dans la configuration, si bien que désactiver l'équipement ou redémarrer l'application ramène le point à sa valeur par défaut.
- Impulsion prend une écriture comme un épisode : elle répond avec la valeur écrite jusqu'à la fin du maintien, puis retombe sur sa valeur de repos. Une seconde écriture pendant un épisode le remplace entièrement, si bien que garder un bouton enfoncé relance le maintien au lieu d'en empiler deux.
- Tous les autres types refusent les écritures ; une écriture tentée est journalisée une fois par tag plutôt que d'inonder le journal à chaque scrutation.
Comme pour tout pilote, le champ d'écriture prend la valeur physique et la chaîne de conversion est remontée avant que la valeur brute n'atteigne le signal.
Des limites à connaître
- Les valeurs sont synthétisées par exécution. Les formes déterministes (Sinus, Rampe, Horloge) reproduisent la même courbe après un redémarrage ; celles qui portent un état (Compteur, Marche aléatoire, Maintien de consigne, Impulsion) repartent de zéro.
- Associer un type de signal à un type de donnée incompatible (possible seulement par configuration programmatique ; le volet contraint le sélecteur) fait échouer chaque lecture du tag, avec un avertissement journalisé une fois.