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

一种编译型PLC程序的在线调试方法

文献发布时间:2024-04-18 19:58:53


一种编译型PLC程序的在线调试方法

技术领域

本发明涉及一种PLC程序调试方法,特别是一种编译型PLC程序的在线调试方法。

背景技术

目前市场上,基于PLC硬件的编程软件大多基于符合IEC-61131-3标准的编程语言(ST,FBD,SFC,LD,IL,以下简称编程语言)。标准规定了编程语言,对于在PLC上的运行时,目前分为编译型以及动态运行两种方式,编译型将编程语言编译为目标平台的二进制代码,或编译为指定虚拟机的字节码。由于编程语言众多,一般会将多种编程语言转换为一种语言(一般为ST),然后对生成结果再进行后续操作。目前,多数PLC编程软件仅支持ST调试,不支持其它形式语言的调试,一些方案依赖于PLC运行时(RTE)读取加载调试信息,对PLC的主频要求较高,且为PLC运行时增加了不需要的负担。还有一些方案依赖于对编译前的代码进行插入,导致生成的文件体积庞大,不利于中小型PLC的使用。

因此,现有的技术存在着调试麻烦的问题。

发明内容

本发明的目的在于,提供一种编译型PLC程序的在线调试方法。本发明具有调试方便且快速的特点。

本发明的技术方案:一种编译型PLC程序的在线调试方法,一种编译型PLC程序的在线调试方法,其特征在于,包括以下步骤:

S1、上位机软件编译FBD用户程序,并构建对应关系语法树,生成可执行二进制的用户程序;

S2、上位机软件下载用户程序到PLC控制器,PLC控制器运行时加载用户程序并运行;

S3、用户在上位机软件中对用户程序进行断点;当上位机软件开启调试模式后,上位机软件读取项目中的程序文件,获取每个程序文件的对应关系语法树,获取断点的内存地址;

S4、通过通信协议将断点的内存地址发送给PLC控制器运行时,PLC控制器运行时在断点的相对内存地址保存当前的指令,随后将当前指令替换为目标平台上的调试中断指令;

S5、当用户程序运行到断点处时,用户程序将引发调试中断,由PLC控制器运行时接管,PLC控制器运行时将内存地址的当前指令还原,并通知上位机已进入断点模式;

S6、用户在上位机软件点击下一步,上位机软件查找当前断点的下一条表达式的内存地址并通讯PLC控制器运行时,PLC控制器运行时执行新断点的内存替换,退出调试状态并继续运行用户程序。

前述的一种编译型PLC程序的在线调试方法中,上位机软件编译FBD用户程序的过程为:

S11)分析ST块,每个FBD块都对应一条或多条ST语句,根据FBD块创建一个语法关系树对象,将Block的标识符填写到BlockId;

S12)依次转换FBD块为ST表达式;

S13)将FBD块的对应ST表达式填充到FBD语法关系树对象的Expressions数组中;

S14)将各种语言生成的ST表达式转换为C语言表达式,并写入C语言源文件;

S15)将ST表达式的对应C语言源文件填充到ST表达式的语法关系树对象的Expressions中,并填写生成的C语言源文件行号;

S16)编译生成的C语言源文件为可执行二进制用户程序。

前述的一种编译型PLC程序的在线调试方法中,步骤S3中,断点的内存地址获取的方法为:

S31)、上位机软件通过FBD的BlockId查找对应关系树对象;

S32)、查找ST对应关系树对象的Expressions,取出第一条ST表达式对象;

S33)、查找ST对应关系树对象的Expressions,取出第一条C语言表达式对象;

S34)、根据C语言表达式对象的Line获取C语言代码的行号;

S35)、通过C语言代码的行号,通过C语言编译的调试文件找到C语言指令的内存地址。

与现有技术相比,本发明通过上位机软件在编译流程中记录转换关系,构建对应关系语法树,通过对语法对应关系树的生成,实现任意IEC-61131-3语言编译后仍可进行断点调试,并由PLC控制器通过内存指令来实现处理断点指令。本发明可以兼容任意的IEC-61131-3语言,并且不需要对PLC控制器程序进行大的改动,对用户程序产生的二进制编译文件大小没有任何影响,对用户程序的运行速度没有任何影响,可以让性能较差PLC控制器快速实现在线调试功能,极大提升了上位机软件的可用性,提高开发人员的使用体验,帮助快速定位问题代码。综上所述,本发明具有调试方便且快速的特点。

