Developers

Data models

The ISA-95 tag taxonomy the Singularity expects from a site: the hierarchy, the tags, their engineering units, and the four tags that are genuinely mandatory.

What a data model is

A data model is the agreed shape of what a machine reports: which tags exist, what each one means, what type it carries, and what engineering unit it is expressed in. Data arriving from your site has to be in that shape before a module can use it.

There is no catalogue of ready-made models per machine type. The taxonomy below is fixed and it is what every model is built from. The model for a given machine type is agreed during implementation, against this taxonomy, for the machine types in that phase. Expect to sit in that conversation rather than to receive a document.

Every tag is typed, carries an engineering unit, and has an update frequency.

The ISA-95 hierarchy

Assets are addressed down a seven-level path.

  1. Enterprise
  2. Site
  3. Area
  4. Line
  5. Work Cell
  6. Asset
  7. Tag

The MQTT topic a site publishes on carries its own six-level form of this path, which is not identical to the seven levels above. Connecting a site has the topic structure.

The mandatory minimum

Four tags are mandatory. They are the only tags documented as required anywhere in the specification.

Tag Type
In Counts counter
Out Counts counter
Reject Counts counter
State enum, at minimum Running, Idle, Faulted

The specification tables carry no mandatory-versus-optional column, so every tag below the four above is optional by omission. That is not the same as documented as optional. If a tag matters to a module you are buying, confirm it in implementation rather than reading its absence here as permission to skip it.

Equipment state and context

What the machine is doing, and the job, product, shift and reason code it is doing it under.

Tag Type
Equipment State enum: Running, Idle, Stopped, Faulted
Mode enum: Auto, Manual, Setup, CIP
Start and Stop Events boolean
Job or Order ID string
Product Code or SKU string
Shift or Operator ID string
Reason Code string

Production counters

These are the OEE backbone. Three of them carry the mandatory flag.

Tag Unit
In Count count
Out Count count of good units
Reject or Scrap Count count
Rework Count count
Target Count count
All Count count
Cycle Time Actual seconds
Cycle Time Target seconds

Process parameters

Physical conditions measured on the process itself, and the electrical draw behind it.

Tag Units
Temperature C or F
Pressure psi, bar or kPa
Flow Rate L/min or gal/min
Level or Weight % or kg
Humidity %RH
Torque or Motor Load % or Nm
Speed Hz or RPM
Current A
Voltage V
Power Factor ratio
Vibration mm/s or g
Acoustic dB

The unit a tag is expressed in is part of the agreement, not a detail settled later. A pressure tag carried in psi where the model expects bar produces a plausible number, and a plausible number survives every check a person makes by eye.

Quality

Inspection and sample results measured on the line.

Tag Units or type
Weight or Fill g or oz
Seal Integrity boolean or %
Vision Inspection pass/fail or count
Metal Detection boolean
Temperature at Quality Check not specified
Moisture, pH or Brix not specified
Sample Result pass/fail or numeric
Sample Timestamp datetime
Operator Comments not specified

Environmental and utility

Utilities consumed around the process, plus ambient conditions and the cost and carbon rates applied to them.

Tag Units
Air pressure not specified
Water flow not specified
Steam not specified
Compressed air SCFM
Electricity kWh
Gas m3 or BTU
Ambient conditions not specified
Power Cost Index $/kWh
Carbon Intensity kg CO2/kWh

Maintenance

Condition and run history for the equipment itself rather than for the product.

Tag Units or type
Vibration, x, y and z axes not specified
Bearing, motor and gearbox temperature not specified
Lubrication boolean
Component cycle count count
Alarm and fault codes not specified
Run hours hours
MTBF hours

Extended tags

These carry an explicit flag in the specification: not required for all assets. It is the only place a tag is marked that way.

Tag Units or type
Acoustic signature spectrum not specified
Thermal imaging IR pixel array
PLC scan time ms
Network latency ms

Operator and event inputs

These do not come off a PLC. Each one arrives from a system a person operates, and the source system is part of the model.

Input Source system
Downtime Reason Code HMI or MES
Changeover Start and End HMI or PLC
Sanitation Start and End CIP control system
Maintenance Start and End CMMS or operator
Quality Hold and Release MES
Manual Count Adjust operator

Scope these early. A downtime reason code that exists only in a supervisor’s head is an operational change on the floor, not a mapping exercise, and it carries the lead time of one.

Timestamps

No timestamp convention is specified. The documentation mentions converting timestamps to a standard UTC format once, as an example of work that happens on the client before publish. That is the whole of the guidance that exists.

Agree the convention in implementation and write it down. A misread timestamp does not fail loudly, and a shift boundary landing an hour off looks exactly like a real production pattern.

Mapping the taxonomy onto your machines

Every tag in the agreed model has to be filled from something real on your floor. Deciding which signal on a given machine corresponds to which tag is judgement work that needs plant knowledge, and it is harder than it sounds for reasons that have nothing to do with software.

  • Two machines of the same type from two vendors name the same physical measurement differently.
  • One tag in the model is assembled from two signals on the machine, or the reverse.
  • A machine exposes forty signals and the model wants six of them, and nothing in the naming says which six.
  • The person who commissioned the machine named its tags, and that person may no longer work there.
  • A signal arrives as a type the model does not use: a number carried as text, a status carried as an integer code where the model expects a defined state, a measurement in units the model does not use.

None of that can be inferred from a tag name, which is why mapping is done per machine type first and then confirmed per machine.

Validation and coverage

Validate on your side, before publish: tags present, types correct, values inside range, the mandatory four populated. A malformed record caught at the source is one record. The same record caught later is one row inside a stream, and finding it costs more than preventing it did.

Implementation has a hard integration-validation gate, and module configuration does not proceed past it. Configuring a module on top of data that does not yet match the model produces work that has to be redone.

Missing coverage is harder to spot than bad formatting. A site that connects most of its machines and not all of them produces answers that look complete, because nothing on a screen announces which machines are missing. A total reads as a total. Where a machine cannot report yet, know it is out, know why, and have it on the connectivity list.

Where this stalls

This is the step implementations stall on, and the platform is rarely the reason.

Mapping needs someone who knows the plant. Type conversion needs someone who knows what a specific machine actually emits. The mandatory four expose instrumentation gaps that have been tolerated for years, because no downstream system ever asked that machine for a reject count before. All of it wants the same small number of people, and those people have day jobs on the floor.

Take one machine type all the way through mapping, conversion, population, and validation before starting the second, so the pattern is proven once instead of debugged five times in parallel. Treat the output of the connectivity assessment as the real schedule, because a machine that cannot report cannot be mapped.

Who owns which half of this work is set out in Division of responsibilities. The module that puts the resulting model to work is the Data Model Engine.