Your First Real Project
The Quick Start proved the pipe works. This page is about the decisions that make the difference between a project you can hand over and one that has to be rebuilt.
Decide the namespace shape first
The tag path is the most permanent thing you will create. Screens, alarms, history, scripts and exports all reference it, and renaming a folder late means touching all of them.
Model the plant, not the network:
✅ Site1/Line1/Filler/Motor1/Speed
❌ PLC_192_168_1_10/DB12/Word4
A path organised around physical or process structure survives a PLC replacement, an IP change and a protocol migration. A path organised around addressing does not.
A workable convention, roughly ISA-95:
<Site>/<Area>/<Line or Cell>/<Equipment>/<Signal>
Rules that pay off later:
- Be consistent about case and separators. Pick
PascalCaseorsnake_caseand hold the line. - No units in names.
Speed, notSpeed_RPM— the unit is a tag property. - No source hints in names.
Temperature, notOPC_Temperature. - Keep depth even. Sibling equipment should sit at the same level, so wildcards and UDTs work.
Use user-defined types from the start
If you have twenty identical motors, do not build twenty motor folders. Define a UDT once — members, data types, units, scaling, alarm definitions, binding address templates — and stamp out instances with parameters.
UDT: Motor
Speed float RPM address: ns=2;s={Device}.Speed
Current float A address: ns=2;s={Device}.Current
Running bool address: ns=2;s={Device}.Run
Fault bool address: ns=2;s={Device}.Fault alarm: on_boolean = true, priority high
Instance: Line1/Filler/Motor1 {Device} = "M101"
Instance: Line1/Filler/Motor2 {Device} = "M102"
Change the definition later and QUBIQ reconciles every instance. Instances with local overrides are reported as such rather than being silently overwritten.
Set engineering properties once, on the tag
Resist the temptation to scale, format and range-check in each widget. Put it on the tag:
| Property | Why on the tag |
|---|---|
| Unit | Widgets, trends and exports all label from it |
| Raw/Eng scaling | Applied after the protocol read, before history — so history is in engineering units |
| Deadband | Suppresses noise once, for every consumer |
| Format string | Consistent display everywhere the tag appears |
| Stale after | Turns a silent dead link into a visible quality change |
Separate design-time and runtime identity early
Decide before you build screens:
- Who logs into the Platform? Those are platform users with permissions.
- Who logs into LiveView? Those are runtime users in a User Database, with runtime roles.
Retro-fitting operator authentication after screens exist means revisiting every action that writes a tag. Deciding the write-security levels up front does not.
Structure views around navigation, not around drawing
A screen tree that mirrors the namespace is easy to navigate and easy to hand over:
Overview plant-wide KPIs and alarm summary
Line1/Overview line status
Line1/Filler equipment detail
Line1/Capper equipment detail
Diagnostics connection health, service status
Use embedded views and flex repeaters so equipment detail is authored once and parameterised, exactly as UDTs do for tags. Twenty near-identical screens is the visualization version of twenty hand-built motors.
Write history deliberately
History is cheap to enable and expensive to store. For each tag ask:
- Does anyone trend this, or is live value enough?
- What deadband makes the trend honest without storing noise? (A 0.5–1% of span deadband typically removes 90%+ of the rows and changes no chart a human can read.)
- Does it need a store interval so a frozen signal still proves it was alive?
Alarm rationalisation beats alarm volume
An operator who ignores the alarm banner has no alarm system. Before adding an alarm, answer:
- Is it actionable? If nobody does anything differently, it is an event, not an alarm.
- What priority? Reserve
criticalfor safety and production-stopping conditions. If everything is critical, nothing is. - What delay and deadband? Nearly every chattering alarm is a missing on-delay or deadband.
- What does the message tell the operator to do? Put the response in the message text.