一种函数调试方法、装置、设备及存储介质制造方法及图纸

技术编号:38670061 阅读:10 留言:0更新日期:2023-09-02 22:48
本发明专利技术公开一种函数调试方法、装置、设备及存储介质,将结构化文本函数的语言代码转换为C语言,并在转换过程中嵌入数据记录C函数;对转换得到的C代码进行编译解析,并对每一条语句命令进行调试。此种技术方案在结构化文本转换为C语言的过程中,自动嵌入函数数据镜像记录C函数,实现单步调试过程中,函数形参变量、局部变量值的记录、上送、刷新显示,解决了IEC61131

【技术实现步骤摘要】
一种函数调试方法、装置、设备及存储介质


[0001]本专利技术属于可编程控制器领域,具体涉及一种IEC61131

3标准编写的函数单步调试方法,以及相应的调试装置、设备及计算机可读存储介质。

技术介绍

[0002]IEC61131

3标准定义了函数、功能块。函数(Function)不像功能块(Function Block)有数据结构体,函数有输入变量、返回值、本地变量(VAR)。声明为VAR类型变量,定义为函数内局部变量。通常用堆栈帧(Stack Frame)或活动记录(Activate Record)表示函数调用所需维护的信息,如图1所示,堆栈帧一般包括如下内容:
[0003]函数的返回地址和参数;
[0004]临时变量:函数的非静态变量、编译器自动生成的其它临时变量;
[0005]保存的上下文:在函数调用前后需要保持不变的寄存器。
[0006]通常用esp寄存器指向当前函数的活动记录的顶部,ebp指向返回地址。
[0007]由于一些编译器(例如cl.exe)对于函数局部变量地址分配并非按照声明顺序,而是根据变量类型和语句生命周期会重排复用,则无法根据运行时刻ebp地址获取各个局部变量的临时地址,无法实现单步调试功能,而单步调试对于复杂程序的诊断、问题定位有很大价值。故需要生成并嵌入插桩函数,根据输入变量声明顺序类型、本地变量声明顺序类型、函数返回值类型,形成本地变量写函数,计算出存储空间,上送整帧数据,组态软件根据变量声明顺序和字长,按照顺序解析和填写变量值。

技术实现思路

[0008]本专利技术的目的,在于提供一种函数调试方法、装置、设备及存储介质,能够实现IEC61131

3函数的单步调试,提升可编程控制器的程序调试效率。
[0009]为了达成上述目的,本专利技术的解决方案是:
[0010]一种函数调试方法,包括如下步骤:
[0011]步骤一,将结构化文本函数的语言代码转换为C语言,并在转换过程中嵌入数据记录C函数;
[0012]步骤二,对转换得到的C代码进行编译解析,并对每一条语句命令进行调试。
[0013]上述步骤一的具体内容是,
[0014]步骤11,获取结构化文本函数变量信息,包括函数形参名/形成类型、本地变量名称/类型、函数返回值类型,自动形成数据记录C函数;
[0015]步骤12,数据记录C函数将结构化文本函数的变量值依次填写到数据缓冲区;
[0016]步骤13,将结构化文本函数转换为对等的C函数,每行C代码前面插入状态判断语句,每行C代码后面插入数据记录C函数的调用语句,从而得到转换后包含若干条语句命令的C代码。
[0017]上述步骤二的具体内容是,
[0018]步骤21,调用编译器编译转换处理后的C代码,下载目标文件到控制器运行,进入单步运行调试模式;
[0019]步骤22,控制器执行完一行C代码后,调用数据记录C函数,完成当前数据值记录并将数据帧发送给组态软件,组态软件接收后解析数据,刷新显示变量值;
[0020]步骤23,控制器等待执行下一条语句命令;组态软件获取鼠标/键盘事件,下发执行下一条语句命令;直至运行到函数尾部。
[0021]一种函数调试装置,包括,
[0022]转换嵌入模块,用于将结构化文本函数的语言代码转换为C代码,并在转换过程中嵌入数据记录C函数;及,
[0023]编译调试模块,用于对转换得到的C代码进行编译解析,并对每一条语句命令进行调试。
[0024]上述转换嵌入模块包括,
[0025]数据记录C函数形成模块,用于获取结构化文本函数的变量信息,包括函数形参名/形成类型、本地变量名称/类型、函数返回值类型,形成数据记录C函数;
[0026]数据记录C函数嵌入模块,用于将前述数据记录C函数所包含的结构化文本函数的变量信息依次填写到数据缓冲区;以及,
[0027]C代码转换模块,用于将结构化文本函数转换为对等的C函数,并在每行C代码前面插入状态判断语句,每行C代码后面插入数据记录C函数的调用语句,从而得到转换后包含若干条语句命令的C代码。
[0028]上述编译调试模块包括,
[0029]编译模块,用于对所述转换嵌入模块得到的C代码进行编译;以及,
[0030]调试模块,用于对编译后的C代码进行调试;首先下载目标文件到控制器,控制器执行完一条语句命令后,调用数据记录C函数,完成当前数据值记录并将数据帧发送给组态软件,组态软件接收后解析数据,刷新显示变量值;然后控制器等待执行下一条语句命令;组态软件获取鼠标/键盘事件,下发执行下一条语句命令;直至运行到函数尾部。
[0031]一种函数调试设备,包括存储器、处理器,以及存储在所述存储器中并可在所述处理器上运行的计算机程序;所述处理器执行所述计算机程序时实现如前所述的函数调试方法的步骤。
[0032]一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序;所述计算机程序被处理器执行时实现如前所述的函数调试方法的步骤。
[0033]采用上述方案后,本专利技术具有如下有益效果:在结构化文本转换为C语言的过程中,自动嵌入函数数据镜像记录C函数,实现单步调试过程中,函数形参变量、局部变量值的记录、上送、刷新显示,解决了IEC61131

