掌桥专利:专业的专利平台
掌桥专利
首页

组态方法、数组下标越界的动态检测方法、分散控制系统

文献发布时间:2023-06-19 13:26:15


组态方法、数组下标越界的动态检测方法、分散控制系统

技术领域

本申请属于工业控制技术领域,具体涉及一种用于组态方法和数组下标越界的动态检测方法。

背景技术

结构化文本(Structured Text,ST)语言可以用于编写分散控制系统(Distributed Control System,DCS)控制器的控制程序。在DCS系统的组态过程中,将ST语言编写的控制程序编译转换为二进制文件后,连同程序的数据初始值,下载到控制器中。ST语言编写的控制程序编译转换为二进制文件的过程包括:

ST的编译程序按照变量(包括数组)的大小(数组大小为单个数组元素的大小×数组的元素数)为其分配一段连续的内存空间,包括起始偏移地址与存储空间大小;

将ST语言编写的程序转换为C语言代码,通过控制器对应的C编译器将C语言代码编译成对应的二进制文件。

ST语言中数组对象的大小由用户编写ST程序时指定,在ST代码转换后的C代码中,通过数组在内存中的起始偏移地址(指针)和数组的下标对数组的元素进行访问与操作。

由于数组的越界访问可能会修改数据区其他地址的内存值,并由此引发严重的后果,因此有必要针对数组的下标操作语句进行越界检查:当数组访问时的下标为常量表达式时,例如A[15],B[3,11],A[5+3],通过对ST代码的语法树分析,ST编译程序可以静态检测数组的下标访问是否越界;但当数组访问时的下标为变量时,例如对数组元素A[x]的访问,数组的下标变量x的值在运行时才能确定,现有的越界检查无法确认A[x]的下标x是否超出数组A的界限,进而实现内存越界检查与保护。

发明内容

(一)要解决的技术问题

鉴于现有技术的上述缺点、不足,本申请提供一种用于组态方法和数组下标越界的动态检测方法。

(二)技术方案

为达到上述目的,本申请采用如下技术方案:

第一方面,本申请实施例提供一种用于数组下标越界检查的组态方法,该方法包括:

ST编辑器生成采用结构化文本语言编写的控制程序;

ST编译器针对所述控制程序中的每个数组对象,建立相应的数组内存模型,所述数组内存模型包括数组总维度数、每一维的元素数及数组的所有元素;

所述ST编译器将所述控制程序编译转换为C语言代码,在编译转换过程中,针对下标中具有非常量表达式的数组元素,增加用于数组下标越界动态检查的代码片段,并将所述数组元素的C语言代码地址表达式嵌入到所述代码片段中;所述代码片段采用三目条件运算符实现;

C编译器将包含所述代码片段的C语言代码编译成对应的二进制文件下载至目标控制器中,以便所述目标控制器运行时按照所述三目条件运算符中的条件表达式检查数组下标是否越界。

可选地,所述条件表达式中通过自定义的CheckInd函数判断每一个非常量表达式是否下标越界,所述CheckInd函数的参数包括:数组对象的起始地址ADDR,维度序号i,第i维的非常量下标表达式IND_EXPi。

可选地,所述第i维的非常量下标表达式IND_EXPi中包含数组元素。

可选地,所述三目条件运算符中:

第一表达式中嵌入数组元素的C语言代码地址表达式;

第二表达式为预设的用于下标越界时执行的代码块。

可选地,用于下标越界时执行的代码块执行结果为预设的内存地址。

可选地,代码片段还包括数组元素的数据类型。

第二方面,本申请实施例提供一种控制程序中数组下标越界的动态检测方法,该方法包括:

控制器接收工程师站发送的控制程序,所述控制程序通过如上第一方面任一所述的用于数组下标越界检查的组态方法得到;

控制器运行时执行所述控制程序中的三目条件运算以检查数组下标是否越界。

第三方面,本申请实施例提供一种分散控制系统,包括工程师站和控制器,所述工程师站采用如上第一方面中任一项所述的用于数组下标越界检查的组态方法进行分散控制系统组态,所述控制程序采用如上第二方面所述的控制程序中数组下标越界的动态检测方法的步骤进行数组下标越界的动态检查。

