Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AVEVA™ InTouch HMI

自定义小组件

  • Last UpdatedJun 29, 2026
  • 3 minute read

客户端控件和 OMI 应用程序仅支持桌面端,在 Web 客户端中无法运行。自定义小组件提供跨平台解决方案,使您能够一次开发,然后在 InTouch 和 OMI 应用程序中跨 Web 和桌面环境使用它们。

先决条件

在开始之前,请确保已安装以下软件:

  • Node.js(24.15.0 或更高版本)npm(11.12.1 或更高版本):用于安装依赖项和构建小组件包。请从 nodejs.org 下载。

  • 文本编辑器:用于编辑小组件文件。建议使用 Visual Studio Code

本节介绍如何在 InTouch 和 OMI 应用程序中创建、构建和使用自定义小组件。请按照以下步骤操作:

  • 第 1 步:创建和修改自定义小组件

  • 第 2 步:更新项目文件

  • 第 3 步:在 .wjson 文件中定义小组件属性和方法

  • 第 4 步:构建小组件包

  • 第 5 步:导入并使用小组件

第 1 步:创建和修改自定义小组件

入门时,可在 C:\ProgramData\AVEVA\Widgets\SampleWidget 获取示例小组件。

Templates 文件夹包含用于创建新小组件的基础文件。在常规小组件开发过程中,请勿修改这些模板文件。

  1. WidgetCreator 目录 (C:\ProgramData\AVEVA\Widgets\WidgetCreator) 中打开终端。

  2. 运行以下命令以创建新小组件

    npm run create-widget MyWidgetName。其中,MyWidgetName 是新小组件的名称。

  3. 导航到新创建的小组件文件夹:cd MyWidgetName

  4. 在 Visual Studio Code 中打开新小组件文件夹以进行更改。

第 2 步:更新项目文件