3的函数无法单步调试问题,提升了可编程控制器的程序调试效率。
附图说明
[0034]图1是本专利技术中函数帧栈原理图;
[0035]图2是本专利技术中函数调试插桩原理图;
[0036]图3是本专利技术中函数插桩调试示例图。
具体实施方式
[0037]以下将结合附图,对本专利技术的技术方案及有益效果进行详细说明。
[0038]本专利技术实施例提供一种函数调试方法,在结构化文本语言代码转换为C语言的阶段,嵌入数据记录函数,在每行代码执行之后记录和刷新显示函数形参、本地变量的当前值;配合图2所示,具体包括如下步骤:
[0039]步骤一,将结构化文本函数的语言代码转换为C语言,并在转换过程中嵌入数据记录C函数;具体包括:
[0040]11)获取结构化文本函数变量信息,包括函数形参名/形成类型、本地变量名称/类型、函数返回值类型;
[0041]12)自动形成数据记录C函数(writeLocalVar),该函数将结构化文本函数的变量值依次填写到数据缓冲区;
[0042]13)将结构化文本函数转换为对等的C函数,每行C代码前面插入状态判断语句,每行C代码后面插入数据记录C函数的调用语句,从而得到转换后包含若干条语句命令的C代码;
[0043]步骤二,对转换得到的C代码进行编译解析,并对每一条语句命令进行调试;具体包括:
[0044]21)调用编译器编译转换处理后的C代码,下载目标文件到控制器运行,进入单步运行调试模式;
[0045]22)控制器本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种函数调试方法,其特征在于包括如下步骤:步骤一,将结构化文本函数的语言代码转换为C语言,并在转换过程中嵌入数据记录C函数;步骤二,对转换得到的C代码进行编译解析,并对每一条语句命令进行调试。2.如权利要求1所述的函数调试方法,其特征在于:所述步骤一的具体内容是,步骤11,获取结构化文本函数变量信息,包括函数形参名/形成类型、本地变量名称/类型、函数返回值类型,自动形成数据记录C函数;步骤12,数据记录C函数将结构化文本函数的变量值依次填写到数据缓冲区;步骤13,将结构化文本函数转换为对等的C函数,每行C代码前面插入状态判断语句,每行C代码后面插入数据记录C函数的调用语句,从而得到转换后包含若干条语句命令的C代码。3.如权利要求1所述的函数调试方法,其特征在于:所述步骤二的具体内容是,步骤21,调用编译器编译转换处理后的C代码,下载目标文件到控制器运行,进入单步运行调试模式;步骤22,控制器执行完一行C代码后,调用数据记录C函数,完成当前数据值记录并将数据帧发送给组态软件,组态软件接收后解析数据,刷新显示变量值;步骤23,控制器等待执行下一条语句命令;组态软件获取鼠标/键盘事件,下发执行下一条语句命令;直至运行到函数尾部。4.一种函数调试装置,其特征在于:包括,转换嵌入模块,用于将结构化文本函数的语言代码转换为C代码,并在转换过程中嵌入数据记录C函数;及,编译调试模块,用于对转换得到的C代码进行编译解析,并对每一条语句命令进行调试。5.如权利要求4所述的函数...

【专利技术属性】
技术研发人员:张磊陈宏君曾凯叶立文李响周磊谭良良韩科文
申请(专利权)人:南瑞集团有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1