面向工业互联网的低代码开发平台研究

2024-03-12 05:34易学明缪翀莺谢晓军
广东通信技术 2024年2期
关键词:代码组件可视化

[易学明 缪翀莺 谢晓军]

1 引言

近年来低代码开发在工业界和学术界都日益受到关注,它既是企业应用市场基于企业需求产生的一种趋势,也是IT技术发展的一个趋势,尤其是移动互联网、云计算和人工智能在企业数字化转型中的快速应用更是加速了这种趋势。企业必须对不断变化的市场需求做出快速和有弹性的反应,希望降低企业应用开发迭代门槛,使得企业内部IT人员、业务人员能参与开发,并将需求快速转化为系统功能模块,加快应用交付[1]。而疫情和后疫情时代,企业互联网化需求明显,很多企业被迫云化办公,存在大量快速开发应用系统的需求,而招聘专业的软件工程师又越来越困难,在此背景下低代码开发的市场需求显著增大[2]。

随着5G和工业互联网等新型基础设施建设成为国家推动经济高质量发展的重要支撑,作为新基建尤其工业互联网发展的重要力量,通信运营商正在不同类型工业和企业领域进行数字化服务的不断探索和实践。研发面向工业互联网的低代码开发平台,进而更好地服务政企行业数字化转型,成为通信运营商提供数字化服务的重要抓手:通过平台一方面实现能力聚合和共享形成能力组件,即插即用,另一方面则实现应用聚合,丰富可复用行业组件,进而使数据纵横相通,消除“数据孤岛”。

2 平台背景与现状

回溯历史,可以看到整个软件开发的历史其实是一个追求低代码化的历史。早在2014年低代码开发概念提出前,诸多IT厂商就已经在该领域持续耕耘多年,并不断地推出低代码开发工具和平台[2]。以ORACLE为例,20多年来一直持续在开发工具和应用领域的低代码化上发力,从C/S时代的ORACLE FORMS到后面支持WEB和移动信息化的新一代开发平台OACLE APEX,低代码发展的思路非常明显,即通过简化开发支持前端快速开发出UI,后端利用自身数据库独有优势,形成自身以数据库系统为核心的开发生态。

再以微软为例,低代码平台产品系列Power Platform[3]包含丰富的产品,微软发展低代码平台的目的,也是要打造自己的软件生态。它在低代码领域研究的历史至少可以追溯到90年代,如ACCESS,刚发布的低代码开发语言PowerEx则是基于很早的EXCEL宏VBA发展起来的。值得关注的是,微软将低代码平台Power Platform和编程辅助AI插件Copilot结合起来,希望通过AI驱动的无代码智能方式重塑软件开发,可能会深刻改变软件开发的模式。

国内华为、百度、阿里、腾讯等大厂一方面象微软一样基于自身产业链生态的打造和完善纷纷介入低代码,同时也希望借此来解决内部IT系统庞大而分散的问题。无论是阿里还是华为,低代码平台的研发都优先在企业内部使用,以此提高开发效率,将部分重复开发工作解脱出来。

随着新基建技术的发展,为更好服务政企行业数字化转型需要,完善工业互联网服务生态,通信运营商、传统IaaS(Infrastructure as a Service)服务商或通过收购与合作方式,或基于自身技术积累自研等方式陆续推出低代码平台,如移动云推出了面向业务开发者的多行业多场景下的低代码业务应用搭建平台,中国电信在面向工业互联网垂直行业也进行了低代码开发平台的实践探索。

3 平台架构及关键技术研究

本文以满足企业生产管理、设备资产管理、业务运营优化与创新等工业互联网应用开发需求为场景,进行了面向工业互联网的低代码开发平台的研发探索。在前期MES(Manufacturing Execution System)领域实践基础之上,基于跨框架组件复用技术、元数据技术、可视化低代码架构技术、工业协议云采技术及软硬件解耦的5G边云协同工业控制技术,提出了ICT(information communication technology)和OT(operation technology)融合的云化低代码开发平台技术架构。

3.1 整体功能架构

面向工业互联网的低代码开发平台以可视化的数据和信息管理、工作流管理和组件复用为核心,以云采工业物联技术、云控工业控制技术等物联采控基础设施为基础,基于模型驱动[4,5]和软硬解耦思想,充分利用已有框架及组件的成熟能力,通过可视化IDE生成代码构建运行或者模型解释执行,以满足便捷快速构建工业互联及物联网应用解决方案的需求。

