一种双电源自动转换开关的树型逻辑软件设计方法与流程

文档序号:17772116发布日期:2019-05-28 19:33阅读:377来源:国知局
一种双电源自动转换开关的树型逻辑软件设计方法与流程

本发明属于双电源开关的工业控制软件技术领域,尤其涉及一种双电源自动转换开关的树型逻辑软件设计方法。



背景技术:

双电源自动转换开关用于将负载电路从一个电源自动换接至另一个电源。根据应用场景的不同需要包含不同的转换逻辑,转换逻辑之间相互包含,错综复杂。如果需要增加新逻辑代码编写的工作量很大,往往会影响已有逻辑的安全性,增加了测试的工作量。

因此,基于这些问题,提供一种逻辑结构清晰,代码简单高效,降低后期修改风险,减少测试工作量的双电源自动转换开关的树型逻辑软件设计方法,具有重要的现实意义。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种逻辑结构清晰,代码简单高效,降低后期修改风险,减少测试工作量的双电源自动转换开关的树型逻辑软件设计方法。

本发明解决其技术问题是采取以下技术方案实现的:

一种双电源自动转换开关的树型逻辑软件设计方法,所述设计方法包括如下步骤:

s1、设计容器结构

对所述容器结构的设计包括容器链表结构的设计、容器添加方法的设计、容器删除方法的设计及遍历算法的设计;

s101、所述容器链表中包含使用模板实现的链表结构,通过指定不同的模板参数可以接收不同类型的容器对象,各个容器对象持有前后容器对象的指针,从而形成了链表结构;

s102、设计容器添加方法

把要添加进链表的指针地址赋给链表中最后一个容器对象,从而可以动态的把容器指针添加到容器链表中;

s103、设计容器删除方法

先找到需要删除的容器指针的位置,然后让该需要删除容器指针的前一个容器指针持有下一个容器指针的地址,从而可以动态的把需要删除的容器指针从容器链表中删除;

s104、设计遍历算法

所述遍历算法用于遍历容器包含的所有子容器;

所述遍历算法的设计包括scan、judge、action三个方法的设计;其中:scan方法根据容器类型和count方法返回的容器链表长度从链表中逐一取出容器指针并调用judge方法;judge方法判断每个容器对象中的预设条件,预设条件包括电压值、电流值、开关位置信息、转换时间、消防信号、干节点信号、温度信号,如果条件满足设定值则返回true,如果不满足则返回false;action方法是每个容器对象要执行的动作,动作包括开关转换、报警输出、发电机启动、工作方式切换,如果judge方法返回值为true就执行action方法中的动作,如果返回值为false就跳过action方法;

s2、根据双电源工作方式自投自复、自投不自复、互为备用、手动,分别为这四种工作方式创建四个类,这四个类都继承自容器结构类,这四种容器类中包含了容器结构中的所有方法,从而将四种工作方式抽象成四种容器类,然后用定义类对象的方式为每种容器类创建对象,并调用容器添加方法把每个对象的指针地址添加到顶层容器链表中最后一个容器对象地址中;每种工作方式下包括a到n的多种工作状态,把多种工作状态抽象成容器类,然后为每种容器类创建对象,并添加到相应的4种工作方式下,以此类推可以创造出更多的状态对象并添加到相应的容器下,最终形成了一颗自上而下的树型结构;

s3、设计树型结构的调度算法

s301、顶层容器通过scan方法逐个取出自己容器链表的每一个子容器,查看是否包含下一级子容器,如果包含下一级子容器,就调用子容器的scan方法进入下一级子容器;如果这个子容器不包含下一级子容器,则继续查看容器链表中的其它子容器;如此反复直到进入最底层子容器;

s302、进入每一个容器后,调用这个容器中的条件判断judge方法,如果外部条件满足条件判断就执行容器中的动作action方法,action方法执行完毕后自动返回父容器;当一个容器不包含任何子容器时,直接返回父容器;按照以上的流程,算法自动遍历完整个树型结构中的所有状态,即完成一轮逻辑动作。

进一步的,所述步骤s101中容器链表中包含reset、push、pop、count四个方法;reset用于恢复链表初始状态;push用于把新的容器指针压入容器链表;count用于返回容器链表中存储的容器指针数量;pop用于弹出容器链表顶端的容器指针。

进一步的,所述步骤s101中容器链表中的模板参数包括容器类型和链表长度。

本发明的优点和积极效果是:

通过本发明的树型逻辑软件设计方法设计的双电源自动转换开关的双电源代码,逻辑条理清晰、代码量减少、易于修改,并减少了测试工作。

附图说明

以下将结合附图和实施例来对本发明的技术方案作进一步的详细描述,但是应当知道,这些附图仅是为解释目的而设计的,因此不作为本发明范围的限定。此外,除非特别指出,这些附图仅意在概念性地说明此处描述的结构构造,而不必要依比例进行绘制。

图1为本发明实施例提供的树型逻辑软件设计方法的容器结构的示意图;

图2为本发明实施例提供的树型逻辑软件设计方法中双电源转换开关工作方式和工作状态容器对象的树型结构图;

