CN112114844A - 基于虚拟机的电能表专用系统 - Google Patents
基于虚拟机的电能表专用系统 Download PDFInfo
- Publication number
- CN112114844A CN112114844A CN202010773957.5A CN202010773957A CN112114844A CN 112114844 A CN112114844 A CN 112114844A CN 202010773957 A CN202010773957 A CN 202010773957A CN 112114844 A CN112114844 A CN 112114844A
- Authority
- CN
- China
- Prior art keywords
- electric energy
- energy meter
- application
- package
- platform
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 117
- 230000003068 static effect Effects 0.000 claims description 33
- 230000007246 mechanism Effects 0.000 claims description 11
- 238000000354 decomposition reaction Methods 0.000 claims description 5
- 238000001514 detection method Methods 0.000 claims description 4
- 239000010410 layer Substances 0.000 description 28
- 230000006870 function Effects 0.000 description 6
- 230000007717 exclusion Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 102100038591 Endothelial cell-selective adhesion molecule Human genes 0.000 description 1
- 101000882622 Homo sapiens Endothelial cell-selective adhesion molecule Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000012792 core layer Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种基于虚拟机的电能表专用系统,包括:应用层、应用框架层、系统层及平台层;其中,平台层用于根据各电能表控制器的特性,在本地操作系统内,实现电能表平台运行所需的驱动程序;系统层包括本地库和平台虚拟机,其用于实现电能表运行时环境、平台专用字节码的解析所需的运行时特性;应用框架层,包括平台应用程序接口,其用于提供电能表专用系统运行时的基本管理及各电能表应用运行时所需的本地方法接口;应用层,用于实现业务所需的多个电能表应用。该电能表专用系统,实现了电能表应用在不同硬件的电能表平台上的统一化升级,实现了电能表应用升级的灵活性管理,提高了电能表的管理效率。
Description
技术领域
本发明属于计算机技术及应用技术领域,具体涉及一种基于虚拟机的电能表专用系统。
背景技术
目前从功能上,各种电能表应用已经实现了统一化部署。但由于电能表硬件及控制器的多样化,导致电能表应用无法在所有平台上直接运行。这就导致在需要对电能表应用进行升级时,需要针对不同的电能表硬件及控制器分别修改、调整或测试统一化的电能表应用,工作量较大、耗费的时间周期长,难以满足工程项目要求的短平快开发模式。
发明内容
本发明提供一种基于虚拟机的电能表专用系统,以解决现有技术中电能表应用进行升级时,工作量大、时间周期长的问题。
本发明提供的基于虚拟机的电能表专用系统,包括:
应用层、应用框架层、系统层及平台层;
其中,平台层用于根据各电能表控制器的特性,在本地操作系统内,实现电能表平台运行所需的驱动程序;
系统层包括本地库和平台虚拟机,其用于实现电能表运行时环境、平台专用字节码的解析所需的运行时特性;
应用框架层,包括平台应用程序接口,其用于提供电能表专用系统运行时的基本管理及各电能表应用运行时所需的本地方法接口;
应用层,用于实现业务所需的多个电能表应用。
进一步地,所述多个电能表应用存储在电能表的本地,各电能表应用对应有一个应用标识,用于标识各应用;
所述多个电能表应用根据业务需要切换;在任一时刻,所述基于虚拟机的电能表专用系统中最多有一个应用在运行。
进一步地,所述平台虚拟机,包括:安装器、运行时数据区和执行器;
所述安装器,用于校验和链接外部输入的可执行文件;
所述运行时数据区包括平台虚拟机运行时所用到的内存数据信息的集合;
所述执行器用于控制指令的载入和解析操作。
进一步地,所述安装器包括链接器和链接后方法区;
所述链接器用于检查利用应用下载工具获取的可执行文件结构,并在检验合格后进行文件链接;若检验不合格,则拒绝文件链接;
所述链接后方法区用于存放文件链接后的数据信息,供所述执行器使用。
进一步地,所述运行时数据区包括:
程序计数器,其指向当前运行的虚拟机指令;
堆,其用于保存对象等运行时数据;
寄存器组,其用于存放方法的参数、局部变量等局部数据信息;
方法调用帧,其用于存放方法的上下级调用信息。
进一步地,所述执行器包括执行引擎和本地方法接口;
所述执行引擎用于控制指令的载入,以及解析和执行当前载入的控制指令;所述指令的来源是各电能表应用的源码文件;
各电能表应用通过所述本地方法接口访问本地库而调用由本地库实现的方法。
进一步地,在对各电能表应用升级时,获取通过下载工具获取升级文件,并将所述升级文件存储在本地;所述升级文件中包括新升级包及旧包;
其中,各电能表应用使用分包的方式开发,并根据业务需求确定符合自下而上的单向调用规则的包的分解结构;
从所述升级文件中提取新升级包,所述新升级包包括包本身及包的链接文件;所述包的链接文件中包括被引用包访问的信息类、方法和字段。
进一步地,在对各电能表应用升级时,分别获取新升级包中使用Token机制标志的包本体、类、方法和字段的token值;
其中,所述包本体的所有引用包分别分配有一个私有的token值;
所述包本体中,其所有引用包的token值为顺序递增。
进一步地,所述包本体中,所有对其他引用包可见的类或接口分别分配有一个公开的token值,其所有类和接口的token值编号为顺序递增;
所述包本体中,仅包内可见的类和接口不具有token值;
所述包本体中,其所有对外界可见的静态字段分别分配有一个公开的token值;
所述包本体中,仅包内可见的静态字段不具有token值;
所述包本体中,其所有对外界可见的静态方法分别被分配一个公开的token值;
所述包本体中,仅包内可见的静态方法不具有token值。
所述包本体中,其各实例字段的token值为该实例字段在实例对象中的位置索引。
进一步地,所述包本体中,外部可见的虚方法的token值从该类父类的最大外部可见虚方法token值加1开始连续排列;
所述包本体中,包内可见的虚方法的token值有两种情况:如果该类的父类和该类在同一个包内,则该类的包内可见虚方法token值从父类的包内可见虚方法token最大值加1开始连续排列;如果该类的父类和该类不在一个包内,则该类的包内可见虚方法token值从0开始连续排列;
所述包本体中,接口方法包括该接口自身定义的方法和该接口从父接口继承的方法;各接口方法的token值从0开始连续排列。
本发明提供的基于虚拟机的电能表专用系统,实现了电能表应用在不同硬件的电能表平台上的统一化升级,节省了电能表应用升级时的工作量,缩短了升级所需要的时间,实现了电能表应用升级的灵活性管理,提高了电能表的管理效率。
附图说明
通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:
图1为本发明实施例的基于虚拟机的电能表专用系统的架构示意图;
图2为本发明实施例的基于虚拟机的电能表专用系统的平台虚拟机的运行示意图。
具体实施方式
现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。
除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。
如图1所示,本发明实施例的基于虚拟机的电能表专用系统,包括:
应用层、应用框架层、系统层及平台层;
其中,平台层用于根据各电能表控制器的特性,在本地操作系统内,实现电能表平台运行所需的驱动程序;
系统层包括本地库和平台虚拟机,其用于实现电能表运行时环境、平台专用字节码的解析所需的运行时特性;
应用框架层,包括平台应用程序接口,其用于提供电能表专用系统运行时的基本管理及各电能表应用运行时所需的本地方法接口;
应用层,用于实现业务所需的多个电能表应用。
进一步地,所述多个电能表应用存储在电能表的本地,各电能表应用对应有一个应用标识,用于标识各应用;
所述多个电能表应用根据业务需要切换;在任一时刻,所述基于虚拟机的电能表专用系统中最多有一个应用在运行。
进一步地,所述平台虚拟机,包括:安装器、运行时数据区和执行器;
所述安装器,用于校验和链接外部输入的可执行文件;
所述运行时数据区包括平台虚拟机运行时所用到的内存数据信息的集合;
所述执行器用于控制指令的载入和解析操作。
进一步地,所述安装器包括链接器和链接后方法区;
所述链接器用于检查利用应用下载工具获取的可执行文件结构,并在检验合格后进行文件链接;若检验不合格,则拒绝文件链接;
所述链接后方法区用于存放文件链接后的数据信息,供所述执行器使用。
进一步地,所述运行时数据区包括:
程序计数器,其指向当前运行的虚拟机指令;
堆,其用于保存对象等运行时数据;
寄存器组,其用于存放方法的参数、局部变量等局部数据信息;
方法调用帧,其用于存放方法的上下级调用信息。
进一步地,所述执行器包括执行引擎和本地方法接口;
所述执行引擎用于控制指令的载入,以及解析和执行当前载入的控制指令;所述指令的来源是各电能表应用的源码文件;
各电能表应用通过所述本地方法接口访问本地库而调用由本地库实现的方法。
进一步地,在对各电能表应用升级时,获取通过下载工具获取升级文件,并将所述升级文件存储在本地;所述升级文件中包括新升级包及旧包;
其中,各电能表应用使用分包的方式开发,并根据业务需求确定符合自下而上的单向调用规则的包的分解结构;
从所述升级文件中提取新升级包,所述新升级包包括包本身及包的链接文件;所述包的链接文件中包括被引用包访问的信息类、方法和字段。
进一步地,在对各电能表应用升级时,分别获取新升级包中使用Token机制标志的包本体、类、方法和字段的token值;
其中,所述包本体的所有引用包分别分配有一个私有的token值;
所述包本体中,其所有引用包的token值为顺序递增。
进一步地,所述包本体中,所有对其他引用包可见的类或接口分别分配有一个公开的token值,其所有类和接口的token值编号为顺序递增;
所述包本体中,仅包内可见的类和接口不具有token值;
所述包本体中,其所有对外界可见的静态字段分别分配有一个公开的token值;
所述包本体中,仅包内可见的静态字段不具有token值;
所述包本体中,其所有对外界可见的静态方法分别被分配一个公开的token值;
所述包本体中,仅包内可见的静态方法不具有token值。
所述包本体中,其各实例字段的token值为该实例字段在实例对象中的位置索引。
进一步地,所述包本体中,外部可见的虚方法的token值从该类父类的最大外部可见虚方法token值加1开始连续排列;
所述包本体中,包内可见的虚方法的token值有两种情况:如果该类的父类和该类在同一个包内,则该类的包内可见虚方法token值从父类的包内可见虚方法token最大值加1开始连续排列;如果该类的父类和该类不在一个包内,则该类的包内可见虚方法token值从0开始连续排列;
所述包本体中,接口方法包括该接口自身定义的方法和该接口从父接口继承的方法;各接口方法的token值从0开始连续排列。
如图1所示,本发明实施例的基于虚拟机的电能表专用系统的架构,自底向上,可以划分为应用层、应用框架层、系统层及平台层。平台层(也即搭载有不同控制器的电能表平台)根据不同控制器的特性,基于本地操作系统,实现电能表平台运行所需的驱动程序;系统层为虚拟机的核心层,包括本地库、平台虚拟机,其实现电能表运行时环境、虚拟机专用字节码的解析及其他所需的运行时特性;应用框架层,包括平台应用程序接口(Application Programming Interface,简称API),提供平台运行时的基本管理及电能表应用运行所需的API;应用层,负责实现业务所需的多个电能表应用,如图1中的应用1、应用2及应用N等。
由于各平台API的统一,故所实现的电能表应用可运行在所有的电能表平台,不需要区分各平台所搭载的控制器之间的差异。通过虚拟机的支持,各平台可同时共存多个应用,根据业务需要可以灵活切换。
具体地,平台虚拟机运行在电能表平台上,通过电能表平台使用由电能表平台管理的硬件资源,如存储、显示、通信、ESAM等接口及设备
其中,系统层通过统一的接口及规范通过访问平台层来访问驱动程序。具体实施时,驱动程序与电能表的硬件(如,控制器和外设)相对应,平台层通过访问驱动程序来调用相应的电能表的硬件。电能表厂家生成与其控制器兼容的驱动程序并连同电能表平台一并提供。
具体地,平台层用于硬件接口访问的实现,包含对驱动程序的访问。驱动程序设置在本地操作系统之外。其中,专用字节码根据电能表硬件平台及电能表应用的特点,通过缩短字节码的长度,从而提高代码密度,减小应用程序大小;同时通过设计实现应用特殊指令,实现应用程序的高效运行。
具体地,电能表应用可以运行在多种电能表上,每一个电能表对应有一个电能表平台。这些电能表平台上运行的控制器、外设等硬件可能不同;但是,这些电能表平台上可以运行相同的电能表应用,实现相同的功能。具体地,通过API的抽象以及运行在电能表平台上的虚拟机,实现了“应用的硬件无关性”。
具体地,电能表的控制器运行在对应的电能表平台上;该基于虚拟机的电能表专用系统实现了针对统一化应用的本地库。该基于虚拟机的电能表专用系统不区分不同的电能表硬件,也不区分不同的电能表应用;针对硬件,对应有硬件访问接口(也即驱动程序);针对软件,对应有软件访问接口(也即平台API接口、本地方法接口及本地库)。
该基于虚拟机的电能表专用系统为提高运行效率,而设置了为电能表应用特别定制的API接口、指令集及运行时的框架。
具体实施时,电能表应用开发人员使用高级语言编写针对各电能表应用的源代码,并通过编译器生成可执行文件。随后,本发明实施例的基于虚拟机的电能表专用系统通过应用下载工具将该电能表应用的可执行文件下载到待升级的电能表。该电能表上设置有本发明实施例的基于虚拟机的电能表专用系统,其包括搭载有不同控制器的电能表平台。
由于虚拟机的存在及相对于各电能表的统一,统一化的各电能表应用在运行时使用该电能表专用系统的虚拟机的指令集,运行在虚拟机之上,不需要考虑在不同平台上的部署差异,各电能表应用在搭载有不同控制器的电能表平台上的部署是统一的,因此具有统一性及可进行应用统一升级的特点。
进一步地,该基于虚拟机的电能表专用系统可以存储多个应用的信息;并使用应用标识(application identifier,简称AID)来标识每个应用,具体地,针对每个应用,使用AID(application identifier)来标识(如图1中的应用1、应用2及应用N),从而实现了平台的多应用共存,并根据业务需要灵活切换。
具体地,多应用共存时,对电能表硬件资源的分配由来自监管部门后台的命令流决定;该基于虚拟机的电能表专用系统不主动干预。在任一时刻,基于虚拟机的电能表专用系统中最多有一个应用在运行,平台不涉及对多个应用进行调度;针对多个应用的管理,则视为该应用内的一个任务。
具体地,该基于虚拟机的电能表专用系统运行时,针对多个任务对硬件资源进行抢占的情形,使用互斥的Lock机制进行调度。各任务在访问硬件资源时,将先检查该硬件资源是否有互斥锁(即是否被其他任务占用),无互斥锁时则锁定该硬件资源并使用,并在使用完毕后释放互斥锁;有互斥锁时,则选择等待或进行其他操作。
如图2所示,平台虚拟机,包括:安装器、运行时数据区、执行器;安装器,用于校验和链接外部输入的可执行文件。
进一步地,安装器包含链接器和链接后方法区两部分。链接器用于检查利用应用下载工具获取的可执行文件的结构,并在检验合格后进行文件链接;若检验不合格,则拒绝链接,并向应用下载工具提示。链接后方法区用于存放文件链接后的数据信息,供后续运行使用。
链接后的数据信息在应用链接后生成,将文件信息写入相应的区域,供应用运行时查找调用。
这里的链接,主要指将下载文件的Packet信息,及所属应用信息写入虚拟机系统的应用注册表中。
应用下载工具在下载应用时,不会影响当前运行的电能表应用;若检验不合格,并拒绝链接时,会释放当前链接失败的文件所占用的系统资源(主要是Flash资源)。
具体实施时,应用下载工具运行在PC机上,通过串口或载波通信,将应用下载至电能表平台上。
运行时数据区则是虚拟机运行时所用到的内存数据信息的集合,主要包括四部分:
1)、程序计数器:其指向当前运行的虚拟机指令;
2)、堆:用于保存对象等运行时数据;
3)、寄存器组:用于存放方法的参数、局部变量等局部数据信息;
4)、方法调用帧:用于存放方法的上下级调用信息。
具体地,“内存数据信息的集合“只应用运行时所使用的数据信息,由应用决定数据内容。“链接后的数据信息”存在平台的应用信息,由虚拟机平台进行改写。
执行器是虚拟机的核心,主要用于控制指令的载入和解析操作。具体地,执行器包括执行引擎和本地方法接口。
其中,执行引擎用于控制指令的载入,以及解析和执行当前载入的指令。
这里的指令,指虚拟机平台的专用字节码,所有字节码都是由执行指令控制载入的。
具体地,指令的来源是与电能表平台无关的电能表应用的源码文件;指令的生成工具是与指令集配套的编译工具,由编译工具将电能表应用的高级语言源码转换为电能表平台的专用指令集。
具体地,电能表应用中的部分方法是由本地库实现的;通过预先定义的本地方法接口来访问本地库而调用这部分方法。
具体地,本地方法接口及本地库是由电能表平台实现的。将电能表应用处理起来会较复杂的一些功能在电能表平台实现,并通过平台API接口提供给电能表应用使用,从而提高应用在电能表平台上运行效率,并将这些由电能表应用调用的方法称为本地方法。
具体地,在电能表应用所调用的全部方法中,一部分方法由电能表应用实现,一部分方法由电能表平台以本地库的形式实现,并由电能表平台以本地方法接口的形式来提供给电能表应用使用。
为实现应用可远程升级,并降低应用升级时传输的数据量,虚拟机支持将应用分包;升级时,只需更新指定的新升级包。
具体地,电能表应用使用分包开发方式;在对应用升级时,无需升级整个应用(如,更新全部的包文件),只需更新与本次升级相应的包文件。
具体地,电能表应用在使用分包的方式开发时,根据业务需求预先确定包的分解结构;并且包的分解符合自下而上的单向调用的原则。
具体地,电能表应用在使用分包的方式开发时,使用Token机制分别标志各电能表应用中的包、类、方法、字段等信息,减少了电能表应用运行时所需的系统资源和/或存储资源。
具体地,针对该基于虚拟机的电能表专用系统开发的电能表应用升级包符合兼容性规则,并使用Token机制标识类、方法、字段等信息,从而实现了基于虚拟机技术的电能表应用统一化。
具体地,在开发电能表应用时,将应用分包;每个包在设计时,会考虑开放哪些信息给外部访问。这些可以被外部访问的信息包括:类(或接口)、方法和字段。这些可以被外部访问的信息会被输出到包的链接文件中,供用到这些信息的其它包在链接后使用。
具体地,链接器会处理包的链接文件。
电能表应用的每个包都具备一个版本号:m.n。其中,m标识大版本号(从1开始编号),n表示小版本号(从0开始编号)。初始时,一个包的版本可以是1.0。如果该包要升级,则该包的版本号首先需要更新,可以是大版本号更新,也可以是小版本号更新。具体地,小版本号更新,则意味着新的包与老的包是兼容的;如果新的包与老的包不兼容,则需要进行大版本号的更新。在实际使用中,包可能会做功能升级,升级后的新包与老版本的旧包可能是兼容的,也可能是不兼容的。
对于基于虚拟机的电能表专用系统而言,并不作应用升级兼容性判断;通过对应用新升级包的版本号进行判断。具体地,各包的版本号有大版本号和小版本号,同一个应用的所有包的大版本号保持一致。在小版本号升级时,新升级包的小版本号大于旧包的小版本号;大版本号升级时,小版本号必须为0,否则判定新升级包无效,拒绝升级。
应用升级兼容性检查由电能表平台的编译工具结合版本号进行检查,保证版本号升级的正确性,包括兼容时为小版本号升级,不兼容时为大版本号升级。
实际开发时,破坏兼容性的“升级”,可以包括以下几种情况:
1)“升级”导致原有版本中外部可见的类、接口、方法或字段的token值变化了。
2)“升级”导致原有版本中外部可见的静态常量字段的值变化了。
3)“升级”导致在原有版本基础上,新增了非override且非final的外部可见的虚方法。
4)“升级”导致在原有版本基础上,新增了非override的外部可见的接口方法。
相对应地,其它方式的“升级”,可看作具有兼容性的“升级”,可以包括以下几种情况:
1)与原有版本在公开信息上保持一致:
a)仅修改外部可见的虚方法、静态方法的实现;
b)增加、删除或修改包私有的类(或接口)的信息,包括:类(或接口)
本身、方法、字段等。
2)在原有版本的公开信息基础上做增量升级,并保持原有各公开信息的token值不变:
a)增加新的外部可见的类(或接口)。
b)增加新的外部可见的实例字段。
c)增加新的外部可见的静态方法、静态字段、静态常量字段。
考虑到嵌入式平台的资源限制及电能表业务需求,电能表平台上运行的虚拟机采用了Token机制来对包、类、方法和字段进行编码,这种编码机制应用在电能表平台的可执行文件和链接文件中。
Token类型信息如表1所示:
Token类型 | 取值范围 | 类型 | 作用域 |
包 | 0-127 | 私有的 | 包 |
类 | 0-254 | 公开的 | 包 |
静态域 | 0-255 | 公开的 | 类 |
静态方法 | 0-255 | 公开的 | 类 |
实例字段 | 0-255 | 公开的和私有的 | 类 |
虚方法 | 0-127 | 公开的或私有的 | 继承类 |
接口方法 | 0-127 | 公开的 | 类 |
Token规则如下所示:
1)、包的token规则
一个包中,所有引用包都被分配一个私有的token值。同一个包中所有引用包的token编号都是顺序递增的,从0开始;并且引用包的token值范围是0到127。
2)、类和接口的token规则
一个包中,所有对外界可见的类或接口都被分配一个公开的token值。类和接口的token值范围是0到254;同一个包中所有类和接口的token值编号都是顺序递增的,从0开始。
仅包内可见的类和接口,不分配token值。
3)、静态字段(也即静态域)的token规则
一个包中,所有对外界可见的静态字段都被分配一个公开的token值。静态字段的token值范围是0到255;同一个包中所有静态字段的token值编号都是顺序递增的,从0开始。
仅包内可见的静态字段,不分配token值。
4)、静态方法的token规则
一个包中,所有对外界可见的静态方法都被分配一个公开的token值。静态方法token值范围是0到255,同一个包中所有静态方法的token值编号都是顺序递增的,从0开始。
仅包内可见的静态方法,不分配token值。
对于应用中创建对象的构造方法,在虚拟机实现时,按静态方法进行实现,其token分配,按静态方法规则进行分配。
5)、实例字段的token规则
实例字段的token值为该字段在实例对象中的位置索引,实例字段的命名空间在类内。所有的实例字段都具有一个实例字段token,其token值范围是0到255,从0开始连续排列。
注意:这里所说的实例字段仅包括类本身声明的实例字段,不包括从父类继承的。
具体地,int类型实例字段的位置索引占据两个token值。例如,某int类型实例字段的token值为a,其后续的实例字段的token值为a+2。
实例字段token排列的规则如下:
外部可见的实例字段的token值要小于包内可见或私有的实例字段的token值。
对外部可见的实例字段来说,引用类型的实例字段的token值必须大于简单类型的实例字段的token值。
对包内可见或是私有的实例字段来说,引用类型的实例字段的token值必须小于简单类型的token值。
5)、虚方法的token规则
虚方法是指需要动态关联的实例方法,虚方法分为外部可见和包内可见的两类。
两类虚方法的token具有不同的命名空间,外部可见虚方法的token最高位设置为0,包内可见虚方法的token最高位设置为1;剔除最高位,token值的取值范围为0到127。
虚方法token排列的规则如下:
外部可见的虚方法的token值从该类父类的最大外部可见虚方法token值加1开始连续排列。如果覆盖了父类的虚方法,则该类中该虚方法的token值等于父类中该虚方法的token值。
包内可见的虚方法的token值有两种情况:如果该类的父类和该类在同一个包内,则该类的包内可见虚方法token值从父类的包内可见虚方法token最大值加1开始连续排列。如果覆盖了父类的虚方法,本类中该虚方法的token值等于父类中该虚方法的token值。如果该类的父类和该类不在一个包内,则该类的包内可见虚方法token值从0开始连续排列。
6)、接口方法的token规则
接口方法包括该接口自身定义的方法和该接口从父接口继承的方法。
接口方法的token必须从0开始连续排列,接口方法的token取值范围为0到127。
子接口和父接口各自的方法token之间没有任何关系,即同一个接口方法在父接口和子接口中可能具有不同的token值。
各电能表应用启动时,将调用平台提供的统一的应用主入口方法。该应用主入口方法中,各电能表应用需继承Application类,并实现main公开的静态方法,其中,参数param,用于指明“应用的启动状态”。如,应用的第一次启动和非第一次启动,在初始化流程上可能是不一样的,其具体实现由应用自主定义。
在平台中,线程的运行和调度机制,由平台运行时环境来实现;同时,平台还向平台应用提供线程相关的API类库。
对于电能表应用,需要先按照功能划分出多个相对独立的“任务”;平台定义的线程机制,为这些“任务”提供独立运行甚至并发运行的环境。
在API层面,平台为“任务”定义了基础类:Task类。应用可根据业务需求,编写各种“任务”继承类,并在应用的主入口中创建并运行这些“任务”。
具体地,应用需为每个任务(Task)分配一个全应用唯一的Task ID,用于指代该任务。可通过getTaskId方法来获取该任务的Task ID。
Task类是个抽象类,任务需继承该类,并实现run抽象方法,该run抽象方法是任务的执行体部分。平台会在任务创建时,分配一个该任务独占的“消息队列”对象(MsgQueue),各任务可在需要时获取该“消息队列”对象,并进行操作,如注册消息,获取消息等。最后,应用在创建完所需的所有任务后,需要依次执行各Task对象的start方法,来通知电能表平台来运行和调度这些任务。
当应用主入口方法退出后,平台运行时环境会管理并调度运行这些任务。
在各任务执行时,应用使用电能表平台提供的消息接口,获取相关的消息,进行相关业务逻辑代码的执行。
以下以每秒获取一次电能数据为例,说明应用设计及执行流程。
平台应用的main方法所在的类,需要继承平台API中的Application类,如下图所示。
平台启动后,将进入main方法,在该方法中,需要创建相关的Task(实例中创建任务类为Energy),并使用Energy类的start方法进行启动Task。
而在Energy类中,该类需要继承系统API中的Task,并实现Task类中的抽象方法“run()”。平台使用消息机制,所以,在Task启动后,应该首先获取消息实例。
而应用若对某一硬件设备操作,首先也要创建该硬件设备的实例,如针对电能计量单元创建EMU实例;
应用需要每秒获取依次电能计量的数据,因此,该Task需要注册“秒消息”,并初始化消息。
在进行完初始化消息后,系统就会等待所注册的消息。若获取已注册的消息,则进行相关处理(由应用设计者实现);否则系统进行任务调度(由平台进行控制)。其中,“SendThenGet”为获取EMU数据的方法,输入输出参数由驱动代码的实现决定,平台只负责将输入传输传递给驱动函数,并将驱动函数的返回数据传输至API的输出参数,并不关注传输的数据内容。
以上已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。
通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个//该[装置、组件等]”都被开放地解释为装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。
Claims (10)
1.一种基于虚拟机的电能表专用系统,其特征在于,包括:
应用层、应用框架层、系统层及平台层;
其中,平台层用于根据各电能表控制器的特性,在本地操作系统内,实现电能表平台运行所需的驱动程序;
系统层包括本地库和平台虚拟机,其用于实现电能表运行时环境、平台专用字节码的解析所需的运行时特性;
应用框架层,包括平台应用程序接口,其用于提供电能表专用系统运行时的基本管理及各电能表应用运行时所需的本地方法接口;
应用层,用于实现业务所需的多个电能表应用。
2.根据权利要求1所述的系统,其特征在于,
所述多个电能表应用存储在电能表的本地,各电能表应用对应有一个应用标识,用于标识各应用;
所述多个电能表应用根据业务需要切换;在任一时刻,所述基于虚拟机的电能表专用系统中最多有一个应用在运行。
3.根据权利要求2所述的系统,其特征在于,
所述平台虚拟机,包括:安装器、运行时数据区和执行器;
所述安装器,用于校验和链接外部输入的可执行文件;
所述运行时数据区包括平台虚拟机运行时所用到的内存数据信息的集合;
所述执行器用于控制指令的载入和解析操作。
4.根据权利要求3所述的系统,其特征在于,
所述安装器包括链接器和链接后方法区;
所述链接器用于检查利用应用下载工具获取的可执行文件结构,并在检验合格后进行文件链接;若检验不合格,则拒绝文件链接;
所述链接后方法区用于存放文件链接后的数据信息,供所述执行器使用。
5.根据权利要求3所述的系统,其特征在于,
所述运行时数据区包括:
程序计数器,其指向当前运行的虚拟机指令;
堆,其用于保存对象等运行时数据;
寄存器组,其用于存放方法的参数、局部变量等局部数据信息;
方法调用帧,其用于存放方法的上下级调用信息。
6.根据权利要求3所述的系统,其特征在于,
所述执行器包括执行引擎和本地方法接口;
所述执行引擎用于控制指令的载入,以及解析和执行当前载入的控制指令;所述指令的来源是各电能表应用的源码文件;
各电能表应用通过所述本地方法接口访问本地库而调用由本地库实现的方法。
7.根据权利要求3所述的系统,其特征在于,
在对各电能表应用升级时,获取通过下载工具获取升级文件,并将所述升级文件存储在本地;所述升级文件中包括新升级包及旧包;
其中,各电能表应用使用分包的方式开发,并根据业务需求确定符合自下而上的单向调用规则的包的分解结构;
从所述升级文件中提取新升级包,所述新升级包包括包本身及包的链接文件;所述包的链接文件中包括被引用包访问的信息类、方法和字段。
8.根据权利要求7所述的系统,其特征在于,
在对各电能表应用升级时,分别获取新升级包中使用Token机制标志的包本体、类、方法和字段的token值;
其中,所述包本体的所有引用包分别分配有一个私有的token值;
所述包本体中,其所有引用包的token值为顺序递增。
9.根据权利要求8所述的系统,其特征在于,
所述包本体中,所有对其他引用包可见的类或接口分别分配有一个公开的token值,其所有类和接口的token值编号为顺序递增;
所述包本体中,仅包内可见的类和接口不具有token值;
所述包本体中,其所有对外界可见的静态字段分别分配有一个公开的token值;
所述包本体中,仅包内可见的静态字段不具有token值;
所述包本体中,其所有对外界可见的静态方法分别被分配一个公开的token值;
所述包本体中,仅包内可见的静态方法不具有token值。
所述包本体中,其各实例字段的token值为该实例字段在实例对象中的位置索引。
10.根据权利要求9所述的系统,其特征在于,
所述包本体中,外部可见的虚方法的token值从该类父类的最大外部可见虚方法token值加1开始连续排列;
所述包本体中,包内可见的虚方法的token值有两种情况:如果该类的父类和该类在同一个包内,则该类的包内可见虚方法token值从父类的包内可见虚方法token最大值加1开始连续排列;如果该类的父类和该类不在一个包内,则该类的包内可见虚方法token值从0开始连续排列;
所述包本体中,接口方法包括该接口自身定义的方法和该接口从父接口继承的方法;各接口方法的token值从0开始连续排列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010773957.5A CN112114844A (zh) | 2020-08-04 | 2020-08-04 | 基于虚拟机的电能表专用系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010773957.5A CN112114844A (zh) | 2020-08-04 | 2020-08-04 | 基于虚拟机的电能表专用系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112114844A true CN112114844A (zh) | 2020-12-22 |
Family
ID=73798863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010773957.5A Pending CN112114844A (zh) | 2020-08-04 | 2020-08-04 | 基于虚拟机的电能表专用系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112114844A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096598A (zh) * | 2010-12-30 | 2011-06-15 | 广州市聚晖电子科技有限公司 | 一种虚拟机系统及其实现方法 |
CN106464736A (zh) * | 2014-10-30 | 2017-02-22 | 环球互连及数据中心公司 | 用于基于云的服务交换的实时配置和管理的互连平台 |
CN110907882A (zh) * | 2019-10-10 | 2020-03-24 | 中国电力科学研究院有限公司 | 一种面向电能表的虚拟化的测试方法及系统 |
CN111221621A (zh) * | 2019-10-11 | 2020-06-02 | 中国电力科学研究院有限公司 | 一种电能表虚拟机的专用指令处理方法及系统 |
-
2020
- 2020-08-04 CN CN202010773957.5A patent/CN112114844A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096598A (zh) * | 2010-12-30 | 2011-06-15 | 广州市聚晖电子科技有限公司 | 一种虚拟机系统及其实现方法 |
CN106464736A (zh) * | 2014-10-30 | 2017-02-22 | 环球互连及数据中心公司 | 用于基于云的服务交换的实时配置和管理的互连平台 |
CN110907882A (zh) * | 2019-10-10 | 2020-03-24 | 中国电力科学研究院有限公司 | 一种面向电能表的虚拟化的测试方法及系统 |
CN111221621A (zh) * | 2019-10-11 | 2020-06-02 | 中国电力科学研究院有限公司 | 一种电能表虚拟机的专用指令处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7219329B2 (en) | Systems and methods providing lightweight runtime code generation | |
US9395963B1 (en) | System and method for accessing meta-data in a dynamically typed array-based language | |
US6651080B1 (en) | Techniques for implementing pluggable virtual machines | |
US9639329B2 (en) | System and method for automatic invocation of constructor code for superclasses | |
EP0546794A2 (en) | Object oriented data processing system | |
US8635595B2 (en) | Method and system for managing non-compliant objects | |
US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
US20140109045A1 (en) | Flexible and run-time-modifiable inclusion of functionality in computer code | |
JP2004503866A (ja) | モジュラーコンピュータシステムおよび関連方法 | |
CN107589940B (zh) | 一种基于Lua脚本语言的软件开发辅助系统 | |
JP4084956B2 (ja) | オブジェクト集合方法およびシステム | |
US6704802B1 (en) | Method and system for communicating between independent software modules | |
US6854113B1 (en) | Mixed-mode execution for object-oriented programming languages | |
KR102276696B1 (ko) | 집적 회로 무선장치 | |
CN115113916B (zh) | 一种Linux内核解耦方法、装置及可读存储介质 | |
CN112114844A (zh) | 基于虚拟机的电能表专用系统 | |
CN105393216B (zh) | 运行时内存调节 | |
US11520597B2 (en) | Operating system architecture for microkernel generations support | |
US20020073133A1 (en) | Register allocation method and software development method for various execution environments and LSI for executing developed software | |
EP4204960A1 (en) | Thread-local return structure for asynchronous state machine | |
Johnsen et al. | A dynamic binding strategy for multiple inheritance and asynchronously communicating objects | |
Shafiei et al. | Modeling class loaders in java pathfinder version 7 | |
Sallai et al. | A concurrency abstraction for reliable sensor network applications | |
Luder et al. | Control programming using Java | |
Ciocarlie et al. | Considerations regarding the implementation of the ESPL programming language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |