一种编译型软PLC的在线调试实现方法转让专利

申请号 : CN201110369506.6

文献号 : CN103123598B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李忠琪杨东升刘明烈

申请人 : 中国科学院沈阳计算技术研究所有限公司

摘要 :

本发明涉及到工业自动控制领域,具体的是一种编译型软PLC的在线调试实现方法。梯形图翻译程序将PLC梯形图翻译成具有特殊结构的高级语言程序,并调用高级语言编译器编译生成可执行模块,等待PLC运行管理模块调用;PLC运行管理模块动态调用编译生成的可执行模块;在PLC编辑界面增添调试界面用来进行人机交互;PLC运行管理模块根据高级语言可执行模块中梯形图程序带有的信息与人机交互调试界面传递进来的界面操作信息动态的执行梯形图中的程序。本发明利用本发明方法可以使编译型的软PLC具备添加断点,单步执行的在线调试功能,具备在线调试功能的软PLC在工程开发中将具备更高的效率。

权利要求 :

1.一种编译型软PLC的在线调试实现方法,其特征在于,包括以下步骤:

步骤1:梯形图翻译程序将PLC梯形图翻译成高级语言程序,并调用高级语言编译器编译生成可执行模块,等待PLC运行管理模块调用;

步骤2:PLC运行管理模块动态调用编译生成的可执行模块;

步骤3:在PLC编辑界面增添调试界面用来进行人机交互;

步骤4:PLC运行管理模块根据高级语言可执行模块中梯形图程序带有的信息与人机交互调试界面传递进来的界面操作信息动态的执行梯形图中的程序;

所述步骤1具体为:使用梯形图翻译程序将梯形图程序翻译成每个梯形图程序行为一个高级语言函数;定义一种数据结构包含一个函数指针变量代表一行梯形图程序的高级语言函数的入口地址和一个变量代表该行是否具有断点;梯形图翻译程序根据梯形图的行数定义一个一维结构体数组,该数组的成员个数为梯形图的行数;生成高级语言配置程序将生成的与梯形图程序行对应的高级语言函数的入口地址依次写入到如上描述的一维结构体数组中的各个元素中的函数入口地址变量中;将是否带有断点信息填写到该行结构体数组元素中的断点信息变量中。

2.根据权利要求1所述的一种编译型软PLC的在线调试实现方法,其特征在于,所述PLC运行管理模块通过通讯方式获得代表PLC逻辑程序高级语言可执行模块中的函数结构数组的首地址;并根据该结构数组中元素的位置,即梯形图程序行自上而下的顺序依次执行程序;PLC运行管理模块与PLC人机交互界面进行运行状态信息的交互。

3.根据权利要求1所述的一种编译型软PLC的在线调试实现方法,其特征在于,所述人机交互调试界面具有在梯形图程序行后面添加断点的功能;将添加的断点信息通过通信方式发送给PLC运行管理模块;具有单步运行模式和连续运行模式两种模式,可以动态的在两种状态下切换;可以响应用户继续运行的请求,将该请求通知PLC运行管理模块,并且处理运行管理程序返回的状态。

4.根据权利要求1所述的一种编译型软PLC的在线调试实现方法,其特征在于,所述PLC运行管理模块与PLC人机交互调试界面的交互过程为:当前为单步运行模式,人机交互界面将单步执行状态通信信号置为单步状态;

PLC运行管理模块在单步运行状态下每次只执行一个梯形图程序行;

当按下运行按钮后,人机交互界面将运行状态通信信号置为运行状态;

PCL运行管理程序看到该状态后,继续向下执行一个梯形图程序行,并将运行完成通信信号置为完成;

人机界面看到运行完成后,将运行状态通信信号置为非运行;

PLC运行管理模块看到运行状态信号置为非运行后,将运行完成通信信号置为未完成,整个状态恢复到初始状态;

在调试界面中,单步运行模式下,或者在PLC未运行的情况下,用户可以在梯形图上动态的添加断点,人机交互程序将断点的信息通过通信方式发给PLC运行管理模块;

PLC运行管理模块获得断点信息后,分析该信息,并且改变对应的结构体中的断点标志变量;

PLC运行管理模块在运行时根据上述断点标志变量判断该行是否具有断点;如果该行具有断点,PLC运行管理模块将停止继续向下执行;等待运行状态通信信号被人机交互界面置为运行后,再继续向下执行到下一个断点处。

说明书 :

一种编译型软PLC的在线调试实现方法