第四方面,本申请实施例提供一种控制器,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上第二方面所述的控制程序中数组下标越界的动态检测方法的步骤。

第五方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上第二方面所述的控制程序中数组下标越界的动态检测方法的步骤。

(三)有益效果

本申请的有益效果是:本申请提出了一种用于数组下标越界检查的组态方法,包括:ST编辑器生成采用结构化文本语言编写的控制程序; ST编译器针对控制程序中的每个数组对象,建立相应的数组内存模型; ST编译器将控制程序编译转换为C语言代码,在编译转换过程中,针对下标中具有非常量表达式的数组元素,增加用于数组下标越界动态检查的代码片段,并将数组元素的C语言代码地址表达式嵌入到代码片段中;代码片段采用三目条件运算符实现;C编译器将包含代码片段的C语言代码编译成对应的二进制文件下载至目标控制器中,以便目标控制器运行时按照三目条件运算符中的条件表达式检查数组下标是否越界。通过本申请方法能够在控制程序运行时动态检测内存是否越界。

进一步地,下标越界时通过执行预设的代码块,避免因数组越界访问而破坏数据区其他变量的内存数据完整性,从而实现下标越界的有效保护。

附图说明

本申请借助于以下附图进行描述:

图1示出了本申请一个实施例中的用于数组下标越界检查的组态方法流程示意图;

图2示出了本申请一个实施例中的数组对象的内存模型结构示意图;

图3示出了本申请一个实施例中的3×4二维数组的内存模型结构示例图;

图4示出了本申请一个实施例中具有越界检测与保护的数组元素C 代码表达式模板示例图;

图5为本申请另一个实施例中的控制程序中数组下标越界的动态检测方法流程示意图;

图6为本申请又一个实施例中的分散控制系统结构示意图;

图7为本申请又一个实施例中的控制器的架构示意图。

具体实施方式

为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。可以理解的是,以下所描述的具体的实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合;为了便于描述,附图中仅示出了与发明相关的部分。

图1示出了本申请一个实施例中的用于数组下标越界检查的组态方法流程示意图。如图1所示,本实施例的方法包括:

S10、ST编辑器生成采用结构化文本语言编写的控制程序;

S20、ST编译器针对控制程序中的每个数组对象,建立相应的数组内存模型,数组内存模型包括数组总维度数、每一维的元素数及数组的所有元素;

S30、ST编译器将控制程序编译转换为C语言代码,在编译转换过程中,针对下标中具有非常量表达式的数组元素,增加用于数组下标越界动态检查的代码片段,并将数组元素的C语言代码地址表达式嵌入到代码片段中;代码片段采用三目条件运算符实现;

S40、C编译器将包含代码片段的C语言代码编译成对应的二进制文件下载至目标控制器中,以便目标控制器运行时按照三目条件运算符中的条件表达式检查数组下标是否越界。

本实施例的用于数组下标越界检查的组态方法,能够在控制程序运行时动态检测内存是否越界。

为了更好地理解本发明,以下对本实施例中的各步骤进行展开说明。

S10中,控制程序可以是工程师在控制逻辑组态软件进行组态编程得到的,具体的是采用结构化文本语言编写的控制程序。

S20中,数组内存模型包括数组总维度数、每一维的元素数及数组的所有元素,图2示出了本申请一个实施例中的数组对象的内存模型结构示意图,如图2所示,在为数组对象分配的连续内存中,第一部分为数组的总维度大小,接着是数组的各个维度的大小,最后是数组的所有元素,多维数组元素按照地址由低到高线性展开。其中为数组维度总数,以及每个维度的大小所分配的内存字节数,根据具体系统的限制而分配,此处仅描述其逻辑模型。图3示出了本申请一个实施例中的3×4二维数组的内存模型结构示例图。

S30中,用于数组下标越界动态检查的代码片段采用三目条件运算符实现。三目条件运算符为:条件表达式:第一表达式,第二表达式。执行时,先计算条件表达式,然后进行判断。如果条件表达式的值为true,计算第一表达式的值,运算结果为第一表达式的值;否则,计算第二表达式的值,运算结果为第二表达式的值。

本实施例中,条件表达式中通过自定义的CheckInd函数判断每一个非常量表达式是否下标越界,CheckInd函数的参数包括:数组对象的起始地址ADDR,维度序号i,第i维的非常量下标表达式IND_EXPi。

