Versions Compared

Key

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

...

  • FrameworX Designer installed and running
  • MCP tools connected

MCP Tools and Tables

CategoryItems
Toolsopen_solution, get_table_schema, write_objects, get_objects, list_protocols, list_elements, list_dynamics, designer_action, get_solution_info
TablesUnsTags, UnsUserTypes, UnsEnumerations, DevicesChannels, DevicesNodes, DevicesPoints, HistorianHistorianTags, HistorianHistorianTables, AlarmsItems, DisplaysList

Implementation Steps

Step 1: Create the Solution

...

  1. get_solution_info() — confirm object counts match expectations
  2. Navigate to MainPage: designer_action('navigate', 'Display.MainPage') — dashboard should show live gauge valuesNavigate to AlarmsMonitor: designer_action('navigate', 'AlarmsMonitor') — alarms should evaluate against limits when simulator values cross setpoints
  3. Navigate to HistorianMonitor: designer_action('navigate', 'HistorianMonitor') — confirm tag values are being logged

...

  1. In Step 4, replace list_protocols('ValueSimulator') with the target protocol (e.g., list_protocols('ModbusTCP'), list_protocols('OPCUA'))
  2. Configure Channel/Node with real connection parameters (IP, port, etc.)
  3. Map Points to real device addresses
  4. Everything else (Tags, Historian, Alarms, Dashboard) remains the same

Common Pitfalls

MistakeWhy It HappensHow to Avoid
Guessing protocol field formatsSkipping list_protocolsAlways call list_protocols before writing device tables
Bare tag names in DevicesPointsForgetting asset pathAlways use full path: Plant/Tank1/Level
Creating unnecessary HistorianTablesNot checking defaultsCheck get_objects('HistorianHistorianTables') first
Creating unnecessary AlarmsGroupsNot checking defaultsPredefined groups exist (Critical, Warning, AuditTrail) — check get_objects('AlarmsGroups') first
Omitting PanelType on dashboardSeems optionalAlways set PanelType explicitly
Pre-fetching all schemas at onceOver-eager optimizationFetch each module's schema only when ready to write it
Screenshotting to verify writesUnnecessary self-validationTrust write_objects success. User sees live updates
Forgetting to start runtimeSkill ends at configAlways end with designer_action('start_runtime')
Using alarm field names from examples without checking schemaExamples may not match current schemaAlways verify field names against get_table_schema('AlarmsItems')
Using simple variables for repeated equipmentDidn't plan UNS structureStep 2: if 2+ identical equipment instances exist, use UserTypes

What's Next

  • Canvas displays, process diagrams, visual dynamics: Load the Display Construction skill — search_docs('displays', labels='skill')
  • Scripts, expressions, automation: Load the Scripts and Expressions skill — search_docs('scripts', labels='skill')
  • Real device connectivity: Use list_protocols() to browse available protocols, then adapt Step 4
  • Asset navigation pattern: The Display Construction skill covers how to build asset-driven dynamic displays