致力于数字孪生体技术的研究与发展
通过解决方案和工程化应用造福人类
来源:计算机集成制造系统编辑部
作者:付卓睿 赵宁 竹益
导 读
针对当前仿真平台难以在具有较高柔性的系统中建立数字孪生模型的问题,提出了面向数字孪生的柔性离散事件系统建模与仿真平台设计方法。该方法首先进行需求层次分析,建立平台设计逻辑模型指导设计,并基于该逻辑模型提出了平台在仿真引擎、柔性孪生模型建模、可视化3个方面的详细设计方法,建立平台总体架构。为实现平台与数字孪生相结合,提出了基于物理实体状态的事件推进机制和面向优化算法的仿真步进迭代机制的数据交互机制。最后,基于该设计方法开发了原型平台NextING,并与商业仿真软件PlantSimulation进行对比测试,通过一个装配流水线实例以及一个移动机器人存取系统实例验证了该方法的有效性。
关键词:数字孪生;柔性离散事件系统;离散事件仿真;仿真平台设计
DT-DES平台设计不仅需要解决DT在实际生产与物流系统中的应用问题,也是一个软件工程问题,平台设计的成功与否取决于工程阶段所收集需求的正确性[29]。文献[30]中对DT 的实现需求进行了归纳总结,而对于DT-DES平台,除DT技术的实现需求外,还需结合柔性DEVS 的建模仿真需求。此外,对于柔性DEVS 的建模仿真,DT-DES平台设计开发需要综合各类生产与物流系统仿真建模、分析优化、迭代升级中可能产生的需求。在需求理论中,马斯洛需求层次理论提供了需求层次化满足的一个良好的范式,且可用于规范化地定义系统架构[31]。因此,本文对DT-DES的设计需求进行分析,建立需求层次模型,并在分析需求的基础上建立逻辑模型指导DT-DES平台设计。
本文将DT-DES平台设计的需求分为3个主要阶段共7个层次,如图1所示。仿真是实现DT中虚拟系统推演未来运行状态的基础,因此将基础仿真阶段的需求作为基本需求;在基础的DES建模之上,DT-DES平台需要提高柔性以及运行效率,实现对各类生产与物流系统的灵活建模;最后,DT 作为顶层应用,DT-DES平台需要实现与真实系统中的物理实体数据连接,进行实时的信息交互,为开发各类适用于不同系统的DT 模型和应用提供平台。在实际操作中,当在系统中建立DT-DES的预算有限时,应优先满足较低层次的需求,并在此基础上对更高层次的需求进行选择,优先满足系统DT 设计目标中最需要实现的部分。
在第一阶段基础建模需求中,包括准确推演和分析优化两个层次。准确推演需求是DT-DES平台实现DES的最基本需求,包括虚拟建模准确性、平台推演准确性和仿真预测准确性,要求在DTDES平台中建立的虚拟系统能准确反映真实系统随时间运行的状态变化特征,且虚拟系统可以做出正确的仿真逻辑推演,预测系统未来的运行状况并达到用户的准确度需求;分析优化需求要求DTDES平台在准确推演的基础上,能对虚拟系统中各个实体的运行情况进行统计,分析系统中的瓶颈环节,且可以结合外部算法进行优化。
在第二阶段平台优化需求中,包括柔性建模需求和运行效率需求两个层次。柔性建模需求包括平台建模通用性、模块的可扩展性与平台易用性,即DT-DES平台在面对不同的工业系统时均可以建立对应的虚拟系统并稳定运行,可以根据不同的工业系统扩展自身模块功能,且用户可以方便地直接使用这些模块或开发自身系统的特定模块建立虚拟系统;运行效率需求则要求仿真平台可以在用户要求的时间内完成虚拟系统的未来状态推演。
在第三阶段孪生模型需求中,包括虚实连接需求、实时交互需求和集成可视需求3个层次。虚实连接需求要求DT-DES平台可以与数据库、信息管理系统等外部系统建立数据连接,实现由数据驱动虚拟系统的运行,导出仿真结果数据等;实时交互需求则是能够实现与实体设备的实时数据交互连接,使虚拟系统能实时反映真实系统的运行状态,做到虚实共生;集成可视需求即DT-DES平台可以通过可视化的界面建立虚拟系统,并实现虚拟系统运行过程的动画展示和结果的可视化展示。
经过长期发展,DES已经形成了一套完备的理论体系,包括DES系统建模范式,即为系统时间推进和改变模型的离散状态提供的一套明确的表达方式和规则,根据建模的目的与事件交互导向不同,主要可分为:面向事件、面向进程、面向对象。除此之外还包括基于未来事件列表(FutureEventList,FEL)的仿真时钟推进机制,以及DES进程交互机制。本文在DES的理论基础上,结合DT-DES平台的需求,建立逻辑模型以指导DT-DES平台设计,如图2所示。
在该逻辑模型中,真实的工业生产和物流系统中包含若干设备和物料,这些设备和物料均可称为系统的实体。实体特征可以用属性和行为进行表示,因此,根据真实系统在DT-DES平台建立与之相对应的虚拟系统时,需要参照真实系统对虚拟系统中的实体的属性和行为进行设置,并建立实体之间的逻辑关系,使虚拟系统能准确反映真实系统的运行逻辑。同时,真实系统的实体可以通过工业通讯协议以及通信接口与上位机中DT-DES平台上运行的虚拟系统建立数据连接,使虚拟系统能及时接收物理系统的状态信号并反映在虚拟系统上。
虚拟系统的本质是仿真模型,依靠DES对系统未来运行状态进行推演。为了便于系统建模,采用面向对象的建模方式。尽管物理系统中各个实体的行为并不相同,但在仿真模型中,通过提取物理系统中实体的共同属性和行为,可以将仿真模型中的实体进一步抽象为临时实体对象、永久实体对象和实体联系对象。临时实体对象是在系统中临时存在的实体对象,在进入系统并经过一定流程步骤后便会离开系统(例如工业生产的加工零件),可以推动仿真运行;永久实体对象是在系统中永久存在的实体对象(例如工业生产的加工设备),临时实体的所有活动均需在永久实体上进行;实体联系对象表示了实体之间的联系,临时实体在一个永久实体上的活动完成后,根据实体联系对象确定需要进入的下一个实体或离开系统。通过向虚拟系统中增添仿真对象,或是对现有的对象增添或修改一些属性和方法,可以实现柔性化的DEVS建模,从而灵活地表达不同的系统。
DES底层为事件驱动,仿真实体对象的行为需要使用事件进行表达。因此,利用面向进程的建模方式,将实体的行为进一步抽象为仿真对象进程,通过进程交互机制表达实体在系统中的具体流程步骤以及不同临时实体和永久实体之间的交互,并构建对应的实体行为事件。最后,底层应用FEL推进算法推进仿真时钟,并更新系统状态从而推动虚拟系统的运行。
在分析需求与逻辑建模的基础上,本文进一步提出DT-DES平台设计方法以及总体架构,用于指导平台的实际开发工作。
根据DT-DES 平台设计需求层次模型,DTDES平台需要在仿真引擎、孪生模型建立以及可视化3个方面进行设计,本文对这3个方面提出了对应的设计方法。
(1)基于离散事件的仿真引擎设计方法
DES是DT-DES平台的底层运行机制,因此,平台需要设计DES中的仿真时钟推进机制以及进程交互机制,建立仿真引擎。如图3所示,对于仿真时钟推进机制,FEL 的管理是仿真运行效率的关键。结合BAHOUTH 等[32]的研究,在各种数据结构中,使用最小堆作为FEL数据结构,事件按照时间先后顺序、优先级、事件编号建立小根堆,并随着仿真时钟的推进不断推出堆顶事件以及将新的事件压入堆中,其时间复杂度可以达到O(logn),能够实现较高的效率。对于进程交互机制,仿真引擎采用协程(Coroutine)实现。协程是程序运行时的一种任务调度机制,协程执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当时刻再返回继续执行,这种机制与DES的进程交互机制相契合,可以实现在实体生命周期中进程的中断、进程切换与进程之间的交互。
(2)基于元模型的虚拟系统孪生模型设计方法
真实系统中存在各种具有不同属性和行为逻辑的实体,若对每一种实体建立独立的孪生模型,将大大增加建立DT的成本,且独立的模型难以进行扩展,这将降低DT-DES的柔性。因此,采用基于元模型的虚拟系统孪生模型设计方法以保证建模效率和模型重用能力[8],提高DTDES平台的柔性建模能力。在DT-DES平台中建立真实系统的孪生模型中应包括以下3 种类型的对象:
1)仿真对象类。即仿真实体,每一个仿真对象在仿真模型中的行为逻辑均代表真实系统中某一个或某一组实体的行为。在DT-DES平台逻辑模型中,临时实体、永久实体和实体联系对象是对所有仿真对象的归类,具有对应类型对象的公共属性和行为,因此,DT-DES平台中建立的仿真实体均从这3类基本的仿真对象派生。
2)模型管理类。对于DT-DES平台,在建立仿真模型的过程中,仿真模型可视为容纳仿真实体的模型空间并对模型空间中的所有仿真实体进行管理,例如命名空间管理、仿真实体在模型空间的添加或删除等。因此,设置模型管理对象对DT-DES平台中建立的仿真模型进行管理。
3)数据交互类。DT-DES 平台除了实现DEVS仿真建模外,还需要实现与真实系统的数据连接和实时数据交互,建立真实系统的孪生模型。因此,DT-DES平台还需封装各种用于实时数据交互的模块,这些模块封装了与使用各类数据连接协议实现数据交互,并在建立仿真模型时使用这些模块,从孪生数据中心实时获取真实系统的状态数据,使仿真模型能反映真实系统的状态,以及将仿真模型的仿真结果反馈至孪生数据中心中指导真实系统运行,实现孪生模型的建立。
DT-DES平台需要实现对这3种类型的对象的管理,使用户能方便地设计符合真实系统的孪生模型。因此,通过建立元模型,将这3类对象转换为特定的建模元素,如图4所示。
在该元模型中,通过创建一个仿真基类,并将仿真对象类、模型管理类、实体连接类作为仿真基类的子类。子类对象通过与仿真基类建立泛化关系,实现对仿真基类的属性和行为的继承、覆盖和扩展。然后将该子类的多个实例放入其模型中,并通过设置属性值来自定义每个实例的行为。通过这种方式,可以实现不同类、不同层次的仿真对象的继承和管理。且从具有某些所需行为的现有基类类开始创建子类对象,并将子类对象作为下一级子类对象的基类继续创建用户自定义的仿真对象属性和行为,可以简化仿真对象库的开发,方便用户根据实际需求自定义各类仿真对象。除此之外,通过定义仿真基类实例对象和仿真子类实例对象,使得仿真实例对象间存在如开发中类继承关系一般,子类实例继承于父类实例属性方法且可自定义更改及拓展。这样使得建模环境与开发环境更加契合且利于后期二次开发定义行为,且方便管理拓展实例间的关系。
基础对象组件是仿真平台建立不同仿真模型的基础,是对工业及物流领域系统中各种实体的高度抽象。通过在仿真平台中实例化这些基础对象组件,并使用实体联系对象建立这些基础对象组件之间的联系,就可以建立不同系统的DES模型。各个基础对象除了通用属性外,不同类型的基础类特有的属性和方法,对于事件的处理方式也不尽相同。对于那些不能满足的功能和系统的特定行为,用户可以自定义对象属性及行为逻辑。
(3)基于多线程和以用户为中心的集成可视化设计方法
DT-DES平台需要用户使用,虚拟系统建模是一个复杂的过程,因此,平台采用以用户为中心的界面设计方法,提供良好的用户交互界面降低建模难度,并提供对各类组件的管理功能,原型如图5所示。在该原型界面设计中,主窗口是可视化界面显示的主体部分,是各个组件窗口及弹窗的父类窗口,提供显示组件的载体容器、全局的控制以及窗口功能的实现;菜单栏窗口提供建模以及窗口的快捷操作;文件管理器窗口,提供对象及对象库管理;工具栏窗口提供快速建模工具;控制台窗口用于打印仿真模型的一些输出信息;工作空间是建模操作、动画展示以及编程主要的窗口界面,并提供自定义代码编辑功能。
在仿真模型中,仿真动画可以展示系统随时间变化的可视化状态,仿真动画引擎需适应仿真引擎的推动变化。DEVS的实体状态改变时刻由事件发生的时刻决定,为非固定时长,因此DT-DES平台采用同步更新机制,更新仿真进程中实体的可视化状态实现仿真动画展示。然而,一个DEVS中也可能存在许多具有连续行为的实体(如:传送带运输物料的过程等)。针对这一问题,KOFMAN 等[33]提出利用一阶量化状态系统的方式,将连续系统的状态变量转化为分段连续的常量,每一个分段被认为是一个离散的状态,实现将连续系统表示为DEVS形式。针对于平台中连续行为实体,实体将在临时实体对象在其活动过程中按照一定的时间间隔在FEL中加入动画事件,使得连续实体状态可以量化为各个动画事件执行时刻的状态。利用插入动画事件活动扫描连续系统状态而可视化更新。仿真动画实现过程如图6所示。
图6 插入动画事件实现连续更新系统运行状态
由于DES是非常占用时间和空间资源的推理模式,且是一个连续的过程,而动画更新以及平台可视化操作也需要系统即时响应,单线程执行仿真程序时会造成系统无法即时反馈。因此,DES仿真动画引擎需要采用多线程技术,将仿真内核和动画更新的线程与主界面显示线程隔离开,防止平台因运行仿真造成无响应。考虑到执行时间及资源分配,平台应设置可视化主线程、仿真引擎执行线程、时间采样更新线程以及仿真重置线程4个线程,如图7所示。可视化主线程主要负责对于界面交互的反馈以及动画演示更新;仿真引擎子线程负责对于运行推演模型并发送信号到主线程更新动画状态;时间采样更新线程负责对仿真执行线程中的仿真时间进行采样并发送信号到主线程更新仿真时间;仿真重置线程用于在任意时刻停止仿真执行线程以及时间采样线程,重置仿真系统状态和主线程可视化状态。
多线程可能会引发线程同步问题,例如在仿真引擎线程进行事件推演并更新仿真时钟时,主线程接收到了信号更新仿真模型,可能会导致事件推演错误。对此,平台采用互斥锁的方式以避免竞态条件和数据访问冲突:线程在访问仿真对象的方法时加锁,并在访问结束后释放锁。在加锁的这段时间内,其他线程不能访问该仿真对象的方法,实现方法的有序调用,且每个线程一次仅持有一把锁,对公共仿真对象方法的调用也不存在环路,因此不会发生死锁。此外,为保证主界面及时更新仿真状态显示仿真动画,将仿真动画更新方法嵌入仿真对象的执行方法中,作为事件执行的一部分。这样,只有当包括更新动画在内的方法执行完成后,仿真内核才会调度下一个事件,从而保证内核事件调度与动画更新同步。
图7 DES平台各线程运行及交互
选用常见的模型-视图-控制器(ModelViewController,MVC)框架设计DT-DES 平台总体架构。如图8所示,平台架构分为应用层、访问层、仿真内核层和数据层,分别对应前端交互界面、用户操作响应、仿真内核后台以及存储文件数据。仿真内核作为MVC框架中的模型层(Model),前端交互界面及界面后台作为视图层(View),用户模型操作响应信号过滤器作为控制器层(Controller)。
应用层的核心功能是与用户及应用间交互,包含图形用户界面和Python端。图形用户界面用于满足用户模型可视化搭建、仿真对象管理、动画演示、数据通信管理等需求;Python端面向于仿真内核运行,通过公共接口或模型库通过代码直接建立模型或者调用平台可视化操作建立模型。
访问层核心功能是处理前端界面操作及与仿真内核交互,包含界面后台和控制器。界面后台主要实现对界面操作的逻辑控制以及对后台多线程的管理。界面操作控制主要通过Qt框架事件处理机制及信号处理机制,对操作请求进行过滤识别并执行相关逻辑操作。多线程管理主要是针对平台占用资源的操作利用线程技术进行并行处理,线程间则通过信号进行通讯处理。控制器则是对事件过滤出与仿真内核相关的信号或者仿真内核向界面发出的信号进行处理并请求相关服务。
仿真内核层是DES的底层模型,通过建立仿真内核基类实现对孪生模型中仿真对象类、模型管理类、实体连接类等基础类以及用户自定义对象的管理,通过事件调度器实现仿真引擎的仿真时钟推进以及进程交互。
数据层主要实现对数据交换与存储和数据库连接与操作功能,通过使用通用的数据交换格式,如JSON,CSV等,可以将仿真模型和仿真结果导出,以及读取对应文件的数据建立仿真模型;通过使用ODBC等数据库访问标准接口,实现平台与数据库的连接,进行读取、写入等数据库操作。
全文阅读
来源:数字孪生体实验室