谈谈HMI 的自动化生成技术
人机界面(HMI)是自动化领域不可或缺重要组成部分。尽管人机界面系统的设计看上去并没有太大的技术门槛,但是设计一个HMI系统的工作量是巨大的。如果你没有足够的耐心便完成不了一个通用的HMI系统。构建UI控件库是一个似乎永远完不成的事情,用户永远觉得不够用。另一方面,使用HMI的组态工具构建HMI应用也是一个十分繁琐又容易出错的地方,你需要将大量的数据点与HMI上的UI对应起来。
网络上一位前辈曾经说过,如果一件事情处理起来十分复杂,多数是底层逻辑不正确。与其痛苦地重复别人的痛苦,不如寻找新的出路。本文我们就来谈谈HMI 自动化生成的可能性以及相关技术。
什么是HMI 自动化生成技术呢?通俗地讲,就是放弃传统的组态工具和组态方式,直接从工程设计文档生成HMI 的设计描述性文件,下载到HMI 运行时(HMI Runtime)就能够直接运行。

在工程设计文档中增加一些HMI 的信息模型,例如 每个设备的HMI 图形符号,结合工程总体的布局图和其它一些设计文档(例如OPC UA 信息模型),就能够自动地生成HMI 设计文件。
也许有人会质疑这种方式, 基于图形化的组态设计不是“少代码”的设计方式吗?为什么要通过信息模型的编写HMI ?这样不是增加了敲代码的工作量么? 其实关键还是要看工程设计的效率如何。对于一个大型的控制系统而言,组态的工作量也是巨大的。而且难以实现排错,代码重用和维护时的修改。在笔者看来,使用组态方式来设计工程HMI 并不是唯一的好方法。
与组态软件相类似,传统的window的界面设计同样采用了基于图形的可视化方式设计,与工业自动化领域的组态方式十分相似,目前转向了基于XAML语言设计方法。同样地,早期网页设计软件同样Adobe Dreamweaver。使用所谓可见即所得的编辑方式,可现在大部分网页设计使用VS Code 编码的方式。工业自动化设计领域中,同样大量地采纳了XML 语言。转换一下思路,也许会产生新的设计方式。
另一方面,大多数组态工具都是与厂商有关的封闭式工具,并不符合开发自动化的理念。工程文件可以使用AML ,OPC UA 和CAD ,Web技术等开放的技术来实现。
HMI 的基础技术
HMI 是一个笼统的概念,随着工业可视化需求的增长,人机交互的应用场景也越来越普遍。设备的控制面板,车间看板,控制室的SCADA,大数据显示墙,云端Dashboards,数字孪生,虚拟实现,仿真系统等等, HMI技术的应用几乎无处不在。
随着可视化技术的迅速发展,HMI 的实现技术和表现形式也呈现多样化。
实现方式
- 基于PC计算机和windows,通常使用C#和Windows 的WPF技术
- 基于QT 的嵌入式C/C++ 实现的HMI,主要实现小型的HMI设备,硬件基于嵌入式ARM。
- 基于android
- 基于Web技术
各种显示屏场景
根据不同的应用场景,大致分为:
操作面板(dasboard)
操作面板是操控机器的人机界面,是传统的机电(开关,指示灯,数显,仪表盘,示波器)面板的虚拟化实现。
过程数据(process data)
控制系统中的变量表,包括实时数据和历史数据。
数据趋势(data trend)
以图形的方式显示变量的趋势曲线图。
- 实时数据
- 历史数据
图形库
实现技术不同,图形库的方式也各有不同。
PC/Windows 平台
- 使用传统的Windows Form
- 使用XAML 组件
Web平台
- SVG 图形
- Web Widget
- VUE 组件
QT 嵌入式系统
QT Widgets
其它方式
比如过程控制P&ID 中使用dxf 格式。
图形的表现形式
可以分为 2D图形,3D 图形等等。
HMI 自动化生成的基础
面对如此多的实现技术和表现形式,要实现HMI自动化并非易事。要实现HMI 自动化生成的目的有两个必要条件
保持简单的图形界面,并实现标准化
在我前一篇博文中已经讨论了相关问题。采用扁平化设计方式,并且遵循ISA-101 标准的设计指南,技术和理念。标准化能最大程度地实现图形对象的重复使用。而扁平化意味着普通的OT 工程师能够使用普通的作图工具或者CAD 软件来设计HMI 图形,不需要专业的UI 设计师参与完成。
基于信息模型的HMI设计
在传统的HMI 组态软件中,现场数据是离散化的数据点,几千个数据点要通过组态的方式与可视化组件建立对应关系。这是一件非常辛苦的工作,而且极其容易发生差错。
数据仅仅是一个浮点数和逻辑值,它们是没有额外的含义,数据不是信息。信息中包含的信息就多了,例如,对于一个温度值而言
- 名称
- 值
- 单位
- 正常区间
- 告警区间
在传统的HMI设计时,上面的这些信息大多是组态时设置的。当信息模型与HMI 组件能够建立对应的关系后,这些信息能够直接映射到HMI 中。

