Skip to Content
IoT 应用开发嵌入外部HMI

嵌入外部HMI

许多工业机器通过本地Web服务器提供自己的HMI(人机界面)。本指南介绍如何使用Embed小部件、nginx反向代理和远程访问隧道,从IronFlock界面访问这些HMI。

基本示例:单台机器

最简单的情况是一台CNC机器(或PLC、摄像头等),其HMI Web服务器可从边缘设备的本地网络访问 — 例如 192.168.1.50:8080

1. 将机器地址配置为应用参数

使用应用参数让用户配置机器的本地HMI地址(例如 192.168.1.50:8080)。这样地址不会被硬编码,可以按设备安装单独设置。

2. 在边缘代码中添加nginx反向代理

在应用的Docker配置中,包含一个简单的nginx容器,读取配置的机器地址并将其转发到边缘设备上的固定端口 — 例如 localhost:3000。边缘代码读取应用参数并相应地配置nginx。

3. 在端口模板中定义固定端口

在您的端口模板中,声明nginx监听的端口:

# .ironflock/port-template.yml ports: - name: CNC Machine HMI port: 3000 main: false

端口必须是固定的(不能动态分配),因为远程访问端口无法在运行时添加 — 它们在发布时定义,按安装配置。

通过在 port-template.yml 中声明端口,项目管理员可以在应用设置中启用或禁用对CNC机器的远程访问。当应用首次安装到设备上时,用户必须在安装设置中明确允许对此端口的远程访问。这是一项安全功能 — 远程访问默认未启用。

这里需要远程访问,因为访问HMI的用户在本地笔记本电脑上,不在边缘设备的网络中。IronFlock的隧道技术从用户的浏览器到边缘设备的转发端口创建安全连接。

4. 向面板添加Embed小部件

UI Builder中,添加一个指向设备远程访问隧道地址端口3000的Embed小部件。CNC机器的原始HMI现在直接显示在IronFlock面板中。

这种基本设置为您提供每台设备单台机器HMI的远程访问 — 无需VPN,无需防火墙更改。


进阶:每台设备多台机器

当边缘设备连接到多台机器时,您可以扩展此模式,通过基于路径的路由在单个转发端口上提供所有HMI。

1. 在数据后端表中存储机器地址

在您的数据后端中添加一个表,跟踪每台机器的详细信息,包括本地Web服务器地址和转发路径:

# .ironflock/data-template.yml data: tables: - tablename: machines maintainLatestFlagFor: ['machine_id'] columns: - id: tsp dataType: timestamp - id: machine_id dataType: string - id: name dataType: string - id: local_hmi_address dataType: string - id: forwarded_hmi_path dataType: string

2. 通过nginx路由多台机器

配置nginx将每台机器在同一固定端口下的不同路径上进行反向代理。例如,将 192.168.1.50:8080 转发到 localhost:3000/cnc1/,将 192.168.1.51:8080 转发到 localhost:3000/cnc2/。将这些转发路径存回 machines 表,以便面板知道在哪里找到每个HMI。

基本示例中相同的固定端口和端口模板同样适用 — 一个端口通过不同路径服务所有机器。

3. 添加带页面导航的Embed小部件

UI Builder中,为每台机器的HMI创建单独的面板页面,并在每个页面上添加一个Embed小部件,从 machines 表读取 forwarded_hmi_path 并将其用作嵌入URL。

要让用户在HMI之间切换,请使用页面与导航功能。添加一个侧边导航小部件,将所有连接的机器列为垂直侧边栏菜单。侧边栏项目可以从 machines 表动态生成,新机器会自动显示。当用户点击机器名称时,面板导航到对应页面,该页面上的Embed小部件加载正确的HMI。

效果

用户可以在面板中浏览所有连接的机器,选择一台,直接在IronFlock中与其原始HMI交互 — 无需VPN,无需单独的浏览器标签,无需防火墙配置。Embed小部件、数据后端和远程访问隧道协同工作,为整个机器群创建统一且安全的控制界面。

Last updated on