一种航天器状态的判断方法及装置与流程

文档序号:12468622阅读:497来源:国知局
本发明涉及通信
技术领域
:,尤其涉及一种航天器状态的判断方法及装置。
背景技术
::近年来,随着航天器技术飞速发展,航天器的种类以及功能不断提升。对航天器控制的准确度要求也越来越高。目前,对航天器的控制通过地面控制单元向航天器发送遥控指令,从而使航天器进行动作。在地面控制单元可以设置预测函数,根据遥控指令和预测函数,对航天器接收到遥控指令后的姿态进行预测,以实现下一阶段的遥控指令发送。但是,根据预测函数对航天器接收到遥控指令后的姿态进行预测,预测后的航天器姿态与航天器的实际姿态会有误差,会导致对航天器控制的准确度不高。一些重要事件,包括对飞行阶段重要时刻的状态,例如,点火、关机、舱器分离等状态出现判断误差,会严重影响航天器的安全性。公开于该
背景技术
:部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。技术实现要素:有鉴于此,本发明要解决的技术问题是,如何提供一种航天器状态的判断方法及装置,能够精确的对遥测数据进行判断。为解决以上技术问题,本发明在第一方面提供一种航天器状态的判断方法,包括:从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式;当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据;输出所述当前飞控状态,其中,遥测值为从遥测数据帧中获取的航天器参数采集值。在一种可能的实现方式中,所述遥测值包括第一遥测值和第二遥测值,所述第一遥测值与第一判别式对应,所述第二遥测值与第二判别式对应。在一种可能的实现方式中,所述当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,包括:当所述第一遥测值满足所述第一判别式且所述第二遥测值满足所述第二第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。在一种可能的实现方式中,所述从遥测数据中获取遥测值包括:从遥测数据中获取连续的多个所述遥测值;所述当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,包括:当所述多个遥测值均满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。在一种可能的实现方式中,所述从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式包括:从遥测数据中获取连续的多个第一遥测值和多个第二遥测值,获取与所述第一遥测值对应的第一判别式,获取与所述第二遥测值对应的第二判别式;所述当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,包括:当所述多个第一遥测值均满足与所述第一遥测值对应的第一判别式且当所述多个第二遥测值均满足与所述第二遥测值对应的第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。本发明在第二方面提供一种航天器状态的判断装置,包括:获取模块,用于从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式;判断模块,用于在所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据;输出模块,用于输出所述当前飞控状态,其中,遥测值为从遥测数据帧中获取的航天器参数采集值。在一种可能的实现方式中,所述获取模块中获取的遥测值包括第一遥测值和第二遥测值,所述第一遥测值与第一判别式对应,所述第二遥测值与第二判别式对应。在一种可能的实现方式中,所述判断模块还用于,当所述第一遥测值满足所述第一判别式且所述第二遥测值满足所述第二第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。在一种可能的实现方式中,所述获取模块还用于从遥测数据中获取连续的多个所述遥测值;所述判断模块还用于当所述多个遥测值均满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。在一种可能的实现方式中,所述获取模块还用于从遥测数据中获取连续的多个第一遥测值和多个第二遥测值,获取与所述第一遥测值对应的第一判别式,获取与所述第二遥测值对应的第二判别式;所述判断模块还用于,当所述多个第一遥测值均满足与所述第一遥测值对应的第一判别式且当所述多个第二遥测值均满足与所述第二遥测值对应的第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。本发明实施例提供的一种根据遥测数据判断航天器状态的方法及装置,通过从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式,当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,输出所述当前飞控状态,其中,遥测值为从遥测数据帧中获取的航天器参数采集值。可以实现通过航天器遥测值对航天器状态准确进行判定,提高了航天器状态判断的准确性以及航天器的安全性。根据下面参考附图对示例性实施例的详细说明,本发明的其它特征及方面将变得清楚。附图说明包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本发明的示例性实施例、特征和方面,并且用于解释本发明的原理。图1示出本发明的一实施例提供的航天器状态的判断方法的流程图;图2示出本发明的又一实施例提供的航天器状态的判断方法的流程图;图3示出本发明的又一实施例提供的航天器状态的判断方法的流程图;图4为单个确定性有限状态自动机的状态转换图;图5为多个确定性有限状态自动机的协同比判状态图;图6示出本发明的一实施例提供的航天器状态的判断装置的结构示意图。具体实施方式下面结合附图,对本发明的具体实施方式进行详细描述,但应当理解本发明的保护范围并不受具体实施方式的限制。为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。除非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排除其它元件或其它组成部分。在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本发明同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件未作详细描述,以便于凸显本发明的主旨。实施例1图1示出本发明的一实施例提供的航天器状态的判断方法的流程图,如图1所示,该方法包括:步骤S1,从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式;步骤S2,当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据;步骤S3,输出所述当前飞控状态,其中,遥测值为从遥测数据帧中获取的航天器参数采集值。具体地,遥测数据是地面控制中心接收到的反映航天器的状态的实时数据。目前国际上遥测数据下传的通行做法是:星上采集的遥测数据一般先打包为一定格式固定长度的数据块,然后经过通信信道下传,地面遥测软件需要处理的数据一般与星上打包的数据块相对应,有时为了描述处理的方便,也会将星上下传的格式较复杂数据预处理成格式较规范的数据块,这里将这些数据块定义为遥测帧。具体地,从遥测数据中获取遥测值指的是,对接收到的下行遥测帧进行处理,得到可以反映航天器运行中某一参数的采集值,例如电压值。由此,通过从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式,当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,输出所述当前飞控状态,其中,遥测值为从遥测数据帧中获取的航天器参数采集值。可以实现通过航天器遥测值对航天器状态准确进行判定。进一步地,所述遥测值可以包括第一遥测值和第二遥测值,所述第一遥测值与第一判别式对应,所述第二遥测值与第二判别式对应。相应的,所述当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,可以包括:当所述第一遥测值满足所述第一判别式且所述第二遥测值满足所述第二第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。具体地,遥测值通过判别式进行判定。例如,第一遥测值A1和第二遥测值A2是电压值,判别式为A1=3,A2=5。对获取到的A1进行判断,若A1的值为3且A2的值为5,判断为当前飞控状态满足与所述当前飞控状态对应的判据,当前状态需要A1和A2共同确定,则输出所述当前飞控状态。由此,通过遥测值包括第一遥测值和第二遥测值,所述第一遥测值与第一判别式对应,所述第二遥测值与第二判别式对应。当所述第一遥测值满足所述第一判别式且所述第二遥测值满足所述第二第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。可以实现通过航天器遥测值对航天器状态准确进行判定,提高了航天器状态判断的准确性以及航天器的安全性。实施例2图2示出本发明的又一实施例提供的航天器状态的判断方法的流程图,在图2中与图1采用相同附图标记的步骤,均与图1适用于相同的文字说明,在此不再赘述。本实施例中,步骤S1中,从遥测数据中获取遥测值包括:步骤S101,从遥测数据中获取连续的多个所述遥测值;步骤S2,当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,包括:步骤S102,当所述多个遥测值均满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。由此,通过对从遥测数据中获取连续的多个所述遥测值进行判定,可以避免遥测帧传输过程中的跳变,造成漏判或误判,提高了对航天器重要事件判断的准确性。实施例3图3示出本发明的又一实施例提供的航天器状态的判断方法的流程图,在图3中与图1采用相同附图标记的步骤,均与图1适用于相同的文字说明,在此不再赘述。实施例一中,所述步骤S1从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式包括:步骤S301,从遥测数据中获取连续的多个第一遥测值和多个第二遥测值,获取与所述第一遥测值对应的第一判别式,获取与所述第二遥测值对应的第二判别式。实施例一中,所述步骤S2当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,包括:步骤S302,当所述多个第一遥测值均满足与所述第一遥测值对应的第一判别式且当所述多个第二遥测值均满足与所述第二遥测值对应的第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。需要说明的是,一个判据可以对应多个判别式,并不限于第一判别式和第二判别式。具体地,上述的判断过程可以通过确定性有限状态自动机(deterministicfiniteautomaton;简称:DFA)来实现。确定性有限状态自动机用于描述一条规则产生式的推理过程。满足这个条件,即迁移发生,将转移到相应的状态,这个状态即表示此条件满足,可以进行下一步推理。如果一条规则需要有多个条件同时满足才触发,那么多个条件则对应多个迁移。这些迁移都完成,则表明对应的所有条件都满足,进入终止状态,此状态即代表推理结束。借助DFA的定义,就可以归纳出产生式推理到有限状态自动机的映射关系。①产生式推理有一个开始状态,表示系统准备就绪,可以开始接收条件进行推理,这对应的就是DFA的初始状态。②产生式的推理过程是接收条件的过程,接收到之前已经接收过的条件或接收到与之前条件无规则关联的条件,则推理原地等待。在原状态上构造一个自转移,使得自动机仍然在当前状态。③产生式推理的结束是某个规则的触发。在DFA中,推理结束则转移到终止状态。在终止状态之前的状态迁移序列,就是某一规则中的所有条件的满足过程。判据可以通过判据表达式的形式来体现。通常情况下判据表达式为一个以判别式为计算对象的逻辑表达式一个飞控状态可以存在多组判据表达式,各组判据表达式之间独立判断,各组判据表达式之间是或的关系,即任何一组判据表达式满足,则判定该飞控状态发生。例如,判别式A:TMN001==1;判别式B:TMN002==0;判别式C:TMN003==3;判据表达式为:A&&B&&C。图4为单个确定性有限状态自动机的状态转换图,图5为多个确定性有限状态自动机的协同比判状态图,请参阅图4、图5,判定的具体流程为:为每个判别式分别一个确定性有限状态自动机,分配后该确定性有限状态自动机为初态。假设获取连续3个第一遥测值的情况下,当第一遥测值TMN001为1时,确定性有限状态自动机变为中间态,取下一第一遥测值,当下一第一遥测值为1时确定性有限状态自动机保持中间态。获取再下一第一遥测值,若连续三个第一遥测值都为1,则确定性有限状态自动机变为终态。若确定性有限状态自动机变为中间态时,下一第一遥测值不为1,则确定性有限状态自动机变为初态。当第二遥测值TMN002为0时,确定性有限状态自动机变为中间态,取下一第二遥测值,当下一第二遥测值为0时确定性有限状态自动机保持中间态。获取再下一第二遥测值,若连续三个第二遥测值都为0,则确定性有限状态自动机变为终态。当第三遥测值TMN003为3时,确定性有限状态自动机变为中间态,取下一第二遥测值,当下一第二遥测值为3时确定性有限状态自动机保持中间态。获取再下一第二遥测值,若连续三个第二遥测值都为3,则确定性有限状态自动机变为终态。此时,满足判据表达式A&&B&&C,因此可以输出当前飞控状态。每个飞控状态依次处理每个判据,每个判据依次处理每个判别式,一个判别式对应一个有限状态自动机。当有一个判别式自动机变为终态时,计算判据表达式结果。若判据脚本满足,则飞控状态判出。由此,本实施例中,通过单个确定性有限状态自动机独立完成判断逻辑,可以实现较准确实现需求,简化编码的复杂度,并且有效避免了遥测参数中的毛刺数据对飞控状态判断的影响。可以避免遥测帧传输过程中的跳变,造成漏判或误判,进一步提高重要事件判断的准确性。实施例4图6示出本发明的一实施例提供的航天器状态的判断装置的结构示意图,如图5所示,该装置包括:获取模块110、判断模块120、输出模块130。获取模块110,用于从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式;判断模块120,用于在所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据;输出模块130,用于输出所述当前飞控状态,其中,遥测值为从遥测数据帧中获取的航天器参数采集值。由此,通过从遥测数据中获取遥测值,并获取与所述遥测值对应的判别式,当所述遥测值满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据,输出所述当前飞控状态,其中,遥测值为从遥测数据帧中获取的航天器参数采集值。可以实现通过航天器遥测值对航天器状态准确进行判定。在一种可能的实现方式中,所述获取模块110中获取的遥测值包括第一遥测值和第二遥测值,所述第一遥测值与第一判别式对应,所述第二遥测值与第二判别式对应。在一种可能的实现方式中,所述判断模块120还用于,当所述第一遥测值满足所述第一判别式且所述第二遥测值满足所述第二第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。由此,通过遥测值包括第一遥测值和第二遥测值,所述第一遥测值与第一判别式对应,所述第二遥测值与第二判别式对应。当所述第一遥测值满足所述第一判别式且所述第二遥测值满足所述第二第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。可以实现通过航天器遥测值对航天器状态准确进行判定。在一种可能的实现方式中,所述获取模块110还用于从遥测数据中获取连续的多个所述遥测值;所述判断模块120还用于当所述多个遥测值均满足与所述遥测值对应的判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。由此,通过对从遥测数据中获取连续的多个所述遥测值进行判定,可以避免遥测帧传输过程中的跳变,造成漏判或误判,提高了重要事件判断的准确性。在一种可能的实现方式中,所述获取模块110还用于从遥测数据中获取连续的多个第一遥测值和多个第二遥测值,获取与所述第一遥测值对应的第一判别式,获取与所述第二遥测值对应的第二判别式;所述判断模块120还用于,当所述多个第一遥测值均满足与所述第一遥测值对应的第一判别式且当所述多个第二遥测值均满足与所述第二遥测值对应的第二判别式时,判断为当前飞控状态满足与所述当前飞控状态对应的判据。由此,可以实现较准确实现需求,简化编码的复杂度,并且有效避免了遥测参数中的毛刺数据对飞控状态判断的影响。可以避免遥测帧传输过程中的跳变,造成漏判或误判,进一步提高重要事件判断的准确性。实施例5本实施例提供一种计算机语言,可以用来实现实施例3中的根据遥测数据判断航天器状态的方法。本实施例设计了航天器遥测信息描述语言(TDL),TDL对遥测参数属性等信息进行直观描述,实现描述信息与通用遥测处理框架分离,同时便于非专业人员查询、确认与信息共享。TDL语言是描述航天器遥测信息元素的描述语言,该语言由上下文无关文法描述。TDL语言是一种嵌入式语言,不能独立运行,需要在宿主语言提供的环境中运行,TDL提供了与宿主语言进行信息交互的标准机制,可通过宿主语言对TDL进行扩充。TDL在设计时,借鉴了lua、c/c++、javascript、python和ROOT/CINT的语法和设计思想,其中,大部分设计思想和语法来自lua和javascript,删去了使用不到且可能影响效率的语法,如元表、thread、面向对象等,增加了描述遥测信息特有的语法,如整数子集表达式。TDL用来对所有航天器的遥测信息进行描述,因此TDL的一些语法带有元语言的特点,在描述特定航天器遥测信息时,可以对TDL进行剪裁,也可以进行扩充。TDL中用到的标识符可以是任何非数字开头的字母、数字、下划线组成的字符串。标识符用来命名参数代号、变量、函数名称等。下面的关键字是保留的,不能用作名字:TDL是一个大小写敏感的语言:and是一个保留字,但是And和AND则是两个不同的合法的名字。一般约定,以下划线开头连接一串大写字母的名字(比如_VERSION)被保留用于TDL内部全局变量。下面这些是其它的符号:字符串既可以用一对单引号引起,也可以是双引号,里面还可以包含类似C的转义符:'\a'(响铃),'\b'(退格),'\f'(表单),'\n'(换行),'\r'(回车),'\t'(横向制表),'\v'(纵向制表),'\\'(反斜杠),'\"'(双引号),以及'\”(单引号)。而且,如果在一个反斜杠后跟了一个真正的换行符,其结果就是在字符串中产生一个换行符。还可以用反斜杠加数字的形式\ddd来描述一个字符。这里,ddd是一串最多三位的十进制数字。(注意,如果需要在这种描述方法后接一个是数字的字符,那么反斜杠后必须写满三个数字。)TDL中的字符串可以包含任何8位的值。包括用'\0'表示的零。只有在需要把不同的引号、换行、反斜杠、或是零结束符这些字符置入字符串时,才必须使用转义符。别的任何字符都可以直接写在文本里。数字常量可以分两部分写,十进制底数部分和十进制的指数部分。指数部分是可选的。TDL也支持十六进制整数常量,只需要在前面加上前缀0x。下面是一些合法的数字常量的例子:33.03.1416314.16e-20.31416E10xff0x56注释可以在除字符串内的任何地方是以两横(--)开始。如果跟在两横后面的不是“[[”,这就是一个短注释,它的作用范围直到行末;否则就是一个长注释,其作用范围直到遇到“]]”。TDL是一种动态类型语言。变量没有类型,值才有类型。语言中不存在类型定义语句。而所有的值本身携带它们自己的类型信息,值在做运算时,会进行必要的类型转换。TDL内置七种基本类型:nil,boolean,number,string,function,userdata和table。Nil类型只有一种值nil,它的主要用途用于标识和别的任何值的差异;通常,当需要描述一个无意义的值时会用到它。Boolean类型只有两种值:false和true。nil和false都能导致条件为假;而另外所有的值都被当作真。Number表示实数(双精度浮点数)。String表示一串字符的数组,字符串可以包含任何8位字符,包括零结束符('\0')。TDL可以调用(和处理)用TDL写的函数以及用宿主语言写的函数。userdata类型用来将任意C数据保存在TDL变量中。这个类型相当于一块原生的内存,除了赋值和相同性判断,TDL没有为之预定义任何操作。table类型实现了一个关联数组。数组可以用任何东西(除了nil)做索引,而不限于数字。table可以以不同类型的值构成;它可以包含所有的类型的值(除nil外)。table是TDL中唯一的一种数据结构;它可以用来描述原始的数组、符号表、集合、记录、图、树等等。用于表述记录时,TDL使用域名作为索引。跟索引一样,table每个域中的值也可以是任何类型(除nil外)。特别的,因为函数本身也是值,所以table的域中也可以放函数。table,function和(full)userdata这些类型的值是所谓的对象:变量本身并不会真正的存放它们的值,而只是放了一个对对象的引用。赋值,参数传递,函数返回,都是对这些对象的引用进行操作。TDL中有三类变量:全局变量,局部变量,还有table的域。一个单一的名字可以表示一个全局变量,也可以表示一个局部变量(或者是一个函数的参数,这是一种特殊形式的局部变量):任何变量都被假定为全局变量,除非显式的以local修饰定义。局部变量有其作用范围:局部变量可以被定义在它作用范围中的函数自由使用。在变量的首次赋值之前,变量的值均为nil。方括号被用来对table作索引:var::=prefixexp`[′exp`]′所有的全局变量都是放在一个特定TDLtable中,这个特定的table叫作environment(环境)table或者简称为环境。每个函数都有对一个环境的引用,所以一个函数中可见的所有全局变量都放在这个函数所引用的环境表(environmenttable)中。当一个函数被创建出来,它会从创建它的函数中继承其环境。TDL支持常见的语句,包括赋值,控制结构,函数调用,变量声明等。语句块是一列语句段,一个语句块可以被显式的写成一个单独的语句段:stat::=doblockend显式的语句块可以用来控制变量的作用范围。显式的语句块还可被用来在另一个语句块中插入return或是break。TDL允许多重赋值。因此,赋值的语法定义是等号左边放一系列变量,而等号右边放一系列的表达式。两边的元素都用逗号间开:stat::=varlist1`=′explist1varlist1::=var{`,′var}explist1::=exp{`,′exp}在作赋值操作之前,右值会被对齐到左边变量需要的个数。如果右值比需要的更多的话,多余的值就被扔掉。如果右值的数量不够,将会按所需扩展若干个nil。如果表达式列表以一个函数调用结束,这个函数所返回的所有值都会在对齐操作之前被置入右值序列中。赋值段首先会做运算完所有的表达式,然后仅仅做赋值操作。因此,下面这段代码i=3i,a[i]=i+1,20会把a[3]设置为20,而不会影响到a[4]。这是因为a[i]中的i在被赋值为4之前就被拿出来了(那时是3)。简单说,这样一行x,y=y,x可以用来交换x和y中的值。if、while、以及repeat这些控制结构符合通常的意义,而且也有类似的语法:stat::=whileexpdoblockendstat::=repeatblockuntilexpstat::=ifexpthenblock{elseifexpthenblock}[elseblock]end控制结构中的条件表达式可以返回任何值。false和nil两者都被认为是假条件。所有不同于nil和false的其它值都被认为是真(特别需要注意的是,数字0和空字符串也被认为是真)。在repeat–until循环中,内部语句块的结束点不是在until这个关键字处,它还包括了其后的条件表达式,条件表达式中可以使用循环内部语句块中的定义的局部变量。return被用于从函数或是语句块中返回值。函数和语句块可以返回不只一个值,所以return的语法为stat::=return[explist1]break被用来结束while、repeat、或for循环,它将忽略掉循环中下面的语句段的运行:stat::=breakbreak跳出最内层的循环。return和break只能被写在一个语句块的最后一句。如果需要从语句块的中间return或是break,可以使用显式的声名一个内部语句块。一般写作doreturnend或是dobreakend。For语句for有两种形式:一种是数字形式,一种是一般形式。数字形式的for循环,通过一个数学运算不断的运行内部的代码块。下面是它的语法:stat::=forName`=′exp`,′exp[`,′exp]doblockendblock将把name作循环变量。从第一个exp开始起,直到第二个exp的值为止,其步长为第三个exp。一个for循环看起来是这个样子forv=e1,e2,e3doblockend这等价于代码:dolocalvar,limit,step=tonumber(e1),tonumber(e2),tonumber(e3)ifnot(varandlimitandstep)thenerror()endwhile(step>0andvar<=limit)or(step<=0andvar>=limit)dolocalv=varblockvar=var+stependend需要注意的是:1)所有三个控制表达式都只被运算一次,表达式的计算在循环开始之前。这些表达式的结果必须是数字。2)var、limit、以及step都是一些不可见的变量。这里给它们起的名字都仅仅用于解释方便。3)如果第三个表达式(步长)没有给出,会把步长设为1。4)可以用break来退出for循环。5)循环变量v是一个循环内部的局部变量;当for循环结束后,就不能在使用它。如果需要这个值,在退出循环前把它赋给另一个变量。一般形式的for通过一个叫作叠代器(iterators)的函数工作。每次叠代,叠代器函数都会被调用以产生一个新的值,当这个值为nil时,循环停止。一般形式的for循环的语法如下:stat::=fornamelistinexplist1doblockendnamelist::=Name{`,′Name}for语句等价于:forvar_1,···,var_ninexplistdoblockend它等价于这样一段代码:dolocalf,s,var=explistwhiletruedolocalvar_1,···,var_n=f(s,var)var=var_1ifvar==nilthenbreakendblockendend注意以下几点:1)explist只会被计算一次。它返回三个值,一个叠代器函数,一个状态,一个叠代器的初始值。2)f、s、以及var都是不可见的变量。这里给它们起的名字都只是为了解说方便。3)可以使用break来跳出for循环。4)循环变量var_i对于循环来说是一个局部变量;不可以在for循环结束后继续使用。如果需要保留这些值,那么就在循环结束前赋值到别的变量里去。函数调用可以被作为一个语句段执行:stat::=functioncall在这种情况下,所有的返回值都被舍弃。局部变量可以在语句块中任何地方声名。声名可以包含一个初始化赋值操作:stat::=localnamelist[`=′explist1]如果有的话,初始化赋值操作的行为等同于赋值操作。否则,所有的变量将被初始化为nil。这些局部变量的作用范围从声明起一直延伸到语句块末尾。TDL中有这些基本表达式:exp::=nil|false|true(常量表达式)exp::=Number(数字常量表达式)exp::=String(字符串常量表达式)exp::=function(函数定义表达式)exp::=tableconstructor(表构造表达式)exp::=expbinopexp(二元运算表达式,包括算数、逻辑等运算)exp::=unopexp(一元运算表达式)prefixexp::=var|functioncall|`(′exp`)′(变量声明、函数定义、括号表达式)TDL支持常见的数学运算操作符:+(加法),-(减法),*(乘法),/(除法),%(取模),以及^(幂);和一元操作-(取负)。如果对数字操作,或是可以转换为数字的字符串,所有这些操作都依赖它通常的含义。幂操作可以对任何幂值都正常工作。比如,x^(-0.5)将计算出x的平方根。TDL中的比较操作符有==~=<><=>=这些操作的结果是逻辑值false或true。等于操作(==)首先比较操作数的类型。如果类型不同,结果就是false。否则,继续比较值。数字和字符串都用常规的方式比较。对象(table,userdata以及函数)以引用的形式比较:两个对象只有在它们指向同一个东西则认为相等。操作符~=完全等价于(==)操作的反值。大小比较操作以以下方式进行。如果参数都是数字,那么就直接做数字比较。否则,如果参数都是字符串,就用字符串比较的方式进行。TDL中的逻辑操作符有and,or,以及not。所有的逻辑操作符把false和nil都作为假,而其它的一切认作真。取反操作not总是返回false或true中的一个。与操作符and在第一个参数为false或nil时返回这第一个参数;否则,and返回第二个参数。或操作符or在第一个参数不为nil也不为false时,返回这第一个参数,否则返回第二个参数。and和or都遵循短路规则;也就是说,第二个操作数只在需要的时候去求值。如:取长度操作符写作一元操作#。字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。tablet的长度被定义成一个整数下标n。它满足t[n]不是nil而t[n+1]为nil;此外,如果t[1]为nil,n就可能是零。对于常规的数组,里面从1到n放着一些非空的值的时候,它的长度就精确的为n,即最后一个值的下标。如果数组有一个“空洞”(就是说,nil值被夹在非空值之间),那么#t可能是任何一个是nil值的位置的下标(就是说,任何一个nil值都有可能被当成数组的结束)。TDL中操作符的优先级写在下表中,从低到高优先级排序:通常,可以用括号来改变运算次序。连接操作符幂操作('^')是从右至左的。其它所有的操作都是从左至右。table构造子是一个构造table的表达式。每次构造子被执行,都会构造出一个新的table。构造子可以被用来构造一个空的table,也可以用来构造一个table并初始化其中的一些域。一般的构造子的语法如下tableconstructor::=`{′[fieldlist]`}′fieldlist::=field{fieldsepfield}[fieldsep]field::=`[′exp`]′`=′exp|Name`=′exp|expfieldsep::=`,′|`;′每个形如[exp1]=exp2的域向table中增加新的一项,其键值为exp1而值为exp2。形如name=exp的域等价于["name"]=exp。最后,形如exp的域等价于[i]=exp,这里的i是一个从1开始不断增长的数字。这这个格式中的其它域不会破坏其记数。举个例子:a={[f(1)]=g;"x","y";x=1,f(x),[30]=23;45}等价于如果表单中最后一个域的形式是exp,而且其表达式是一个函数调用或者是一个可变参数,那么这个表达式所有的返回值将连续的进入列表。为了避免这一点,可以用括号把函数调用(或是可变参数)括起来。TDL中的函数调用的语法如下:functioncall::=prefixexpargs函数调用时,第一步,prefixexp和args先被求值。如果prefixexp的值的类型是function,那么这个函数就被用给出的参数调用。否则prefixexp的方法"call"就被调用,第一个参数就是prefixexp的值,跟下来的是原来的调用参数。参数的语法如下:args::=`(′[explist1]`)′args::=tableconstructorargs::=String所有参数的表达式求值都在函数调用之前。因为表达式语法在TDL中比较自由,所以不能在函数调用的'('前换行。这个限制可以避免语言中的一些歧义。比如这样写a=f(g).x(a)TDL将把它当作一个单一语句段,a=f(g).x(a)。因此,如果想作为成两个语句段,必须在它们之间写上一个分号。如果真的想调用f,必须从(g)前移去换行。函数定义的语法如下:function::=functionfuncbodyfuncbody::=`(′[parlist1]`)′blockend一个函数定义是可以一个可执行的表达式,该表达式执行结果是一个类型为function的值。当TDL预编译一个语句块的时候,语句块作为一个函数。形参(函数定义需要的参数)是一些由实参(实际传入参数)的值初始化的局部变量:parlist1::=namelist[`,′`...′]|`...′当一个函数被调用,如果函数没有被定义为接收不定长参数,即在形参列表的末尾注明三个点('...'),那么实参列表就会被调整到形参列表的长度,变长参数函数不会调整实参列表;取而代之的是,它将把所有额外的参数放在一起通过变长参数表达式传递给函数,其写法依旧是三个点。这个表达式的值是一串实参值的列表,看起来就跟一个可以返回多个结果的函数一样。如果一个变长参数表达式放在另一个表达式中使用,或是放在另一串表达式的中间,那么它的返回值就会被调整为单个值。若这个表达式放在了一系列表达式的最后一个,就不会做调整了(除非用括号给括了起来)。先做如下定义,然后再来看一个例子:functionf(a,b)endfunctiong(a,b,...)endfunctionr()return1,2,3end下面看看实参到形参数以及可变长参数的映射关系:结果由return来返回。如果执行到函数末尾依旧没有遇到任何return语句,函数就不会返回任何结果。冒号语法可以用来定义方法,就是说,函数可以有一个隐式的形参self。因此,如下写法:functiont.a.b.c:f(params)bodyend等价于:t.a.b.c.f=function(self,params)bodyend整数子集表达式描述了一个整数子集,该表达式的结果类型为table,该table的值为整数,该table的索引为从0开始,最大值为(table.length-1)的整型number。该表达式的语法有3种形式:(1)以‘,’号分隔的整型表达式列表,各表达式从左至右依次递增。如:2,3,5,6,而3,2,6,5,是非法的表达式。(2)以‘-’号连接的两个整型表达式,左侧表达式值大于右侧,表示从左侧表达式开始到右侧表达式结束的闭区间范围内所有的整数值均属于结果子集的元素。如:2-10,而10-2是非法的表达式。(3)前两种表达式的混合,混合后的表达式必须满足从左至右出现的整型表达式值依次递增。TDL是一个有词法作用范围的语言。变量的作用范围开始于声明它们之后的第一个语句段,结束于包含这个声明的最内层语句块的结束点。看下面这些例子:这里,类似localx=x这样的声明,新的x正在被声明,但是还没有进入它的作用范围,所以第二个x指向的是外面一层的变量。因为有这样一个词法作用范围的规则,所以可以在函数内部自由的定义局部变量并使用它们。当一个局部变量被更内层的函数中使用的时候,它被内层函数称作upvalue(上值),或是外部局部变量。注意,每次执行到一个local语句都会定义出一个新的局部变量。看看这样一个例子:这个循环创建了十个closure(这指十个匿名函数的实例)。这些closure中的每一个都使用了不同的y变量,而它们又共享了同一份x。因为TDL是一个嵌入式的扩展语言,所有的TDL动作都是从宿主程序的代码调用TDL库中的一个函数开始的。在TDL编译或运行的任何时候发生了错误,控制权都会交还给宿主程序,而宿主程序可以来做一些恰当的措施(比如打印出一条错误信息)。类型为function和userdata的对象,可以用另外一个与之关联的被称作它们的环境的一个表,环境也是一个常规的table,多个对象可以共享同一个环境。userdata的环境在TDL中没有意义。只是为了在程序员想把一个表关联到一个userdata上时提供便利。关联在TDL函数上的环境用来接管在函数内对全局变量的所有访问。它们也会作为这个函数内创建的其它函数的缺省环境。可以通过调用setfenv来改变一个TDL函数或是正在运行中的线程的环境。TDL使用Lua提供的自动内存管理。这就是说不需要关心创建新对象的分配内存操作,也不需要在这些对象不再需要时的主动释放内存。Lua编译器通过运行一个垃圾收集器来自动管理内存,以此一遍又一遍的回收无用的对象(这是指TDL中不再访问的到的对象)占用的内存。TDL中所有对象都被自动管理,包括:table,userdata、函数、字符串。以下描述了遥测信息元素及其描述语法,这里描述的元素在描述特定任务遥测信息时可以选用。规范并未对特定任务所有遥测信息的存储形式做出约定,推荐采用嵌入式数据库、xml文档、excel表等较结构化的格式容纳这些信息。TDL定义了一些预定义变量,在描述特定遥测信息元素时,可以直接使用这些预定义变量。预定义变量的使用规范,由语法定义;预定义变量值的更新,由运行环境保证。_TDL_ORIGINALa)类型:Tableb)说明:存储遥测帧原码,索引类型为number,值类型为number,索引起始计数为0。例如,取某遥测帧帧首第一个字节的值,可使用表达式:_TDL_ORIGINAL[0]。_TDL_FRAME_COUNTa)类型:numberb)说明:存储遥测帧帧计数。_TDL_FRAME_IDa)类型:numberb)说明:存储遥测帧帧格式号。_TDL_FRAME_SUBIDa)类型:numberb)说明:存储遥测帧变帧格式号。{参数代号}a)类型:numberb)说明:存储参数计算结果。遥测帧描述方法目前国际上遥测数据下传的通行做法是:星上采集的遥测数据一般先打包为一定格式固定长度的数据块,然后经过通信信道下传,地面遥测软件需要处理的数据一般与星上打包的数据块相对应,有时为了描述处理的方便,也会将星上下传的格式较复杂数据预处理成格式较规范的数据块,这里将这些数据块定义为遥测帧。帧名称c)类型:stringd)取值:符合TDL标识符定义的字符串,单个航天器唯一。e)作用:定义标识遥测帧f)可使用的预定义变量:无帧说明a)类型:stringb)取值:编码为GB2312的字符串,长度限制由具体任务。c)作用:对遥测帧进行说明。d)可使用的预定义变量:无帧格式标识a)类型:number。b)取值:常量算数表达式。c)作用:使用数字标识特定帧,与帧名称一一对应。d)可使用的预定义变量:无变帧格式标识a)类型:number。b)取值:常量表达式。c)作用:标识特定帧的变帧格式,特定帧内唯一。d)可使用的预定义变量:无帧计数a)类型:number。b)取值:表达式。c)作用:标识特定帧的变帧格式,特定帧内唯一。d)可使用的预定义变量:_TDL_ORIGINAL起始波道计数a)类型:number。b)取值:常量表达式。c)作用:定义该帧参数波道计数起始值。d)可使用的预定义变量:无帧长度a)类型:number。b)取值:常量表达式。c)作用:定义该帧长度,单位为字节。d)可使用的预定义变量:无同步码a)类型:number。b)取值:table构造表达式,table索引为number型,值为同步码波道,波道起始计数为0,table值为number型,为同步码值。c)作用:定义该帧同步码。d)可使用的预定义变量:无遥测参数描述方法遥测参数是遥测处理的基本单位,与遥测帧具有集合与元素的关系。参数序号:a)类型:number。b)取值:常量表达式。c)作用:用数字形式唯一标识一个航天器内的一个参数。d)可使用的预定义变量:无参数代号a)类型:string。b)取值:编码为ascii码的字符串。c)作用:用字符串形式唯一标识一个航天器内的一个参数。d)可使用的预定义变量:无参数名称a)类型:string。b)取值:编码为GB2312的字符串。c)作用:对参数的简要说明。d)可使用的预定义变量:无参数原码类型a)类型:string。b)取值:符合预先定义规则的字符串集合,如uint8,sint8等,见下表。某些航天器可能会定义超出下表中定义的码型,在描述特定航天器时,可对下表进行扩充。c)作用:参数原码的码型。d)可使用的预定义变量:无参数结果类型:a)类型:string。b)取值:取值范围与参数原码类型相同,但有如下限制:对于整型数,只能取uintN和sintN两种码型,且N的取值满足如下条件:N=8*n;n=1,2,4,8。c)作用:参数处理结果的码型。d)可使用的预定义变量:无参数波道:a)类型:Table。b)取值:整数子集表达式。c)作用:表示参数波道。d)可使用的预定义变量:无参数位范围:a)类型:Table。b)取值:整数子集表达式。参数最低位计数为0。如果参数位范围非空,则位范围外的其它位在计算时清零,位范围内的位保持不变。如果参数位范围为空,所以位在计算时保持不变。c)作用:表示参数有效位集合。d)可使用的预定义变量:无波道字节序:a)类型:string。b)取值:“<”表示高字节在高地址(即低前高后),”>”表示高字节在低地址(即高前低后)。为空表示字节序使用该参数所在分系统使用的字节序。c)作用:表示参数字节序。d)可使用的预定义变量:无参数系数表达式:a)类型:table。b)取值:table构造表达式,该table作为算法表达式的系数被传递给算法表达式,因此该table的结构应与算法表达式的逻辑保持一致。c)作用:表示参数系数。d)可使用的预定义变量:无参数计算公式:a)类型:string。b)取值:符合TDL定义的语句块,在该语句块中,参数原码用“_TDL_ORIN”表示,为number型,参数系数用”_TDL_PARAM”表示,为table型,该语句块由执行环境组装为TDL函数,该函数有两个输入参数,第一个参数为用number型表示的参数原码,第二个参数为用table型表示的参数系数,该函数结束时,返回两个number值,第一个number值为状态码,状态码由具体任务规定,第二个number值为参数计算结果。c)作用:表示参数计算公式。d)可使用的预定义变量:{参数代号}参数范围表达式a)类型:string。b)取值:符合TDL定义的语句块,在该语句块中,参数计算结果用“_TDL_X”表示,参数结果为number型,该语句块由执行环境组装为TDL函数,该函数有一个输入参数,参数为用number型表示的参数结果,该函数结束时,返回一个number型值,该number值表示参数范围计算结果,计算结果的具体含义由具体任务规定。如:c)作用:表示参数范围。d)可使用的预定义变量:{参数代号}前提条件表达式a)类型:string。b)取值:符合TDL定义的语句块,该语句块由执行环境组装为TDL函数,该函数无输入参数,该函数结束时,返回一个boolean型值,值为false表示参数不满足计算条件,值为true表示参数满足计算条件。c)作用:表示参数计算前提条件。d)可使用的预定义变量:{参数代号}航天器状态比判描述方法航天器状态是根据遥测参数计算结果,对航天器正常状态或异常状态的判断结果。遥测处理系统的状态比判功能一般在航天器状态发生变化时触发其它逻辑。航天器状态序号:a)类型:number。b)取值:常量表达式。c)作用:唯一标识航天器的一个状态。对于多个航天器在飞行过程中存在信息交互的飞行任务,可将多个航天器的状态统一排序。d)可使用的预定义变量:无连判帧数:算术表达式a)类型:number。b)取值:常量表达式。c)作用:为提高航天器状态判断的可靠性,可使用该属性指定状态的连判帧数,只有连续的若干帧数据均满足状态判据,该状态才被认为满足。d)可使用的预定义变量:无关联状态列表:a)类型:table。b)取值:table构造表达式。Table值为关联关键状态序号,索引为从0开始的number型整数。c)作用:航天器的若干状态间存在互斥关系,即航天器在任意时刻只能存在其中的一个状态中,这种关系称为关联关系。该列表描述了与该状态关联的其它飞行状态。d)可使用的预定义变量:无判据表达式:a)类型:boolean。b)取值:符合TDL定义的语句块,该语句块由执行环境组装为TDL函数,该函数无输入参数,该函数结束时,返回一个boolean型值,值为false表示判据满足,值为true表示判据不满足。一般情况下,该语句块为一个逻辑表达式,如:(A>0)and(B<0)and(C==1)。一个航天器状态可存在多个判据表达式,这些表达式相互独立,有一个表达式满足即认为航天器状态发生。c)作用:描述航天器状态判据。d)可使用的预定义变量:{参数代号}。在表达式中引用一个参数代号时,可使用帧范围限定语法,即使用“.”连接起来的表达式。如:引用帧名称为frame1中的param1,可使用表达式frame1.param1,frame1和param1必须在系统中已定义,否则,表达式返回null。判别式:以参数值为计算对象,返回boolean型结果的表达式,如“TMN001==1;且连判3帧”。一个判别式对应一个有限状态自动机,该自动机状态Q由RT_State定义如下:其中,enInit为该自动机的初始状态q0;{enFull}为该自动机的终止状态集合F。当该自动机处于enFull状态下,判别式返回true,其余状态返回false。判据表达式:符合TDL定义的语句块,该语句块由执行环境组装为TDL函数,该函数无输入参数,该函数结束时,返回一个boolean型值,值为true表示判据满足,值为表示判据不满足。一般情况下,该语句块为一个以判别式为计算对象的逻辑表达式。如:判别式A:TMN001==1;判别式B:TMN002==0;判别式C:TMN003==3;判据表达式为:A&&B&&C。飞控状态:一个飞控状态可以存在多组判据,各组判据之间独立判断,各组判据之间是或的关系,即任何一组判据满足,则该飞控状态即判发生。2.航天器状态比判机制每个判别式比判的整个运行过程作为一个有限自动机,记为M=(Q,Σ,δ,q0,F)。1)将自动机在其整个运行周期中可能的状态作为状态集Q(括号中的字母为其代号)。Q={“初始状态enInit(q0)”,“部分满足状态enHalf(q1)”,“完全满足状态enFull(q2)”}。2)输入字母表Σ(括号中的字母为其代号)Σ={遥测值满足(a),遥测值连续且满足(b),遥测值不满足(c),遥测值不连续(d),帧数满足(e)}。3)将“初始状态enInit”作为M的初始状态即q0=“初始状态enInit”。4)将“完全满足状态enFull”作为M的终止状态集.即F={“完全满足状态enFull”}。5)将各种动作对自动机所引起的状态变化作为M的从Q×M→Q的映射δ(δ描述中,引起状态变化的动作用相应的字母代号表示),δ定义如下:δ(q0,a)=q1,δ(q1,b)=q1δ(q1,c)=q0,δ(q1,d)=q0δ(q1,e)=q2由此,本实施例解决了遥测信息自然描述的问题,并采用TDL语言解析器进行最近一次编译、重复使用的方式进行解析编译,解决了自然语言描述的效率问题。前述对本发明的具体示例性实施方案的描述是为了说明和例证的目的。这些描述并非想将本发明限定为所公开的精确形式,并且很显然,根据上述教导,可以进行很多改变和变化。对示例性实施例进行选择和描述的目的在于解释本发明的特定原理及其实际应用,从而使得本领域的技术人员能够实现并利用本发明的各种不同的示例性实施方案以及各种不同的选择和改变。本发明的范围意在由权利要求书及其等同形式所限定。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1