面向工业互联网的低代码开发平台整体功能架构如图1 所示。

图1 平台整体功能架构

平台由设计器、组件、引擎、后端服务与部署、存储及分析、物联采控以及基于平台开发或支持的各类应用等7个部分组成。

(1)设计器

设计器部分包括页面设计器、表单设计器、流程设计器、大屏和报表设计器,以及针对应用、页面、区块的管理等。通过表单设计、报表设计等,自动生成业务数据模型,通过系统提供的各种部件,利用页面设计器构建页面[6]。使用可视化编排和脚本语言定义前后端业务逻辑。通过流程设计器,以可视化的方式进行流程设计与配置[7]。通过大屏和报表设计器,以可视化的方式进行大屏设计和报表设计。

(2)组件

组件部分包括表单组件、布局组件、流程组件、大屏和报表组件、通用业务组件和各个垂直行业的业务组件,以及用于AI工业大数据分析的组件等。基于领域工程,通过产品迭代升级优化和项目积累,不断扩充和完善组件部分,将复杂的外部能力封装为标准组件(如表单组件或者流程节点)后,在应用工程中进行可视化编排。

(3)引擎

引擎部分包括表单引擎、大屏和报表引擎、规则引擎、流程引擎、跨框架引擎、移动化引擎和AI工业大数据分析引擎等,通过解释和执行对设计器和各类组件提供支撑。其中跨框架引擎通过基于DSL 转换协议和跨框架组件机制实现将页面或区块 Schema 转换成各技术栈的源代码,以满足适配多技术栈的需求。移动化引擎提供应用移动化和移动端原生调用能力支持,包括获取设备信息、打开文档、播放视频、分享、支付、扫码等

(4)后端及部署

通过Spring Boot和Node.js/Node-RED[8]提供后端服务,包括提供数据处理、认证及权限管理、物联采控管理等系列 API 接口,以及系统所需业务逻辑的实现等。

基于容器编排技术、微服务架构技术[9]和云服务技术,使得低代码开发平台开发的应用系统可以基于容器环境实现快速独立的部署运行,并根据客户不同部署要求提供包括公有云/私有云的不同云服务部署方式。

(5)存储及分析

通过Mysql和MongoDB实现对低代码开发平台不同特点数据的存储支持;通过对TDengine等时序数据库的支持实现对海量工业数据的存储支撑和处理。结合ETL(extract transform load)分析[10]和AI工业大数据分析引擎,实现基于工业机理和数据科学实现海量数据的深度分析,并实现工业知识的沉淀和复用[11]。

(6)物联采控

物联采控部分由云采工业物联和云控工业控制组成,是低代码开发平台面向工业互联网实现采集、控制和管理的基础设施,而云采云控本身的部分功能也是基于低代码技术开发的。

(7)应用

基于平台开发或支持的各类应用,支持多租户服务,支持企业应用私有化部署,包括ERP类的IT应用,面向IT和OT融合的SCADA(Supervisory Control And Data Acquisition)类、MES类应用等。

3.2 系统架构及流程

低代码开发平台的系统架构就技术原理而言分为两层:设计器(设计态)和服务器(运行态)。首先设计者通过可视化设计器实现可视化构建页面、业务逻辑和数据模型,并将可视化设计与配置的结果以DSL (domainspecific language)的形式保存为元数据中间文件[12],一般是JSON、YAML等格式。再通过设计器将元数据中间文件进行预处理并打包发布到服务器上,服务器解释或编译中间文件里的元数据,形成应用,提供给最终用户使用[13,14]。平台主要的系统架构及流程如图2所示,可以分成可视化设计、中间层元数据描述、底层数据库以及后端引擎4个环节。

图2 平台主要系统架构及流程

(1)可视化设计

前端的可视化设计器支持组件的拖拉式设计和配置,包括页面布局和界面交互设计、规则验证和业务逻辑等设计,以及各种数据结构的设计与绑定等信息。其本质则是将一些常用业务逻辑提取出来加到通用UI组件之上并固化,然后通过提供可视化编辑环境和相应的配置项,让用户通过可视化配置的方式来复用这些固化的业务逻辑。

(2)元数据处理