技术领域

[0001] 本发明涉及到工业自动控制领域,具体的是一种编译型软PLC的在线调试实现方法。

背景技术

[0002] 随着工业的发展,PLC由于其自身具有可编程并且编程语言通用、模块化、可复用等特点在自动控制领域得到了广泛的应用。
[0003] 梯形图语言是IEC61131-3标准中定义的五种语言之一。并且由于其具有编程符号可以与电器符号相对应的特点,所以成为电器工程师与机械工程师最熟悉最常用的一种PLC编程语言。
[0004] PLC的程序是周期执行的,对于传统的梯形图语言来说其并不具备和高级语言例如C语言一样的调试功能。程序调试人员必须通过监视关键点的状态判断程序执行的情况,如果与设计有出入必须重新编写程序重新运行调试。这不仅使程序调试的难度和工作量非常大,也使整个工程的实现周期增长。
[0005] 为了提高PLC程序调试的效率,需要使其具有类似C语言等高级编程语言的调试功能,如设置断点,单步执行等,以方便在程序的调试过程中判断程序的正确走向与状态。

发明内容

[0006] 针对现有PLC程序无法在执行时动态进行调试的不足之处,本发明要解决的技术问题是提供一种能够实现PLC梯形图程序可以在执行时实现类似高级语言的调试功能的编译执行方法。
[0007] 本发明为实现上述目的所采用的技术方案是:一种编译型软PLC的在线调试实现方法,包括以下步骤:
[0008] 步骤1:梯形图翻译程序将PLC梯形图翻译成具有特殊结构的高级语言程序,并调用高级语言编译器编译生成可执行模块,等待PLC运行管理模块调用;
[0009] 步骤2:PLC运行管理模块动态调用编译生成的可执行模块;
[0010] 步骤3:在PLC编辑界面增添调试界面用来进行人机交互;
[0011] 步骤4:PLC运行管理模块根据高级语言可执行模块中梯形图程序带有的信息与人机交互调试界面传递进来的界面操作信息动态的执行梯形图中的程序。
[0012] 所述步骤1具体为:使用梯形图翻译程序将梯形图程序翻译成每个梯形图程序行为一个高级语言函数;定义一种数据结构包含一个函数指针变量代表一行梯形图程序的高级语言函数的入口地址和一个变量代表该行是否具有断点;梯形图翻译程序根据梯形图的行数定义一个上述的一维结构体数组,该数组的成员个数为梯形图的行数;生成高级语言配置程序将生成的与梯形图程序行对应的高级语言函数的入口地址依次写入到如上描述的结构体数组中的各个元素中的函数入口地址变量中;将是否带有断点信息填写到该行结构体数组元素中的断点信息变量中。
[0013] 所述PLC运行管理模块通过通讯方式获得代表PLC逻辑程序高级语言可执行模块中的函数结构数组的首地址;并根据该结构数组中元素的位置,即梯形图程序行自上而下的顺序依次执行程序;PLC运行管理模块与PLC人机交互界面进行运行状态信息的交互。
[0014] 所述人机交互调试界面具有在梯形图程序行后面添加断点的功能;将添加的断点信息通过通信方式发送给PLC运行管理模块;具有单步运行模式和连续运行模式两种模式,可以动态的在两种状态下切换;可以响应用户继续运行的请求,将该请求通知PLC运行管理模块,并且处理运行管理程序返回的状态。
[0015] 所述PLC运行管理模块与PLC人机交互调试界面的交互过程为:
[0016] 当前为单步运行模式,人机交互界面将单步执行状态通信信号置为单步状态;
[0017] PLC运行管理模块在单步运行状态下每次只执行一个梯形图程序行;
[0018] 当按下运行按钮后,人机交互界面将运行状态通信信号置为运行状态;
[0019] PCL运行管理程序看到该状态后,继续向下执行一个梯形图程序行,并将运行完成通信信号置为完成;
[0020] 人机界面看到运行完成后,将运行状态通信信号置为非运行;
[0021] PLC运行管理模块看到运行状态信号置为非运行后,将运行完成通信信号置为未完成。整个状态恢复到初始状态;
[0022] 在调试界面中,单步运行模式下,或者在PLC未运行的情况下,用户可以在梯形图上动态的添加断点。人机交互程序将断点的信息通过通信方式发给PLC运行管理模块;
[0023] PLC运行管理模块获得断点信息后,分析该信息,并且改变对应的如权利要求3中所述的结构体中的断点标志变量;
[0024] PLC运行管理模块在运行时根据上述断点标志变量判断该行是否具有断点。如果该行具有断点,PLC运行管理模块将停止继续向下执行。等待运行状态通信信号被人机交互界面置为运行后,再继续向下执行到下一个断点处。
[0025] 本发明具有以下优点:
[0026] 1.利用本发明方法可以使编译型的软PLC具备添加断点,单步执行的在线调试功能。
[0027] 2.具备在线调试功能的软PLC在工程开发中将具备更高的效率。在外部硬件或者功能要求有变化时,具有调试功能的PLC可以使程序修改工作变得更轻松,并且准确,降低由于程序逻辑上的失误造成事故的几率。