附图说明

图1是本发明的流程示意图;

图2是本发明表达式对应关系语法树图。

具体实施方式

下面结合附图和实施例对本发明作进一步的说明,但并不作为对本发明限制的依据。

实施例。一种编译型PLC程序的在线调试方法,构成如图1和2所示,PLC系统中具有上位机软件和PLC控制器运行时,PLC控制器运行时负责装载上位机软件编译后产生的二进制程序文件并执行。在编译时,上位机软件在编译流程中记录转换关系,构建对应关系语法树,由于语言之间不是一对一关系,如一个FBD块可以对应多个ST语句,因此在编译流程中,通过保留对应的关系(如图2所示),FBD的一个表达式可以对应多条ST语句,而ST表达式也可以对应多个C表达式,因此通过对应关系语法树,可以得知FBD表达式对应的C语言表达式的行数,而不管中间经历过多少转换流程。当上位机软件开启调试模式后,读取项目中的程序文件,获取每个程序的对应关系语法树,当用户进行断点时,如对FBD语言进行断点,则查找FBD的Expressions来获取转换后的ST的表达式,虽然一条FBD表达式可能对应多条ST表达式,但对于断点来说,只需要关注第一条表达式即可,因此取出第一个ST表达式,再继续查找ST表达式的Expressions数组,取出第一条C语言表达式,由于C语言表达式为最终节点,因此读取该节点的Line,即是FBD表达式对应的C语言表达式行号,随后根据C语言调试信息,获取该行断点的内存地址。通过通信协议发送给PLC控制器运行时,PLC控制器运行时在断点的相对内存地址保存当前的指令,随后将当前指令替换为目标平台上的调试中断指令,当PLC程序运行到断点处时,由于由于写入了对应平台中断指令,控制器将进入调试中断,由PLC控制器运行时接管,PLC控制器运行时将内存地址的当前指令还原,并通知上位机已进入断点模式。当上位机使用下一步功能时,上位机寻找下一条指令的位置,并通知PLC控制器运行时,由于PLC控制器运行时已将上一条指令还原,因此只需执行新的断点指令,然后返回到用户程序即可。随后便会进入下一个断点。

本申请的具体步骤如下:在上位机软件编写FBD用户程序

1)编译用户程序

1.1、分析ST块,每个FBD块都对应一条或多条ST语句,根据FBD块创建一个语法关系树对象,将该Block的标识符填写到BlockId。

1.2、依次转换FBD块为ST表达式。

1.3、将该FBD块的对应ST表达式填充到FBD语法关系树对象的Expressions数组中。

1.4、将各种语言生成的ST表达式转换为C语言表达式,并写入C语言源文件。

1.5、将ST表达式的对应C语言填充到ST表达式的语法关系树对象的Expressions中,并填写生成的C语言源文件行号。

1.6、编译生成的C语言源文件为可执行二进制用户程序。

1.7、上位机软件下载用户程序到PLC控制器,PLC控制器运行时加载用户程序并运行;

2)、用户在上位机软件,对FBD打下断点

2.1、上位机软件通过FBD的BlockId查找对应关系树对象;

2.2、查找ST对应关系树对象的Expressions,取出第一条ST表达式对象;

2.3、查找ST对应关系树对象的Expressions,取出第一条C语言表达式对象;

2.4、根据C语言表达式对象的Line获取C语言代码的行号Line;

2.5、通过C语言代码的行号,通过C语言编译的调试文件找到C语言指令的内存地址;

2.6、上位机软件通讯PLC控制器运行时,传输内存地址,PLC控制器运行时保存该内存地址的指令,PLC控制器运行时将该内存地址的指令替换为调试断点指令,用户程序运行到调试断点指令,用户程序引发调试中断,进入PLC控制器运行时,PLC控制器运行时将指定内存地址的指令替换回去;

2.7、PLC控制器通讯上位机软件已进入断点,用户在上位机软件点击下一步,上位机软件查找当前断点的下一条表达式的内存地址并通讯PLC控制器运行时PLC控制器运行时执行新断点的内存替换,退出调试状态并继续运行用户程序。

相关技术
  • 一种多CPU架构的可视化编译调试系统及方法
  • 一种编译型软PLC的在线调试实现方法
  • 一种编译型软PLC的在线调试实现方法
技术分类

06120116512399