HMI 自动生成技术讨论(1)

news2024/12/24 8:58:39

HMI  的信息模型

       HMI 给人的基本印象就是一个设备控制面板,或者是控制室里电脑屏幕的图形控制界面。进入信息化时代,HMI 的需求越来越大,不仅仅是操作工人和运维人员需要HMI,集团公司,工厂,车间的管理人员,数据分析,研发工程师,甚至是客户都需要HMI 提供可视化数据。而且也不是设备的边上,或者控制室中需要HMI ,各个地方都需要HMI,甚至在旅行途中,或者家里都需要HMI随时随地提供可视化数据。HMI 变成了随时随地都需要的重要功能。

    从技术的角度,HMI 演变成了一个分布式,多角色的系统。从这个角度看问题,需要有一个系统性的架构。乍看起来,这样的系统架构是十分复杂的,但是采用基于模型的设计思想能够将问题梳理清楚。

制造业的分层架构

按照ISA -95 标准,制造业可以以分层架构来定义模型 

 从上图看,一个大型的制造企业可以分为:

场所(Site)

区域(Area)

过程单元,制造单元或产线

单元,工作单元

系统架构

         在该架构中,后端服务器中包含了一个OPC UA Client ,可以访问产线或者过程单元中的服务器,为了实现对服务器的访问需要保留一个所有服务器Url 的内部字典(或者是表格)。该字典可以通过OPC UA 的发现机制(Local Discovery),或者固定的ServerUrl.xml 文件中。

增加了聚合服务器的架构

由HMI 服务器直接访问生产现场的Server 会带来系统的复杂性,安全性和网络的不确定性。可以导入笔者前面的博文讨论的聚合服务器。系统架构演变成为:

 聚合服务器可以安装在生产现场,而HMI 服务器可以部署在云端。

基于信息模型的HMI架构

   HMI 自动化生成的基础是基于信息模型构建。为此,HMI 首先需要组件化。所谓组件化就是将复杂的HMI界面分解成小的单元。

     可以根据制造企业的架构构建HMI 分层架构。它们之间的关系如下:

   从上图可见,场所,区域和产线对应的是HMI 的屏幕,如果产线够复杂,可以分为几个工段。产线中包含了各种装置(UNIT) ,装置与模型的对应关系被分为几种场景

  1.  一个装置对应一个OPCUA Server ,内部包含了许多特征值
  2.  装置对应OPC UA Server 中的一个对象或者变量。例如反应釜带有多个温度传感器
  3. 装置对应一个OPCUA 服务器,内部包含了若干的对象,变量和方法。这种装置的HMI模型我们称为复合HMI模型,可以使用一个HTML 页来表现内部的结构图。例如一台注塑机,内部将会包括,液压设备,挤出螺杆,模具等。

 如此一来, HMI 模型的分层架构为

  1.       HTML 页面(HTML Page) 
  2.       Widget /Graphic
  3.       复合 HMI Component 

       在前端设计中,最基本的可视化组件通常被称为小程序(widget)。

 HMI 自动化的方法

