State Models

Define states computed by functional modules by elaborating entities and attributes, making the HDT capable of simulating, predicting, reasoning, and deciding.

This set of classes aims at describing states characterizing factory entities. States are computed by functional modules, which describe all those computational processes that can elaborate entities and attributes, making the HDT capable of simulating, predicting, reasoning, and deciding. The class FunctionalModule aggregates one or more events that can be used to update the state of the HDT depending on the result of the computation performed. Inputs are defined and mapped through the class FunctionalModuleInput to the entities needed by the model (e.g., physiological parameters and worker conditions for detecting fatigue level). Internally, functional models can employ any mean of data processing and calculation such as mathematical functions, machine learning, or empirical models. These, if necessary, can be stored as binary blobs and annotated to be managed correctly.

Clawdite model: highlight on State Models

Note that the required model attributes are indicated with a red asterisk ("*"). For mandatory relations, refer to the multiplicity instead, as relationships are defined on one side only (i.e., a specific relationship might be described within the other related entity).

StateDescriptor

The StateDescriptor extends the AbstractDescriptor with a specific class dedicated to the description of states of both workers and things in the factory. These states are computed by the FunctionalModule(s). The StateDescriptor can describe the state of a cobot in the form of the current pose, current part program, or the position or the fatigue level of a worker.

The StateDescriptor has the following relations:

ClassRelation typeMultiplicityDescription
BlockAggregation1The output schema description provided by a module.
FunctionalModuleOutputAggregation1The output data from the FunctionalModule.

FunctionalModule

The FunctionalModule class allows to describe any model that generates states. A model could be an AI algorithm or a simple data processor. The FunctionalModule defines a model that acts in the HDT and produces outputs that feed the HDT state. An example of FunctionalModule is the Fatigue Monitoring System or an Activity Detection Module.

The FunctionalModule is described by the following attributes:

AttributeTypeDescription
name*StringName of the FunctionalModule.
description*StringHuman readable description of the FunctionalModule.

The FunctionalModule has the following relations:

ClassRelation typeMultiplicityDescription
FunctionalModuleInputComposition0..*This is the relation between FunctionalModule expected inputs, and HDT available AbstractDescriptors. This relation allows the HDT to translate the module input parameter names to actual MeasurementDescriptor(s), CharacteristicDescriptor(s) and StateDescriptor(s).
FunctionalModuleOutputComposition0..*This is the relation that allows the HDT to map to FunctionalModule’s outputs to a StateDescriptor.
InterventionDescriptorComposition0..*This is the relation between the FunctionalModules supporting the decision making and the InterventionDescriptor, that allows to trigger interventions on the production system.
FactoryEntityModelComposition0..*This relation specifies the factory entities that are relevant for the FunctionalModule, i.e., that must be monitored by the FunctionalModule. For example, the Fatigue Monitor System is interested in monitoring new workers.

FunctionalModuleInput

The FunctionaModelInput supports the mapping that relates an AbstractDescriptor modelled into the HDT to an input that feeds the FunctionalModule. It allows the HDT to integrate modules that require input data with different structures than those described by MeasurementDescriptor(s), CharacteristicDescriptor(s) and StateDescriptor(s).

The FunctionalModule is described by the following attributes:

AttributeTypeDescription
inputParamName*StringThe FunctionalModule reference name of the input parameter
path*StringThe HDT reference name of the input parameter

FunctionalModuleOutput

The FunctionalModulOutput supports the mapping that relates the outputs of a FunctionalModule and the related StateDescriptor(s) into the HDT. It allows the HDT to integrate modules that provide output data with different structures than those described as a StateDescriptor.

The FunctionalModule is described by the following attributes:

AttributeTypeDescription
outputParamName*StringThe HDT reference name of the result

Block

The Block class is a utility entity that enables the formalization of the schema that describes the StateDescriptor(s), thus allowing the HDT to be aware of the data format. This helps FunctionalModule’s output validation against the schema, and also to translate/map an output schema of a module to an input schema of another module.

The Block structure describes every object's schema which contains coherent lists (a list that comprises elements of the same kind). For example, the location of different workers could be represented as follow (for simplicity the JSON format is used):

{
  "id": 10,
  "workers": [
    {"id": 10, "x": 10, "y": 20, "pose": "stand"},
    {"id": 20, "x": 23, "y": 40, "pose": "sit"},
    {"id": 30, "x": 10, "y": 20, "pose": "lying down"}
  ]
}

This example of output could be easily described through the use of the Block class:

  • StructBased workerBlock:
    • “id” → NumberBased
    • “x” → NumberBased
    • “y” → NumberBased
    • “pose” → StringBased
  • ListBased workersListBlock describe a list of workerBlock:
  • StructBased overallBlock describes the whole object as it follows:
    • “id” → NumberBased
    • “workers” → workersListBlock

ListBased

The ListBased class inherits from Block and describes a list that contains elements structured as a Block, enabling the definition of a coherent list that comprises data of the same type.

StructBased

The StructBased class inherits from Block and describes a structure of Block(s). It can be seen as a dictionary with string keys and Block values.

The StructBased is described by the following attributes:

AttributeTypeDescription
attributes*Map<String, Block>The mapping of a String key to a Block value.

StringBased

The StringBased block describes a simple attribute of type string, which can be part of a StructBased or ListBased.

NumberBased

The NumberBased block describes a simple numerical attribute, which can be part of a StructBased or ListBased.

BooleanBased

The BooleanBased block describes a simple bo attribute, which can be part of a StructBased or ListBased.