谈谈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…...

程序员应该怎么自学才能入门 ?我来聊聊自己的经历
当你想成为一名程序员,如何自学入门是一个非常重要的问题。在这里我分享一下我的经验,希望能对你有所帮助。 首先,为了制定好你的学习路线,你可以在网上的培训机构网站找到一张基础路线图。这张路线图必须是跟行业对标的…...

听我一句劝,别去外包,干了6年,废了....
先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…...

leetcode 88 合并两个有序数组
题目描述: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终&am…...

软件项目成本控制的5大关键点 不得不重视
软件项目成本一般分为运营成本和项目成本。而运营成本比较固定,压缩和削减的余地不大。而在项目成本中,最主要的成本是人工成本。那么如何提高项目开发效率,节约人工成本,对成本管理至关重要。 我们从以下几个影响项目成本的主要因…...

CSS样式更改:边框Border的另类用法
CSS样式更改——字体设置Font&边框Border 随着互联网技术的不断发展,网页设计已经成为了一项非常重要的工作。在网页设计中,字体设置和边框Border是两个非常常见的CSS样式,可以通过这两个样式对网页的外观进行设置。下面,我们…...

shell的灵活运用 (函数,关联数组,循环,awk,sed等)
题目 提示:没有基础请先看看基础部分的讲解,否则看不懂 1,编写函数,实现判断是否无位置参数,如无参数,提示错误 代码: #bash/bin function a() {b$# #判断传入的参数个数 # echo $b…...

大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<1>
大疆无人机飞控开发 大疆无人机SDK开发包功能概述飞行控制相机实时视频流传感器数据下载媒体文件遥控器,电池和无线链路连接应用程序和产品 v4版sdk 二次开发注册成为DJI开发者生成 App KeyAndroid 示例代码配置Android Studio项目集成创建一个新的应用配置Gradle 脚…...

mysql数据库之事务
1.事务的概念 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个 整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单元…...

安装运行Hyperf
安装运行Hyperf 上回讲到,我们对一个普通的 Laravel 框架进行了改造,让它可以在 Swoole 环境下使用,不过其中会有很多问题可能我们一时考虑不到,就会造成程序的稳定性出现问题。那么,今天我们就来学习一个原生的 Swoo…...

回收站文件恢复,分享4个巧妙解决方法!
案例:回收站文件怎么恢复 【清理电脑时一不小心清空了我的回收站,有朋友知道该怎么恢复吗?急急急!】 回收站对于电脑用户来说,可以带来很多的方便,能让用户能够在删除文件后将其恢复。但是,有…...

CTF权威指南 笔记 -第三章汇编基础-3.2-x86/x64汇编基础
这节介绍PC最常见的架构 x86和扩展 x64框架 CPU操作模式 对x86处理器而言 有三个最主要的保护模式 保护模式 实地址模式 系统管理模式还有一个保护模式的子模式 虚拟8086模式 保护模式 保护模式是处理原生状态 这个时候所有指令和特性都是可以使用的 分配给程序的独立内…...