Dynamizations

Les dynamisations permettent de changer les prorpiétés d'un item en fonction d'un évènement exterieur.
Généralement un événement extérieur est un changement de variable dans l'Hmi.

Vous pouvez ajouter autant de dynamisations que possible dans un Item.

Interface Dynamization

interface ScriptDynamization<T extends Pure<BaseItem>> extends BaseScript {
    Async: boolean; // -> BaseScript
    ScriptCode: string[] // -> BaseScript
    PropertyName: keyof T;
    Trigger: Trigger; // voir Trigger
}
ScriptDynamization hérite des propriétés de BaseScript.
Ainsi l'écriture du script d'une dynamisation se fais de la même façon que pour un évenement.

PropertyName

Type: keyof Item

Propriété de l'Item qui doit être changé via la dynamization.
TypeScript vous propose directement les propriétés correspondantes.

Interface Trigger

interface Trigger {
    Tags: string[];
    Type: TriggerType;
    CustomDuration?: string;
}

Tags

Type: Array

Liste des tags qui vont enclencher cette dynamisation.

Type

Type: TriggerType

enum TriggerType {
    Disabled = 0,
    T1s = 1,
    T2s = 2,
    CustomCycle = 3,
    Tags = 4,
    T5s = 5,
    T10s = 10,
    T100ms = 100,
    T250ms = 250,
    T500ms = 500
}

TriggerType représente les intervalles ou l'appel à la dynamization va être éffectué.

L'utilisation de Tags signifie que seul un changement des valeurs des variables dans le champ Tags peut entraîner un appel.

CustomCycle

Type: string

Ce champ en sera pris en compte seulement si CustomCycle est choisi dans TriggerType.

Définis une unité de temps arbitraire pour l'intervalle d'actualisation des appels.

Utilisation

Dans la fonction Data de votre Item, la déclaration des évènements se fait via l'utilisation de this.Dynamizations.
Dynamizations est un tableau dans lequel vous pouvez rajouter autant de dynamisations que nécèssaires.

Si vous précisez plus d'une dynamisation pour une même propriété d'objet, seule la dernière dynamisation rajoutée sera pris en compte.

Exemple

Cet exemple ajoute une dynamisation à la propriété Visible du bouton .
Le script s'éxécute de façon non asynchrone, le code se contente de retourner la valeur du tag MyHmiTag.
Cette dynamisation s'éxécute dés lorsque le tag MyHmiTag change de valeur, en supposant que ce tag est de type bool.

      

import {EntryComponent} from "@adclz/unifiedbuilder/builder"
import {Button} from "@adclz/unifiedbuilder/widgets"
import {Circle} from "@adclz/unifiedbuilder/shapes"
import {TriggerType} from "@adclz/unifiedbuilder/dynamizations"
 
const Template =
"<div>" +
"<my-button></my-button>" +
"<div class="absolute flex flex-row w-full place-items-center mt-1.5 top-0">" +
"<my-circle></my-circle>" +
"</div>" +
"</div>"
 
export default EntryComponent(
() => {
return {
Template: Template,
Data: {
'my-button': new Button()
.Data(function () {
this.Dynamizations.push(
{
Async: false,
PropertyName: 'Visible',
ScriptCode: "return HMIRuntime.Tags('MyHmiTag').Read()",
Trigger: {
Tags: "MyHmiTag",
Type: TriggerType.Tags,
}
}
)
}),
'my-circle': new Circle()
}
}
})