一种代码与配置数据分离的程序实现方法及系统与流程

文档序号:20918910发布日期:2020-05-29 13:53阅读:841来源:国知局
一种代码与配置数据分离的程序实现方法及系统与流程

本发明属于软件应用技术领域,特别涉及一种代码与配置数据分离的程序实现方法及系统。



背景技术:

近些年来,随着轨道交通技术的发展,我国轨道交通行业迎来了更加广阔的市场机遇。联锁系统作为铁路信号控制的地面核心系统,在各个国家的客运铁路、货运铁路、城市轨道交通中都是必不可少的部分,海外联锁市场空间巨大。随着轨道交通行业海外业务的不断推进,如何利用现有资源快速有效地研发出适应不同客户需求的信号产品,成为项目研发和改进的重要课题。

计算机联锁系统是执行车站联锁逻辑控制功能,保证行车安全的关键系统之一。而计算机核心联锁软件又是计算机联锁系统的重要组成部分,主要由核心联锁逻辑和站场配置数据组成。现有的联锁系统的配置数据采用人工配置方式,配置数据以常量形式的全局变量及宏定义的形式存储在.c源文件以及.h头文件中,根据项目应用环境等因素的而不同,工程数据配置人员修改联锁项目的.c源文件及.h头文件格式的配置数据。联锁系统的软件程序(主要包括逻辑代码)与配置数据采取绑定编译,编译为一个可执行文件,安装在cf卡中进行,此种配置方式下的配置数据具有一定的可读性,即使将逻辑代码与站场数据进行了分开存储,二者仍然是一体的,作为一个整体项目存在。在这种情况下,当数据发生改变时联锁程序就需要经过重新编译过程中连接到配置文件才能使用,在一定程度上降低了软件的通用性,也不利于核心代码的保密工作,并且在配置数据的过程中,很有可能会对联锁核心逻辑代码进行误修改。

因此,现有的联锁配置数据采用人工配置方式存在以下缺点:

1.联锁逻辑软件缺乏通用性。

2.联锁核心逻辑代码保密性较低。

3.数据配置工作缺乏条理性。

4.在数据配置工作过程中,可能会对核心逻辑代码造成误修改。

因此,如何提供一种安全性好、通用性强的数据配置和程序实现方法,成为亟待解决的技术问题。



技术实现要素:

针对上述问题,本发明提供了一种代码与配置数据分离的程序实现方法,包括:

在代码中将程序全局变量设置为非常量;

将与所述全局变量对应的配置数据存储在配置文件中;

所述程序执行时根据配置文件中的配置数据对全局变量赋值。

进一步地,所述代码为联锁逻辑代码;

所述配置数据包括站场相关信息和/或工程实施信息。

进一步地,所述方法还包括:

对所述全局变量占用空间进行预设置。

进一步地,根据程序在不同环境下的运行要求,设置所述全局变量占用空间满足环境要求的最大空间。

进一步地,通过在程序中设置内部宏定义的方式设置所述全局变量占用空间。

进一步地,所述方法还包括:

程序运行过程中对所述全局变量进行检测,以确定所述全局变量是否发生变化。

进一步地,所述方法包括:

根据程序初始化的所述全局变量计算校验码并保存;

程序运行过程中,重新计算所述全局变量校验码,将重新计算的校验码与保存的校验码比较,以确定全局变量是否发生变化。

进一步地,对初始化的全局变量存储区域进行分区,分别计算各分区的校验码并保;

程序运行过程中,重新计算全局变量指定分区的校验码,将重新计算的校验码与相应的保存的所述校验码进行比较,以确定全局变量是否发生变化。

进一步地,方法包括:

配置数据以二进制流形式进行存储到配置文件。

进一步地,方法包括:

对所述配置文件生成校验码并保存在代码中;

程序运行时,获取配置文件,根据保存的校验码对配置文件进行校验。

进一步地,方法包括:

对所述配置文件进行加密,并将相应秘钥保存在代码中;

程序运行时,获取配置文件,根据保存的秘钥对所述配置文件进行解密。

进一步地,方法包括:所述配置数据采取配置子分区方式存储,所述子分区包含子分区长度、子分区类型字段。

进一步地,方法包括:

通过可视化编辑终端编辑配置数据,生成二进制配置文件;

所述可视化编辑终端还用于将二进制流的配置文件转化为可视化配置数据。