由前端设计器生成的特定格式代码称为元数据文件,由JSON、YAML等格式的描述性语言文件组成,后台运行器根据这些元数据文件解释或编译生成可执行代码,从而实现用户所需的应用程序。

(3)底层数据库

在传统应用系统里,底层数据库都是固定的实体表,即是与实体关系对应的一个个具体表。当业务需求变化需新增或改变数据结构时,采用这种方式需要手工在数据库进行数据结构的新增或修改。低代码开发平台为了降低应用开发中配置数据模型的技术门槛,基于通用表结构设计原理,结合窄表和基于JSON 字段类型的键值对技术,实现了业务系统数据结构的灵活构建,在前端利用可视化表单进行设计后,后端自动生成相应的数据表结构及数据信息,无需手动在后端数据库进行新增或修改。

(4)后端引擎

后端利用转换器将包含服务端动作和业务逻辑元数据文件转换生成对应可在低代码开发平台运行态下执行的目标代码。服务端设计根据业务需求和用户体验等方面进行综合考虑,以实现平台的高效、易用和安全等特点。

3.3 关键技术

(1)跨框架组件复用技术

在基于B/S架构的低代码开发平台研发中,进行前端可视化设计遇到的一个关键问题是如何实现跨技术栈下的组件复用。当前B/S架构的三大主流前端框架Angular、React、Vue并没有统一的组件库,例如基于 Vue 的Element UI,基于 React 的 Ant Design 等,都是特定于框架的,无法跨框架使用。而在企业应用系统开发中,通常存在对内部存量系统改造对接的需求,也存在与外部系统对接、与新系统整合的要求,还会面临前端系统整合的问题,这些系统可能是由不同的技术栈实现的,例如有的采用React框架,有的采用Vue框架,对于存量系统则可能是更老的框架。因而跨技术栈下的组件复用是低代码开发平台研发过程以及应用于实际企业应用开发时难以绕开的问题。

为使得前端组件有更好的重用性,对Web component及基于Web component对不同框架组件转换技术进行了研发探索。Web Component支持通过创建自定义元素实现在任何框架场景或原生环境都可以使用自定义元素的标签进行调用。作为一项W3C积极推动的技术,Vue/React/Angular等主流前端框架都在一定程度上遵循了这套规范,自定义组件使用的是 Shadow DOM,这项技术是 Web Component规范的一部分。浏览器支持方面,FireFox、Chrome、Opera 已支持,Safari大部分支持,之前IE及Edge的支持差,目前IE已退出,Edge内核也在更换,可见浏览器对Web Component的支持在越来越好。由于Web Component规范只是应用于浏览器底层,作为组件化的思想指导,所以具体的组件化实现需由各框架自行设计。目前除了使用原生的Web Component 创建方法,三大主流前端框架(Vue/React/Angular)已提供针对Web Component的转换接口,将各框架技术栈的 UI 组件利用转换接口按需包裹成 Web Component,使得原来基于特定框架的组件可以作为HTML原生组件显示到前端画布上,实现跨框架的组件复用,从而可为低代码开发的可视化前端所调用。在实际开发中,遇到一些框架API接口不完善及兼容性的具体问题需要克服,如Web Component插槽使用,只支持原生的插槽语法,即使是通过 Vue 组件等框架组件进行转换;再有,Web Component的插槽能力不支持类似Vue框架的作用域插槽等能力问题。因而在实际开发中,一些特殊功能需要进行额外的兼容性处理。但总体上利用这一方法可以较好地解决前端技术架构存在的跨技术栈和组件复用问题,由此带来的另一个好处是在开发各个业务组件时可以利用更多更丰富的各类特定框架的组件,从而降低开发基础组件和业务组件的成本。也由于Google对Web Component的支持,使得基于Web Component的组件复用方案在多端开发领域也将有更好的影响,相信会逐渐成为组件化开发的一个趋势。

此外,基于Web Component的一些比较成熟的开源组件库,比如Stencil、OMI等,根据需求进行部分组件的开发,也是平台基于Web Component机制实现跨框架组件复用的一个重要组件来源。