您可以自定义以下项目文件来构建小组件:

  • index.html:用于根据需要修改 HTML 结构。此必备文件是主入口点,在打开小组件时首先加载。请勿重命名此文件。

  • src/*.css:用于自定义视觉样式。

  • src/*.js:用于实现小组件逻辑。

    注意:默认的 CSS 和 JavaScript 文件名以示例小组件命名。您可以根据需要重命名这些文件。

第 3 步:在 .wjson 文件中定义小组件属性和方法

.wjson 文件充当小组件与 InTouch 和 OMI 应用程序之间的契约。它定义了小组件向平台公开的属性。

了解 .wjson 结构

.wjson 文件包括以下关键字段:

  • version:指定小组件的版本。

  • width height:定义小组件初次添加时的缺省大小。

  • events:当前尚未实现,但计划在后续版本中提供。

  • properties:定义小组件向平台公开的属性。每个属性必须从"0"开始依次编号,然后是"1"、"2",依此类推。

    注意:这些字段为必备字段,不得删除,因为它们是小组件正常运行所必需的。

可配置的属性字段

您可以为每个小组件属性配置以下字段:

  • Name:指定在 InTouch 和 OMI 中显示的小组件属性名称。名称最多可包含 32 个字符。

  • Type:定义属性的数据类型。支持的属性类型包括布尔型、双精度型、经过时间、浮点型、整型、字符串型、时间型和历史摘要型。

  • Value:设置分配给小组件属性的默认值。

  • Desc:提供小组件属性的描述。此字段支持多种语言,以提升本地化和可用性。

以下示例展示了两个属性。要添加新属性,请复制完整的 JSON 条目,并更新序号以及名称、类型和其他相关字段。

{

"version": 0,

"width": 500,

"height": 500,

"events": {},

"properties": {

"0": {

"name": "Counter",

"type": "integer",

"value": 0,

"desc": {

"1033": "Counter value",

"1036": "Valeur du compteur",

"1031": "Zählerwert",

"1041": "カウンター値",

"2052": "计数器值"

}

},

"1": {

"name": "Label",

"type": "string",

"value": "Count:",

"desc": {

"1033": "Display label",

"1036": "Étiquette d'affichage",

"1031": "Anzeigebeschriftung",

"1041": "表示ラベル",

"2052": "显示标签"

}

}

}

}

在 JavaScript 中使用小组件属性

.wjson 文件中定义属性后,您可以在 JavaScript 中使用 cwidget 访问它们。

监听属性更改

要检测小组件属性的更改,请使用以下模式(将 'Counter' 替换为实际属性名称):

cwidget.on('Counter', callbackFn);

callbackFn:每当属性值更改时执行的函数。它可用于更新 UI 或触发其他逻辑。

示例小组件中的示例:

SampleWidget.js 中,当 'Counter' 属性更改时,会触发 _onCounterCshanged() 函数以更新显示:

cwidget.on('Counter', _onCounterChanged);

function _onCounterChanged() {

document.getElementById('counter').innerText = cwidget.Counter;

}

设置属性值

要为小组件属性赋新值,请使用以下语法:

cwidget.Counter = nextValue;

nextValue:存储要赋给属性的值。它应与属性的数据类型匹配(例如,整型属性使用数字,或字符串型属性使用字符串)。

示例小组件中的示例:

SampleWidget.js 中,增量按钮更新 Counter 属性。这会自动触发回调并更新所有绑定控件:

function _increment() {

const current = Number.parseInt(cwidget.Counter, 10) || 0;

cwidget.Counter = current + 1;

}

在 JavaScript 中绑定可调用方法(可选)

要允许 InTouch 和 OMI 应用程序调用小组件中的方法,可以通过将小组件类方法绑定到 window 对象上的函数来公开这些方法。

下面是一个示例(将 SampleWidgetDecrement_decrement 和 Counter 替换为您自己的类和方法名):

class SampleWidget {

constructor() {

window.Decrement = this._decrement.bind(this);

}

_decrement(args) {

var number = JSON.parse(args[0]);

const current = Number.parseInt(cwidget.Counter, 10) || 0;

const delta = Number.parseInt(number, 10) || 0;

cwidget.Counter = current - delta;

_onCounterChanged();

}

}

这将创建一个名为“Decrement”的可调用函数,在导入小组件后,可以在工业图形动作脚本中使用该函数。

第 4 步:构建小组件包 

完成开发后,按照以下步骤构建小组件并生成可部署包:

  1. 在小组件文件夹 (C:\ProgramData\AVEVA\Widgets\WidgetCreator\MyWidgetName) 中打开终端。

  2. 运行构建命令 npm run build

    这会在 dist 文件夹中生成一个 .cwp 包。

    第 5 步:导入并使用小组件

    小组件构建完成后,您可以将其导入并在应用程序中使用。按照以下步骤将小组件导入 InTouch 应用程序并绑定其属性:

    为 InTouch WindowViewer 导入和嵌入小组件

    1. 在应用程序中打开 WindowMaker

    2. 转到文件 > 导入 > 可视化 > HTML5 小组件

    3. 选择第 4 步中生成的 .cwp 文件。

    4. 打开“图形编辑器”,然后从工业图形 > 小组件中嵌入该小组件。

      为 System Platform IDE 导入和嵌入小组件

      1. 打开 Galaxy。

      2. 转到主页选项卡,然后选择导入

      3. 选择 Web 小组件

      4. 选择第 4 步中生成的 .cwp 文件。

        导入后,小组件会出现在图形编辑器工具箱中,您可以将其拖放到图形上。

        绑定自定义属性

        通过将小组件属性绑定到自定义属性,可以实现小组件与应用程序中其它控件之间的双向同步。

        设置绑定

        1. 在应用程序中创建自定义属性。在本示例中,我们使用 cp_value

        2. 将小组件属性绑定到自定义属性。在小组件属性网格中,将 Counter 小组件属性链接到 cp_value

          双向绑定

          绑定设置完成后,更改就会自动在两个方向上同步:

          • 从小组件到应用程序:当小组件更新其属性时(例如,cwidget.Counter = newValue),cp_value 自定义属性将会更新,并且所有绑定的控件(如文本框)都会反映新值。

          • 从应用程序到小组件:当您在文本框中输入值时,cp_value 会随之更改。此更改会触发向 cwidget.on() 注册的回调函数,从而使小组件能够做出响应并保持 UI 同步。

          从脚本中调用小组件方法

          如果您已经在小组件中定义了可调用方法(请参阅第 3 步:在 JavaScript 中绑定可调用方法),则可以从图形脚本编辑器中调用小组件方法。

          在本示例中,创建一个带有动作脚本动画的按钮,以便在单击该按钮时触发先前在 JavaScript 中绑定的 Decrement 方法。

          dim args [1] as object;

          args[1]=5;

          SampleWidget1.ExecuteFunctionAsync("Decrement",args);

          例如,要调用 Decrement 函数:

          此脚本会在您的小组件实例上调用 Decrement 方法,并传入值 5。点击该按钮时,小组件的计数器会减少 5。

          其中

          • SampleWidget1 是图形上小组件实例的名称。

          • ExecuteFunctionAsync 是用于异步调用小组件函数的方法。

          • Decrement 是映射到 JavaScript 绑定窗口的方法名称。Decrement this._decrement.bind (this)

          • Args 是一个对象数组,用于存储传递给小组件方法的参数。数组索引应从 [1] 开始(而不是 [0])。

          请将 SampleWidget1 替换为实际的小组件名称,并根据需要调整方法名称和参数。

          您的自定义小组件现已完全集成,可以随时使用。

          In This Topic
          Related Links