附图说明

[0028] 图1为本发明方法流程图;
[0029] 图2为本发明PLC运行管理模块的实现方法流程图;
[0030] 图3为本发明PLC人机交互界面与运行管理程序之间的状态交互图。

具体实施方式

[0031] 下面结合附图及实施例对本发明做进一步的详细说明。
[0032] 如图1所示,本发明包括以下步骤:
[0033] 步骤1:梯形图翻译程序将PLC梯形图翻译成具有特殊结构的高级语言程序,并调用高级语言编译器编译生成可执行模块,等待PLC运行管理模块调用;
[0034] 步骤2:PLC运行管理模块动态调用编译生成的可执行模块;
[0035] 步骤3:在PLC编辑界面增添调试界面用来进行人机交互;
[0036] 步骤4:PLC运行管理模块根据高级语言可执行模块中梯形图程序带有的信息与人机交互调试界面传递进来的界面操作信息动态的执行梯形图中的程序。
[0037] 在PLC梯形图编辑界面编程人员可以在梯形图中的需要停止的程序行后面添加断点,并通过命令发送给PLC运行管理模块。
[0038] 梯形图翻译器将带梯形图文件翻译成带有断点信息标志特殊的高级语言程序。该高级语言程序具有如下特征(以下以C语言程序举例):
[0039] 梯形图的每一行程序将生成一个函数,函数的名称中将包含行号信息,例如:void_PLC_LAD_0001(void)
[0040] 定义一维结构体数组,数组元素的个数为梯形图行数。
[0041] 结构体定义如下:
[0042]
[0043] PLC梯形图程序行函数入口指针定义如下:
[0044] typedef void*(*FUN)(void);
[0045] 如果梯形图程序为190行编译程序定义结构数组:
[0046] LADLINE lad[190];
[0047] 梯形图翻译程序生成配置程序将每行函数的地址填入到lad[190]中的每个元素的PLCline变量中去。
[0048] 生成的高级语言程序交给高级语言编译器生成可执行的模块,在运行时动态的被运行管理程序调用执行。
[0049] 运行管理程序根据图2所示将梯形图首行函数的入口地址写入到当前执行行变量中等待条件满足时执行使用。
[0050] 建立通信用变量单步运行状态StepState并初始化为0。该变量表示了当前是否为单步状态,并且是否可以继续向下执行。
[0051] 判断人机交互界面是否按下运行按钮,通过通信变量RunState是否为1判断。如图3所示,当按下运行按钮后会将该变量置为1。当该变量为1时表示运行单步运行状态置1,通知下面的程序需要继续向下执行。该变量为0时表示没有按下运行按钮,将运行完成信号清0。
[0052] 当单步运行状态为1时,表示不满足运行条件,无法继续执行下面的梯形图程序,所以返回等待按下运行按钮时执行。
[0053] 单步运行状态为0时,表示当前满足单步执行条件,或者没在单步执行模式下。判断当前行程序是否设置了断点。如果设置了断点则继续等待人机交互界面按下运行按钮。如果没有设置断点或者设置了断点并且按下运行按钮,这时满足执行程序条件,则执行当前行curline指向的函数。并且将运行完成信号RunFinish置为1,通知人机交互界面程序按下运行的指令已经执行完毕。如图3所示,人机交互界面在监测到RunFin信号为1后,将运行状态RunState清零表示上一次的命令已经全部完成。如图1所示,下一个周期运行管理程序会将RunFinish信号清零,使程序恢复到初始状态。
[0054] 运行完当前行后,判断当前行是否为该梯形图程序的最后一行,如果是则退出程序等待下个周期再次调用程序。如果不是,则将下一行梯形图程序的函数入口赋值给当前执行行cunline保存等待周期满足执行条件时调用。