CN111767038B - 一种脚本化的智能电表事件判断解析方法 - Google Patents

一种脚本化的智能电表事件判断解析方法 Download PDF

Info

Publication number
CN111767038B
CN111767038B CN202010598309.0A CN202010598309A CN111767038B CN 111767038 B CN111767038 B CN 111767038B CN 202010598309 A CN202010598309 A CN 202010598309A CN 111767038 B CN111767038 B CN 111767038B
Authority
CN
China
Prior art keywords
node
matrix
logic
value
rows
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.)
Active
Application number
CN202010598309.0A
Other languages
English (en)
Other versions
CN111767038A (zh
Inventor
刘笑菲
张奔
刘国栋
敖鑫
张宏莉
李卓伟
于洪
杨加龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yantai Dongfang Wisdom Electric Co Ltd
Original Assignee
Yantai Dongfang Wisdom Electric Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yantai Dongfang Wisdom Electric Co Ltd filed Critical Yantai Dongfang Wisdom Electric Co Ltd
Priority to CN202010598309.0A priority Critical patent/CN111767038B/zh
Publication of CN111767038A publication Critical patent/CN111767038A/zh
Priority to PCT/CN2021/079250 priority patent/WO2022001154A1/zh
Application granted granted Critical
Publication of CN111767038B publication Critical patent/CN111767038B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/313Logic programming, e.g. PROLOG programming language
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/20Administration of product repair or maintenance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
    • G06Q50/06Energy or water supply

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Economics (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Resources & Organizations (AREA)
  • Marketing (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Strategic Management (AREA)
  • Tourism & Hospitality (AREA)
  • General Business, Economics & Management (AREA)
  • Health & Medical Sciences (AREA)
  • Operations Research (AREA)
  • Water Supply & Treatment (AREA)
  • General Health & Medical Sciences (AREA)
  • Primary Health Care (AREA)
  • Public Health (AREA)
  • Quality & Reliability (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

本发明公开了一种脚本化的智能电表事件判断解析方法,步骤为:构建逻辑脚本,逻辑脚本包含用于进行事件判断的逻辑表达式;逻辑表达式包括通过逻辑运算符连接在一起的逻辑单元;构建与各逻辑表达式一一对应的分支树,分支树的判断结果与逻辑表达式一致;依据分支树的跳转结构生成判断代码,将判断代码写入到智能电表的单片机中,用于实现逻辑表达式的动态实时判断。本方法针对智能电表事件判断的逻辑表达式进行优化,通过统计信息熵的方式进行动态路径寻优,构建对应的分支树,然后基于分支树得到优化后的判断规则并写入到单片机中,最终在单片机中完成逻辑表达式的解析判断,从而提高了逻辑表达式的运行速度。

Description

一种脚本化的智能电表事件判断解析方法
技术领域
本发明涉及一种智能电表事件的判断方法,尤其是一种基于脚本的智能电表事件判断解析方法。
背景技术
事件记录功能是智能电表的一个重要功能模块,它可以根据用户预先设定好的判断条件,监测电网的实时工况。在满足预先设定好的判断条件时(比如,电压值超过一个预先设定的门限T1),进行一系列的动作,比如事件记录,发出报警信号等等。
随着用电设备的越来越复杂,用户对事件记录功能也提出了更复杂的要求,同时也出现了更多的组合条件。例如,针对同一个事件A,判断事件发生的逻辑为:电压值小于门限T1,并且电流值大于门限T2;判断事件结束的逻辑为:电压值大于门限T3,或者电流值小于门限T4。
针对普通的条件表达式,目前已公布的处理方式有:通过构造逻辑表达式的形式进行逻辑判断(参考公告号为CN108388653A的中国发明专利《变电站10kV出线开关分闸类型的识别方法》),根据最终的逻辑表达式输出的真假进行动作。
但是,现有技术中并未提及针对脚本化逻辑表达式的解析方式。如果按照常规的从左向右解析的方式进行,效率非常低。原因在于,单片机判断事件时,部分判断条件需要和外设交换数据,这种外部交换数据的过程通常比较耗时,按照经验值,和EEPROM存储器交换数据耗时通常在毫秒级,和单总线器件(比如温度传感器DS18B20)交换数据通常在百毫秒级,和其他单片机系统交换数据甚至可以达到秒级。因此顺序解析的方法会耗费很长的时间。另一方面,由于逻辑表达式是根据用户需求自定义的,编译器无法参与逻辑表达式的速度优化,在一些极端情况下,这种处理速度甚至是无法忍受的,根本无法满足需求。
由于受到上述制约,在智能电表系统中,一般不直接使用逻辑表达式。比较通用的做法是:对每一种事件编写一个判断逻辑函数,当要求发生变更时,修改相应函数的代码逻辑。但是,不同的用户对事件部分的功能有不同的要求,每当用户的需求发生变更的时候,都需要更改代码、修改判断逻辑,这带来了很高的维护成本和测试成本。
发明内容
本发明提出了一种脚本化的智能电表事件判断解析方法,其目的是:提高事件判断时逻辑表达式的解析运行速度。
本发明技术方案如下:
一种脚本化的智能电表事件判断解析方法,步骤为:构建逻辑脚本,每条逻辑脚本对应一个智能电表事件;所述逻辑脚本包含用于进行事件判断的逻辑表达式;
所述逻辑表达式包括通过逻辑运算符连接在一起的逻辑单元;
每个所述逻辑单元包含:左变量地址,右变量地址,运算符,左变量地址类型以及右变量地址类型;
构建与各逻辑表达式一一对应的分支树,所述分支树的判断结果与所述逻辑表达式一致;依据分支树的跳转结构生成判断代码,将判断代码写入到智能电表的单片机中,用于实现逻辑表达式的动态实时判断;
判断时,先获取各逻辑单元的输出值:对于各逻辑单元,基于地址映射的方式,根据左变量地址和左变量地址类型获取左变量的变量值,根据右变量地址和右变量地址类型获取右变量的变量值,再根据运算符完成左变量和右变量之间的运算,将布尔值类型的运算结果作为该逻辑单元的输出值;再进一步获得整个逻辑表达式的计算结果。
进一步的,依据变量的类型即对应的变量地址类型构建地址映射:对于函数类型,事先建立通用的函数模板;在取变量的值时,如果变量地址类型为函数类型,则依据函数模板将对应的变量地址转换为函数,并将该函数的执行结果作为映射值。
进一步的,依据变量的类型即对应的变量地址类型构建地址映射:对于存储器单字节、双字节和四字节数据类型,在取变量的值时,将对应的变量地址作为存储器的物理地址,并从该物理地址开始按字节长度读取数据,将该读取出的数据作为映射值。
进一步的,依据变量的类型即对应的变量地址类型构建地址映射:对于RAM单字节、双字节和四字节数据类型,在取变量的值时,将对应的变量地址作为RAM地址,并从该RAM地址开始按字节长度读取数据,将该读取出的数据作为映射值。
进一步的,依据变量的类型即对应的变量地址类型构建地址映射:对于立即数类型——该类型的数据是存储在单片机flash内部的常量,直接将变量地址中的数据并作为映射值。
进一步的,依据变量的类型即对应的变量地址类型构建地址映射:对于GPIO类型,如果是数据区和代码区编址无重叠的单片机平台,则将变量地址指向的单片机地址总线上的值作为寄存器地址,并取对应的寄存器值作为映射值;如果是数据区和代码区编址有重叠的单片机,则将变量地址指向的单片机寄存器地址总线上的值作为寄存器地址,并取对应的寄存器值作为映射值。
进一步的,每条逻辑脚本包括一条判断事件是否发生的第一逻辑表达式和一条判断事件是否结束的第二逻辑表达式,还包括一个对应该事件的回调函数。
进一步的,在需要进行事件判断时,根据当前事件状态,查询事件对应的脚本的逻辑表达式,若当前事件状态是“发生”,则查询判断第二逻辑表达式,否则查询判断第一逻辑表达式;判断结束后,根据判断结果调用回调函数。
进一步的,构建分支树的方法为:统计逻辑表达式中所出现的逻辑单元,求取各逻辑单元所对应的信息熵,然后依据信息熵对逻辑单元排序,依据排序构建所述分支树。
进一步的,构建分支树的具体方法为:
步骤1、统计对应的逻辑表达式中所出现的逻辑单元,重复出现的只计一次;设有逻辑单元的数量为n;
步骤2、每个逻辑单元的结果取值为0、1两种情况,0表示逻辑假,1表示逻辑真;将所有可能存在的逻辑单元取值进行排列组合,共有2n种情况;将排列组合构成2n×n维的矩阵X,其中每一行的元素分别对应一种取值组合情况,第i列的元素均对应第i个逻辑单元;
步骤3、将矩阵X的每一行分别代入逻辑表达式进行逻辑运算,将所有行的运算结果按矩阵X的行序组成2n×1维的向量Y;
步骤4、将X,Y按照列方向进行组合,使X、Y组合成2n×(n+1)维的矩阵Z;
步骤5、分别计算矩阵Z的前n列的信息熵:
步骤5-1、对于第i列,按该列元素的不同取值,将矩阵Z分成
Figure BDA0002558191450000051
和/>
Figure BDA0002558191450000052
两个矩阵:/>
Figure BDA0002558191450000053
表示矩阵Z第i列取值为1的行所组成的矩阵,设该矩阵的行数为m;/>
Figure BDA0002558191450000054
表示矩阵Z第i列取值为0的行所组成的矩阵,设该矩阵的行数为n;
步骤5-2、根据矩阵
Figure BDA0002558191450000055
和/>
Figure BDA0002558191450000056
最后一列的不同取值,继续将/>
Figure BDA0002558191450000057
划分为/>
Figure BDA0002558191450000058
和/>
Figure BDA0002558191450000059
将/>
Figure BDA00025581914500000510
划分为/>
Figure BDA00025581914500000511
和/>
Figure BDA00025581914500000512
共四个矩阵:/>
Figure BDA00025581914500000513
表示矩阵/>
Figure BDA00025581914500000514
中最后一列取值为1的行所组成的矩阵,设该矩阵的行数为m1;/>
Figure BDA00025581914500000515
表示矩阵/>
Figure BDA00025581914500000516
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为m2;/>
Figure BDA00025581914500000517
表示矩阵/>
Figure BDA00025581914500000518
最后一列取值为1的行所组成的矩阵,设该矩阵的行数为n1;/>
Figure BDA00025581914500000519
表示矩阵/>
Figure BDA00025581914500000520
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为n2
步骤5-3、根据信息熵公式计算矩阵Z前n列各自的信息熵,以Entropyi表示矩阵Z第i列的信息熵,有:
Figure BDA00025581914500000521
步骤5-6、将计算得到的信息熵按绝对值由小到大进行排序。
进一步的,依据排序构建所述分支树的步骤6,其具体步骤为:
步骤6-1、按优先级顺序由上至下构建n个与逻辑单元一一对应的分层,每个分层用于放置与该层的逻辑单元对应的Node节点,每个Node节点对应一个节点矩阵H;
在最上方的第一层中建立一个Node节点,将矩阵Z作为与该Node节点所对应的节点矩阵H;
由上至下遍历各个分层,对于每个分层,分别执行步骤6-2至步骤步骤6-4,完成分支树的构建;
步骤6-2、对于当前遍历到的分层,遍历该分层中的每个Node节点;
对于每个Node节点,取其节点矩阵H,设该层所对应的逻辑单元与矩阵H中的第i列对应,则根据矩阵H第i列中各行元素的取值,将H分为矩阵
Figure BDA0002558191450000061
和/>
Figure BDA0002558191450000062
表示矩阵H第i列取值为1的行所组成的矩阵,设该矩阵的行数为a;/>
Figure BDA0002558191450000063
表示矩阵H第i列取值为0的行所组成的矩阵,设该矩阵的行数为b;
然后根据矩阵
Figure BDA0002558191450000064
和/>
Figure BDA0002558191450000065
最后一列的不同取值,继续将/>
Figure BDA0002558191450000066
划分为/>
Figure BDA0002558191450000067
和/>
Figure BDA0002558191450000068
将/>
Figure BDA0002558191450000069
划分为/>
Figure BDA00025581914500000610
和/>
Figure BDA00025581914500000611
共四个矩阵:/>
Figure BDA00025581914500000612
表示矩阵/>
Figure BDA00025581914500000613
中最后一列取值为1的行所组成的矩阵,设该矩阵的行数为a1;/>
Figure BDA00025581914500000614
表示矩阵/>
Figure BDA00025581914500000615
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为a2
Figure BDA00025581914500000616
表示矩阵/>
Figure BDA00025581914500000617
最后一列取值为1的行所组成的矩阵,设该矩阵的行数为b1;/>
Figure BDA00025581914500000618
表示矩阵
Figure BDA00025581914500000619
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为b2
步骤6-3、若a1=0,新建一个结果值为0的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该叶子节点;
若a2=0,新建一个结果值为1的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该叶子节点;
若a1和a2均不为0,则在下一层新建一个Node节点,并建立当前Node节点与该下层Node节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该下层Node节点,并将当前Node节点的Hi 1作为该下层Node节点的节点矩阵H,留作该下层节点被遍历到时使用;
步骤6-4、若b1=0,新建一个结果值为0的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该叶子节点;
若b2=0,新建一个结果值为1的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该叶子节点;
若b1和b2均不为0,则在下一层新建一个Node节点,并建立当前Node节点与该下层Node节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该下层Node节点,并将当前Node节点的
Figure BDA0002558191450000071
作为该下层Node节点的节点矩阵H,留作该下层节点被遍历到时使用。
进一步的,生成跳转分支树后,按分支树从上至下的方向遍历所有Node节点,根据路径关系和叶子节点对应的结果值生成判断代码,将判断代码写入智能电表的单片机,用于完成动态实时判断。
进一步的,遍历分支树的所有Node节点生成判断代码时,对于当前Node节点,优先将从当前Node节点开始到一个最近的叶子节点的路径作为下一步的判断分支。
进一步的,所述步骤1至6在性能优于智能电表单片机的计算机平台上进行。
相对于现有技术,本发明具有以下有益效果:本方法针对智能电表事件判断的逻辑表达式进行优化,通过统计信息熵的方式进行动态路径寻优,构建对应的分支树,然后基于分支树得到优化后的判断规则并写入到单片机中,最终在单片机中完成逻辑表达式的解析判断,从而提高了逻辑表达式的运行速度。
附图说明
图1为生成事件脚本的流程图。
图2为跳转分支树的示意图。
图3为时间脚本判断流程图。
图4为生成跳转分支树的流程图。
图5为跳转分支树判断顺序的示意图。
具体实施方式
下面结合附图详细说明本发明的技术方案:
本实施例先以一个失流事件判断为例,该事件的具体控制要求如下:
判断事件发生的逻辑为:电压值小于门限T1,并且电流值大于门限T2;判断事件结束的逻辑为:电压值大于门限T3,或者电流值小于门限T2。
第一部分,如图1所示,生成事件脚本。
(A)定义逻辑单元。逻辑单元的组成元素包括:
(左变量地址,右变量地址,运算符,左变量地址类型,右变量地址类型)
为简化表示,以LVar表示左变量地址,以RVar表示右变量地址,以Op表示运算符(关系运算符和逻辑运算符),以LType表示左变量地址类型,以RType表示右变量地址类型。
其中,Op的取值如下:(≥,≤,<,>,=,≠,&,|),≥表示大于等于判断,≤表示小于等于判断,<表示小于判断,>表示大于判断,=表示等于判断,≠表示不等于判断,&表示逻辑与操作,|表示逻辑或操作。
LType和RType的取值范围相同,取值如下:(函数类型,存储器单字节数据类型,存储器双字节数据类型,存储器四字节数据类型,RAM单字节数据类型,RAM双字节数据类型,RAM四字节数据类型,立即数类型,GPIO类型)。
(B)为不同的数据类型建立地址映射:
(1)对于函数类型,建立通用函数模板,一个典型模板示例的伪代码如下:
U32 function(void);
其中,U32表示返回数据类型为无符号32位整数,function为函数名,void表示该函数不接受传入参数。
函数类型的地址映射表示为:
Figure BDA0002558191450000101
该表达式的含义为:将LVar或者RVar转化成通用函数模板定义的函数function,传入参数为空,并将转换后的函数function执行结果U32类型的数据作为映射值。
(2)对于存储器单字节数据类型,该类型的地址映射表示为:
Figure BDA0002558191450000102
该表达式的含义是:将LVar或者RVar值作为存储器的一个物理地址,MemChip-1Byte(·)表示从指定的物理地址开始读取一个字节的数据,将读取的数据扩展成U32类型的数据作为映射值。
(3)对于存储器双字节数据类型和存储器四字节数据类型,映射方式与存储器单字节数据类型类似,不再赘述,其地址映射分别为:
Figure BDA0002558191450000103
(4)对于RAM单字节数据类型,该类型的地址映射表示为:
Figure BDA0002558191450000104
其中,(Byte_address)(·)表示将一个数值作为一个单字节的RAM地址,*(·)表示将括号内的地址指向的数据取出,最终地址映射将取出的值扩展为U32类型作为映射值。
(5)对于RAM双字节数据类型和RAM四字节数据类型,映射方式与存储器单字节数据类型类似,不再赘述,其地址映射分别为:
Figure BDA0002558191450000111
/>
(6)对于立即数类型,该类型是存储在单片机flash内部的常量,其地址映射为:
Figure BDA0002558191450000112
该表达式的含义为:直接将LVar或者RVar扩展成U32类型的数据并作为映射值。
(7)对于GPIO类型,其地址映射为:
Figure BDA0002558191450000113
对于不同的单片机类型,GPIO地址映射不同,对于数据区和代码区编址无重叠的单片机,以STM32单片机为代表,使用
Figure BDA0002558191450000114
bus_address(·)表示直接将单片机地址总线上LVar或者RVar作为寄存器地址,并取寄存器值,将其扩展为U32类型的数据作为映射值;对于数据区和代码区编址有重叠的单片机,以51单片机为代表,需显示的指定地址类型,使用/>
Figure BDA0002558191450000115
reg_bus_address(·)表示直接将单片机寄存器地址总线上LVar或者RVar作为寄存器地址,并取寄存器值,将其扩展为U32类型的数据作为映射值。
(C)将每个判断条件根据地址映射关系转换为逻辑单元,在示例中,判断条件包括:电压值小于门限T1;电流值大于门限T2;电压值大于门限T3;电流值小于门限T2共四个。
对应的逻辑单元分别为:
A=(电压值RAM地址,门限T1存储器地址,<,RAM四字节类型,存储器四字节类型);
B=(电流值RAM地址,门限T2存储器地址,>,RAM四字节类型,存储器四字节类型);
C=(电压值RAM地址,门限T3存储器地址,>,RAM四字节类型,存储器四字节类型);
D=(电流值RAM地址,门限T2存储器地址,<,RAM四字节类型,存储器四字节类型)。
(D)为简化表示,以字母A-Z表示逻辑单元的序号,根据判断逻辑将逻辑单元组合,则事件发生的组合逻辑为A&B(第一逻辑表达式),事件结束的组合逻辑为C|D(第二逻辑表达式),将事件发生的逻辑表达式与事件结束的逻辑表达式合并成一条逻辑脚本,以“$”分隔,即A&B$C|D。
(E)为每个事件增加回调函数,以CallBack表示,用于事件发生或者结束时进行相应的关联动作。
(F)将每个事件对应的逻辑单元,逻辑脚本,回调函数组合成一条完整的事件脚本:
逻辑单元:A B C D;
逻辑脚本:A&B$C|D
回调函数:CallBack。
第二部分,实现对上述脚本的逻辑表达式的解析运算。
(G)以逻辑单元A为例:A=(电压值RAM地址,门限T1存储器地址,<,RAM四字节类型,存储器四字节类型),逻辑单元的解析按照如下步骤进行:
(G-1)查找左变量地址类型,在本例中,左变量地址类型=RAM四字节类型,根据地址映射规则,将左变量地址转换为实际数据。在本例中,左变量地址的映射规则为:
Figure BDA0002558191450000131
即将左变量地址作为4字节RAM地址,并取出该地址对应的数据,转换为U32类型数据;
(G-2)用与(G-1)同样的方法将右变量地址转换为U32类型数据;
(G-3)根据运算符类型将左右变量进行比较,在本例中,实际是将电压值与门限T1进行比较运算,若电压值>T1,则该逻辑单元输出1,否则输出0;
(H)如图3,在需要进行事件判断时,根据当前事件状态,查询事件对应的脚本的逻辑表达式,若当前事件状态是“发生”,则查询判断事件是否结束的逻辑表达式,本例中为:C|D;否则查询判断事件是否发生的逻辑表达式,本例中为:A&B。
(I)对步骤(H)中查询到的逻辑表达式进行解析,为保证最快判断速度,即以最少的判断次数使逻辑表达式输出最终的结果,逻辑表达式解析规则按照如下步骤进行:
前述示例中的逻辑表达式较为简单,主要用于描述脚本的结构,不易清晰地展现出运行速度的差异。因此在后面的步骤中,以逻辑表达式M|N&(O|P)&(Q|R)|(Q&N)|S作为示例。其中,单个逻辑单元的逻辑结果依然是通过步骤(G)获得。
(I-1)如图4,统计逻辑表达式中所有逻辑单元的个数,不包含重复出现在逻辑表达式中的逻辑单元,在逻辑表达式中的逻辑单元个数共7个:M,N,O,P,Q,R,S;
(I-2)每个逻辑单元的结果取值为0、1两种情况,0表示逻辑假,1表示逻辑真。将所有逻辑单元的取值组合,则共有2n种情况,其中n为逻辑单元的个数。将所有的取值组合进行排列,组成2n×n维的矩阵X,其中每一行的元素分别代表各个逻辑单元的取值;
(I-3)将矩阵X的每一行代入逻辑表达式进行逻辑运算,将所有行的运算结果组成2n×1维的向量Y;
(I-4)将X,Y按照列方向进行组合,使X、Y组合成2n×(n+1)维的矩阵Z;
(I-5)分别计算矩阵Z的前n列的信息熵:
(I-5-1)根据Z第i列的不同取值,i=1,2,3,…,n,分成
Figure BDA0002558191450000141
和/>
Figure BDA0002558191450000142
两个矩阵:/>
Figure BDA0002558191450000143
表示矩阵Z第i列取值为1的行所组成的矩阵,设该矩阵的行数为m;/>
Figure BDA0002558191450000144
表示矩阵Z第i列取值为0的行所组成的矩阵,设该矩阵的行数为n;显然m+n=2n
(I-5-2)根据矩阵
Figure BDA0002558191450000145
和/>
Figure BDA0002558191450000146
最后一列的不同取值(该列是向量Y的一部分),继续将
Figure BDA0002558191450000147
划分为/>
Figure BDA0002558191450000148
和/>
Figure BDA0002558191450000149
将/>
Figure BDA00025581914500001410
划分为/>
Figure BDA00025581914500001411
和/>
Figure BDA00025581914500001412
共四个矩阵:/>
Figure BDA00025581914500001413
表示矩阵/>
Figure BDA00025581914500001414
中最后一列取值为1的行所组成的矩阵,设该矩阵的行数为m1;/>
Figure BDA0002558191450000151
表示矩阵/>
Figure BDA0002558191450000152
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为m2;/>
Figure BDA0002558191450000153
表示矩阵/>
Figure BDA0002558191450000154
最后一列取值为1的行所组成的矩阵,设该矩阵的行数为n1;/>
Figure BDA0002558191450000155
表示矩阵/>
Figure BDA0002558191450000156
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为n2;显然:m1+m2=m,n1+n2=n;
(I-5-3)根据信息熵公式计算矩阵Z前n列各自的信息熵:
Figure BDA0002558191450000157
以Entropyi表示矩阵Z第i列的信息熵,则有:
Figure BDA0002558191450000158
/>
(I-6)将计算得到的信息熵按绝对值由小到大进行排列,信息熵绝对值小的说明,如果先判断该列对应的逻辑单元,数据的有序性提高的最多。按照信息熵的计算方法,本例中各逻辑单元的信息熵的绝对值如下:
EntropyM=0.456,EntropyN=0.603,EntropyO=0.643,
EntropyP=0.643,EntropyQ=0.635,EntropyR=0.641,
EntropyS=0.456
按照值由小到大排列:
EntropyM=EntropyS>EntropyN>EntropyQ>EntropyR>EntropyO=EntropyP
(I-7)根据(I-6)中计算得到的信息熵顺序确定各逻辑单元的预先判断顺序,即优先判断信息熵绝对值小的逻辑单元。在本例中,判断的优先级顺序为:M、S、N、Q、R、O、P;
(I-8)根据判断的优先级构建跳转分支树,实现步骤如下:
(I-8-1)按优先级顺序由上至下构建n个与逻辑单元一一对应的分层,每个分层用于放置与该层的逻辑单元对应的Node节点,每个Node节点对应一个节点矩阵H;
在最上方的第一层中建立一个Node节点,将矩阵Z作为与该Node节点所对应的节点矩阵H;
由上至下遍历各个分层,对于每个分层,分别执行步骤(I-8-2)至步骤(I-8-4);
(I-8-2)对于当前遍历到的分层,遍历该分层中的每个Node节点;
对于每个Node节点,取其节点矩阵H,设该层所对应的逻辑单元与矩阵H中的第i列对应,则根据矩阵H第i列中各行元素的取值,将H分为矩阵
Figure BDA0002558191450000161
和/>
Figure BDA0002558191450000162
表示矩阵H第i列取值为1的行所组成的矩阵,设该矩阵的行数为a;/>
Figure BDA0002558191450000163
表示矩阵H第i列取值为0的行所组成的矩阵,设该矩阵的行数为b;
然后根据矩阵
Figure BDA0002558191450000164
和/>
Figure BDA0002558191450000165
最后一列的不同取值(该列是向量Y的一部分),继续将/>
Figure BDA0002558191450000166
划分为/>
Figure BDA0002558191450000167
和/>
Figure BDA0002558191450000168
将/>
Figure BDA0002558191450000169
划分为/>
Figure BDA00025581914500001610
和/>
Figure BDA00025581914500001611
共四个矩阵:/>
Figure BDA00025581914500001612
表示矩阵/>
Figure BDA00025581914500001613
中最后一列取值为1的行所组成的矩阵,设该矩阵的行数为a1;/>
Figure BDA00025581914500001614
表示矩阵/>
Figure BDA00025581914500001615
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为a2;/>
Figure BDA00025581914500001616
表示矩阵/>
Figure BDA00025581914500001617
最后一列取值为1的行所组成的矩阵,设该矩阵的行数为b1;/>
Figure BDA00025581914500001618
表示矩阵/>
Figure BDA00025581914500001619
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为b2
(I-8-3)若a1=0,说明在前面路径中其它节点取值的基础上,本逻辑单元结果为1时整个逻辑表达式的结果必为0,因此新建一个结果值为0的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该叶子节点;
若a2=0,新建一个结果值为1的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该叶子节点;
若a1和a2均不为0,则在下一层新建一个Node节点,并建立当前Node节点与该下层Node节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该下层Node节点,并将当前Node节点的
Figure BDA0002558191450000171
作为该下层Node节点的节点矩阵H,留作该下层节点被遍历到时使用;/>
(I-8-4)若b1=0,说明在前面路径中其它节点取值的基础上,本逻辑单元结果为0时整个逻辑表达式的结果必为0,因此新建一个结果值为0的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该叶子节点;
若b2=0,新建一个结果值为1的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该叶子节点;
若b1和b2均不为0,则在下一层新建一个Node节点,并建立当前Node节点与该下层Node节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该下层Node节点,并将当前Node节点的
Figure BDA0002558191450000181
作为该下层Node节点的节点矩阵H,留作该下层节点被遍历到时使用;
最后一层所有Node节点所指向的都是叶子节点。
按照步骤(I-8)得到的跳转分支树,最坏的情况是一棵平衡二叉树,此时所有的逻辑单元信息熵都相同,叶子节点的个数为2n-1,到达每一个叶子节点都需要经过n次判断,这种情况下用本方法无法得到优化的效果。但实际应用中,所有逻辑单元信息熵都相同的情况非常少,因此本方法可以明显的提高实际逻辑表达式的判断速度。
本步骤的实例脚本最终得到的跳转分支树如图2所示,Node表示一个Node节点,M0表示逻辑单元M取值为0,M1表示逻辑单元M取值为1,其余逻辑单元以此类推;叶子节点0表示最终逻辑表达式的输出值为0,叶子节点1表示最终逻辑表达式的输出值为1;
(I-9)生成跳转分支树后,按分支树从上至下的方向遍历所有Node节点,根据路径关系和叶子节点对应的结果值生成判断代码,将判断代码写入智能电表的单片机,用于完成动态实时判断。
如图5,逻辑表达式的判断过程如下:
(I-9-1)从第一个Node节点开始,对应最上方的Node节点,向下遍历整棵分支树,按路径关系进行判断,优先将从当前Node节点开始到一个最近的叶子节点的路径作为下一步的判断分支。在本例中,最上方的Node节点到最近的叶子节点的分支是
Figure BDA0002558191450000182
因此第一步的判断的伪代码为:
If(M is 1)return 1
(I-9-2)如果逻辑单元的实际值不满足(I-9-1)中的判断条件,则继续向下遍历整颗树,找到下一个Node节点,依然优先将从当前Node节点开始到一个最近的叶子节点的路径作为下一步的判断分支。在本例中,第二步判断的伪代码为:
Else If(S is 1)return 1
(I-9-3)以此类推,直至遍历完所有的Node节点。
作为本方法的一个优选实例,由于逻辑表达式确定后,跳转分支树的过程不会再发生更改。因此,步骤(I-1)到(I-8)的生成跳转分支树的过程可以在电脑等运算能力较强的设备上进行,而跳转分支树的动态判断过程则在智能电表的单片机平台上进行。
逻辑表达式的最终逻辑结果计算完成后,根据结果调用回调函数CallBack进行相应的业务动作,比如报警、记录等。

Claims (4)

1.一种脚本化的智能电表事件判断解析方法,其特征在于:构建逻辑脚本,每条逻辑脚本对应一个智能电表事件;所述逻辑脚本包含用于进行事件判断的逻辑表达式;
所述逻辑表达式包括通过逻辑运算符连接在一起的逻辑单元;
构建与各逻辑表达式一一对应的分支树,所述分支树的判断结果与所述逻辑表达式一致;依据分支树的跳转结构生成判断代码,将判断代码写入到智能电表的单片机中,用于实现逻辑表达式的动态实时判断;
构建分支树的方法为:统计逻辑表达式中所出现的逻辑单元,求取各逻辑单元所对应的信息熵,然后依据信息熵对逻辑单元排序,依据排序构建所述分支树;
构建分支树的具体方法为:
步骤1、统计对应的逻辑表达式中所出现的逻辑单元,重复出现的只计一次;设有逻辑单元的数量为n;
步骤2、每个逻辑单元的结果取值为0、1两种情况,0表示逻辑假,1表示逻辑真;将所有可能存在的逻辑单元取值进行排列组合,共有2n种情况;将排列组合构成2n×n维的矩阵X,其中每一行的元素分别对应一种取值组合情况,第i列的元素均对应第i个逻辑单元;
步骤3、将矩阵X的每一行分别代入逻辑表达式进行逻辑运算,将所有行的运算结果按矩阵X的行序组成2n×1维的向量Y;
步骤4、将X,Y按照列方向进行组合,使X、Y组合成2n×(n+1)维的矩阵Z;
步骤5、分别计算矩阵Z的前n列的信息熵:
步骤5-1、对于第i列,按该列元素的不同取值,将矩阵Z分成Zi 1
Figure FDA0004184681810000021
两个矩阵:/>
Figure FDA0004184681810000022
表示矩阵Z第i列取值为1的行所组成的矩阵,设该矩阵的行数为m;/>
Figure FDA0004184681810000023
表示矩阵Z第i列取值为0的行所组成的矩阵,设该矩阵的行数为n;
步骤5-2、根据矩阵
Figure FDA0004184681810000024
和/>
Figure FDA0004184681810000025
最后一列的不同取值,继续将/>
Figure FDA0004184681810000026
划分为/>
Figure FDA0004184681810000027
和/>
Figure FDA0004184681810000028
将/>
Figure FDA0004184681810000029
划分为/>
Figure FDA00041846818100000210
和/>
Figure FDA00041846818100000211
共四个矩阵:/>
Figure FDA00041846818100000212
表示矩阵/>
Figure FDA00041846818100000213
中最后一列取值为1的行所组成的矩阵,设该矩阵的行数为m1;/>
Figure FDA00041846818100000214
表示矩阵/>
Figure FDA00041846818100000215
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为m2
Figure FDA00041846818100000216
表示矩阵/>
Figure FDA00041846818100000217
最后一列取值为1的行所组成的矩阵,设该矩阵的行数为n1;/>
Figure FDA00041846818100000218
表示矩阵
Figure FDA00041846818100000219
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为n2
步骤5-3、根据信息熵公式计算矩阵Z前n列各自的信息熵,以Entropyi表示矩阵Z第i列的信息熵,有:
Figure FDA00041846818100000220
步骤5-6、将计算得到的信息熵按绝对值由小到大进行排序;
依据排序构建所述分支树的步骤6,其具体步骤为:
步骤6-1、按优先级顺序由上至下构建n个与逻辑单元一一对应的分层,每个分层用于放置与该层的逻辑单元对应的Node节点,每个Node节点对应一个节点矩阵H;
在最上方的第一层中建立一个Node节点,将矩阵Z作为与该Node节点所对应的节点矩阵H;
由上至下遍历各个分层,对于每个分层,分别执行步骤6-2至步骤6-4,完成分支树的构建;
步骤6-2、对于当前遍历到的分层,遍历该分层中的每个Node节点;对于每个Node节点,取其节点矩阵H,设该层所对应的逻辑单元与矩阵H中的第i列对应,则根据矩阵H第i列中各行元素的取值,将H分为矩阵
Figure FDA0004184681810000031
和/>
Figure FDA0004184681810000032
Figure FDA0004184681810000033
表示矩阵H第i列取值为1的行所组成的矩阵,设该矩阵的行数为a;/>
Figure FDA0004184681810000034
表示矩阵H第i列取值为0的行所组成的矩阵,设该矩阵的行数为b;
然后根据矩阵
Figure FDA0004184681810000035
和/>
Figure FDA0004184681810000036
最后一列的不同取值,继续将/>
Figure FDA0004184681810000037
划分为/>
Figure FDA0004184681810000038
和/>
Figure FDA0004184681810000039
将/>
Figure FDA00041846818100000310
划分为
Figure FDA00041846818100000311
和/>
Figure FDA00041846818100000312
共四个矩阵:/>
Figure FDA00041846818100000313
表示矩阵/>
Figure FDA00041846818100000314
中最后一列取值为1的行所组成的矩阵,设该矩阵的行数为a1;/>
Figure FDA00041846818100000315
表示矩阵/>
Figure FDA00041846818100000316
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为a2
Figure FDA00041846818100000317
表示矩阵/>
Figure FDA00041846818100000318
最后一列取值为1的行所组成的矩阵,设该矩阵的行数为b1;/>
Figure FDA00041846818100000319
表示矩阵
Figure FDA00041846818100000320
最后一列取值为0的行所组成的矩阵,设该矩阵的行数为b2
步骤6-3、若a1=0,新建一个结果值为0的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该叶子节点;
若a2=0,新建一个结果值为1的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该叶子节点;
若a1和a2均不为0,则在下一层新建一个Node节点作为下层Node节点,并建立当前Node节点与该下层Node节点之间的路径关系:当前Node节点对应的逻辑单元值为1时,该Node节点指向该下层Node节点,并将当前Node节点的
Figure FDA0004184681810000041
作为该下层Node节点的节点矩阵H,留作该下层Node节点被遍历到时使用;
步骤6-4、若b1=0,新建一个结果值为0的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该叶子节点;
若b2=0,新建一个结果值为1的叶子节点,并建立当前Node节点与该叶子节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该叶子节点;
若b1和b2均不为0,则在下一层新建一个Node节点作为下层Node节点,并建立当前Node节点与该下层Node节点之间的路径关系:当前Node节点对应的逻辑单元值为0时,该Node节点指向该下层Node节点,并将当前Node节点的
Figure FDA0004184681810000042
作为该下层Node节点的节点矩阵H,留作该下层Node节点被遍历到时使用。
2.如权利要求1所述的脚本化的智能电表事件判断解析方法,其特征在于:生成跳转分支树后,按分支树从上至下的方向遍历所有Node节点,根据路径关系和叶子节点对应的结果值生成判断代码,将判断代码写入智能电表的单片机,用于完成动态实时判断。
3.如权利要求2所述的脚本化的智能电表事件判断解析方法,其特征在于:遍历分支树的所有Node节点生成判断代码时,对于当前Node节点,优先将从当前Node节点开始到一个最近的叶子节点的路径作为下一步的判断分支。
4.如权利要求1至3任一所述的脚本化的智能电表事件判断解析方法,其特征在于:所述步骤1至6在性能优于智能电表单片机的计算机平台上进行。
CN202010598309.0A 2020-06-28 2020-06-28 一种脚本化的智能电表事件判断解析方法 Active CN111767038B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010598309.0A CN111767038B (zh) 2020-06-28 2020-06-28 一种脚本化的智能电表事件判断解析方法
PCT/CN2021/079250 WO2022001154A1 (zh) 2020-06-28 2021-03-05 一种脚本化的智能电表事件判断解析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010598309.0A CN111767038B (zh) 2020-06-28 2020-06-28 一种脚本化的智能电表事件判断解析方法

Publications (2)

Publication Number Publication Date
CN111767038A CN111767038A (zh) 2020-10-13
CN111767038B true CN111767038B (zh) 2023-05-26

Family

ID=72722266

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010598309.0A Active CN111767038B (zh) 2020-06-28 2020-06-28 一种脚本化的智能电表事件判断解析方法

Country Status (2)

Country Link
CN (1) CN111767038B (zh)
WO (1) WO2022001154A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111767038B (zh) * 2020-06-28 2023-05-26 烟台东方威思顿电气有限公司 一种脚本化的智能电表事件判断解析方法
CN114610288B (zh) * 2022-05-12 2022-09-16 之江实验室 基于阵列式解析基元结构的后端编译器实现方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488524A (zh) * 2012-06-13 2014-01-01 北大方正集团有限公司 命令管理装置及其命令管理方法
WO2019080091A1 (zh) * 2017-10-27 2019-05-02 华为技术有限公司 代码处理方法和设备
CN110908640A (zh) * 2019-11-26 2020-03-24 京东数字科技控股有限公司 实现业务功能的方法和脚本引擎

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111767038B (zh) * 2020-06-28 2023-05-26 烟台东方威思顿电气有限公司 一种脚本化的智能电表事件判断解析方法
CN111767037B (zh) * 2020-06-28 2023-09-12 烟台东方威思顿电气有限公司 一种脚本化的智能电表事件判断方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488524A (zh) * 2012-06-13 2014-01-01 北大方正集团有限公司 命令管理装置及其命令管理方法
WO2019080091A1 (zh) * 2017-10-27 2019-05-02 华为技术有限公司 代码处理方法和设备
CN110908640A (zh) * 2019-11-26 2020-03-24 京东数字科技控股有限公司 实现业务功能的方法和脚本引擎

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
张秀深 等.一种用于脚本解释器的表达式计算算法探究.西师大学报(社会科学版) 研究生论文专刊.2012,第39卷194-196页. *
邹昌伟 等.面向嵌入式的协程与脚本化机制.计算机应用.2014,第34卷(第5期),1408-1412页. *

Also Published As

Publication number Publication date
WO2022001154A1 (zh) 2022-01-06
CN111767038A (zh) 2020-10-13

Similar Documents

Publication Publication Date Title
CN111767037B (zh) 一种脚本化的智能电表事件判断方法
CN111767038B (zh) 一种脚本化的智能电表事件判断解析方法
CN108874444A (zh) 机器学习处理器及使用处理器执行向量外积指令的方法
CN101309216B (zh) 一种ip包分类方法和设备
CN112882974B (zh) 一种json数据转换方法、装置、计算机设备和存储介质
CN109767000A (zh) 基于Winograd算法的神经网络卷积方法及装置
CN107957976A (zh) 一种计算方法及相关产品
CN111612125A (zh) 一种面向在线学习的新型htm时间池方法及其系统
CN108121688A (zh) 一种计算方法及相关产品
CN109344258A (zh) 一种智能化自适应敏感数据识别系统及方法
Zhao et al. A balanced feature fusion SSD for object detection
CN113313247B (zh) 基于数据流架构的稀疏神经网络的运算方法
CN108108190A (zh) 一种计算方法及相关产品
CN112132278A (zh) 模型压缩方法、装置、计算机设备及存储介质
CN111432003B (zh) 应用于云计算的数据推送方法、装置、电子设备及系统
CN115426265A (zh) 一种多模态网络下交换资源分配优化方法及装置、介质
CN107957977A (zh) 一种计算方法及相关产品
CN112148343B (zh) 规则发布方法、装置及终端设备
CN117493622A (zh) 基于现场可编程阵列器件的字符串的查询方法和装置
CN116306854A (zh) 基于光电存算一体器件的transformer神经网络加速装置及方法
CN114064125B (zh) 指令解析方法、装置及电子设备
CN116049180A (zh) 面向Paas平台的租户数据处理方法及装置
CN112668131B (zh) 配线表生成方法、装置、设备及计算机可读存储介质
WO2018082245A1 (zh) 栅格数据聚合方法和装置、栅格数据解耦方法和装置及系统
CN109754087A (zh) 量子程序转化方法、装置及电子设备

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
GR01 Patent grant
GR01 Patent grant