图3为本发明实施例提供的树型逻辑软件设计方法中树型结构的调度算法的流程示意图;

具体实施方式

首先,需要说明的是,以下将以示例方式来具体说明本发明的具体结构、特点和优点等,然而所有的描述仅是用来进行说明的,而不应将其理解为对本发明形成任何限制。此外,在本文所提及各实施例中予以描述或隐含的任意单个技术特征,仍然可在这些技术特征(或其等同物)之间继续进行任意组合或删减,从而获得可能未在本文中直接提及的本发明的更多其他实施例。需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

下面就结合图1至图3来具体说明本发明。

实施例1

图1为本发明实施例提供的树型逻辑软件设计方法的容器结构的示意图;图2为本发明实施例提供的树型逻辑软件设计方法中双电源转换开关工作方式和工作状态容器对象的树型结构图;图3为本发明实施例提供的树型逻辑软件设计方法中树型结构的调度算法的流程示意图;如图1~3所示,本实施例提供的一种双电源自动转换开关的树型逻辑软件设计方法,所述设计方法包括如下步骤:

s1、设计容器结构

对所述容器结构的设计包括容器链表结构的设计、容器添加方法的设计、容器删除方法的设计及遍历算法的设计;

s101、所述容器链表中包含使用模板实现的链表结构,通过指定不同的模板参数可以接收不同类型的容器对象,各个容器对象持有前后容器对象的指针,从而形成了链表结构;

s102、设计容器添加方法

把要添加进链表的指针地址赋给链表中最后一个容器对象,从而可以动态的把容器指针添加到容器链表中;

s103、设计容器删除方法

先找到需要删除的容器指针的位置,然后让该需要删除容器指针的前一个容器指针持有下一个容器指针的地址,从而可以动态的把需要删除的容器指针从容器链表中删除;

s104、设计遍历算法

所述遍历算法用于遍历容器包含的所有子容器;

所述遍历算法的设计包括scan、judge、action三个方法的设计;其中:scan方法根据容器类型和count方法返回的容器链表长度从链表中逐一取出容器指针并调用judge方法;judge方法判断每个容器对象中的预设条件,预设条件包括电压值、电流值、开关位置信息、转换时间、消防信号、干节点信号、温度信号,如果条件满足设定值则返回true,如果不满足则返回false;action方法是每个容器对象要执行的动作,动作包括开关转换、报警输出、发电机启动、工作方式切换,如果judge方法返回值为true就执行action方法中的动作,如果返回值为false就跳过action方法;

s2、根据双电源工作方式自投自复、自投不自复、互为备用、手动,分别为这四种工作方式创建四个类,这四个类都继承自容器结构类,这四种容器类中包含了容器结构中的所有方法,从而将四种工作方式抽象成四种容器类,然后用定义类对象的方式为每种容器类创建对象,并调用容器添加方法把每个对象的指针地址添加到顶层容器链表中最后一个容器对象地址中;每种工作方式下包括a到n的多种工作状态,把多种工作状态抽象成容器类,然后为每种容器类创建对象,并添加到相应的4种工作方式下,以此类推可以创造出更多的状态对象并添加到相应的容器下,最终形成了一颗自上而下的树型结构;

s3、设计树型结构的调度算法

s301、顶层容器通过scan方法逐个取出自己容器链表的每一个子容器,查看是否包含下一级子容器,如果包含下一级子容器,就调用子容器的scan方法进入下一级子容器;如果这个子容器不包含下一级子容器,则继续查看容器链表中的其它子容器;如此反复直到进入最底层子容器;

s302、进入每一个容器后,调用这个容器中的条件判断judge方法,如果外部条件满足条件判断就执行容器中的动作action方法,action方法执行完毕后自动返回父容器;当一个容器不包含任何子容器时,直接返回父容器;按照以上的流程,算法自动遍历完整个树型结构中的所有状态,即完成一轮逻辑动作。

需要指出的是,所述步骤s101中容器链表中包含reset、push、pop、count四个方法;其中:reset用于恢复链表初始状态,reset方法内部首先将链表成员的位置指针指向零位置,然后使用编译器提供的memset方法将链表空间清零,这样就达到了恢复链表初始状态的目的;push用于把新的容器指针压入容器链表,push方法执行时首先检查链表成员的位置指针是否指向了链表的最高位置,如果没有则将当前要加入链表的成员拷贝到链表中,如果已指向最高位置,表示链表已满不能加入新成员,返回错误状态通知加入失败;count用于返回容器链表中存储的容器指针数量,当调用count方法时会返回链表成员指针的位置及容器指针数量;pop用于弹出容器链表顶端的容器指针,pop方法执行时首先检查链表成员的位置指针是否指向了链表的零位置,如果指向零位置则不执行任何操作,如果不是指向零位置则把位置指针指向上一个位置,并返回当前位置的指针。

此外,所述步骤s101中容器链表中的模板参数包括容器类型和链表长度。

以上实施例对本发明进行了详细说明,但所述内容仅为本发明的较佳实施例,不能被认为用于限定本发明的实施范围。凡依本发明申请范围所作的均等变化与改进等,均应仍归属于本发明的专利涵盖范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1