一种基于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]响应所述步越指令或步入指令执行一个二进制级的单步,执行完一个单步或遇到所述断点后停止执行并