...
Standard zone layout for a process overview (1366×728):
...
PAGE |
|---|
...
TITLE |
|---|
...
(x:0, |
|---|
...
y:0, |
|---|
...
w:1366, |
|---|
...
h:50) |
|---|
...
ACTION |
|---|
...
BTNs | ||||||
|---|---|---|---|---|---|---|
| Zone 2 | Zone 2 | Zone 2 | Zone 2 | Zone 2 | Zone 2 |
BOTTOM PANEL: Trend, Alarms, KPIs, or ML Status (h:300+) | ||||||
Note: Page-to-page navigation buttons belong in the Header display (see Step 10b), not on the Canvas title bar. ACTION BTNs here are for in-page actions only (e.g., start/stop, acknowledge, reset).
Zone sizing rules:
For N process stages on a 1366×728 canvas:
Available width = 1366 - 40 (left/right margin 20px each) = 1326
Available height = 728 - 50 (title) - 20 (top margin) = 658Zone width = (Available width - (N-1) × 15) / N Zone height = 320 (for process row) Zone startY = 60 (below title)
Zone[i].Left = 20 + i × (zoneWidth + 15) Zone[i].Top = 60 Zone[i].Width = zoneWidth Zone[i].Height = 320
Bottom panel: Left = 20, Top = 400, Width = 1326, Height = 658 - 320 - 20 = 318
Example: 6 process stages
Zone width = (1326 - 5×15) / 6 = 208px eachZone 0: Left=20, Top=60, W=208, H=320 Zone 1: Left=243, Top=60, W=208, H=320 Zone 2: Left=466, Top=60, W=208, H=320 Zone 3: Left=689, Top=60, W=208, H=320 Zone 4: Left=912, Top=60, W=208, H=320 Zone 5: Left=1135
...
Note: Page-to-page navigation buttons belong in the Header display (see Step 10b), not on the Canvas title bar. ACTION BTNs here are for in-page actions only (e.g., start/stop, acknowledge, reset).
Zone sizing rules:
For N process stages on a 1366×728 canvas:
Available width = 1366 - 40 (left/right margin 20px each) = 1326
Available height = 728 - 50 (title) - 20 (top margin) = 658Zone width = (Available width - (N-1) × 15) / N Zone height = 320 (for process row) Zone startY = 60 (below title)
Zone[i].Left = 20 + i × (zoneWidth + 15) Zone[i].Top = 60 Zone[i].Width = zoneWidth Zone[i].Height = 320
Bottom panel: Left = 20, Top = 400, Width = 1326, Height = 658 - 320 - 20 = 318
Example: 6 process stages
Zone width = (1326 - 5×15) / 6 = 208px eachZone 0: Left=20, Top=60, W=208, H=320 Zone 1
Bottom: Left=24320, Top=60400, W=2081326, H=320 Zone 2: Left=466, Top=60, W=208, H=320 Zone 3: Left=689, Top=60, W=208, H=320 Zone 4: Left=912, Top=60, W=208, H=320 Zone 5: Left=1135, Top=60, W=208, H=320
Bottom: Left=20, Top=400, W=1326, H=308
Every process zone MUST have a background Rectangle for visual grouping. Use themed colors — never hardcode colors for zone backgrounds.
Standard zone background — use PanelBackground theme:
{
"Type": "Rectangle",
"Left": 20, "Top": 60, "Width": 208, "Height": 320,
"FillTheme": "PanelBackground",
"Stroke": "#FF909090", "StrokeThickness": 1
}
Higher contrast zones (rare — popups, callouts): use PopupBackground theme. Not needed for normal process zones.
Page background should use PageBackground theme (set on the display properties, not as a rectangle).
CRITICAL theming rules for zone backgrounds:
FillTheme: "PanelBackground" — this respects Light/Dark theme switching automatically"Fill": "#0A000000" — these break in Dark themeFill + FillTheme: "" when you need process-specific meaning (e.g., water blue for a tank zone)Zone backgrounds must be placed FIRST in the Elements array so they render behind all other content.
308
Every process zone MUST have a background Rectangle for visual grouping. Use themed colors — never hardcode colors for zone backgrounds.
Standard zone background — use PanelBackground theme:
{
"Type": "Rectangle",
"Left": 20, "Top": 60, "Width": 208, "Height": 320,
"FillTheme": "PanelBackground",
"Stroke": "#FF909090", "StrokeThickness": 1
}
Higher contrast zones (rare — popups, callouts): use PopupBackground theme. Not needed for normal process zones.
Page background should use PageBackground theme (set on the display properties, not as a rectangle).
CRITICAL theming rules for zone backgrounds:
FillTheme: "PanelBackground" — this respects Light/Dark theme switching automatically"Fill": "#0A000000" — these break in Dark themeFill + FillTheme: "" when you need process-specific meaning (e.g., water blue for a tank zone)Zone backgrounds must be placed FIRST in the Elements array so they render behind all other content.
Every process zone follows the same internal Every process zone follows the same internal layout pattern. Coordinates are offsets from the zone's Left/Top origin:
???? Zone (background Rectangle) ?????????????
? ZONE TITLE (FontSize 15-16) y+10 ?
? ?
? ???????????? y+40 ?
? ? Symbol ? 80×80 to 100×100 ?
? ? (pump, ? centered horizontally ?
? ? motor) ? ?
? ???????????? y+140 ?
? ?
? Label: Value Unit (FontSize 14) y+150 ?
? Label: Value Unit y+176 ?
? Label: Value Unit y+202 ?
? ?
? Status indicator (optional) y+240 ?
???????????????????????????????????????????????
Symbol centering formula:
Symbol.Left = Zone.Left + (Zone.Width - Symbol.Width) / 2
NEVER put value and unit in separate TextBlocks side by side. Instead, use ONE TextBlock with composite LinkedValue:
{
"Type": "TextBlock",
"LinkedValue": "Flow: {@Tag.Plant/Intake/FIT_1001} GPM",
"Left": 30, "Top": 150, "Width": 170, "Height": 24,
"FontSize": 14
}
Patterns:
"Flow: {@Tag.X} GPM" — label + value + unit"{@Tag.X} NTU" — value + unit only"pH: {@Tag.X}" — label + value (no unit)Show process flow direction between zones using TextBlock arrows:
{
"Type": "TextBlock",
"Text": "→",
"Left": 228, "Top": 190, "Width": 15, "Height": 30,
"FontSize": 20
}
Arrow placement: horizontally centered in the gap between zones, vertically aligned with the symbol center.
The bottom panel (below process zones) should contain ONE of:
Option A: Trend + KPI sidebar
???????????????? Bottom Panel ??????????????????
? TrendChart (w:900, h:280) ? KPI Column ?
? ? Value1: ### ?
? ? Value2: ### ?
???????????????????????????????????????????????????
Option B: Trend + Alarm split
| Panel | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
Symbol centering formula:
Symbol.Left = Zone.Left + (Zone.Width - Symbol.Width) / 2
NEVER put value and unit in separate TextBlocks side by side. Instead, use ONE TextBlock with composite LinkedValue:
{
"Type": "TextBlock",
"LinkedValue": "Flow: {@Tag.Plant/Intake/FIT_1001} GPM",
"Left": 30, "Top": 150, "Width": 170, "Height": 24,
"FontSize": 14
}
Patterns:
"Flow: {@Tag.X} GPM" — label + value + unit"{@Tag.X} NTU" — value + unit only"pH: {@Tag.X}" — label + value (no unit)Show process flow direction between zones using TextBlock arrows:
{
"Type": "TextBlock",
"Text": "→",
"Left": 228, "Top": 190, "Width": 15, "Height": 30,
"FontSize": 20
}
Arrow placement: horizontally centered in the gap between zones, vertically aligned with the symbol center.
The bottom panel (below process zones), can be created as required by information to show on the dwaplsy, or by default, use one of the following options::
Option A: Trend + KPI sidebar
Bottom Panel | |
|---|---|
TrendChart (w:700, h:280) |
|
Option B: Trend + Alarm split
Bottom Panel | |
|---|---|
TrendChart (w:660, h:280) |
|
???????????????? Bottom Panel ??????????????????
? TrendChart (w:660, h:280) ? AlarmViewer ?
? ? (w:640, h:280) ?
???????????????????????????????????????????????????
Option C: Full-width trend with status bar
...
Bottom Panel (h:30) | |
|---|---|
Status: Score: 0.023 Confidence: 0.98
|
Bottom panel sections should also use PanelBackground theme background rectangles.
...
| Element | Minimum Size | Recommended |
|---|---|---|
| Wizard Symbol | 70×70 | 80×80 to 100×100 |
| Library Symbol | 60×60 | 80×80 |
| Section Title | FontSize 14 | FontSize 15–16 |
| Value Text | FontSize 13 | FontSize 14 |
| Unit Label | FontSize 11 | FontSize 12 |
| Gauge (Circular) | 150×150 | 180×180 |
| TrendChart | 300×180 | 500×200 |
| AlarmViewer | 400×150 | 600×200 |
| Button | 100×35 | 130×40 |
...
Dashboard uses a grid with DashboardDisplay (columns/rows definition) and Cells array.
You never set Width or Hight on Dashboard, just the cell
list_elements('Dashboard')
...