Screens, menus, popup templates, and PPT JSON

Screen files are served from the screen runtime directory shown on the Screen Files page. Linux defaults to /opt/hqcontrol/screens/assets; Windows uses the screens\assets directory under the install root. Besides uploading and publishing from the page, you can also delete or replace screen files directly in this directory on disk; both work.

Screens

Screens: Screens, menus, popup templates, and PPT JSON

Screen files define what can be opened, menus define where users enter, and popup templates define device or object detail windows.

Screen root

Screen files are served from the screen runtime directory shown on the Screen Files page. Linux defaults to /opt/hqcontrol/screens/assets; Windows uses the screens\assets directory under the install root. Besides uploading and publishing from the page, you can also delete or replace screen files directly in this directory on disk; both work.

Menu targets

Menu file selectors scan the screen root. If a page cannot be selected, first confirm it has been copied or uploaded into the runtime screen directory.

Menu structure

A simple project can use one first-level menu such as Area and one second-level menu such as HMI. If a second-level menu is not configured, the entry area can remain empty.

Popup template scope

PPT-exported page and popup scope is JSON and uses the same "device.group" format as menus, popups, and alarm sound: tags, plcCodes, functionGroupCodes, deviceGroupCodes, and signalGroupCodes. Except plcCodes (device code only), tags and every group are bound to a specific device, written as "device-code.group-code". An empty array means that dimension adds no scope, not all tags.

{
  "showWindow": true,
  "tags": [],
  "plcCodes": [],
  "functionGroupCodes": [],
  "deviceGroupCodes": [],
  "signalGroupCodes": []
}

Popup template file

Each popup template is its own JSON file under configs/popup-templates/, named by template ID (for example 1.json); the file content is that single template object. Fields include id, code, name, description, popupType, component, defaultTab, width, height, signalCategories, signalSuffixes, focusTagNames, sections, and enabled. An older single popup-templates.json is split into one file per template on upgrade, and the original is renamed as a backup.

  • One template per file, named by template ID (e.g. 1.json); editing one template touches only its own file.
  • code must stay unique in the current project.
  • signalSuffixes and focusTagNames must match the current project's tag naming.
  • To migrate a popup template from another project, copy its JSON file into configs/popup-templates/.
  • Copy the whole template file; do not copy only sections or a few partial fields.
  • A template file is configuration, not a database table or runtime settings file.
{
  "id": 1,
  "code": "...",
  "name": "...",
  "description": "...",
  "popupType": "...",
  "component": "...",
  "defaultTab": "...",
  "width": 960,
  "height": 640,
  "signalCategories": [],
  "signalSuffixes": [],
  "focusTagNames": [],
  "sections": [],
  "enabled": true
}