吴 波,牛洪海,卢海松
(南瑞继保电气有限公司,江苏 南京 211102)
一种工业控制器的组态调试器实现方法
吴 波,牛洪海,卢海松
(南瑞继保电气有限公司,江苏 南京 211102)
在工业过程控制领域,常常需要对控制器内的复杂控制逻辑进行单步执行、断点调试,以便明确诊断逻辑的正确性和合理性,但目前各厂家的工业控制器并不具备该功能。为了解决该问题,对高级编程语言C/C++的调试器功能进行了系统的研究,包括其程序断点的设计原理和调试器的实现机制。结合工业控制器算法组态的语言特点,设计了一种面向算法组态的调试器,并将其运用到工业控制器的嵌入式软件系统中。通过与算法逻辑运算单元的交互设计,成功实现了复杂控制逻辑的单步执行、逐页逐模块以及断点调试等功能。试验结果表明,集成组态调试器功能的工业控制器,能够极大地方便项目实施过程中的现场组态和深入调试,有效降低组态算法的错误率和提高工程调试的效率。该控制器为工业控制器的全方位诊断功能以及虚拟仿真的实现提供了一定的参考。
工业控制器; 算法组态; 调试器; 单步执行; 断点调试; 嵌入式开发; DCS; PLC
为了便于编程开发和调试,一般高级编程语言,如C/C++等,均提供了完备的调试器功能。调试器通过按照代码行、函数、功能块断点等方式中断程序执行,辅助开发人员进行逐步调试和分析,定位程序代码的问题和错误所在。在工业控制领域,随着各种算法组态语言越来越多地应用于复杂对象和控制过程的组态[1],针对算法组态语言的调试器功能需求日益迫切。目前市面上的控制器产品尚不支持这方面的功能。本文设计了适用于工业控制器的组态调试器。
在工业控制领域,算法逻辑的组态语言有五种,分别是功能块图(function block diagram,FBD)、梯形图(ladder diagram,LD)、指令表(instruction list,IL)、结构文本(structured text,ST)、顺序功能图(sequential function chart,SFC)[2]。组态工具根据算法逻辑的组态内容,生成一种中间产物或者目标产物,下载到工业控制器内执行处理[3-4]。
该流程和基于高级语言的程序开发过程原理相同,所以有必要研究高级语言调试器的原理。通过借鉴分析,逐步得到组态调试器的设计原理和方法。
1.1 常规调试器原理
调试器原理主要包括两个方面:一是断点机制,二是变量监视。实现两者的首要问题,就是源代码和目标产物之间的映射关系。
基于高级语言的程序代码,在开发完成之后,经由编译器的分析、编译、链接转化成一长串的比特流,即基于机器指令码的目标程序,方能在目标CPU上正确执行[5]。
开发人员对源代码的调试,归根结底是对目标程序进行调试。但是经过编译处理之后,源代码和目标程序之间的关系变得错综复杂。为此,必须完全记录编译器在源代码处理过程中产生的信息,以便源代码和目标程序间的双向索引定位。这些信息就是信息调试器运行必须参考的调试信息。
根据调试信息,源代码中的任意行和任意变量均可以定位到目标程序中的唯一地址。开发人员在某行源代码处设置断点,调试器经过转换后,通知CPU将在目标程序的对应地址处停止运行。当CPU运行到对应地址处,触发软中断,并通知调试器命中断点。对于变量监视,调试器根据其在目标程序中的地址直接查询获取[6-7]。
断点命中机理和变量监视,需要目标平台的CPU和操作系统的共同支持实现。
1.2 组态调试器原理
对于高级编程语言,调试器的基本单位是源代码行。而对于算法逻辑组态,调试器的基本单位往往是算法块。因此,相对于以代码行作为断点,组态调试器的最小可定义断点是算法块。
但是工业控制器对算法逻辑的处理一般分为两类,即解释执行机制和编译执行机制。采用解释执行机制的控制器,其内核对算法逻辑边解释边执行。而采用编译执行机制的控制器,其内核执行的是由算法逻辑语言编译形成的机器指令码。
如前文所述,如果在采用编译执行机制的工业控制器上实现调试器,则需要维护算法组态和目标程序之间的调试信息。本文的工业控制器采用的是解释执行机制,故可以省去调试信息的维护设计环节。但二者的基本原理是完全相通的[8]。
1.2.1 组态断点定义
基于功能块图组态的算法逻辑结构如图 1所示。其中,最小逻辑单位是功能模块,如加法块、逻辑与、PID模块等。但为了方便用户和工程人员应用,常常会根据现场应用的需要,对这些由基本功能模块组成的算法逻辑进行分页。
图1 算法逻辑结构图
因此,定义页号和模块号作为组态断点的描述信息,可以完全记录算法逻辑的执行步骤信息。故将“页号+模块号”的组合信息作为组态断点数据结构。
由于调试器通常支持多个断点,故在控制器中定义如图 2所示的组态断点链表,对调试过程中设置的组态断点进行统一管理和维护。
图2 组态断点链表
因为组态断点信息描述的是算法逻辑中的某个模块逻辑地址信息,所以当用户设置断点后,在算法逻辑顺序执行过程中,一定会执行到组态断点处。此时控制器命中组态断点,停止算法逻辑的执行运算,并将相关数据信息上传给组态工具显示。
1.2.2 软组态断点和硬组态断点
断点命中时,用户通过初步观察之后,可以停止调试,也可以继续通过逐页、逐模块等调试指令来进一步观察算法逻辑的演变过程。
通常情况下,控制器会将这两种调试指令分别解析处理,但这会增加调试器的实现复杂度。况且这两种调试指令和已命中组态断点以及算法逻辑的内容密切有关,因此将逐页、逐模块调试指令转化为一种特别的“组态断点”来处理。
例如:逐页指令=当前命中断点模块所在页的下一有效页中的首模块;逐模块=当前命中断点模块的下一个模块。
为了便于区分,对于不是由用户直接设置的组态断点,将其定义为软组态断点;而由用户直接设置的组态断点定义为硬组态断点。二者的区别在于:软组态断点一经命中,即由调试器自动删除;而硬组态断点的产生和删除,均由用户支配。
基于图 1所示的算法逻辑结构,开发面向FBD组态的工业控制器[9-11]。该控制器基于TI公司的OMAP双核平台,ARM处理器侧采用嵌入式Linux作为操作系统,执行通信管理职责;数字信号处理芯片(digital signal processing,DSP)侧无操作系统,实现算法逻辑的高效执行和I/O通信等功能。ARM和DSP之间通过共享内存进行数据交互,实现了算法逻辑的变量监视功能。因此调试器的开发重心集中到组态断点机制的实现上。
2.1 调试器开发
在工业控制器的软件架构中引入调试器功能组件,调试器接口如图 3所示。
图3 调试器接口示意图
调试器的功能分为两部分:①通信预处理单元,负责与组态工具的调试接口通信,获取调试指令并进行预处理;②调试单元,负责与算法逻辑运算任务交互,执行调试指令。其中,对调试指令的预处理流程如图 4所示。
以组态断点的设置为例,组态工具和调试器的通信接口建立TCP连接后,首先进行算法逻辑的校验和同步,确保组态工具侧的算法逻辑和控制器执行的算法逻辑相同。随后,用户可以根据需要设置任一页的任一个模块作为断点。调试器收到断点设置指令后,将其压入硬组态断点队列,交由调试单元查询使用。
图4 调试指令预处理流程图
当算法逻辑的正常运行态被组态断点中断之后,进入调试态运行。此时算法逻辑暂停在某页某模块上,如果要继续执行逻辑,则需要从该模块的下一个模块继续执行。所以通信预处理单元在处理单步执行、逐页、逐模块以及继续执行指令时,都需要根据当前暂停位置推算下次执行的起始位置。
一旦通信预处理单元接收到继续执行指令,并且检测到软、硬组态断点队列均为空时,控制器自动退出调试态。这样就实现了算法逻辑的正常运行态到调试态的平稳切换,大大降低了开发实现的难度。
在现场调试时,为了安全起见,在调试器功能启用之前,有必要屏蔽所有I/O的输出,避免引起现场设备的误动作。
2.2 算法运行及调试
工业控制器在周期扫描执行算法逻辑时,每次执行均从首页首模块开始,直到终页终模块结束。当周期定时器中断再次触发时,重复该过程,进而实现算法逻辑的周期运行。由于算法逻辑运行的DSP侧缺乏操作系统,因此高级语言的断点命中机理并不适用,故本文从任务调度以及对算法任务的起始位置、终止位置的控制这两方面来综合实现。当调试器功能触发后,将打断周期执行的算法任务。算法调试流程如图 5所示。
图5 算法调试流程图
算法逻辑的运行任务在逐页逐模块扫描解释执行时,每解释执行完一个模块,都会判断是否命中硬组态断点或软组态断点。如果命中,则本次运行任务提前终止,并记录任务退出时的位置信息。下次继续运行时,将从该位置信息的下一个模块继续执行。这意味着调试过程中,算法任务的起始位置和终止位置是动态变化的,因此必须保存下来,以便保证算法运行调试的连续性。
与算法逻辑的周期运行流程相比,算法逻辑在调试态运行时,不再由周期定时器中断触发,而是由用户手动下发的调试指令触发。这意味着如果用户不按调试按钮,则算法逻辑的数据一直保持不变,经由监视接口上送到组态工具,有利于用户对算法逻辑的数据断面进行深入诊断和分析。
此外,在调试状态下,根据单步、逐页、逐模块和继续执行等调试指令执行时,如果算法逻辑执行到终页终模块,并不意味着本次运行调试结束退出,而是必须跳转到首页首模块继续从头开始。
3.1 测试环境
为了验证工业控制器的调试器功能,测试环境由以下四个部分组成。
①组态软件采用PCS-Explorer,在Windows 7 64 bit平台上运行,具备控制器组态、在线监视及调试器接口功能。
②控制器采用PCS-9150控制器作为试验平台,集成开发调试器功能。
③报文分析工具Wireshark2.0,用于辅助分析组态软件和控制器的通信状态。
④调试终端软件SecrueCRT7.2.6,用于实时监视控制器的运行状态。
3.2 测试结果分析
在对调试器进行测试的过程中,通过组态软件对控制器的算法执行过程进行状态监视,辅以调试终端软件的实时运行状态信息分析。测试结果表明,工业控制器中加入了调试器功能后,不仅各项调试指令全部运行正常,而且并不影响控制器内原有任务和功能。主要测试内容及结果如表1所示。
表1 测试内容及结果
根据工业控制器现场应用的反馈,应用人员利用调试器能够更快、更精准地定位到复杂算法逻辑中的各类错误,包括功能块算法设计错误、算法组态顺序错误、算法逻辑设计错误;同时现场控制调试的效率提高了50%以上。
本文提出了一种组态调试器的设计与实现方法,并将其运用在工业控制器中,成功实现了复杂算法逻辑的单步执行、逐页逐模块以及断点调试等功能。在实际应用中,用户利用工业控制器的调试器功能,极大地提高了工业控制算法逻辑组态的正确性和合理性,便于现场对复杂对象控制算法逻辑的调试和优化,确保了现场控制的可靠运行。
[1] 王常力,罗安.分布式控制系统 (DCS) 设计与应用实例[M].北京:电子工业出版社,2016.
[2] 王明武,张士勇,陈应舒.IEC61131-3编程语言的现状与发展[J].制造业自动化,2010,32(A5):102-104.
[3] 谭伯龙.面向工业机器人控制器的软PLC系统软件开发[D].南京:东南大学,2015.
[4] 翟永杰,张鹏,张悦.火电厂仿真机中的DCS仿真方式与关键技术[J].中国电力,2010(Z4):7-14.
[5] 常志恒,肖铁军,史顺波.基于JTAG的片上调试器与调试系统的设计实现[J].计算机工程与应用,2012,48(30):78-82.
[6] 姚蓝,罗威,王亚磊,等.嵌入式系统远程调试软件的设计与实现[J].工业控制计算机,2007,20(4):52-53.
[7] 曾杰,蒋泽军.嵌入式远程调试器的设计与实现[J].计算机测量与控制,2005,13(7):731-733.
[8] 关文祥.运动控制器指令编译系统的研究与实现[D].广州:广东工业大学,2010.
[9] 吴洁琼,蔡启仲,潘绍明,等.基于ARM-FPGA的小型PLC逻辑运算控制器的设计[J].计算机工程与设计,2016,37(9):2394-2399.
[10]周涛,项嵘,李浩,等.基于嵌入式Linux的工业控制系统设计与实现[J].电子设计工程,2016,24(7):23-25.
[11]王华忠.工业控制系统及应用:PLC与组态软件[M].北京:机械工业出版社,2016.
ImplementationMethodofConfigurationDebuggerforIndustrialController
WU Bo,NIU Honghai,LU Haisong
(NR Electric Co.,Ltd.,Nanjing 211102,China)
In the field of industrial process control,the single step execution and breakpoint debugging of the complex control logic in controller are usually necessary to ensure the correctness and rationality of the logic.However,most industrial controllers provided by the manufacturers do not support such functions.In order to solve this problem,the functions of debugger of advanced programming language C/C++ are researched systematically, and the design principle of program breakpoint and the implementation mechanism of debugger are included.A debugger orienting algorithm configuration is designed according to the language features of industrial controller algorithm configuration.The debugger is applied in the embedded software system of the industrial controller,through the interactive design of algorithm logic operation unit,the test functions of single step execution,page by page,module by module and breakpoint for the complex logic are implemented successfully.The test results indicate that the industrial controller which integrates the functions of configuration debugger can greatly ease the field configuration and deep debugging for the project implementation,and effectively reduce the error rate of the configuration algorithm,and improve the efficiency of project commissioning.This controller references for realizing omnidirectional diagnostic function and virtual simulation of industrial controllers.
Industrial controller; Algorithm configuration; Debugger; Single step execution; Breakpoint debugging; Embedded development; DCS; PLC
TH86;TP273
: A
10.16086/j.cnki.issn1000-0380.201709022
修改稿收到日期:2017-03-18
吴波(1984—),男,硕士,工程师,主要从事工业控制产品的研发工作。E-mail:wubo@nrec.com。