本发明还提供了一种代码与配置数据分离的程序实现系统,包括:

变量设置单元,用于在代码中将程序全局变量设置为非常量;

变量配置单元,用于将与所述全局变量对应的配置数据存储在配置文件中;

变量赋值单元,用于在所述程序执行时,根据配置文件中的配置数据对全局变量赋值。

进一步地,所述代码为联锁逻辑代码;

所述配置数据包括站场相关信息和/或工程实施信息。

进一步地,所述变量设置单元还用于对所述全局变量占用空间进行预设置,包括:

根据程序在不同环境下的运行要求,设置所述全局变量占用空间满足环境要求的最大空间。

进一步地,所述系统还包括:

变量检测单元,用于在程序运行过程中对所述全局变量进行检测,以确定所述全局变量是否发生变化。

进一步地,所述变量检测单元用于:

根据程序初始化的所述全局变量计算校验码并保存;

程序运行过程中,重新计算所述全局变量校验码,将重新计算的校验码与保存的校验码比较,以确定全局变量是否发生变化。

本发明的程序核心逻辑代码与配置数据实现分离的方法及系统,改变了既有的数据配置方式,将配置数据从软件代码中分离出来,配置文件不参与软件代码的编译,实现核心处理逻辑代码与数据配置文件的分离,提高了程序代码的保密性。程序运行时,根据配置文件为全局变量赋值,可以基于一套代码适配多个配置文件,在不同环境下运行,从而加强了软件的代码通用性,在很大程度上克服了上述逻辑代码与数据一体的缺点。

本发明的方法及系统在程序运行过程中进行全局变量检查,进而保障了非静态全局变量不被误修改,提高了安全性。

分离的代码与配置文件通过校验机制、加密机制进一步保障了软件程序初始化数据输入的正确性。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所指出的结构来实现和获得。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了根据本发明实施例的联锁逻辑代码与配置数据分离的示意图;

图2示出了根据本发明实施例的全局变量分区计算校验码的示意图;

图3示出了根据本发明实施例的代码与配置数据分离的程序实现系统结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提出一种代码与配置数据分离的程序实现方法,本发明实施例中,以轨道交通联锁系统为例进行说明,但不限于应用在联锁系统。下面结合联锁系统从开发到应用的过程对所述方法进行说明。

本发明实施例中,联锁系统从开发到应用的过程包含以下步骤:

步骤1:程序代码编写。

步骤2:生成配置数据的配置文件。

步骤3:基于配置文件和程序代码运行程序。

本发明实施例中,对步骤执行的顺序不做严格限定,步骤序号仅为方便引用和说明,如上步骤中的步骤2和步骤1可以同时进行。如图1所示,联锁软件程序代码与存储站场信息等配置数据的配置文件是相分离的,可以分别独立开发。配置文件不参与软件代码编译,而是成为一个单独的二进制文件,联锁逻辑部分,即程序代码通过api接口函数在软件初始化阶段读取外部配置数据,使得联锁逻辑能正常使用站场数据。下面结合现有技术中联锁系统实现原理,对本发明的改进做详细说明。

现有技术中,配置数据与联锁软件代码直接关联,属于一个项目,项目编译阶段直接使用配置数据,配置数据有两种存在形式:宏定义和const类型(常量)全局变量。其中,宏定义是一种批量处理方式,它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。联锁系统中通过宏定义实现的配置项可以分为两类:内部配置宏定义和外部配置宏定义。内部配置宏定义由开发人员修改,主要实现对数据长度或内容的合法性检查;外部配置宏定义由工程数据配置人员修改,包含站场相关信息、工程实施信息等。const类型全局变量完全由工程数据配置人员修改。由于const类型的变量为常量,在运行过程中不可变,因此在编译时,根据配置数据直接进行赋值,配置文件与代码数据直接绑定。

步骤1包括步骤1-1:在代码中将程序全局变量设置为非常量。为实现代码与数据配置文件分离,将既有配置数据中的外部配置宏定义转变为非const类型全局变量形式,将const类型全局变量转变为非const类型全局变量,以支持运行中赋值,而不需要在编译时就依赖配置文件。在读取配置文件后对这些数据配置全局变量赋值,实现代码部分对数据配置功能的支持。