基于信息模型的设计为HMI 设计自动化创造了条件。实现方案包括如下几个方面:

  1.    每个HMI 组件对应的OPCUA 服务器或者实例中包含了一个图标,或者widget.
  2.    每个Server 和复合HMI 都对应一个HMI 页面,为此在Server和复合HMI (OPCUA 对象)信息模型中包含了一个HMI 布局文件(HMI Layer File) 使用XML 描述。HMI Layer 文件中包含了页面中的所有组件,以及背景图。
  3. 在传统的HMI 设计中,往往将HMI 的组件的所有特征都放置在HMI 页面中,而新的设计中,将属性的详细部分放置在右边栏,由HMI 软件自动生成(类似与OPCUA Client 程序那样属性表格
  4. 在传统的HMI 设计中,HMI 的组态还包括了按键,输入框,表单和趋势图等组件,而基于组件的HMI 中,按键对应OPCUA 信息模型中的方法。输入框对应OPCUA 的变量,趋势图对应于OPCUA 的模拟变量。可以由HMI 运行时自动地在右边栏属性中显示。
  5. 最基本的可视化组件是Widget或者是图形。图形图标能够使用CAD 设计输出Dxf 文件转换称为SVG 图标,而复杂的Widget 是内部包含Javascript 程序的SVG 。
  6. 采用可视化组件于运行时分离的原则,可视化组件可以使用第三方设计工具独立设计,并作为库文件导入HMI 运行时。

采取了自动化生成技术之后,HMI 的组态任务将大幅度减少。留下两项主要工作:

  1.   设计HMI布局图( Layer)
  2.   设计于项目相关的图标

可视化组件模型 

       我们推荐的最基本可视化组件是基于SVG 的Widget 小程序。

 基本属性

    名称

   类型

   信息模型路径

      信息模型路径是OPCUA Client 通过translate-browse-path 获取NodeId  的字符串,例如

 /Objects/Server.ServerStatus

Servever/Objects/Counter。

在Node-opcua 中,通过translate-browse-path查询NodeId 的参考代码:

async function BrowsePath(session){
  const ns6=6;
  var browsePath = [
    makeBrowsePath("RootFolder","/Objects/Server.ServerStatus"),
    makeBrowsePath("RootFolder",`/Objects/Server/${ns6}:MyObjects/${ns6}:MyDevice.${ns6}:MyLevel`)
  ];
  console.log("browsePath:"+browsePath);
  session.translateBrowsePath(browsePath, function (err, results) {

    if (!err) {
      const nodeId = results[0].targets[0].targetId;
       console.log(nodeId);
       
       console.log(results[1].targets[0].targetId);
    // console.log(results)
    }
  })
}

可视化组件的扩展属性

  为了能够在HMI 中确切地表现对象的属性,在OPCUA 模型中需要包括一些扩展的属性,我们称为可视化属性。 例如一个模拟量的可视化属性包括:

 单位(unit)

值(value)

 正常范围(Normal Range)

低告警范围(Low Alarm  Range)

高范围(High Alarm Range)

可视化组件的实现

SVG 基本概念

   SVG的全称是可缩放矢量图形Scalable Vector Graphics,SVG),是由万维网联盟(W3C)自 1999 年开始开发的开放标准。 SVG 使用 XML 格式定义图像。

SVG 具有下面几个重要的特点:

可伸缩,基于矢量的图形

 SVG 包含了如下几种基本图形:

        圆(circle ),椭圆(ellipse) ,线(line) ,路径(path),多边形(polygon),折线(polyline),长方形(rect)。

SVG 使用XML 描述

例如下面是一个五角星的XML 描述,你可以使用任何一种文本编辑软件来编辑SVG 文件:

<?xml version="1.0" encoding="utf-8" ?>
<svg version="1.1"
     width="300" height="200"
     xmlns="http://www.w3.org/2000/svg">

  <rect width="100%" height="100%" fill="red" />

  <circle cx="150" cy="100" r="80" fill="green" />

  <text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text>

</svg>

对应的图案:

 在HTML 网页中引用

        SVG 可以像jpg,png 等图片文件一样在HMTL 的<img> 标签中引用,例如·:

<img
  src="start.svg"
  alt="start"
  height="87"
  width="100" />

在HTML 中直接内嵌SVG 

例如:

<!DOCTYPE html>
<html>
<body>

<h1>My first SVG</h1>

<svg width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>

</body>
</html>

通过< embed>和<object>标签导入外部SVG 

<object type="image/svg+xml" data="image.svg">
    <!-- Your fall back here -->
    <img src="image.svg" />
</object>

或者:

<embed type="svg"
       src="start.svg"
       width="250"
       height="200">