需要说明的是,第i维的非常量下标表达式IND_EXPi中也可以包含数组元素。

本实施例中,第一表达式中嵌入数组元素的C语言代码地址表达式;

本实施例中,第二表达式为预设的用于下标越界时执行的代码块。具体地,用于下标越界时执行的代码块执行结果为预设的内存地址。

本实施例中,代码片段还包括数组元素的数据类型。

本发明旨在改进数组的内存分配方式,以及在代码编译的过程中添加运行时的动态数组下标检查,来避免运行期的数组下标的越界访问与操作。

以下给出一个具体的示例。

现有的方法中,数组元素下标访问的ST语句转换为C语言代码后, C代码直接以(数组首地址+下标偏移量)的方式来访问数组的元素。若下标偏移量不是常量,这样的方式有可能会导致运行时内存越界访问。

本示例中,根据前述数组对象内存模型提供的数组维度信息,在ST 代码编译转换的过程中,当遍历到ST语法树的数组元素节点时,若当前数组元素节点的下标中有非常量表达式,则将转换出的普通的数组元素的C代码地址表达式嵌入越界保护的代码片段中。越界保护的代码可以C 语言的三目条件运算符来实现。

图4示出了本申请一个实施例中具有越界检测与保护的数组元素C 代码表达式模板示例图,保护后的数组元素的C代码表达式将转换成如图4所示形式。

以下对表达式中各个代码块进行说明。

(1)DataType

数组元素的数据类型,例如整型int、浮点型float。此处用于地址(指针)类型的转换。

(2)CheckIndices代码块

CheckIndices代码块是对每一个非常量下标的越界检查的集合,C代码的形式如式(1)所示:

(Checklnd(ADDR,DIM_SIZE1,IND_EXP1)&&...Checklnd(ADDR,DIM_SIZEn,IND_EXPn)) (1)

CheckIndices代码块中对每一个非常量下标的越界检查,其中 CheckInd函数根据图2所示的内存模型进行下标越界的检查,其中函数参数分别为:

ADDR为数组对象起始地址;

DIM_SIZEi表示维度的序号(从0开始);

IND_EXPi是第i维的非常量下标表达式;

CheckInd(ADDR,DIM_SIZEi,IND_EXPi)表示检查ADDR起始的数组对象的第DIM_SIZEi个维度的下标IND_EXPi是否合法(即下标没有越界)。只有当所有的非常量下标通过了越界检查,即式(1)表达式为真,当前数组元素的表达式(ArrayElementExp的代码)才可使用。注意,由于IND_EXPi有可能包含数组的元素,所以IND_EXPi有可能递归嵌套了图4所示的C代码片段。

(3)ArrayElementExp代码块

这一代码块是根据数组对象起始地址+数组首个元素偏移量+数组元素下标偏移量的方式转换出的数组元素的C语言表达式。由于数组元素的下标可能也是一个数组元素,所以这一代码段可能递归地嵌套了图4 所示的C代码片段。

(4)ErrorHandler代码块

ErrorHandler是错误处理程序,当CheckIndices结果失败(值为0) 的时候,错误处理程序将被调用。ErrorHandler表达式可以返回一个安全的内存地址,当程序运行出错的时候可以供操作。错误处理程序在不同的应用中有不同的处理方式,本实施例中不对此进行展开描述。

ST程序运行期的内存越界访问常常是由于编程的失误导致,一般在编程阶段难以发现与测试,而在运行期间内存越界访问的错误往往带来严重的后果。本实施例提供的组态方法可以在运行期间动态检测数组的下标访问是否越界,避免数据区其他变量的内存数据完整性因数组越界访问而破坏。

第二方面,本申请实施例提供一种控制程序中数组下标越界的动态检测方法,图5为本申请另一个实施例中的控制程序中数组下标越界的动态检测方法流程示意图,如图5所示,该方法包括:

S100、控制器接收工程师站发送的控制程序,控制程序通过如上第一方面任一种用于数组下标越界检查的组态方法得到;

S200、控制器运行时执行控制程序中的三目条件运算以检查数组下标是否越界。