步骤1包括步骤1-2:对非常量(即非const类型)全局变量占用空间进行预设置。联锁程序部分预留数据配置全局变量,全局变量定义为非const类型,供读取配置文件使用。为保证不同站场大小的联锁站均能正常运行,联锁程序根据程序在不同环境下的运行要求,设置所述全局变量占用空间满足环境要求的最大空间。预留的配置数据全局变量占用空间应略大于最大工程站场所需的配置数据大小。通过预留空间设置,能够是的同一套联锁代码满足不同场合的施工参数需求,从而为有利于提高系统市场竞争力,缩短开发工期。具体地,在程序中设置内部宏定义的方式设置所述全局变量占用空间。以数组类型的数据配置全局变量为例,通过内部配置宏定义方式定义预存储数组空间的大小,利用此宏定义,对读取数据配置文件得到的数据大小进行范围有效性检查,防止对预存储数组空间越界赋值。通过内部宏定义方式设置全局变量占用空间,一方面对外提供了一定范围内可变的、多样化的配置数据接收途径,另一方面也为联锁程序内部的安全执行提供了支持。

步骤2包括步骤2-1:将与所述全局变量对应的配置数据存储在配置文件中。

考虑到不同平台的通用性及可操作性,配置数据以二进制流的形式存储到配置文件。二进制流的配置文件方便程序直接读取,不需要依赖第三方软件进行支持,从而方便程序运行时调用配置文件和在pc端进行软件代码的调试。为保障在配置数据存储、处理及传输过程的正确性、完整性和可用性,针对配置文件提供校验机制:对配置文件生成校验码并保存在代码中;程序运行时,获取配置文件,根据保存在代码中的校验码对配置文件进行校验。本发明实施例中,将校验码保存在代码中是指校验码保存在配置文件分离的软件项目中,代码可以是编写程序执行逻辑的具体文件或者与代码关联的头文件等。本发明实施例的“程序运行时”是指程序代码在编译或者执行时,需要调用配置文件对全局变量进行赋值时。本发明实施例中,采用32位crc进行配置数据完整性的校验。

进一步地,配置数据采取配置子分区方式存储,子分区包含子分区长度、子分区类型字段,方便不同工程应用场景下配置项的增加与修改。子分区还包括存储实际应用数据的分区数据字段,分区数据字段以字节为单位进行存储,采用无符号8位整型、无符号16位整型、无符号32位整型数据类型。对于联锁程序中需要以枚举类型来识别的配置项,配置文件中以枚举变量取值对应的无符号8、16、32位整型数据存储。示例性地,在配置文件中记录设备类型、设备专有id、配置数据版本等,供配置审核时使用。

加密前的配置文件格式如下:

每个配置分区可以包含若干个配置项,每个配置分区的格式如下:

配置分区0固定用来记录设备类型、设备专有id、配置数据版本信息等,格式如下:

配置数据主要包括单变量类型和数组类型。单变量类型包括:工程实施信息,如系统固有信息(系统周期时长、数据版本等)、各种超时计数器阈值、不同工程实施方式;站场相关信息,如站场各类i/o及通信接口设备数量等等。数组类型包括大量数据结构相同的i/o及通信接口设备和内部逻辑处理元素等。

单变量类型的配置数据,每个配置项占用空间较小,可以将属性类似的数据存储在一个配置分区中,例如各类超时计数器阈值。

数组类型的配置数据,按照结构体数组为单位,将每个结构体数组存储在独立的配置分区中。

对于配置数据的数组类型嵌套包含情况,如下所示:

typedefstruct–表示定义结构体

{

intelement;-结构体a包含的int(整型)数据元素

}struct_a;-结构体名称为struct_a

typedefstruct

{

struct_apsta[size_a];-结构体b包含以结构体a为元素的数组

}struct_b;

typedefstruct

{

struct_bpstb[size_b];-结构体c包含以结构体b为元素的数组

}struct_c;

struct_cpstc[size_c];结构体c的数组类型变量

在配置文件中,关于size_a(a的分区长度)、size_b(b的分区长度)、size_c(c的分区长度)的配置项描述,必须先于数组pstc的配置项描述,才能保证能够按照正确的数据元素个数读取pstc的配置项描述,即先确定被包含元素的长度,才可以确定包含元素的长度。