基于信息驱动的HMI 自动生成技术
在这里我们研究一个基于web技术实现的HMI 自动生成系统的实现方法。
基本思路
- 使用SVG 实现HMI图形
- 每个HMI图形对应一个OPCUA 的对象
- 每个OPCUA 对象中包含了HMI 图形SVG文件
- 将控制现场分为若干的区域(zone)
每个区域内部包含了若干的设备,每个区域对应了一张HMI 页面,因此,每个区域模型中包含了一个布局图。布局图可以使用CAD 工具或者其它作图工具实现,转换成为XML 文档。
- HMI 运行时是一个OPC UA Client ,可以读取现场设备的OPC UA 信息模型。通过读取设备的信息模型以及SVG图形,区域布局图文档就能够自动生成HMI页面。
HMI 屏幕设计原则
在HMI屏中避免使用通用的HTML 组件
在传统的HMI 组态工具中,包含了许多诸如按键,数据输入框,滑杆,表格的组态,其实这些显示构建完全不需要自动化工程师去组态。完全能够使用HTML5自动的完成。
现代自动控制系统中每个对象包含的很多参数,例如一个电机就包括了
变量:电流,电压,转速,功率,温度
操作:启动,停止
告警:过流,过压,温度
这些参数不必要放置在HMI的主界面中,当操作人员需要详细查看时,点击对象图标,在侧边特征边栏呈现出来就可以了。而侧边特征边栏对画面的布局完全可以由HTML5 自动化生成,它们并没有太多个性化需求。这样能够使HMI画面更加有层次感,同时也避免了诸如按键,输入框等UI的组态。
相关文章:
谈谈HMI 的自动化生成技术
人机界面(HMI)是自动化领域不可或缺重要组成部分。尽管人机界面系统的设计看上去并没有太大的技术门槛,但是设计一个HMI系统的工作量是巨大的。如果你没有足够的耐心便完成不了一个通用的HMI系统。构建UI控件库是一个似乎永远完不成的事情&am…...
docker安装elasticsearch
使用docker部署 部署elasticsearch # 拉取镜像 docker pull elasticsearch# 创建容器 docker run --name es -p 9200:9200 \-p 9300:9300 \-e "discovery.typesingle-node" \-e ES_JAVA_OPTS"-Xms64m -Xmx128m" \-v /home/es/conf/elasticsearch.yml:/…...
Docker:使用dockerFile创建镜像(war包和jar包)
1、使用war包打镜像 (1)在war的当前路径下,新建一个文件——Dockerfile (2)编辑Dockerfile文件 vim Dockerfile Dockerfile文件内容: FROM java:8 # 选择项目中要求的版本 MAINTAINER ylb …...
2.基础篇
目录 一、描述软件测试的生命周期(软件测试的流程) 二、如何描述一个bug 三、bug的级别(粗略划分) 四、bug的生命周期 五、因为一个bug和开发人员产生争执怎么办 六、如何设置弱网? 一、描述软件测试的生命周期&a…...
取代你的可能不是AI,而是比你更会使用AI的人
1、背景 从开始了解AI到现在已经1个月了,最明显的就是,产品层出不穷,以前只有技术人员才关系AI,现在各行各业都在关系AI,都希望通过它提高生产力和创造力; 在当今大数据和人工智能时代,职场和企…...
NECCS|全国大学生英语竞赛C类|词汇和语法|语法题|时态 非谓语动词 |19:00~20:15|完形填空·词性转化
14:35~14:45 15:45~16:2019:00~20:15 http://t.csdn.cn/XbsUy 目录 (一)时态 7. 将来进行时 8. 过去将来进行时 9. 现在完成时 10. 过去完成时编辑 11. 将来完成时 12. 现在完成时 13. 过去完成进行时 (…...
【高等数学笔记】Stolz定理
文章目录 Stolz定理 ∗ ∞ \cfrac{*}{\infty} ∞∗型 0 0 \cfrac{0}{0} 00型 例子1. 算术平均数的极限2. Stolz定理可以被理解为“数列的洛必达法则”,它揭示了两个数列之比的极限和相邻两项之差的比的极限的关系。 Stolz定理 ∗ ∞ \cfrac{*}{\infty} ∞∗型…...
【24】核心易中期刊推荐——图像处理研究大数据及智能处理研究
🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…...
Codeforces Round 870 (Div. 2)【A、B、C、D】
文章目录 A. Trust Nobody(暴力)B. Lunatic Never Content(数学)C. Dreaming of Freedom(数学、暴力)D. Running Miles(前缀、后缀) 传送门 A. Trust Nobody(暴力) 题意:给出n个人的陈述,每个人陈述至少有ai个人说谎,让你求出可能是说谎人数…...
BetaFlight统一硬件AOCODARC H7DUAL配置文件讨论
BetaFlight统一硬件AOCODARC H7DUAL配置文件讨论 1. 源由2. Review配置3. 分析整理3.1 生产商信息3.2 磁力计3.3 气压计3.4 陀螺仪3.5 串口RxTx3.6 板载Flash3.7 模拟OSD MAX74563.8 PPM接收机3.9 伺服器3.10 LED灯带3.11 蜂鸣器3.12 电机 X83.13 ADC(电压/电流/RSSI信号强度/空…...
力扣题库刷题笔记682-棒球比赛
1、题目如下: 2、个人Python代码实现如下: 代码如下: class Solution: def calPoints(self, operations: List[str]) -> int: i 0 #用于遍历元素的下标 while i < len(operations): …...
SpringCloud------Eureka修改实例显示信息、服务发现Discovery、自我保护(六)
SpringCloud------Eureka修改实例显示信息、服务发现Discovery、自我保护(六) 1.actuator微服务信息完善 2.服务发现Discovery 3.Eureka自我保护 actuator微服务信息完善 web和actuator依赖用于图形化监控 1.主机名称:服务名称修改 新增…...
Java 远程debug,IDEA 远程 Debug 调试
有时候我们需要进行远程的debug,本文研究如何进行远程debug,以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 配置 远程debug的服务,以SpringBoot微服务为例。 首先,启动SpringBoot需要加上特定的参数。 …...
将webrtc的音频模式改为共享模式
修改音频设备模式:打开文件modules/audio_device/include/audio_device.h,将AudioDeviceModule::kPlatformDefaultAudioProcessing为true改为false。这将禁用默认的音频处理,使得可以修改音频设备模式。 修改音频设备模式的初始化:打开文件modules/audio_device/audio_dev…...
电脑cpu占用率高?怎么办?1分钟快速解决!
案例:电脑cup过高怎么办? 【我的电脑运行缓慢,导致我学习和工作的效率很低。刚刚查看了一下电脑,发现它的cpu占用率很高。有没有小伙伴知道如何解决此电脑cpu过高的问题?】 电脑是我们生活中不可缺少的工具ÿ…...
使用JPA自动生成代码(轻松上手看了就会版)
目录 背景:方案概念:JPA 的主要作用 jpa简单使用(Springboot项目)jpa进阶使用总结 背景: 项目需要自动生成sql代码,不需要写sql语句,能够自动进行查询,我想到了JPA。 方案 概念&a…...
jdk动态代理
jdk动态代理:基于反射动态生成代理对象 pwp动态代理的步骤比较复杂,无需特别深入的理解,在jdk中固定的步骤,只需要知道这些步骤即可,不必钻牛角尖 动态代理涉及到的三个反射包类 InvocationHandlerMethodProxy 1. InvocationHand…...
备忘录模式
备忘录模式 备忘录模式定义使用场景1、撤销操作:2、游戏进度保存:3、定时器:4、浏览器历史记录:5、购物车状态保存:6、场景总结 角色定义Originator 发起人角色:Memento 备忘录角色:Caretaker 备忘灵管理员角色:需求背…...
问题解决:跨域访问错误
今天做前端页面渲染的时候遇到一个问题, 因为我使用的wsl开发,windows直接访问不了wsl中的文件,还要改其他配置没成功,索性就不改了,粘贴在桌面上用浏览器打开调试 然后所有使用apifox通过测试的路径全部报错 Ensure CORS response header values are validA cross-origin reso…...
程序员应该怎么自学才能入门 ?我来聊聊自己的经历
当你想成为一名程序员,如何自学入门是一个非常重要的问题。在这里我分享一下我的经验,希望能对你有所帮助。 首先,为了制定好你的学习路线,你可以在网上的培训机构网站找到一张基础路线图。这张路线图必须是跟行业对标的…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