通过以上方式实现设计态下不同框架下组件的复用后,基于可视化设计器通过拖拉拽配置设计生成满足业务需求的描述性语言文件,再通过跨框架引擎的DSL 转换协议机制转换成目标技术栈的源代码,从而可以满足不同运行态下的运行环境需求。比如将Angular组件通过跨框架组件复用技术在可视化设计器加载后,用户通过可视化设计器对该组件进行调用和配置,生成元数据描述文件,再通过跨框架引擎的DSL 转换协议机制转换成目标技术栈React框架下的源代码。可见,采用基于Web Component的跨框架组件复用方案因其原生支持的特点,也避免了低代码开发平台普遍存在的供应商锁定问题,并且在性能上也更有优势。

(2)元数据和可视化业务逻辑技术

元数据作为描述数据的数据,用来描述低代码开发中的对象、字段、关系、逻辑和规则等方面的信息,包含了用户在可视化设计界面上所操作元素的配置和设置,比如它们的位置、样式、交互行为等。传统低代码技术中,将前端可视化操作直接翻译成对应的可执行语言(如C#、Java等)以及将数据模型的可视化设计直接生成为数据库语句的方式。面向工业互联网的低代码平台采用中间层元数据技术,前端可视化界面的操作和配置首先生成为元数据,再通过元数据解释成数据库语句在数据库上执行,对前端用户屏蔽了对数据库的直接操作,也更容易为前端用户接受。对于前端可视化设计与配置阶段建立的数据关联关系,平台也以元数据的形式描述这一关联,并在设计态和运行态中维护这一关联,比如在运行态实现级联删除等,但在后端数据库则不再定义外键关联。通过避免在数据库内部建立硬关联的方式,也更方便低代码平台进行跨数据库、跨数据源的操作。在面临企业级应用需要将多厂商多版本的异构数据库系统进行集成和统一时,通过中间的元数据层进行数据处理和逻辑处理,可以有效“抹平”异构数据库系统在数据类型和存取方面的差异,比较好地解决了跨数据库、跨数据源系统的数据集成和统一问题。

平台以数据流转的方式设计业务逻辑,用流程图或数据流图的形式来描画业务逻辑,将用来承载业务逻辑的组件抽象保存为元数据定义,这种方式有利于垂直领域非专业技术人员进行理解,也方便开发时与需求方就设计结果进行沟通确认。平台描述业务逻辑的元数据通常由若干有顺序的操作构成,每个操作包含操作类型、配置数据、输入输出参数等。当在设计器上对这些组件编排和配置时,设计器将这些组件的顺序、配置信息等保存为JSON或YAML格式元数据,在运行时再通过加载和读取这些元数据,还原出业务逻辑处理的规则和实现方式,形成可执行程序,监听对应端口和准备响应请求。此外,平台针对垂直业务领域业务逻辑复用度高的业务场景和需求,抽象提炼出层次高、粒度大的逻辑节点,进行业务逻辑编排,甚至业务流程编排,提升业务逻辑组件的复用效果,为MES开发提效。

通过采用元数据和可视化业务逻辑技术,平台可以更加方便地支持新的业务场景,具有更好的扩展性。

(3)基于通用表的数据库设计技术

平台的数据库设计里,需要将任何对象及其属性的描述和记录以及增删改查等操作高度抽象化,使得任意租户的任意对象的任意数据的增删改查操作,底层都用一套代码。

平台采用Object、Field、Data通用表设计的基本原理来构建底层数据结构模型。其中,Object表用于存储业务对象模型,包括对象属性、对象关系等,每个业务对象将在Object表中进行定义,并分配一个唯一的Object ID;Field表用于存储业务对象的属性信息,包括属性的名称、类型、长度等,每个属性将在Field表中进行定义,并分配一个唯一的Field ID,每个属性都属于某个业务对象,因此Field表中会存在Object ID字段,用来与Object表进行关联;Data表用于存储业务对象的数据,每个对象的具体实例将在Data表中进行存储,使用Object ID和Field ID分别与Object表和Field表进行关联。Data表的设计可以采用宽表的方式,预留足够的字段用于自定义,一个字段对应一个属性值;可以采用窄表的方式,每个对象的每一个属性对应一条记录;也可以采用JSON 字段类型,结合键值对的方式灵活地存储一个或多个属性值。本文采用了窄表方式和基于JSON 字段类型的键值对相结合的方式。

通过这一设计,低代码开发平台支持多种业务对象模型的定义,并且可以自动生成对应的表单、视图、报表等。而对多租户的支持则根据需要可以通过每个租户一个单独数据库来实现,或在表中增加租户ID字段进行区分。

(4)基于应用特性的后端设计

为了满足工业互联网应用IT和OT融合的需要,后端基本功能部分采用比较主流的技术架构Spring Boot,部分IOT相关模块采用Node.js和Node-RED实现。基于Node-RED实现可视化的低代码流程编程,将物联网硬件设备、API和在线服务方便快速地连接在一起,简化工业物联网设备及业务管理功能的开发。

数据存储上,根据不同数据特性和处理要求,使用MySQL存储关系型数据,使用 MongoDB 存储非关系型数据,如前端页面正在编辑的自定义数据适合使用MongoDB 存储[15]。针对海量的工业互联网数据存储的场景,根据需要使用TDengine时序数据库系统来存储,以提升工业数据存储和处理能力。

考虑到工业互联网应用的复杂性,平台基于容器编排技术和微服务架构设计,使得应用系统基于容器环境可以实现快速独立的部署运行,同时大大降低了部署和维护的复杂性,实现敏捷部署运维。

(5)物联采控一体技术

利用运营商在IaaS层具有的基于5G边云协同、云网结合的网络资源能力,通过工业协议云采技术和软硬件解耦的云控工业控制技术,实现了ICT技术和OT技术在工业互联网的逐步融合,使得基于平台开发的工业企业应用向上提供工业数据采集与汇聚的能力,向下具备对工业设备远程控制的能力,解决信息孤岛难题。

云采工业物联基于工业协议云采技术,兼容百余种工业协议规约器,实现各种不同协议类型设备的数据采集及数据上报[16],实现能耗采集、工业数采等应用场景的云采并不断迭代完善。

云控工业控制采用5G边云协同的分布式部署架构,通过控制器软硬件解耦,实现网络的标准化,接口协议的标准化,屏蔽异构工业设备的差异性,实现协同设备控制,支持各种工业控制类应用的低代码开发,现阶段主要聚焦柔性生产和机器换人场景,在物流、五金、包装、电子等行业打造若干标准智能工位,实现包括远程操控、智能理货、机器打磨、机器涂胶、视觉质检等功能。

4 应用开发案例

基于平台开发的一个云化PLC(Programmable Logic Controller)某车间试点MES系统的视觉工位状态监控界面如图3所示。

图3 某车间MES系统的视觉工位状态监控界面

云化PLC目的是将5G技术融入自动化产线,针对中小企业已有的自动化,半自动化的产线,利用5G技术,提升工厂生产的效率和质量。该车间试点布置了工业互联网云化PLC生产线,满足云化PLC柔性生产、协作配合、智能分拣等交叉应用场景的需求,包括智能仓储、CNC切割、激光雕刻、机器视觉、包装、传送及生产物流等柔性智能工位。其中生产物流工位主要由5G远程控制AGV(Automated Guided Vehicle)无人驾驶小车完成,由AGV小车主体和5G通信模块组成。每个柔性智能工位上都配置对应的边缘控制设备及对应的PLC 应用。而试点建设的柔性自动化产线则涵盖智能制造的常见主流技术,包括PLC编程技术、工业机器人技术、机器视觉技术、柔性镭射技术、AGV无人导航技术等。通过这些载体的智能通信接口连接5G定制网,利用平台提供的云采工业物联和云控工业控制基础设施,实现对产线的采集和控制,并基于平台的低代码开发环境针对车间产线的具体业务需求快速开发出更上层的工业互联网应用管理服务。图4是基于平台开发的某车间试点MES系统总体架构图。

图4 某车间MES系统总体架构图

图4的看板显示部分中,产线工位状态监控包括了智能仓储工位、传输工位、CNC切削工位、激光镭射工位、机械视觉检测与包装工位、生产物流工位等工位状态的实时显示;生产计划实施监控主要实现对各批次计划下已完成产品情况及各工位上加工产品情况的监控;物料状态的监控则实现对物料库存率和消耗率等的监控。通过在平台进行可视化的设计与配置,并加载和调用大屏组件,实现各产线工位状态、物料状态、设备状态、生产计划实施状态等信息的大屏实时显示,而相应的产线工位状态、生产计划实施等信息则利用5G定制网络超低延迟的特点由云采工业物联通过5G定制网通道从各产线工位对应配置的边缘控制设备实时获取。车间产线的生产物流运送由联接5G网络的AGV小车完成。运用云控工业控制,平台通过5G定制网络对AGV小车进行实时远程控制,以安全、同时地完成设定工作计划,确保AGV小车及其运输物料的安全性和准确性,尤其适合高温、高压不宜人工进入的特殊环境。

5 技术局限性和问题分析

在低代码开发平台的研发和实践过程中,也认识到面向工业互联网的低代码开发目前存在的一些局限和问题,下面做概要分析。

5.1 技术局限性分析

低代码开发的核心一个是组件复用,一个是可视化。这里就组件复用和可视化谈谈其局限性。

(1)场景预设和可复用组件模式的局限性

基于低代码平台的应用开发,是一种高度的场景预设的模式,所需的场景和需求,是在低代码平台开发时就预设好的,需要低代码平台开发者针对预设的目标应用系统预先开发好大量可复用的组件、模板、模型和接口[17,18]。

一般来说,组件层次越高、粒度越大越难以被直接复用。虽然一般的业务组件可以通过参数化来实现个性化配置,但参数数量毕竟有限,而不同企业的业务即使同样是MES系统,其需求也差异多样,给复用带来一定困难,而且丰富的参数选项也会使得学习成本比较高。即使是比较成熟的低代码开发平台,有着丰富的业务层面的组件,通过组件复用的比例,也遵循二八原则,也就是说一般会有10%~20%的业务需求无法复用。这时,就需要低代码平台提供特定规则的 DSL 语言甚至外部开发工具进行自定义编程或专业编程[19,20]。

(2) 可视化编辑表达业务逻辑的局限性

对于一些复杂的业务逻辑,采用低代码可视化编排的方法有时难以很好表达,低代码平台对于复杂业务逻辑表达的一个解决方案是采用JavaScript之类的脚本语言来实现[21],但这也为低代码的开发带来了门槛。更有一些复杂场景和复杂业务逻辑,仍需要和专业开发配合才能实现[22],比如制造业中常见的需根据各种排程规则设定复杂排产算法等场景。

5.2 应用问题分析

(1)元数据的持续优化和扩充问题

元数据规定数据类型、格式和范围等信息,通过元数据定义把各种能力单元和业务单元封装起来,使得开发者可以在低代码开发平台的可视化设计器中方便直观地调用,而元数据的定义是相对固定的,这在一定程度限制了低代码开发平台的灵活性和能力边界,使其难以满足一些新的复杂业务的需求[23],需要持续优化和扩充元数据能力,以适应新的业务需求和应用场景,提升开发效率。而低代码平台的竞争力也体现在对组件和元数据进行持续优化、积累和扩充的能力上。

(2)OT与ICT融合的复杂性问题

要实现OT与ICT的高效融合,在实际实施中还面临着很多挑战,例如各种总线各自有着不同的物理接口、对象字典及传输机制,使得即使能够采用网络标准化、接口协议标准化等技术进行融合,在互操作层仍然会出现一些问题。这种复杂性使得在数据分析、订单排产等IT 应用层面会遇到一些障碍,增加应用开发的工作量和难度。

6 结束语

工业互联网的目标是通过ICT技术和OT技术的深度融合,实现工业企业的数字化成功转型。通过元数据及通用底层数据库设计技术、可视化低代码架构技术、跨框架组件复用等低代码开发技术,结合工业协议云采技术、软硬件解耦的5G边云协同云控工业控制技术和AI工业大数据分析技术等,可以有效实现ICT技术和OT技术在面向工业互联网的低代码开发平台的逐步融合,从而满足工业互联网数字化应用快速开发的需要。考虑到工业企业数字化需求的复杂性,在将来,可进一步优化平台的技术架构,进一步优化和扩充面向工业互联网的可复用组件和元数据能力,进一步推进ICT技术和OT技术在平台的融合,使得面向工业互联网的低代码开发平台成为实现工业企业数字化转型的更有效手段。

猜你喜欢
代码组件可视化
基于CiteSpace的足三里穴研究可视化分析
无人机智能巡检在光伏电站组件诊断中的应用
基于Power BI的油田注水运行动态分析与可视化展示
新型碎边剪刀盘组件
基于CGAL和OpenGL的海底地形三维可视化
U盾外壳组件注塑模具设计
“融评”:党媒评论的可视化创新
创世代码
创世代码
创世代码