本发明实施例中,数据配置文件采用dat类型的二进制流文件进行存储,方便程序读取,但二级制流文件不能通过普通的文本编辑器,如txt编辑器来直接进行可视化编辑,二进制流并不是人工可读取的。因此,为了方便配置文件配置数据,提供可视化工具,通过可视化编辑终端编辑配置数据,生成二进制配置文件;可视化编辑终端还用于将二进制流的配置文件转化为可视化配置数据,即转化为能够人工阅读的文本。进一步地,可视化编辑终端还用于对配置文件进行crc计算和文件加密。对于特定的配置项数据,如果取值范围有限制(数值约束、枚举取值等),可视化编辑终端还挺相应的输入防护,避免部分不合理的数据输入。优选地,联锁代码中的全局变量设置与配置文件的配置数据采用完全一致的数据格式。

通过可视化编辑终端编辑二进制流文件,方便提供规范易用的数据编辑操作,并提高了配置文件的安全性,避免采用文本带来容易错误修改的问题。可视化编辑终端,还可依据不同站场的图形、联锁表以及采驱表等,自动生成联锁应用相关数据,有利于工程实施的数据变更和系统维护。

步骤2还包括步骤2-2:对配置文件进行加密,并将相应秘钥保存在代码中;程序运行时,获取配置文件,根据保存的秘钥对所述配置文件进行解密。加密过程可以通过上述可视化编辑终端实现。

步骤3包括步骤3-1:所述程序执行时根据配置文件中的配置数据对全局变量赋值。具体步骤如下:

(1)通过保存在软件代码中的密钥,对配置文件进行解密。

(2)对配置文件进行数据完整性校验和合法性校验。通过crc校验检查配置数据是否完整。

(3)根据配置文件的数据格式,提取联锁程序所需的各个配置项,在提取配置项的过程中,检查所需的配置数据是否完整和合法。对于配置文件,联锁软件中的数据结构定义,需与数据配置辅助工具采用完全一致的数据格式。

在上述步骤(1)、(2)、(3)中,如果读取不到期望的配置文件,或配置文件未能通过完整性与合法性校验,联锁将进行相应的安全处理,如进行宕机处理。

联锁程序对读取到的配置文件,提供相应的错误报警功能。对于错误的配置项,应输出提示报警信息,指示配置错误类型及位置,以供工程数据配置人员进行参考。

(3)成功获取配置数据后,则通过配置数据对非静态的相应全局变量进行赋值。

(4)计算全局变量校验码并存储,以便后续程序运行过程中进行全局变量检查。具体地,根据程序初始化的全局变量计算校验码并保存。本发明实施例中,对存储在缓冲区的全局变量计算32位crc校验码。进一步地,还可以对初始化的全局变量存储区域进行分区,分别计算各分区的校验码并保。在系统初始化过程中,联锁程序读取了配置文件之后,将各个配置项保存在不同的全局变量中,根据占用空间大小情况,将若干个配置项划分为一个子区,将每个子区内包含的配置项拼成一段连续的缓冲区,如图2所示,然后计算各分区的32位crc并保存。

步骤3还包括3-2:程序运行过程中对所述全局变量进行检测,以确定所述全局变量是否发生变化。因为联锁代码中的配置数据对应的全局变量是非const类型,在程序执行过程中,对所述全局变量的读写操作均是允许的,但实际上根据联锁功能需要这些变量不应当在执行过程中被修改,以防止造成错误。即这些全局变量在初始化过程中赋值为配置数据后,便再不能被其他代码写入其他取值。为防止程序周期执行过程中对数据配置全局变量误赋值,需要周期性的对数据配置全局变量的取值进行检查,如果发现数据配置全局变量的取值发生改变,应采取安全处理。

此后联锁程序周期运行过程中,根据全局变量重新计算校验码,将重新计算的校验码与保存的校验码比较,以确定全局变量是否发生变化。进一步地,当初始化过程中采用分区计算全局变量校验码时,可以根据系统负载情况,重新计算全局变量指定分区的校验码,将重新计算的校验码与相应的保存的所述校验码进行比较,以确定全局变量是否发生变化。选择性的对全部配置项子分区或部分配置项子分区执行crc计算,并与初始化过程中得到的crc取值进行比较,如果两个取值不同,则说明此配置项子分区包含的配置数据全局变量取值发生了变化,采取宕机处理。通过周期性检查全局变量是否变化,能够保障将原本需要常量方式定义的全局变量安全地以非常量方式使用。并且采用分区计算校验码的方式,能够根据系统执行情况选定指定分区进行计算,避免对大量全局变量进行分区计算而影响系统性能,也能够对多个分区进行并行计算。

