4.6. Systems#

See also RFC 104: Systems as Collections of Modules.

All standard SECoP interface entities described so far (interface classes, accessibles and so on) refer to a single module.

However, in many cases, it is not desirable (or even possible) to represent a complex piece of hardware equipment by a single module. In fact, since SECoP encourages the use of standard interface classes like Readable, the main “process variables” of the equipment must each be represented by a module’s value parameter, while other parameters are used for ancillary information or configuration of the module.

The notion of a “system” encompasses a collection of modules that work and interact in a defined way.

As always, the definition of a system specifies the minimum interface required, and may contain optional entities. More entities can always be introduced by each implementation.

This allows the definition of facility-specific and inter-facility standards for control and metadata collection beyond the level of “a sensor” or “an analog output”, towards the level of “a cryomagnet”.

System mapping#

Like other standard entities, standard systems can be defined by the SECoP specification. Currently, no such systems are defined.

A specification designates both the name of each required module, and its interface (an interface class, and/or additional accessibles).

Custom systems can be defined by linking to a schema in the node description, see Schema.

The SEC node descriptive data has a node property that lists the systems contained in it, with a mapping of system-given module names to actual modules in the node.

Systems can derive from other systems, and contain other systems as subgroups of their modules.

Referencing Systems#

In the SECNode descriptive data, the optional property systems is introduced. It is a JSON object with local system names as keys and a description, the schema name of the system and a mapping of module names as the value. For a system to be valid, all non-optional modules that are included in the system definition have to be present.

Local system names may not clash with module names on the same SEC node.

Example:

"systems": {
    "cryo1": {
        "description": "A cryo",
        "system": "OrangeCryostat",
        "modules": {
            "T": "cryo1_T",
            "HeLevel": "cryo1_helevel",
        },
    },
}

For subsystems:

"systems": {
    "mag5t_x": {
        "description": "X axis power supply",
        "system": "PowerSupply",
        "modules": {
            "current": "magcur_x",
            "voltage": "magvolt_x"
        }
    },
    "mag5t_y": {
        "description": "Y axis power supply",
        "system": "PowerSupply",
        "modules": {
            "current": "magcur_y",
            "voltage": "magvolt_y"
        }
    },
    "mag5t_z": {
        "description": "Z axis power supply",
        "system": "PowerSupply",
        "modules": {
            "current": "magcur_z",
            "voltage": "magvolt_z"
        }
    },
    "mag5t": {
        "description": "5 Tesla magnet",
        "system": "VectorMagnet",
        "modules": {
            "T": "magtemp",
            "X": "mag5t_x",
            "Y": "mag5t_y",
            "Z": "mag5t_z",
        },
    },
}