DataBlock

Datablock est la classe principale de Plc Data Builder.
Elle permet la création de blocs de données et contient toutes les informations que vous lui transmettez.

      

import {DataBlock, Bool} from "@adclz/plcdatabuilder/types"
 
const MyDataBlock = new DataBlock({Name: "MyDataBlock", Content: { "MyProperty": new Bool({}) }})
const MyDataBlock: DataBlock<{ MyProperty: Bool; }>
 

🏗️ Constructeur

DataBlock.prototype.constructor = <T extends DataBlockProperty>(Params: DataBlockParameters<T>) => DataBlock

Params

Paramètres initiaux de construction d'un bloc de données.

interface DataBlockParameters<T extends DataBlockProperty> {
    Name: string
    Content: T
    S7OA?: boolean
    Version?: number
    Retain?: boolean
    Unlinked?: boolean
}

Name

DataBlockParameters.Name = String

Nom du bloc de données.

Content

Type: Content

DataBlockParameters.Content = Record<string, DataBlockProperty>

Content vous permet de définir le contenu de votre bloc de données.

S7OA

DataBlockParameters.Type = boolean

Permet de définir si le bloc doit être compilé avec un accès en mémoire optimisé.

Version

DataBlockParameters.Version = number

Permet de définir la version du bloc de donnée, sous la forme x.y.

Retain

DataBlockParameters.Retain = boolean

Permet d'indiquer à la CPU que ce bloc doit conserver ses données lors d'une mise hors tension.

Par défaut, la mise à true de Retain s'applique à tous les éléments du DataBlock.
Si vous souhaitez que certains éléments ne soit pas rémanents, vous devez changer manuellement Retain dans ces élements.

Exemple

import {DataBlock} from "@adlcz/plcdatabuilder/types"

const MyDataBlock = new DataBlock({
    Name: "MyDataBlock",
    S7OA: false,
    Version: 0.1,
    Retain: false
})

📜 Champs

Content

DataBlock.prototype.Content = Record<string, DataBlockProperty>
type DataBlockProperty = 
    PrimitivePlcClass | 
    UDTImplementation<StructProperties> | 
    Struct<StructProperty> | 
    Array_<ArrayProperty>
TypeDescription
PrimitivePlcClassReprésente un type primitif
UDTImplementationImplémentation d'une UDT
StructStructure déclarée au sein du bloc
ArrayTableau
Même si Content est accessible, il est fortement recommandé de ne pas le modifier apres que le bloc ait été crée afin de ne pas altérer l'inférence de type de TypeScript.
Vous devez donc créer un nouveau DataBlock à la fin de la création des variables que vous allez mettre à l'intérieur.

🧪 Méthodes

GetOffsets

DataBlock.prototype.GetOffsets = () => Map<string, number>

Permet de calculer la position en mémoire de chaque élément.

Cette méthode fonctionnera même si S7OAest mis sur false.
Ce qui signifie que l'utilisation de cette méthode ne garanti pas que l'accès en mémoire optimisée est activé.

GetOffsets retourne une Map avec pour clé le nom de chaque propriété dans le bloc et en valeur le décalage en octet depuis le début du bloc.
L'affichage de la valeur se fais sous la forme x.y ou x représente l'octet ou démarre la variable et y le bit de l' octet.

"MyProperty": 1.5

Ici 1 signifie que MyProperty démarre dans l'octet numéro 1 (donc 2eme octet depuis le début) à la position de bit 5 (6ème bit)

Stringify

Retourne un tableau de string ou chaque élément représente une ligne d'instruction.

DataBlock.prototype.Stringify = () => string[]
En utilisant une librairie externe, vous avez la possibilité d'enregistrer directement le résultat de Stringify dans un fichier .db

Avec downloadjs

import * as download from "downloadjs"
// ...
const MyCode = MyDataBlock.Stringify()

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