✨ Udt

Udt permet la création de structures de données de façon globale.

      

import {UDT, Bool} from "@adclz/plcdatabuilder/types"
 
const MyUdt = new UDT({Name: "MyUdt", Version: 0.1, Content: {"MyProperty1": new Bool({})}})
const MyUdt: UDT<{ MyProperty1: Bool; }, "MyUdt", 0.1>
 

🏗️ Constructeur

UDT.prototype.constructor = <T extends StructProperties, Y extends string, U extends number>(Params: UDTParameters<T, Y, U>) => UDT

Params

Paramètres initiaux de construction d'une structure.

interface UDTParameters<T extends StructProperties, Y extends string, U extends number> extends BaseTypeParameters {
    Content: T
    Name: Y
    Version: U
}

Content

Type: Content

UDTParameters.Content = StructProperties
UDT possède les mêmes contraintes que Struct pour la construction de Content.
L'implémentation d'une UDT doit se faire via la méthode Implement ou Self.
Les valeurs par défaut lors de la création de l'UDT seront utilisées dans l'implémentation de l'UDT si elles ne sont pas surchargées.
Voir Implement

Version

UDTParameters.Version = number

Permet définir la version de l'udt, sous la forme x.y.

Name

UDTParameters.Name = string

Nom de la structure.

📜 Champs

Content

Struct.prototype.Content = StructProperties
type StructProperties = Record<string,
    PrimitivePlcClass
    | UDTImplementation<StructProperties>
    | Struct<StructProperties>
    | Array_<ArrayProperty>>
TypeDescription
PrimitivePlcClassReprésente un type primitif
UDTImplementationImplémentation d'une UDT
StructStructure déclarée au sein du bloc
ArrayTableau

🧪 Méthodes

OverrideStructName est utilisé en interne par DataBlock afin de générer le nom de la structure.

GetOffsets

UDT.prototype.GetOffsets = (OverrideStructName?: string) => Map<string, number>

Positions des champs de la structure en mémoire.

Implement

UDT.prototype.Implement = <T, Y, U>(Params?: { Content: T, BaseParams?: BaseTypeParameters }) => UDTImplementation<T, Y, U>

Permet d'implémenter l'UDT dans un autre type de données.
Vous pouvez surcharger les valeurs par défaut de l'UDT en utilisant le paramètre Params.

      

import {UDT, DataBlock, Bool} from "@adclz/plcdatabuilder/types"
 
const MyUdt = new UDT({Name: "MyUdt", Version: 0.1, Content: {"MyUdtProperty": new Bool({})}})
const MyUdt: UDT<{ MyUdtProperty: Bool; }, "MyUdt", 0.1>
 
// ✔️
const MyDataBlock1 = new DataBlock({
Name: "MyDataBlock1",
Content:
{
"MyProperty": MyUdt.Implement({
Content: {
"MyUdtProperty": new Bool({DefaultValue: true})
}
})
}
})
 
// ️️❌
const MyDataBlock2 = new DataBlock({
Name: "MyDataBlock2",
Content:
{
"MyProperty": MyUdt
Type 'UDT<{ MyUdtProperty: Bool; }, "MyUdt", 0.1>' is not assignable to type 'PrimitivePlcClass | UDTImplementation<StructProperties, string, number> | Struct<StructProperties> | Array_<...>'. Type 'UDT<{ MyUdtProperty: Bool; }, "MyUdt", 0.1>' is missing the following properties from type 'UDTImplementation<StructProperties, string, number>': GetOffsets, StringifyHeader, StringifyBody2322Type 'UDT<{ MyUdtProperty: Bool; }, "MyUdt", 0.1>' is not assignable to type 'PrimitivePlcClass | UDTImplementation<StructProperties, string, number> | Struct<StructProperties> | Array_<...>'. Type 'UDT<{ MyUdtProperty: Bool; }, "MyUdt", 0.1>' is missing the following properties from type 'UDTImplementation<StructProperties, string, number>': GetOffsets, StringifyHeader, StringifyBody
}
})
 

Self

UDT.prototype.Self = UDT.prototype.Implement({})

Similaire à Implement, sauf que Self retourne toutes les valeurs par défaut de l'UDT.
Il est égal à Implement({}) mais permet de montrer que vous ne souhaitez pas surcharger les valeurs par défaut.

      

import {UDT, DataBlock, Bool} from "@adclz/plcdatabuilder/types"
 
const MyUdt = new UDT({Name: "MyUdt", Version: 0.1, Content: {"MyUdtProperty": new Bool({})}})
const MyUdt: UDT<{ MyUdtProperty: Bool; }, "MyUdt", 0.1>
 
const MyDataBlock1 = new DataBlock({
Name: "MyDataBlock1",
Content:
{
"MyProperty": MyUdt.Self()
}
})
 
 

StringifyHeader

UDT.prorotype.StringifyHeader = (OverrideStructName?: string) => string[]

En-tête de la structure.

StringifyBody

UDT.prototype.StringifyBody = (OverrideStructName?: string) => string[]

Corps de la structure avec les valeurs par défauts (si définies).

StringifyUdt

UDT.prototype.StringifyUdt = () => string[]

Permet de générer le contenu d'un fichier .udt.

Ce fichier peut être importé dans Tia Portal permettant de déclarer la structure de façon globale.

En utilisant une librairie externe, vous avez la possibilité d'enregistrer directement le résultat de StringifyUDT dans un fichier .udt

Avec downloadjs

import * as download from "downloadjs"
// ...
const MyCode = MyUdt.StringifyUDT()

const Download = () => {
    download(MyCode.join("\n"), "MyUdt.udt", "text/plain")
}

✨ Exemple

Cet exemple montre le résultat de la méthode StringifyUDT.