<mbed>和<object> 两种标签将外部文件导入了HTML 网页。相当于内嵌SVG 文档到网页。

 包含格式style

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="10.2974mm" height="10.3059mm" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="0 0 37 37"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
  <style type="text/css">
   <![CDATA[
    .str0 {stroke:#332C2B;stroke-width:0.360432}
    .fil0 {fill:#E62129}
   ]]>
  </style>
 </defs>
 <g id="Text">
  <metadata id="CorelCorpID_0Corel-Layer"/>
  <polygon    class="fil0 str0" points="19,1 23,14 37,14 25,23 30,37 19,28 7,37 12,23 1,14 14,14 "/>
 </g>
</svg?

包含 JavaScript     

        SVG 中最强大的是能够内嵌javascript 代码,这就使SVG 变成了具备可编程的图形,实现动画,和图形的能力,并且具备可编程的能力。SVG 嫣然成为了一个网页小程序(widget)。成为HMI的基本可视化组件。

<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svidget="http://www.svidget.org/svidget"
		 width="100" height="100"
		 onload="init(evt)">
		 
	<title>Star</title>
	
			<path id="primaryColor" fill="red" stroke="midnightblue" stroke-width="6" stroke-linejoin="round" d="M 100 4 L 128.214 61.1672 L 191.301 70.3344 L 145.651 114.833 L 156.427 177.666 L 100 148 L 43.5726 177.666 L 54.3493 114.833 L 8.69857 70.3344 L 71.7863 61.1672 Z" />
 <script>
      <![CDATA[
	function init(evt)  
	{  
	console.log("init");
	 
	}
	document.setColor=function setColor(color){
	  document.getElementById("primaryColor").setAttribute("fill",color);
	   console.log(color);
	}
    ]]>
</script>
</svg>

   在HTML 中调用SVG 内部函数的方式:

<html>
<body>
    <object id="test" data="test-vector.svg" onload="f()" ></object>
    <script>
        function f() {
            var svg = document.getElementById('test');
            svg.contentDocument.setColor('red');
        }
    </script>
</body>
</html>

基于SVG 的可视化组件

为了实现HMI自动化生成,对widget 有下列要求:

widget 具备独立性

      HMI 运行时使用统一的接口实现widget 的控制,所有可视化控制程序都包含在可视组件内部。HMI运行时将可视化模型中的属性直接传送给可视化组件。实现HMI运行时与Widget 解耦。

     这样做的最大好处是组件的开发独立与HMI 运行时程序。传统的HMI系统大多数是由HMI组态软件中包含了HMI可视化控件,如果没有足够的控件库。HMI无法满足应用的需求,而在开发的早期是很难了解需要什么样的可视化组件的。 

widget 具备标准接口

重要的API 包括:

setParams(Name,Value)设置参数

该方法设置SVG 的参数。

name –参数的名称

value –参数的值    

Initial()初始化

registerEventHandle (event,Handle)注册事件处理程序

SVG 可视化组件的形式

基本的SVG 可视化控件

        基本的SVG 以图形为主,只能改变颜色。内部的JavaScript程序是标准。适合将其它图形化工具设计的图形转换成为SVG 可视化控件,例如DXF,DWG格式的图形。

参数化SVG 可视化控件

         具有更多的属性的SVG ,需要在内部编写特定的应用程序。

HMI自动化生成过程

HMI 画面的自动化生成流程

  • 为每个区域设计布局图形(layer),这可以使用基于图形的编辑工具实现,也可以使用CAD 软件实现。
  • 根据信息模型和布局图,生成HMI Layer 文件。
  • HMI 运行时根据布局图和信息模型,生成HMI 画面。

SVG 可视化组件的开发流程

  • 使用CAD 工具或者图形软件设计可视化组件的图形。由DXF2SVG 软件自动转化成为SVG 可视化组件。
  • 对于参数化SVG ,需要人工添加 javaScript 代码。

实验

我们实现了一个实验系统。

架构

  • 前端使用VUE3
  • 后端使用NodeJS,并且使用了OPCUA Client 端插件Node-opcua。

 结束语

        通过我们的部分实验表明,只要精心安排,HMI 的大部分画面是可以自动化生成的,完全得益于OPCUA 的信息模型

下一步的工作包括开发一个聚合服务器,实现HMI-聚合服务器-OPCUA 网关 三大件的全面打通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

芯片封装技术(四)

集成电路芯片与封装之间是不可分割的整体。没有一个芯片可以不用封装就能正常工作&#xff0c;封装对芯片来说是必不可少的&#xff0c;随着IC生产技术的进步&#xff0c;封装技术也不断更新换代&#xff0c;每一代IC都与新一代的IC封装技术紧密相连。 一、什么是封装&#xf…

Qt文件系统源码分析—第二篇QFileInfo

深度 本文主要分析Windows平台&#xff0c;Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次&#xff0c;再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化

目录 1 主要内容 2 部分程序 3 程序结果 4 程序链接 1 主要内容 “双碳”背景下&#xff0c;为提高能源利用率&#xff0c;优化设备的运行灵活性&#xff0c;进一步降低综合能源系统&#xff08;IES&#xff09;的碳排放水平&#xff0c;提出一种IES低碳经济运行策略。首先…

【牛客刷题】笔试选择题整理(day1-day2)

每天都在进步呀 文章目录 1. 小数求模运算2. 进程的分区&#xff0c;这里说的不是JVM的分区。进程中&#xff0c;方法存放在方法区。3. 访问权限控制4. 继承与多态5. 与equals()6. 类加载顺序7. super()与this()7.1 super7.1.1 super调用父类构造方法7.1.2 super调用父类属性和…

Jabil EDI项目开源介绍

近期为了帮助广大用户更好地使用EDI系统&#xff0c;我们根据以往的项目实施经验&#xff0c;将成熟的EDI项目进行开源。用户安装好知行之桥EDI系统之后&#xff0c;只需要下载我们整理好的示例代码&#xff0c;并放置在知行之桥指定的工作区中&#xff0c;即可开始使用。 今天…

低代码工具库IRenderer『即可体验』上线了

在经历一段时间的折腾后&#xff0c;IRenderer迎来了一次版本更新&#xff0c;除了修复若干bug、优化编辑器性能外&#xff0c;在官网也添加了playground『即刻体验』入口。让您可以在线感受IRenderer可以提供的便利。 官网(github.io打开速度较慢&#xff0c;请稍等忍耐)地址…

SpringBoot——配置文件的分类

简单介绍&#xff1a; 在之前我们写配置文件的时候&#xff0c;我们直接在项目中的resources下面编写的配置文件&#xff0c;其实除了在这个路径下编写配置文件&#xff0c;还可以在其他的地方编写配置文件&#xff0c;并且不同位置的配置文件在启动的时候的优先级也是不一样的…

Srping注解之@Async:SpringBoot 实现异步调用

目录 1&#xff1a;前言 2&#xff1a;如何创建线程池 3&#xff1a;自定义线程池 1&#xff1a;前言 在日常开发过程中&#xff0c;会遇到一些需求是和主业务逻辑低耦合的&#xff0c;不要求和主业务逻辑同步进行&#xff0c;比如记录日志信息、发送消息通知电子邮件、生成…

Elasticsearch:使用 count API 来获得所有文档的个数

在我开始使用 Elasticsearch 的时候&#xff0c;我希望获得给定查询的文档总数。比如我们想对数据进行分页显示。从 Elasticsearch 7.0之后&#xff0c;为了提高搜索的性能&#xff0c;在 hits 字段中返回的文档数有时不是最精确的数值。Elasticsearch 限制了最多的数值为10000…

【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(一)

MyEclipse v2022.1.0正式版下载 如果您有HTML或JSP文件要编辑&#xff0c;这里将介绍如何编辑。查找以下信息&#xff1a; 编辑源代码大纲和属性视图参数页面 该功能在MyEclipse中是可用的。 一、HTML / JSP编辑器 要编辑HTML或JSP文件&#xff0c;请执行以下操作当中的一…

IPWorks BLE 2022 .NET Edition 22.0.8 Crack

IPWorks BLE 2022 .NET是一个蓝牙低功耗组件库&#xff0c;提供对 BLE 操作的直接访问。IPWorks BLE 组件提供简单的服务发现和对支持 BLE 的设备的访问。 蓝牙库 低功耗蓝牙组件 IPWorks BLE 包括一组功能强大的组件&#xff0c;用于将低功耗蓝牙通信功能集成到 Web、桌面和移…

Liunx 套接字编程(1)UDP协议的操作且实现一个UDP通信客户端

1.套接字编程 主要讲解的就是如何编写一个网络通信程序 1.网络通信的数据中都会包含一个完整的五元组: sip,sport,dip,dport,protocol(源端IP&#xff0c;源端端口&#xff0c;对端IP&#xff0c;对端端口&#xff0c;协议) 五元组完整的描述了数据从哪来&#xff0c;到哪去&am…

平抑风电波动的电-氢混合储能容量优化配置(matlab代码)

目录 1 主要内容 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序部分复现电机文章《平抑风电波动的电-氢混合储能容量优化配置》&#xff0c;针对电-氢混合系统协同平抑接入新型电力系统的新能源波动问题&#xff0c;提出考虑碱性电解槽运行特性的电-氢混合储能容量…

D. Array Restoration(st表 O(1)查询区间最值)

Problem - D - Codeforces 给定一个由n个整数组成的初始数组a&#xff0c;位置从1到n编号。 对该数组执行q次查询&#xff0c;每次查询选择一个区间[li, ri]&#xff08;1≤li≤ri≤n&#xff09;&#xff0c;并将该区间内所有元素的值都改为i。查询的顺序不能更改&#xff0c…

企业多个文件存储系统并行使用,IT人员如何统一高效管理?

文件存储系统在企业内部应用广泛&#xff0c;各个企业使用习惯各不相同。很多企业在业务开展中&#xff0c;由于内部业务结构复杂、部门间文件存储习惯差异化、需要与外部合作伙伴进行数据文件交换等原因&#xff0c;会出现企业内部多个文件存储系统并行使用的情况。 对于IT技术…

IPB60R950C6-ASEMI代理英飞凌高压MOS管IPB60R950C6

编辑&#xff1a;ll IPB60R950C6-ASEMI代理英飞凌高压MOS管IPB60R950C6 型号&#xff1a;IPB60R950C6 品牌&#xff1a;Infineon(英飞凌) 封装&#xff1a;TO-263 最大漏源电流&#xff1a;12A 漏源击穿电压&#xff1a;600V RDS&#xff08;ON&#xff09;Max&#xff…

关于全志T113开发板接7寸LCD屏幕显示异常问题的解决方案

在入手全志T113之后&#xff0c;第一时间移植好了之前6ull平台的rootfs。但是在测试QT的过程中发现屏幕最右侧有一部分显示不正常&#xff0c;经过初步推测应该是RGB行场同步时序有问题。本以为在设备树里面稍作修改之后就能OK&#xff0c;但是居然前前后后一共花了至少三个星期…

期刊介绍|骨科老牌期刊,无版面费,审稿极速,毕业不二之选!

今天给大家介绍一本中药方面的期刊&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH 一、基本信息 1、期刊名称&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH&#xff1b; 2、期刊ISSN: 0736-0266&#xff1b; 3、研究方向&#xff1a;医学-整形外科&#xff1b; 4、出版社&#x…

AI怎么把游戏变好玩?米哈游出手了

《原神》发布两年半后&#xff0c;游戏新贵米哈游终于出新&#xff0c;上线了《崩坏:星穹铁道》。新游戏的一大亮点是内置了一个“图生图”的AIGC工具&#xff0c;用户可上传任何图片&#xff0c;生成对应风格的游戏角色“三月七”。 广大玩家脑洞大开&#xff0c;短短一周时间…

专业的图像编辑软件Affinity Photo 2.04版本在win10系统的下载与安装配置教程

目录 前言一、Affinity Photo安装二、使用配置总结 前言 Affinity Photo 是一款专业的图像编辑软件&#xff0c;提供了很多强大的工具和功能。 一些常用工具的介绍&#xff1a; 选择工具 ——矩形选择工具&#xff1a;用于选择矩形区域。 ——椭圆选择工具&#xff1a;用于选…