页面脚本:跟着某一页画面运行
页面脚本来自 HQ VISU Designer 导出的画面包,运行在浏览器当前页面里。它适合页面初始化、当前页变量整理、模板值读取、对象颜色/显隐/文本变化和页面内交互。页面脚本不应该承担服务器定时任务,也不要直接连接数据库。
页面脚本来自 HQ VISU Designer 导出的画面包,运行在浏览器当前页面里。它适合页面初始化、当前页变量整理、模板值读取、对象颜色/显隐/文本变化和页面内交互。页面脚本不应该承担服务器定时任务,也不要直接连接数据库。
页面脚本来自 HQ VISU Designer 导出的画面包,运行在浏览器当前页面里。它适合页面初始化、当前页变量整理、模板值读取、对象颜色/显隐/文本变化和页面内交互。页面脚本不应该承担服务器定时任务,也不要直接连接数据库。
页面全局脚本同样运行在浏览器端,并在同一画面包内的多个页面之间共享。它适合放公共函数、公共常量、页面跳转封装、通用状态转换和多页复用逻辑。单页专用流程应保留在页面脚本内。
系统脚本指 HQControl 的 Integration Script。它运行在服务器本机 Python 环境里,适合 HTTP、MQTT、SQL、定时任务、事件触发和跨系统联动。它可以通过 ReadTag、ReadTags、WriteTag 访问 HQControl 数据,但不直接操作浏览器 DOM。
页面脚本处理当前画面展示和交互,页面全局脚本处理同一画面包内的公共函数,系统脚本处理服务器侧集成。判断脚本放在哪里时,先看它需要访问的对象:需要 DOM、组件或当前页面变量时放在画面包;需要访问数据库、HTTP、MQTT、定时任务或服务器侧文件时放在 Integration Script。
Integration Script 执行时会带运行上下文 ctx。定时任务、HTTP 入站、MQTT 入站和 IO 变化触发会把触发来源、入站载荷、触发时间或关联点位放入上下文。脚本应先读取上下文,再决定是否读 Tag、写 Tag 或调用外部系统。
简单脚本可以直接调用 ReadTag、ReadTags、WriteTag 等方法;需要封装公共函数时,可以使用 hqserver 模块提供的读取和写入能力。两种方式都应通过 HQControl 数据桥访问本机系统状态,不应绕过系统边界直接改数据库、Redis 或 PLC 驱动层。
hqserver.get_tag(name) 适合封装公共读取逻辑。hqserver.get_tags(...) 适合封装批量读取逻辑。hqserver.set_tag_value(name, value, ...) 适合封装写入逻辑。import hqserver
item = hqserver.get_tag("Line01.MainMotor.SpeedPV")
value = hqserver.get_tag_value("Line01.MainMotor.SpeedPV")
quality = hqserver.get_tag_quality("Line01.MainMotor.SpeedPV")
Integration Script 的脚本文件存放在 configs/integration-scripts/integration-script/。每个脚本通常包含脚本内容文件和元数据文件:脚本编码.py 保存脚本内容,脚本编码.toml 保存名称、运行参数、连接配置和编辑器信息。触发器配置保存为 触发器编码.trigger.toml。
.py 和同名 .toml 要一起复制。.trigger.toml,并确认其中引用的脚本编码在目标项目存在。configs/integration-scripts/
integration-script/
script-code.py
script-code.toml
trigger-code.trigger.toml
正式安装包已经离线内置常用 Python 包:requests、psycopg、pymysql、pyodbc、paho-mqtt、websocket-client、cryptography。普通现场脚本优先直接 import 这些包,不需要手动 pip。项目也可以自行安装第三方 Python 包,或把项目自带的小型本地包放到脚本工作目录的 libs、packages 或 site-packages 子目录,再在脚本配置页填写工作目录,脚本里即可直接 import。
项目专用公共代码建议放在脚本工作目录下的 libs、packages 或 site-packages 子目录。这样脚本迁移时只需要带走脚本文件、元数据文件、触发器文件和工作目录下的公共代码。不要把项目公共代码散放到系统 Python 目录,也不要在每次脚本运行时动态安装依赖。
libs/project_common.py。packages/<package-name>/。script-workdir/
libs/
project_common.py
packages/
field_adapter/
__init__.py
site-packages/
vendor_package/
集成脚本用的是服务器本机的 Python。要装额外的包时,先在 Integration Script 的“环境信息”里看到脚本实际用的那个 Python 路径,再用那个 Python 执行 pip;装完或改完版本后,重启一次 Integration Script 服务再用。现场不能联网时,优先用安装包内置的离线包,或把包放进脚本工作目录的本地包目录。
python -m pip install 包名。python -m pip install --upgrade 包名。python -m pip install 包名==版本号。# 先在“环境信息”看到脚本实际用的 Python 路径,再对它执行:
C:\Python311\python.exe -m pip install requests
C:\Python311\python.exe -m pip install --upgrade requests
C:\Python311\python.exe -m pip install requests==2.31.0
# Linux 同理
/usr/bin/python3 -m pip install --upgrade requests
想换成另一个版本的 Python:在系统设置页的“脚本”组里把 Python 路径改成新解释器(也可以在脚本配置页只给某个脚本单独指定 Python),保存后重启 HQControl。换了 Python 之后,之前装的第三方包要在新 Python 上重新装一遍。
运行时会自动把脚本缓存目录、脚本工作目录,以及工作目录下的 libs、packages、site-packages 加入 PYTHONPATH。推荐把项目专用公共代码放在这些目录里,由脚本配置页的“工作目录”统一指向。不要在生产脚本中动态安装依赖,也不要直接改数据库、缓存或驱动层绕过 HQControl。
正式安装包已内置常用 Python 依赖,安装完成后可在离线环境中使用,不需要联网下载或手动查找依赖目录。现场需要特殊第三方包时,再按本地包目录方式补充。
设备连接、Tag、报警、趋势、菜单、弹窗模板、权限和语言表能完成的内容,优先通过配置实现。脚本用于处理配置项无法表达的跨系统逻辑、条件组合、外部接口和少量自动化任务。
Integration Script 是服务器侧系统脚本入口,和浏览器里的页面脚本不是一类内容。