本发明实施例所提供的程序实现方法,将配置数据和联锁逻辑分开,形成单独的两部分,配置文件为二进制dat文件,联锁核心处理逻辑代码编译得到的可执行exe文件,方便独立编辑,防止软件代码在数据配置时被误修改,在一定程度上,提高了软件代码的保密性。联锁代码与配置数据分离之后,联锁代码与配置数据分开发布,可以做到不同车站的联锁代码完全一致,只发布一版代码即可,使得软件通用性增强。此种逻辑代码与应用数据分离的方案,不仅可以应用于联锁软件,也同样适用于其他类似的逻辑通用,而数据变化较多的系统。

基于相同的发明构思,本发明实施例还提供了一种代码与配置数据分离的程序实现系统,如图3所示,所述系统包括:

变量设置单元,用于在代码中将程序全局变量设置为非常量。其中,所述代码为联锁逻辑代码。

变量配置单元,用于将与所述全局变量对应的配置数据存储在配置文件中。其中,所述配置数据包括站场相关信息和/或工程实施信息。配置数据以二进制流形式存储到配置文件。进一步地,所述配置数据采取配置子分区方式存储,所述子分区包含子分区长度、子分区类型字段。

变量赋值单元,用于在所述程序执行时,根据配置文件中的配置数据对全局变量赋值。

变量检测单元,用于在程序运行过程中对所述全局变量进行检测,以确定所述全局变量是否发生变化。具体地,变量检测单元根据程序初始化时变量赋值单元获取的所述全局变量计算校验码并保存;程序运行过程中,重新计算所述全局变量校验码,将重新计算的校验码与保存的校验码比较,以确定全局变量是否发生变化。进一步地,对初始化的全局变量存储区域进行分区,分别计算各分区的校验码并保存;程序运行过程中,重新计算全局变量指定分区的校验码,将重新计算的校验码与相应的保存的所述校验码进行比较,以确定全局变量是否发生变化。本发明实施例中,对运行过程中全局变量的检测能够确保非静态的全局变量不被修改,提高了系统的安全性。

所述变量设置单元还用于对所述全局变量占用空间进行预设置,包括:根据程序在不同环境下的运行要求,设置所述全局变量占用空间满足环境要求的最大空间。通过预设值最大空间,能够满足对全局变量运行时赋值,从而确保在多种使用环境下,通过多种相应的配置文件对一套代码中的全局变量赋值时,都具有足够空间。

本发明实施例中,所述变量设置单元通过在程序中设置内部宏定义的方式设置所述全局变量占用空间。

进一步地,所述变量配置单元还对所述配置文件生成校验码,并通过所述变量设置单元将生成的校验码保存在代码中;程序运行时,变量赋值单元获取配置文件,根据保存的校验码对配置文件进行校验。通过配置文件的校验码可以在程序运行时首先对配置文件进行校验,只有通过校验的配置文件才能用于给全局变量赋值,进而保障了程序在后续赋值和运行过程中的正确性和稳定性,同时也对配合文件进行了检查,避免与代码分离存储的配置文件被错误地修改。

变量配置单元还对所述配置文件进行加密,并通过变量设置单元将相应秘钥保存在代码中;程序运行时,变量赋值单元获取配置文件,根据保存的秘钥对所述配置文件进行解密。通过配置文件加密,提高了配置文件的安全性和保密性,并保障了程序的正确性。

所述变量配置单元还包括可视化编辑终端,用于提供编辑配置数据的用户操作界面。变量配置单元还用于将配置数据生成二进制配置文件,变量配置单元还用于将二进制流的配置文件转化为可视化配置数据。

上述系统中各个单元的具体工作过程也可以根据上述方法实施例的说明而得到,不再赘述。图3中所示的各单元间的连接线仅仅表示单元间具有数据连接关系,而并不表示必然的电气连接。

本发明实施例提供的代码与配置数据分离的程序实现方法及系统,通过将设置全局变量为非常量和配置全局变量数据,实现了全局变量在程序运行时被赋值,从而能够将程序核心逻辑代码与配置数据实现分离,提高了程序代码的保密性。另外,方法和系统能够在不同的施工环境下使用各自相应的配置文件,基于一套代码来运行程序,从而提高了代码通用性。

尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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