一种基于soc的plc在线调试系统和方法
【技术领域】
[0001]本发明涉及工业自动控制领域,具体地,涉及一种基于SOC的PLC在线调试系统和方法。
【背景技术】
[0002]随着自动控制技术的发展,可编程逻辑控制器(PLC)已经越来越多的应用在各个行业领域中,标准化水平越来越高。目前,已形成了 PLC控制器典型结构、编程语言、通信、用户使用导则等系列国际标准(IEC61131)。其中,以编程语言标准(IEC61131-3)最为广泛应用,大部分可编程控制器支持该标准的五种语言,包括IL、ST、LD、FBD和SFC,其中IL、ST为文本语言,LD, FBD, SFC为图形化语言。
[0003]在实际应用中,要求在PLC控制系统调试时能模拟各种运行情况,检验程序设计的正确性及完备性。目前实现的PLC调试方案主要分为:离线调试和在线调试。
[0004]⑴离线调试
[0005]通常情况下,离线调试采用离线模拟仿真,并且离线模拟仿真功能一般只能在PLC后台控制端实现。离线模拟仿真需要在PLC后台控制端创建与该PLC具有类似功能的软件模拟PLC。用户将编写的程序模拟下载到软件模拟PLC,软件模拟PLC按照指令功能模拟执行用户程序,在执行过程中,用户可以及时发现问题和修改用户程序,达到调试的目的。
[0006]但离线调试存在如下缺点:
[0007]①离线调试需要PLC控制端创建与实际PLC功能完全相同的软件模拟PLC,存在开发难度大、开发周期长和功能不完全一致的问题。
[0008]②软件模拟PLC功能和真实的PLC产品功能存在同步问题。真实PLC产品功能升级或修改,软件模拟PLC必须同步更新。如果没有同步更新,在实际仿真过程中就会出现偏差或者错误,误导用户。
[0009]③离线调试的用户程序还是需要在实际应用现场进一步的调试和修改。
[0010]⑵在线调试
[0011]在线调试通常是采用软件断点方式,通过在代码中设置特征值的方式来实现的。当需要在某地址代码处设置软件断点的时候,仿真器会先将此处代码进行备份保护,然后将预先设定好的断点特征值(一般为0x0000等不易与代码混淆的值)写入此地址,覆盖原来的代码数据。当程序运行到此特征值所在的地址时,PLC识别出此处是一个软断点,便会产生中断。当取消断点时,之前受保护的代码信息会被自动恢复。
[0012]但此调试方法存在如下缺点:
[0013]①软件断点由于需要修改相应地址的值,所以一般只能设在RAM上。而随着系统的代码量越来越大,特别是在SOC系统,扩充大容量的RAM势必会增加产品的成本。
[0014]②现在很多系统直接在Flash上运行代码,对于这种在Flash上运行代码的系统,若要设置软断点,则操作相当复杂,且耗时较大,还会折损Flash的寿命。
【发明内容】
[0015]本发明的目的在于针对现有PLC调试系统实现方法的不足,设计一种资源少、易开发、速度快、可靠性高、适合SOC的在线调试系统和方法,实现PLC文本语言和图形化语言的在线调试。
[0016]根据本发明提供的一种基于SOC的PLC在线调试方法,包括:
[0017]步骤I,上位机系统中的程序编译模块将待测试程序的代码转换成用户程序的代码输出至SOC系统中的存储器,所述用户程序由预设的二进制代码构成;
[0018]步骤2,上位机系统的第一调试模块响应外部输入向SOC系统中的嵌入式微处理器IP核发送调试指令或配置指令;
[0019]步骤3,所述嵌入式微处理器IP核响应所述配置指令对SOC系统中的PLC控制器IP核进行配置后返回步骤2,或响应所述调试指令在调试模式下控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,
[0020]执行中遇到断点或完成所述调试指令后所述PLC控制器IP核暂停执行并向所述第一调试模块发送反馈,返回步骤2 ;
[0021]其中,步骤3中所述PLC控制器IP核执行所述用户程序的二进制代码时,同步与断点信息列表中的断点进行地址比对,若当前执行的二进制代码的地址与所述断点信息列表中任一断点地址相同,则暂停执行并通过所述嵌入式微处理器IP核向所述第一调试模块发送反馈。
[0022]作为一种实施例,所述步骤I之前还包括:
[0023]设置所述断点信息列表,所述第一调试模块输出所述断点信息列表至所述PLC控制器IP核的寄存器组中;
[0024]其中,所示断点信息列表中每个断点具有唯一的断点地址。
[0025]作为一种实施例,所述配置指令包含增加/删除断点的指令,该指令中包含待增加/删除的断点所对应的断点信息,
[0026]所述断点信息包含该断点的断点ID和断点地址;
[0027]所述步骤3还包括:
[0028]所述嵌入式微处理器IP核响应增加断点的指令在所述PLC控制器IP核的地址列表中搜寻需增加的断点的地址,若未搜寻到相同断点,则将所述断点信息增加至所述断点信息列表,
[0029]所述嵌入式微处理器IP核响应删除断点的指令在所述PLC控制器IP核的地址列表中搜寻并删除需删除的断点。
[0030]作为一种实施例,所述步骤3中所述反馈包含当前指针位置、当前断点ID以及当前运行状态。
[0031]作为一种实施例,步骤2中所述调试指令为执行指令,或步越指令,或步入指令,或步出指令;
[0032]所述步骤3进一步包括:
[0033]所述嵌入式微处理器IP核响应所述执行指令控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,直到遇到所述断点或执行完所述用户程序的所有二进制代码后停止执行并向所述第一调试模块发送反馈,
[0034]或,所述嵌入式微处理器IP核响应所述步越指令或步入指令执行一个二进制级的单步,执行完一个单步或遇到所述断点后停止执行并向所述第一调试模块发送反馈,执行所述步越指令时遇到调用函数直接越过,执行所述步入指令时遇到调用函数则进入该调用函数中,
[0035]或,所述嵌入式微处理器IP核响应所述步出指令控制指针跳出所在的调用函数后,停止执行并向所述第一调试模块发送反馈;
[0036]其中,所述反馈均包含当前指针位置、当前断点ID以及当前运行状态。
[0037]作为一种实施例,所述配置指令包括复位指令,或暂停指令;
[0038]所述步骤3进一步包括:
[0039]所述嵌入式微处理器IP核响应所述复位指令控制所述PLC控制器IP核复位;
[0040]或,所述嵌入式微处理器IP核响应所述暂停指令暂停所述PLC控制器IP核的执行,并向所述第一调试模块反馈当前指针位置。
[0041]作为一种实施例,步骤3中所述反馈包含当前指针位置、当前断点ID以及当前运行状态;
[0042]所述步骤2还包括:所述第一调试模块根据所述反馈计算所述待测试程序的当前测试位置。
[0043]基于同一发明构思,本发明还提供一种基于SOC的PLC在线调试系统,其特征在于,包括上位机系统和SOC系统;所述上位机系统包括程序编译模块和第一调试模块;所述SOC系统包括存储器、嵌入式微处理器IP核、PLC控制器IP核;
[0044]所述程序编译模块用于:将待测试程序的代码转换成用户程序的代码输出至SOC系统中的存储器,所述用户程序由预设的二进制代码构成;
[0045]所述第一调试模块用于:响应外部输入向SOC系统中的嵌入式微处理器IP核发送调试指令或配置指令;
[0046]所述嵌入式微处理器IP核用于:
[0047]响应所述配置指令对SOC系统中的PLC控制器IP核进行配置,
[0048]响应所述调试指令在调试模式下控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,
[0049]所述PLC控制器IP核用于:
[0050]响应所述嵌入式微处理器IP核的控制从所述存储器中读取并执行所述用户程序的二进制代码,
[0051]执行中遇到断点或完成所述调试指令后暂停执行,并向所述第一调试模块发送反馈;
[0052]其中,所述PLC控制器IP核执行所述用户程序的二进制代码时同步与断点信息列表中的断点进行地址比对,在当前执行的二进制代码的地址与所述断点信息列表中任一断点地址相同的情况下,暂停执行并通过所述嵌入式微处理器IP核向所述第一调试模块发送反馈。
[0053]作为一种实施例,所述PLC控制器IP核包括一寄存器组;
[0054]所述第一调试模块还用于:设置所述断点信息列表,输出所述断点信息列表至所述PLC控制器IP核的寄存器组中;
[0055]其中,所示断点信息列表中每个断点具有唯一的断点地址。
[0056]作为一种实施例,所述配置指令包含增加/删除断点的指令,该指令中包含待增加/删除的断点所对应的断点信息,所述断点信息包含该断点的断点ID和断点地址;
[0057]所述嵌入式微处理器IP核用于:
[0058]响应增加断点的指令在所述PLC控制器IP核的地址列表中搜寻需增加的断点的地址,若未搜寻到相同断点,则将所述断点信息增加至所述断点信息列表,
[0059]响应删除断点的指令在所述PLC控制器IP核的地址列表中搜寻并删除需删除的断点。
[0060]作为一种实施例,所述反馈包含当前指针位置、当前断点ID以及当前运行状态。
[0061]作为一种实施例,所述调试指令为执行指令,或步越指令,或步入指令,或步出指令;
[0062]所述嵌入式微处理器IP核用于:
[0063]响应所述执行指令控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,直到遇到所述断点或执行完所述用户程序的所有二进制代码后停止执行并向所述第一调试模块发送反馈,
[0064]响应所述步越指令或步入指令执行一个二进制级的单步,执行完一个单步或遇到所述断点后停止执行并
向所述第一调试模块发送反馈,执行所述步越指令时遇到调用函数直接越过,执行所述步入指令时遇到调用函数则进入该调用函数中,
[0065]响应所述步出指令控制指针跳出所在的调用函数后,停止执行并向所述第一调试模块发送反馈;
[0066]其中,所述反馈均包含当前指针位置、当前断点ID以及当前运行状态。
[0067]作为一种实施例,所述配置指令为复位指令,或暂停指令;
[0068]所述嵌入式微处理器IP核用于:
[0069]响应所述复位指令控制所述PLC控制器IP核复位;
[0070]响应所述暂停指令暂停所述PLC控制器IP核的执行,并向所述第一调试模块反馈当前指针位置。
[0071]作为一种实施例,所述反馈包含当前指针位置、当前断点ID以及当前运行状态;
[0072]所述第一调试模块用于:根据所述反馈计算所述待测试程序的当前测试位置。
[0073]与现有技术相比,本发明具有如下的有益效果:
[0074]本发明所述的调试系统和方法不需要创建软件模拟PLC,只需在正常工作模式中嵌入调试模块,降低了开发难度、缩短了开发周期,且该调试系统不会对用户程序进行修改,极大程度的降低了调试系统对于用户程序的影响,所调试的程序即为最终实际运行的程序,可靠性高。
[0075]本发明所述的调试系统和方法只需要少数寄存器资源和逻辑资源即可实现调试系统,不需要额外增加RAM资源和Flash的仿真编程功能;本调试系统可通过多种通用接口进行调试如以太网口、串口、USB接口,不需要专用的调试JTAG接口 ;本调试系统用户程序在Flash中运行,将断点信息列表下载到PLC控制器内部存储器,不需要在用户程序中设置断点特征值,因此不需要Flash的仿真编程功能,也不需要扩充RAM,能够节约资源和成本、缩短开发周期且调试速度更快。
[0076]本发明的调试系统和方法用少量的资源、较短的开发周期即可实现,且可以通过多种通用接口进行调试,其应用范围广、调试速度快,具有调试PLC五种语言的多种高级调试功能。
【附图说明】
[0077]为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍,显而易见,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图中:
[0078]图1是可选实施例中的一种基于SOC的PLC在线调试方法流程图;
[0079]图2是可选实施例中的一种基于SOC的PLC在线调试系统示意图;
[0080]图3是可选实施例中的一种嵌入式软件功能框图。
【具体实施方式】
[0081]下文结合附图以具体实施例的方式对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,还可以使用其他的实施例,或者对本文列举的实施例进行结构和功能上的修改,而不会脱离本发明的范围和实质。
[0082]本发明的目的在于针对现有PLC调试系统实现方法的不足,设计一种资源少、易开发、速度快、可靠性高、适合SOC的在线调试系统和方法,实现PLC文本语言和图形化语言的在线调试。
[0083]现有的离线调试需要PLC控制端创建与实际PLC功能完全相同的软件模拟PLC,存在开发难度大、开发周期长和功能不完全一致的问题,本发明所述的调试系统不需要创建软件模拟PLC,只需在正常工作模式中嵌入调试模块,降低了开发难度、缩短了开发周期,且该调试系统不会对用户程序进行修改,极大程度的降低了调试系统对于用户程序的影响,所调试的程序即为最终实际运行的程序,可靠性高。
[0084]现有的在线调试,在代码中设置特征值的方式来实现,需要将用户程序修改成断点特征值,要实现用户程序可修改则需要在RAM上进行调试或者需要设计实现Flash的仿真编程功能。前者需要足够大的RAM,而随着系统的代码量越来越大,特别是在SOC系统,扩充大容量的RAM势必会增加产品的成本,后者需要设计实现Flash的仿真编程功能,提供专用的调试JTAG接口,其增加了开发任务、操作相当复杂,且耗时较大,还会折损Flash的寿命O
[0085]本调试系统解决了以上问题,只需要少数寄存器资源和逻辑资源即可实现调试系统,不需要额外增加RAM资源和Flash的仿真编程功能。本调试系统可通过多种通用接口进行调试如以太网口、串口、USB接口,不需要专用的调试JTAG接口。本调试系统用户程序在Flash中运行,将断点信息列表下载到PLC控制器内部存储器,不需要在用户程序中设置断点特征值,因此不需要Flash的仿真编程功能,也不需要扩充RAM,能够节约资源和成本、缩短开发周期且调试速度更快。
[0086]本发明的调试系统和方法用少量的资源、较短的开发周期即可实现,且可以通过多种通用接口进行调试,其应用范围广、调试速度快,具有调试PLC五种语言的多种高级调试功能。
[0087]本发明公开了一种基于SOC的在线调试系统和方法,涉及工业自动控制领域。本发明在节约资源和成本的基础上设计实现片上PLC调试系统,能够实现PLC文本语言和图形化语言的在线调试,解决了目前PLC调试开发难度大、操作复杂、速度慢和所占资源多的缺陷。本发明的调试系统包括上位机软件,SOC系统以及运行之上的嵌入式软件,支持G0、Reset、Pause、Step In、Step Out、Step Over、Add Breakpoint、Remove one Breakpoint、Remove all Breakpoints等多种高级调试功能,能够实现对PLC五种语言的在线调试。
[0088]本发明的特点在于只需要少数寄存器资源和逻辑资源即可实现调试系统,不需要额外增加RAM资源和Flash的仿真编程功能,降低了开发难度,缩短了开发周期,节约了资源,节省了芯片面积和成本。本发明基于SOC系统,其执行效率高,调试速度快。本发明灵活度高,可以在程序任何地方设置断点,不会对用户程序进行修改,极大程度的降低了调试系统对于用户程序的影响,所调试的程序即为最终实际运行的程序。
[0089]根据本发明提供的一种基于SOC的PLC在线调试方法,如图1所示,包括:
[0090]步骤I,上位机系统中的程序编译模块将待测试程序的代码转换成用户程序的代码输出至SOC系统中的存储器,所述用户程序由预设的二进制代码构成;
[0091]步骤2,上位机系统的第一调试模块响应外部输入向SOC系统中的嵌入式微处理器IP核发送调试指令或配置指令;
[0092]步骤3,所述嵌入式微处理器IP核响应所述配置指令对SOC系统中的PLC控制器IP核进行配置后返回步骤2,或响应所述调试指令在调试模式下控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,
[0093]执行中遇到断点或完成所述调试指令后所述PLC控制器IP核暂停执行并向所述第一调试模块发送反馈,返回步骤2 ;
[0094]其中,步骤3中所述PLC控制器IP核执行所述用户程序的二进制代码时,同步与断点信息列表中的断点进行地址比对,若当前执行的二进制代码的地址与所述断点信息列表中任一断点地址相同,则暂停执行并通过所述嵌入式微处理器IP核向所述第一调试模块发送反馈。
[0095]作为一种实施例,所述步骤I之前还包括:
[0096]设置所述断点信息列表,所述第一调试模块输出所述断点信息列表至所述PLC控制器IP核的寄存器组中;
[0097]其中,所示断点信息列表中每个断点具有唯一的断点地址。
[0098]作为一种实施例,所述配置指令包含增加/删除断点的指令,该指令中包含待增加/删除的断点所对应的断点信息,
[0099]所述断点信息包含该断点的断点ID和断点地址;
[0100]所述步骤3还包括:
[0101]所述嵌入式微处理器IP核响应增加断点的指令在所述PLC控制器IP核的地址列表中搜寻需增加的断点的地址,若未搜寻到相同断点,则将所述断点信息增加至所述断点信息列表,
[0102]所述嵌入式微处理器IP核响应删除断点的指令在所述PLC控制器IP核的地址列表中搜寻并删除需删除的断点。
[0103]作为一种实施例,所述步骤3中所述反馈包含当前指针位置、当前断点ID以及当前运行状态。
[0104]作为一种实施例,步骤2中所述调试指令为执行指令,或步越指令,或步入指令,或步出指令;
[0105]所述步骤3进一步包括:
[0106]所述嵌入式微处理器IP核响应所述执行指令控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,直到遇到所述断点或执行完所述用户程序的所有二进制代码后停止执行并向所述第一调试模块发送反馈,
[0107]或,所述嵌入式微处理器IP核响应所述步越指令或步入指令执行一个二进制级的单步,执行完一个单步或遇到所述断点后停止执行并向所述第一调试模块发送反馈,执行所述步越指令时遇到调用函数直接越过,执行所述步入指令时遇到调用函数则进入该调用函数中,
[0108]或,所述嵌入式微处理器IP核响应所述步出指令控制指针跳出所在的调用函数后,停止执行并向所述第一调试模块发送反馈;
[0109]其中,所述反馈均包含当前指针位置、当前断点ID以及当前运行状态。
[0110]本实施例中所述当前指针位置定义为指针所在当前数据段的段号、当前代码段的段号、及偏移。
[0111]作为一种实施例,所述配置指令包括复位指令,或暂停指令;
[0112]所述步骤3进一步包括:
[0113]所述嵌入式微处理器IP核响应所述复位指令控制所述PLC控制器IP核复位;
[0114]或,所述嵌入式微处理器IP核响应所述暂停指令暂停所述PLC控制器IP核的执行,并向所述第一调试模块反馈当前指针位置。
[0115]作为一种实施例,步骤3中所述反馈包含当前指针位置、当前断点ID以及当前运行状态;
[0116]所述步
骤2还包括:所述第一调试模块根据所述反馈计算所述待测试程序的当前测试位置。
[0117]在本发明提供的一种基于SOC的PLC在线调试系统的实施例中,如图2所示。
[0118]一种基于SOC的PLC在线调试系统,包括上位机系统和SOC系统;所述上位机系统包括程序编译模块和第一调试模块;所述SOC系统包括存储器、嵌入式微处理器IP核、PLC控制器IP核;
[0119]所述程序编译模块用于:将待测试程序的代码转换成用户程序的代码输出至SOC系统中的存储器,所述用户程序由预设的二进制代码构成;
[0120]所述第一调试模块用于:响应外部输入向SOC系统中的嵌入式微处理器IP核发送调试指令或配置指令;
[0121]所述嵌入式微处理器IP核用于:
[0122]响应所述配置指令对SOC系统中的PLC控制器IP核进行配置,
[0123]响应所述调试指令在调试模式下控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,
[0124]所述PLC控制器IP核用于:
[0125]响应所述嵌入式微处理器IP核的控制从所述存储器中读取并执行所述用户程序的二进制代码,
[0126]执行中遇到断点或完成所述调试指令后暂停执行,并向所述第一调试模块发送反馈;
[0127]其中,所述PLC控制器IP核执行所述用户程序的二进制代码时同步与断点信息列表中的断点进行地址比对,在当前执行的二进制代码的地址与所述断点信息列表中任一断点地址相同的情况下,暂停执行并通过所述嵌入式微处理器IP核向所述第一调试模块发送反馈。
[0128]作为一种实施例,所述上位机系统包括程序编辑模块、程序编译模块、通信模块和第一调试模块。
[0129]程序编辑模块:用于响应外部输入进行程序编辑,获得待测试程序。所述待测试程序代码语言为IL、或ST、或LD、或FBD、或SFC五种语言编辑的程序。所述程序编辑模块还支持调试光标的显示和移动。
[0130]程序编译模块:用于将所述待测试程序的代码编译成预设的二进制代码。具体为,将所述IL、或ST、或LD、或FBD、或SFC语言转换成PLC控制器能够解析执行的预设的二进制代码。
[0131]第一通信模块:用于上位机系统与所述SOC系统之间的通信。包含与所述SOC系统通信的接口。上位机软件通过第一通信模块下发待测试程序、相关数据、指令给SOC系统。SOC系统通过该第一通信模块上传运行状态和监控信息。上位机通过给SOC系统发送设置断点、断点删除、开始、暂停、单步执行、步跳过等调试命令或配置命令进行调试控制。
[0132]第一调试模块:
[0133]1、用于设置对应表,所述对应表中存储有所述用户程序与所述预设的二进制代码的对应关系。利用该对应表能够根据数据段段号、代码段段号及偏移,来找到待测试程序对应的代码。本实施例中待测试程序的代码为文本语句或者图形。一条文本语句或者一个图形对应一条或一段自定义二进制代码。
[0134]2、用于生成断点唯一标识的ID,即同一个断点生成的ID是一致的,不同的断点生成的ID不同,断点的断点ID和断点地址——对应。
[0135]3、用于调试并监控SOC系统中PLC控制器IP核的运行状态及数据,并根据这些数据,计算出相应的文件与行号,更新调试光标的位置,也即移动调试光标。
[0136]作为一种实施例,所述PLC控制器IP核包括一寄存器组;
[0137]所述第一调试模块还用于:设置所述断点信息列表,输出所述断点信息列表至所述PLC控制器IP核的寄存器组中;
[0138]其中,所示断点信息列表中每个断点具有唯一的断点地址。
[0139]作为一种实施例,所述配置指令包含增加/删除断点的指令,该指令中包含待增加/删除的断点所对应的断点信息,所述断点信息包含该断点的断点ID和断点地址;
[0140]所述嵌入式微处理器IP核用于:
[0141]响应增加断点的指令在所述PLC控制器IP核的地址列表中搜寻需增加的断点的地址,若未搜寻到相同断点,则将所述断点信息增加至所述断点信息列表,
[0142]响应删除断点的指令在所述PLC控制器IP核的地址列表中搜寻并删除需删除的断点。
[0143]作为一种实施例,所述反馈包含当前指针位置、当前断点ID以及当前运行状态。
[0144]作为一种实施例,SOC系统包括分别挂接于总线上的通信IP核、PLC控制器IP核、嵌入式微处理器IP核、中断控制器IP核以及Flash和SRAM。
[0145]所述嵌入式微处理器IP核中设置有嵌入式软件。
[0146]从嵌入式软件的软件层面上划分,如图3所示,所述嵌入式软件至少包括第二通信模块和第二调试模块。该嵌入式软件硬件上与所述通信IP核、嵌入式微处理器IP核、中断控制器IP核对应。
[0147]所述第二调试模块通过所述第二通信模块接收所述上位机系统的用户程序、数据、配置信息及运行状态。
[0148]第二调试模块用于:
[0149]1.配置PLC控制器IP核的调试模式及参数寄存器
[0150]2.响应PLC控制器IP核发出的调试中断向所述第一调试模块反馈,该反馈包括当前调试状态、当前调试数据段段号、当前调试代码段段号及偏移。
[0151]3.维护断点的相关数据及相关操作,如设置、清除断点。
[0152]所述嵌入式软件还包括下载模块、调度模块、管理模块等。
[0153]本实施例中的SOC系统各部分的功能如下:
[0154]通信IP核用于:嵌入式软件与PLC控制器IP核通过通信IP核进行通信,嵌入式软件通过通信IP核从上位机系统下载用户程序和调试信息,PLC控制器IP核通过通信IP核向上位机系统上传监控信息。通信IP核支持多种通信接口,如以太网接口、串口、USB等。
[0155]PLC控制器IP核用于:
[0156]①支持GO命令,收到GO命令后在调试模式下开始执行二进制代码。
[0157]②支持执行二进制指令级的单步,完成一个单步后输出一个中断。
[0158]③支持硬件断点,执行到断点处,则发出执行到断点处的中断。
[0159]④实时提供当前指令所在的数据段段号、代码段段号、代码段段内偏移,当前指令指针、当前断点ID、当前运行状态。
[0160]嵌入式微处理器IP核:32位通用微处理器,嵌入式软件在该处理器上运行。
[0161]中断控制器IP核:接收外部中断源的中断请求,并将中断请求处理后发送给嵌入式软件。
[0162]存储器:包括Flash和SRAM,Flash用来存储代码段,SRAM用来存储数据段。
[0163]作为一种实施例,所述调试指令为执行指令,或步越指令,或步入指令,或步出指令;
[0164]所述嵌入式微处理器IP核用于:
[0165]响应所述执行指令控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,直到遇到所述断点或执行完所述用户程序的所有二进制代码后停止执行并向所述第一调试模块发送反馈,
[0166]响应所述步越指令或步入指令执行一个二进制级的单步,执行完一个单步或遇到所述断点后停止执行并向所述第一调试模块发送反馈,执行所述步越指令时遇到调用函数直接越过,执行所述步入指令时遇到调用函数则进入该调用函数中,
[0167]响应所述步出指令控制指针跳出所在的调用函数后,停止执行并向所述第一调试模块发送反馈;
[0168]其中,所述反馈均包含当前指针位置、当前断点ID以及当前运行状态。
[0169]作为一种实施例,所述配置指令为复位指令,或暂停指令;
[0170]所述嵌入式微处理器IP核用于:
[0171 ] 响应所述复位指令控制所述PLC控制器IP核复位;
[0172]响应所述暂停指令暂停所述PLC控制器IP核的执行,并向所述第一调试模块反馈当前指针位置。
[0173]作为一种实施例,所述反馈包含当前指针位置、当前断点ID以及当前运行状态;
[0174]所述第一调试模块用于:根据所述反馈计算所述待测试程序的当前测试位置。
[0175]本实施例支持多种调试功能,各种功能及调试方法如下:
[0176](I)功能 Reset (复位):
[0177]该功能完成PLC控制器IP核的软复位。其调试方法为:
[0178]①上位机调试软件:发送Reset命令。
[0179]②嵌入式软件??给PLC控制器IP核一个软复位命令。
[0180]③PLC控制器IP核:接收到Reset命令后,复位PLC控制器IP核。
[0181]④完成。
[0182]⑵功能Pause (暂停):
[0183]该功能完成暂停PLC控制器IP核执行指令。
[0184]①上位机调试软件:发送Pause命令。
[0185]②嵌入式软件??给PLC控制器IP核一个暂停命令。
[0186]③PLC控制器IP核:接收到Pause命令后,暂停PLC控制器IP核的执行。
[0187]④嵌入式软件:将当前数据段段号、代码段段号、当前指令在代码段中的偏移量等信息发送给编译调试软件。
[0188]⑤编译调试软件:根据这些数据,计算出相应的文件与行号,移动光标。如果此时的位置不是对应其中某条语句或者图形的开始位置,则再执行调用Step In功能(即一次或多次发送Step In命令),以使当前指令运行位置为某条语句或者图形的开始位置。
[0189]⑥完成。
[0190]⑶功能Add Breakpoint (增加断点):
[0191]该功能完成断点的设置和断点的添加。其调试方法为:
[0192]①上位机调试软件:发送增加断点命令,及断点所在的数据段段号、代码段段号、代码段段内偏移。
[0193]②嵌入式软件:搜寻一个断点结构节点,判断其是否
尚未使用或者是同一个断点;暂停PLC控制器IP核,写入PLC控制器IP核的断点寄存器;保存相关断点结构信息;返回命令的执行结果。
[0194]③断点添加完成。
[0195]⑷功能GO (执行):
[0196]该功能使PLC控制器IP核收到GO命令后在调试模式下开始执行二进制代码。其调试方法为:
[0197]①上位机调试软件:发送GO命令。
[0198]②嵌入式软件:接收到编译调试软件发送的GO命令后,给PLC控制器IP核一个GO命令。
[0199]③PLC控制器IP核:收到GO命令后,从断点处开始执行,执行到下一个断点处(如果没有断点,则一直执行直到程序结束),发送中断;
[0200]④嵌入式软件:处理中断,反馈命令执行结果。
[0201]⑤完成。
[0202](5)功能 Step Over (步越过):
[0203]该功能完成步越过。
[0204]①上位机调试软件:发送Step Over命令。
[0205]②嵌入式软件:读取当前指令,并判断:如果当前是CAL类指令,则在IP (指令指针)+4的位置设置一个断点;如果为其它指令,驱动PLC控制器IP核执行二进制指令级单步。
[0206]③PLC控制器IP核:执行到断点处或完成单步,给出中断。
[0207]④嵌入式软件:处理该中断;并将当前数据段段号、代码段段号、当前指令在代码段的偏移量等信息发送给编译调试软件。
[0208]⑤上位机调试软件:根据相关数据,判断是否已到达目标点。如果是,则完成StepOver功能;如果不是,则重复步骤①?⑤。
[0209]⑥完成。
[0210](6)功能Step In(进入指定用户功能块或函数):
[0211]该功能完成进入用户功能块或函数。对于其它非调用语句,执行效果与St印Over一样。
[0212]①上位机调试软件:发送St印In命令。
[0213]②嵌入式软件:驱动PLC控制器IP核执行一个二进制指令级的单步。
[0214]③PLC控制器IP核:执行一个单步后,给出中断。
[0215]④嵌入式软件:处理该中断;并将当前数据段段号、代码段段号、当前指令在代码段的偏移量等信息发送给编译调试软件。
[0216]⑤上位机调试软件:根据相关数据,判断是否已到达目标点。如果是,则一个完整Step In完成;如果不是,则重复步骤①?⑤。
[0217]⑥完成。
[0218](7)功能Step Out (从指定用户功能块或函跳出):
[0219]该功能完成跳出用户功能块或函数;但是有一点需要注意:如果在跳出该用户功能块或函数的过程中(两点之间)存在其它断点,则先停在该断点上。如果已在主代码段中执行,则不运行执行Step Outo
[0220]①上位机调试软件:发送St印Out命令。
[0221]②嵌入式软件:获取进入该用户功能块或函数前的指令指针,并在PrevIP+4的位置设置一个断点;然后,恢复PLC控制器IP核的执行。
[0222]③PLC控制器IP核:执行到断点处,给出中断。
[0223]④嵌入式软件:处理该中断;并将当前数据段段号、代码段段号、当前指令在代码段的偏移量等信息发送给编译调试软件。
[0224]⑤上位机调试软件:根据相关数据,判断是否已到达目标点。如果是,则一个完整Step Out完成;如果不是,则编译调试软件开始发送Step In命令,直到到达目标点。
[0225]⑥完成。
[0226]⑶功能Remove One Breakpoint (删除指定断点):
[0227]该功能完成删除指定断点。
[0228]①上位机调试软件:发送Remove one Breakpoint命令及断点ID。
[0229]②嵌入式软件:接收到命令后,根据断点ID删除相应断点,并反馈执行的结果。
[0230]③完成。
[0231](9)功能 Remove All Breakpoints (删除所有断点):
[0232]该功能完成删除所有断点,包括断点的相关数据。
[0233]①上位机调试软件:发送Remove all Breakpoints命令。
[0234]②嵌入式软件:接收到命令后,通过写PLC控制器IP核的断点寄存器逐一删除断点。
[0235]③完成。
[0236]本发明的关键点在于:
[0237]关键点1:一种基于SOC的PLC在线调试系统,其特征在于:它包括上位机软件、嵌入式软件和SOC系统。
[0238]关键点2:—种基于SOC的PLC在线调试系统,其特征在于:上位机软件用于编辑、编译用户程序,将IL、ST、LD、FBD和SFC转换成PLC控制器能够解析执行的自定义二进制代码,存储并维护用户程序与自定义二进制代码的对应关系;下载、调试并监控用户程序的运行状态及数据。
[0239]关键点3:—种基于SOC的PLC在线调试系统,其特征在于:嵌入式软件运行于嵌入式微处理器IP核之上,用于驱动PLC控制器IP核,配置相关的模式及参数寄存器;反馈相关数据给上位机的第一调试模块,如当前状态、当前数据段段号、当前代码段段号及偏移;维护断点的相关数据及相关操作(如设置、清除普通断点或临时断点)。
[0240]关键点4:一种基于SOC的PLC在线调试系统,其特征在于:S0C系统包括通信IP核、PLC控制器IP核,嵌入式微处理器IP核、中断控制器IP核以及Flash和SRAM,各个IP核挂接在总线上,通过总线进行通信。
[0241]关键点5:—种基于SOC的PLC在线调试系统,其特征在于PLC控制器IP核支持GO命令,收到GO命令后在调试模式下开始执行二进制代码;支持单步执行二进制指令,完成一个单步后输出一个中断;支持硬件断点,执行到断点处,则发出执行到断点处的中断;能够实时反馈当前指令所在的数据段段号、代码段段号、代码段段内偏移及当前指令指针、当前断点ID等当前运行状态。
[0242]关键点6:—种基于SOC的PLC在线调试方法,其特征在于包括以下步骤:
[0243]①上位机软件将IL、ST、LD, FBD和SFC转换成PLC控制器能够解析执行的自定义二进制代码。
[0244]②上位机软件通过嵌入式软件将二进制代码下载到SOC系统的存储器中。
[0245]③上位机软件通过嵌入式软件将调试信息配置给PLC控制器IP核。
[0246]④嵌入式软件通过总线配置PLC控制器IP核的寄存器,启动调试模式、配置调试参数并读取当前运行状态和数据。
[0247]⑤PLC控制器IP核执行用户程序并检测调试信息,到达调试断点或者暂停条件时进行暂停并通过中断控制器给嵌入式软件传输中断。
[0248]⑥上位机软件通过监控信息计算出相应的文件与行号,移动光标。
[0249]⑦上位机软件通过监控信息判断调试是否结束,如果结束则给出结束命令;如果未结束则发送命令,继续执行。
[0250]以下为编程语言术语的解释说明:
[0251]IEC 61131-3标准是国际电工委员会(IEC)制定的工业控制编程语言的标准。该标准是IEC在合理吸收和借鉴世界范围内各可编程序控制器(PLC)厂家的技术及编程语言的基础上,形成的一套新的国际编程语言标准。IEC 61131-3标准极大地改进了工业控制系统的编程软件的质量,提高了软件开发效率;它规定的5种编程语言,不仅为控制器生产厂家和系统集成工程师的编程带来很大的方便,而且对最终用户也有很大的益处。该标准定义了用于构造程序内部结构的SFC(顺序功能图)语言和四个互操作编程语言:IL(指令表)、LD(梯形图)、FBD (功能块图)和ST (结构文本)。通过分解成逻辑元素、模块化以及现代软件技术来组成每个程序,从而提高了其重复使用性,减少了错误,提高了编程和用户的效率。
[0252]LD (梯形图):梯形图语言是PLC程序设计中最常用的编程语言。它是与继电器线路类似的一种编程语言。由于电气设计人员对继电器控制较为熟悉,因此,梯形图编程语言得到了广泛的欢迎和应用。梯形图编程语言的特点是:与电气操作原理图相对应,具有直观性和对应性;与原有继电器控制相一致,电气设计人员易于掌握。梯形图编程语言与原有的继电器控制的不同点是,梯形图中的能流不是实际意义的电流,内部的继电器也不是实际存在的继电器,应用时,需要与原有继电器控制的概念区别对待。
[0253]IL(指令表):指令表编程语言是与汇编语言类似的一种助记符编程语言,和汇编语言一样由操作码和操作数组成。在无计算机的情况下,适合采用PLC手持编程器对用户程序进行编制。同时,指令表编程语言与梯形图编程语言图一一对应,在PLC编程软件下可以相互转换。指令表表编程语言的特点是:采用助记符来表示操作功能,具有容易记忆,便于掌握;在手持编程器的键盘上采用助记符表示,便于操作,可在无计算机的场合进行编程设计;与梯形图有一一对应关系。其特点与梯形图语言基本一致。
[0254]FBD(功能块图):功能模块图语言是与数字逻辑电路类似的一种PLC编程语言。采用功能模块图的形式来表示模块所具有的功能,不同的功能模块有不同的功能。功能模块图编程语言的特点:功能模块图程序设计语言的特点是:以功能模块为单位,分析理解控制方案简单容易;功能模块是用图形的形式表达功能,直观性强,对于具有数字逻辑电路基础的设计人员很容易掌握的编程;对规模大、控制逻辑关系复杂的控制系统,由于功能模块图能够清楚表达功能关系,使编程调试时间大大减少。
[0255]SFC(顺序功能图):顺序功能流程图语言是为了满足顺序逻辑控制而设计的编程语言。编程时将顺序流程动作的过程分成步和转换条件,根据转移条件对控制系统的功能流程顺序进行分配,一步一步的按照顺序动作。每一步代表一个控制功能任务,用方框表示。在方框内含有用于完成相应控制功能任务的梯形图逻辑。这种编程语言使程序结构清晰,易于阅读及
维护,大大减轻编程的工作量,缩短编程和调试时间。用于系统的规模校大,程序关系较复杂的场合。顺序功能流程图编程语言的特点:以功能为主线,按照功能流程的顺序分配,条理清楚,便于对用户程序理解;避免梯形图或其他语言不能顺序动作的缺陷,同时也避免了用梯形图语言对顺序动作编程时,由于机械互锁造成用户程序结构复杂、难以理解的缺陷;用户程序扫描时间也大大缩短。
[0256]ST(结构文本):结构化文本语言是用结构化的描述文本来描述程序的一种编程语言。它是类似于高级语言的一种编程语言。在大中型的PLC系统中,常采用结构化文本来描述控制系统中各个变量的关系。主要用于其他编程语言较难实现的用户程序编制。结构化文本编程语言采用计算机的描述方式来描述系统中各种变量之间的各种运算关系,完成所需的功能或操作。大多数PLC制造商采用的结构化文本编程语言与BASIC语言、PASCAL语言或C语言等高级语言相类似,但为了应用方便,在语句的表达方法及语句的种类等方面都进行了简化。结构化文本编程语言的特点:采用高级语言进行编程,可以完成较复杂的控制运算;需要有一定的计算机高级语言的知识和编程技巧,对工程设计人员要求较高。直观性和操作性较差。
[0257]以上所述仅为本发明的较佳实施例,本领域技术人员知悉,在不脱离本发明的精神和范围的情况下,可以对这些特征和实施例进行各种改变或等同替换。另外,在本发明的教导下,可以对这些特征和实施例进行修改以适应具体的情况及材料而不会脱离本发明的精神和范围。因此,本发明不受此处所公开的具体实施例的限制,所有落入本申请的权利要求范围内的实施例都属于本发明的保护范围。
【主权项】
1.一种基于SOC的PLC在线调试方法,其特征在于,包括: 步骤I,上位机系统中的程序编译模块将待测试程序的代码转换成用户程序的代码输出至SOC系统中的存储器,所述用户程序由预设的二进制代码构成; 步骤2,上位机系统的第一调试模块响应外部输入向SOC系统中的嵌入式微处理器IP核发送调试指令或配置指令; 步骤3,所述嵌入式微处理器IP核响应所述配置指令对SOC系统中的PLC控制器IP核进行配置后返回步骤2,或响应所述调试指令在调试模式下控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码, 执行中遇到断点或完成所述调试指令后所述PLC控制器IP核暂停执行并向所述第一调试模块发送反馈,返回步骤2 ; 其中,步骤3中所述PLC控制器IP核执行所述用户程序的二进制代码时,同步与断点信息列表中的断点进行地址比对,若当前执行的二进制代码的地址与所述断点信息列表中任一断点地址相同,则暂停执行并通过所述嵌入式微处理器IP核向所述第一调试模块发送反馈。2.根据权利要I所述的一种基于SOC的PLC在线调试方法,其特征在于,所述步骤I之前还包括: 设置所述断点信息列表,所述第一调试模块输出所述断点信息列表至所述PLC控制器IP核的寄存器组中; 其中,所示断点信息列表中每个断点具有唯一的断点地址。3.根据权利要I所述的一种基于SOC的PLC在线调试方法,其特征在于,所述配置指令包含增加/删除断点的指令,该指令中包含待增加/删除的断点所对应的断点信息, 所述断点信息包含该断点的断点ID和断点地址; 所述步骤3还包括: 所述嵌入式微处理器IP核响应增加断点的指令在所述PLC控制器IP核的地址列表中搜寻需增加的断点的地址,若未搜寻到相同断点,则将所述断点信息增加至所述断点信息列表, 所述嵌入式微处理器IP核响应删除断点的指令在所述PLC控制器IP核的地址列表中搜寻并删除需删除的断点。4.根据权利要2或3所述的一种基于SOC的PLC在线调试方法,其特征在于,所述步骤3中所述反馈包含当前指针位置、当前断点ID以及当前运行状态。5.根据权利要I或2或3所述的一种基于SOC的PLC在线调试方法,其特征在于,步骤2中所述调试指令为执行指令,或步越指令,或步入指令,或步出指令; 所述步骤3进一步包括: 所述嵌入式微处理器IP核响应所述执行指令控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,直到遇到所述断点或执行完所述用户程序的所有二进制代码后停止执行并向所述第一调试模块发送反馈, 或,所述嵌入式微处理器IP核响应所述步越指令或步入指令执行一个二进制级的单步,执行完一个单步或遇到所述断点后停止执行并向所述第一调试模块发送反馈,执行所述步越指令时遇到调用函数直接越过,执行所述步入指令时遇到调用函数则进入该调用函数中, 或,所述嵌入式微处理器IP核响应所述步出指令控制指针跳出所在的调用函数后,停止执行并向所述第一调试模块发送反馈; 其中,所述反馈均包含当前指针位置、当前断点ID以及当前运行状态。6.根据权利要I所述的一种基于SOC的PLC在线调试方法,其特征在于,所述配置指令包括复位指令,或暂停指令; 所述步骤3进一步包括: 所述嵌入式微处理器IP核响应所述复位指令控制所述PLC控制器IP核复位; 或,所述嵌入式微处理器IP核响应所述暂停指令暂停所述PLC控制器IP核的执行,并向所述第一调试模块反馈当前指针位置。7.根据权利要I所述的一种基于SOC的PLC在线调试方法,其特征在于,步骤3中所述反馈包含当前指针位置、当前断点ID以及当前运行状态; 所述步骤2还包括:所述第一调试模块根据所述反馈计算所述待测试程序的当前测试位置。8.一种基于SOC的PLC在线调试系统,其特征在于,包括上位机系统和SOC系统;所述上位机系统包括程序编译模块和第一调试模块;所述SOC系统包括存储器、嵌入式微处理器IP核、PLC控制器IP核; 所述程序编译模块用于:将待测试程序的代码转换成用户程序的代码输出至SOC系统中的存储器,所述用户程序由预设的二进制代码构成; 所述第一调试模块用于:响应外部输入向SOC系统中的嵌入式微处理器IP核发送调试指令或配置指令; 所述嵌入式微处理器IP核用于: 响应所述配置指令对SOC系统中的PLC控制器IP核进行配置, 响应所述调试指令在调试模式下控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码, 所述PLC控制器IP核用于: 响应所述嵌入式微处理器IP核的控制从所述存储器中读取并执行所述用户程序的二进制代码,执行中遇到断点或完成所述调试指令后暂停执行,并向所述第一调试模块发送反馈;其中,所述PLC控制器IP核执行所述用户程序的二进制代码时同步与断点信息列表中的断点进行地址比对,在当前执行的二进制代码的地址与所述断点信息列表中任一断点地址相同的情况下,暂停执行并通过所述嵌入式微处理器IP核向所述第一调试模块发送反馈。9.根据权利要8所述的一种基于SOC的PLC在线调试系统,其特征在于,所述PLC控制器IP核包括一寄存器组; 所述第一调试模块还用于:设置所述断点信息列表,输出所述断点信息列表至所述PLC控制器IP核的寄存器组中; 其中,所示断点信息列表中每个断点具有唯一的断点地址。10.根据权利要8所述的一种基于SOC的PLC在线调试系统,其特征在于,所述配置指令包含增加/删除断点的指令,该指令中包含待增加/删除的断点所对应的断点信息,所述断点信息包含该断点的断点ID和断点地址; 所述嵌入式微处理器IP核用于: 响应增加断点的指令在所述PLC控制器IP核的地址列表中搜寻需增加的断点的地址,若未搜寻到相同断点,则将所述断点信息增加至所述断点信息列表, 响应删除断点的指令在所述PLC控制器IP核的地址列表中搜寻并删除需删除的断点。11.根据权利要9或10所述的一种基于SOC的PLC在线调试系统,其特征在于,所述反馈包含当前指针位置、当前断点ID以及当前运行状态。12.根据权利要8或9或10所述的一种基于SOC的PLC在线调试系统,其特征在于,所述调试指令为执行指令,或步越指令,或步入指令,或步出指令; 所述嵌入式微处理器IP核用于: 响应所述执行指令控制所述PLC控制器IP核从所述存储器中读取并执行所述用户程序的二进制代码,直到遇到所述断点或执行完所述用户程序的所有二进制代码后停止执行并向所述第一调试模块发送反馈, 响应所述步越指令或步入指令执行一个二进制级的单步,执行完一个单步或遇到所述断点后停止执行并向所述第一调试模块发送反馈,执行所述步越指令时遇到调用函数直接越过,执行所述步入指令时遇到调用函数则进入该调用函数中, 响应所述步出指令控制指针跳出所在的调用函数后,停止执行并向所述第一调试模块发送反馈; 其中,所述反馈均包含当前指针位置、当前断点ID以及当前运行状态。13.根据权利要8所述的一种基于SOC的PLC在线调试系统,其特征在于,所述配置指令为复位指令,或暂停指令; 所述嵌入式微处理器IP核用于: 响应所述复位指令控制所述PLC控制器IP核复位; 响应所述暂停指令暂停所述PLC控制器IP核的执行,并向所述第一调试模块反馈当前指针位置。14.根据权利要8所述的一种基于SOC的PLC在线调试系统,其特征在于,所述反馈包含当前指针位置、当前断点ID以及当前运行状态; 所述第一调试模块用于:根据所述反馈计算所述待测试程序的当前测试位置。
【专利摘要】本发明提供了一种基于SOC的PLC在线调试系统和方法,方法包括:上位机系统中的程序编译模块将待测试程序的代码转换成用户程序的代码输出至SOC系统中的存储器,用户程序由预设的二进制代码构成。上位机系统的第一调试模块响应外部输入向SOC系统中的嵌入式微处理器IP核发送调试指令或配置指令。嵌入式微处理器IP核响应配置指令对SOC系统中的PLC控制器IP核进行配置后返回步骤2,或响应调试指令在调试模式下控制PLC控制器IP核从存储器中读取并执行用户程序的二进制代码,执行中遇到断点或完成调试指令后PLC控制器IP核暂停执行并向第一调试模块发送反馈,返回步骤2。能够实现对PLC五种语言的在线调试。
【IPC分类】G05B19/05
【公开号】CN104898546
【申请号】CN201510227995
【发明人】唐艳丽, 施一明, 潘再生, 童庆, 沈天扬, 王挺, 朱冬冬, 王建平
【申请人】浙江中控研究院有限公司
【公开日】2015年9月9日
【申请日】2015年5月6日