本实施例中,控制器负责从现场采集数据,执行控制逻辑运算,向输入/输出设备输出控制指令,并与上位机操作员站进行数据交互。

进一步地,本方法还包括:

S300、根据检测结果,访问相应的数组元素或访问预设的内存地址。

本实施例提供了一种ST程序数组元素运行时越界操作的检测与保护方法,相比现有的编译期静态内存越界检测方法,新增了在程序运行期对内存中程序数据的保护。

第三方面,本申请实施例提供一种分散控制系统;图6为本申请又一个实施例中的分散控制系统结构示意图,如图6所示,该系统包括工程师站和控制器,工程师站采用如上第一方面中任一种用于数组下标越界检查的组态方法进行分散控制系统组态,控制程序采用如上第二方面任一种控制程序中数组下标越界的动态检测方法的步骤进行数组下标越界的动态检查。

本实施例公开了一种分散控制系统,在工程师站上进行组态过程中,改进数组的内存分配方式,以及在代码编译的过程中添加运行时的动态数组下标检查,从而在控制器运行时防止数组越界操作。运行时的数组越界检测与保护可以有效地防止由于ST程序编写时的人为错误导致的内存非法访问,避免由此导致的控制器运行错误。

第四方面,本申请实施例提供一种控制器,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现如上第二方面所述的控制程序中数组下标越界的动态检测方法的步骤。

图7为本申请又一个实施例中的控制器的架构示意图。

图7所示的控制器可包括:至少一个处理器101、至少一个存储器 102、至少一个网络接口104和其他的用户接口103。控制器中的各个组件通过总线系统105耦合在一起。可理解,总线系统105用于实现这些组件之间的连接通信。总线系统105除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线系统105。

其中,用户接口103可以包括显示器、键盘或者点击设备(例如,鼠标,轨迹球(trackball)或者触感板等。

可以理解,本实施例中的存储器102可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-OnlyMemory,ROM)、可编程只读存储器 (ProgrammableROM,PROM)、可擦除可编程只读存储器(ErasablePROM, EPROM)、电可擦除可编程只读存储器(ElectricallyEPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(RandomAccessMemory, RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(StaticRAM,SRAM)、动态随机存取存储器(DynamicRAM,DRAM)、同步动态随机存取存储器(SynchronousDRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(DoubleDataRateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(EnhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器 (SynchlinkDRAM,SLDRAM)和直接内存总线随机存取存储器 (DirectRambusRAM,DRRAM)。本文描述的存储器62旨在包括但不限于这些和任意其它适合类型的存储器。

在一些实施方式中,存储器102存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统1021和应用程序1022。

其中,操作系统1021,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序 622,包含各种应用程序,用于实现各种应用业务。实现本发明实施例方法的控制程序可以包含在应用程序1022中。

在本发明实施例中,处理器101通过调用存储器102存储的程序或指令,具体的,可以是应用程序1022中存储的程序或指令,处理器101 用于执行第一方面所提供的方法步骤。

上述本发明实施例揭示的方法可以应用于处理器101中,或者由处理器101实现。处理器101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器101可以是通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecific IntegratedCircuit,ASIC)、现成可编程门阵列(FieldProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器102,处理器101 读取存储器102中的信息,结合其硬件完成上述方法的步骤。

另外,结合上述实施例中的控制程序中数组下标越界的动态检测方法,本发明实施例可提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上方法实施例中的任意一种控制程序中数组下标越界的动态检测方法的步骤。

应当注意的是,在权利要求中,不应将位于括号之间的任何附图标记理解成对权利要求的限制。词语“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的词语“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。词语第一、第二、第三等的使用,仅是为了表述方便,而不表示任何顺序。可将这些词语理解为部件名称的一部分。

此外,需要说明的是,在本说明书的描述中,术语“一个实施例”、“一些实施例”、“实施例”、“示例”、“具体示例”或“一些示例”等的描述,是指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

尽管已描述了本发明的优选实施例,但本领域的技术人员在得知了基本创造性概念后,则可对这些实施例作出另外的变更和修改。所以,权利要求应该解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种修改和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也应该包含这些修改和变型在内。

相关技术
  • 组态方法、数组下标越界的动态检测方法、分散控制系统
  • 一种分散控制系统离线组态对比方法和系统
技术分类

06120113678579