Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Solution open with tags created (Pillar 1 complete)
  • For symbol placement: know which tags to bind

MCP Tools and Tables

CategoryItems
Toolsget_table_schema, write_objects, get_objects, list_elements, list_dynamics, browse_runtime_properties
TablesDisplaysList, DisplaysSymbols, DisplaysLayouts

Critical: Use DisplaysList for creating and editing displays. DisplaysDraw is the Designer visual editor UI — NOT a writable table.

...

Step 3: Minimum Element Sizes (Non-Negotiable for Canvas)

ElementMinimum SizeRecommended
Wizard Symbol70×7080×80 to 100×100
Library Symbol60×6080×80
Section TitleFontSize 14FontSize 15–16
Value TextFontSize 13FontSize 14
Unit LabelFontSize 11FontSize 12
Gauge (Circular)150×150180×180
TrendChart300×180500×200
AlarmViewer400×150600×200
Button100×35130×40

...

Step 4: Build a Dashboard Display

...

Key theme colors for displays:

Theme NamePurposeUsage
PageBackgroundDisplay page backgroundSet on display properties
PanelBackgroundZone/section backgroundsDefault for zone Rectangles
PopupBackgroundHigher contrast panelsUse for callouts, modal-like zones
ControlBackgroundControl backgroundsAuto-applied to gauges, charts
TextForegroundText colorAuto-applied to TextBlocks
DefaultBorderBorder colorAuto-applied to control borders

Best practice: OMIT color properties to use themed defaults. Only specify colors when intentionally overriding for process-specific meaning (alarm red, water blue, etc.).

...

  • [ ] Zones calculated to fill the FULL canvas width and height
  • [ ] Every zone has a background Rectangle with FillTheme: "PanelBackground"
  • [ ] Zone backgrounds are FIRST in the Elements array
  • [ ] Symbols are ≥ 80×80 pixels, centered in their zones
  • [ ] Zone titles are FontSize ≥ 15
  • [ ] Value text is FontSize ≥ 14
  • [ ] Value and Unit are in the SAME TextBlock (e.g., "Flow: {@Tag.X} GPM")
  • [ ] Flow arrows (→) placed between adjacent zones
  • [ ] Bottom panel fills remaining vertical space
  • [ ] Bottom panel sections have PanelBackground theme Rectangles
  • [ ] No element extends beyond 1366×728

...

Common Pitfalls

MistakeWhy It HappensHow to Avoid
Using DisplaysDraw as table_typeConfused with DisplaysListDisplaysDraw is the visual editor UI, not a writable table
Omitting PanelTypeDefaults silently to CanvasAlways set PanelType explicitly
Using @Label. in display elementsConfused with symbol definitions@Label. is only for DisplaysSymbols internals. Use @Tag. when placing symbols
Not discovering dynamics firstDoesn't know what's availableCall list_dynamics() with no parameter to see all dynamic types
Screenshots for self-validationHabit from other toolsTrust write_objects success. User sees live updates
Setting colors without clearing themeTheme overrides custom colorsSet value AND clear theme: {Fill: '#FF3498DB', FillTheme: ''} — or just omit to use themed defaults
Sending partial display contentForget it's a document objectAlways read-modify-write for existing displays
Canvas positioning in DashboardMixing layout paradigmsCanvas uses Left/Top + Elements; Dashboard uses Row/Col + Cells
Referencing symbols with wrong pathIncomplete library pathBrowse with list_elements('Symbol/HMI') to get exact paths
Guessing dynamic property namesDifferent dynamics have different schemasAlways call list_dynamics('DynamicTypeName') for exact schema
CodeBehind in wrong Contents formatMissing language prefixContents must start with CSharp\r\n or VBdotNet\r\n before code
All Canvas content in top-leftNo zone planningCalculate zones FIRST to fill the full canvas
Symbols at 40×40 or 50×50Copying library defaultsMinimum 80×80 on process overview displays
Value and Unit as separate TextBlocksSeems logical but misalignsSingle TextBlock: "{@Tag.X} GPM"
No background rectangles on zonesDoesn't know about visual groupingAlways add Rectangle with FillTheme: "PanelBackground"
Hardcoded fill colors on zone backgroundsBreaks in Dark themeUse FillTheme: "PanelBackground" instead
FontSize 10–11 for valuesDefault seemed fineMinimum 13, prefer 14 for operator readability

Quick Reference

Display ActionTool Call
Get display schemaget_table_schema('DisplaysList')
Get Canvas structurelist_elements('Canvas')
Get Dashboard structurelist_elements('Dashboard')
Get element schemalist_elements('ElementName')
Browse all dynamicslist_dynamics()
Get specific dynamic schemalist_dynamics('FillColorDynamic')
Browse symbolslist_elements('Symbol/HMI') or list_elements('Library')
Browse Wizard symbolslist_elements('Wizard')
Browse theme colorslist_elements('ThemeColors')
Read existing displayget_objects('DisplaysList', names=['PageName'], detail='full')
Write displaywrite_objects('DisplaysList', data=[...])
Navigate Designer to displaydesigner_action('navigate', 'Display.PageName')
Browse runtime propertiesbrowse_runtime_properties('Client')

What's Next

  • Server-side logic, tag calculations, CodeBehind patterns: Load the Scripts and Expressions skill — search_docs('scripts', labels='skill')
  • New solution from scratch: Load the New Solution skill — search_docs('new solution', labels='skill')
  • Specific protocol connectivity: Use list_protocols() to browse, then search_docs('modbus', labels='connector') for protocol-specific docs
  • Advanced symbol creation: search_docs('custom symbols', labels='tutorial') for building reusable parameterized symbols