工控行业自主可控编程编译工具关键技术研究*

2018-10-13 02:21郭肖旺赵德政
网络安全与数据管理 2018年9期
关键词:工控异构调试

郭肖旺,陈 海,赵德政

(中国电子信息产业集团有限公司第六研究所,北京 100083)

0 引言

在工业自动化领域,使用通用编程软件分为两类情况:一是为各厂商提供编程软件工具,如德国3S公司的CodeSys、德国菲尼克斯公司的Phoenix Contact Software(原为KW-Software)、一方梯队(Infoteam)的OpenPCS[1];二是自身为自动化产品厂商,编程软件只针对自身的PLC产品开发,如德国西门子的博途(TIA)和Step7[2]、法国施耐德的Unity Pro、美国罗克韦尔的RSLogix5000、日本三菱的GX-Developer[3]、日本欧姆龙的CX-Programmer等。目前国内有很多厂商已经在进行工控行业编程编译工具的研究,国内 PLC 编程软件一般可以分为三类:一类是仿制兼容类,即仿照国外著名PLC厂商产品制作的编程软件,能够兼容所仿制的国外的编程软件,但缺乏核心技术的自主性,在市场上很难有较好的竞争力;二类是贴牌生产(Original Equipment/Entrusted Manufacture,OEM),这类编程软件采用国外公司的IEC61131-3 标准,虽然符合 PLC 软件的国际标准,但是其核心技术仍然掌握在别人手里,市场竞争力难以与国外编程工具相匹敌;第三类是自主开发的编程软件,在编译器等核心关键技术方面需要投入大量的人力物力,目前国内自主开发软件的厂商较少,仅有屈指可数的几家企业进行了这方面的研究。

另外,在工控安全方面,国外编程软件的大量使用令行业在根基上受制于人,对软件内部逻辑、软件代码缺乏控制,软件存在逻辑炸弹、软件后门等安全问题成为我国工控安全的重大潜在威胁。综上所述,尽快开发出拥有自主知识产权、有核心技术竞争力的工控行业编程软件势在必行。

本文在分析编译器、架构设计、领域驱动等技术的基础上,研究工控行业中所使用的编程编译工具在国产化自主可控方面的关键应用,从架构设计、核心技术、安全护航和国产适配四个角度出发(如图1所示),提出了基于领域驱动的工控行业编程编译软件架构、工业语言编程编译工具链、异构平台调试技术、国产化基础软硬件平台适配、可信编译五个关键技术研究方向,为工控行业编程编译工具的自主可控研究奠定基础。

图1 自主可控工控行业编程编译工具关键技术

1 基于领域驱动的工控行业编程编译软件架构

IEC61131国际标准是第一个为工业自动化控制系统软件设计提供标准化的国际标准[4],其中IEC 61131-3规定用于可编程控制器编程语言的语法和语义,规定编程语言有文本语言和图形语言,已获得国际工控界的广泛承认和支持。GB/T 15969.3是对应IEC61131-3标准的中国国家标准。IEC 61131-3正在加速推广应用,不但成为PLC的编程标准,而且成为DCS、PC控制、SCADA、运动控制等事实上的编程标准。为适应现场总线和工业以太网的高速发展,IEC 61131-3和IEC 61499相结合,真正为PLC的分布式发展提供了实现的路径。

本文通过对GB/T 15969.3标准进行深入分析和研究,结合领域驱动设计的概念,提出了基于领域驱动的工控行业编程编译软件架构。

(1)领域驱动建模——明确组织架构

领域驱动设计(DDD)的概念是由著名建模专家EVANS E[5]提出的。领域驱动设计重视软件系统并侧重业务模型,实际是针对面向对象的一个扩展和延伸。领域驱动设计,在处理复杂业务逻辑方面有着先天的优势,它保证了系统的可维护性、扩展性和复用性[6]。

GB/T 15969.3定义了程序组织单元、配置、资源、任务、全局变量等组态元素,并规定了软件模型和编程模型,从理论上描述了一个复杂程序分解成若干个小模块的过程,并在各分解部分之间有清晰和规范的接口方法,可以实现对程序执行的完全控制。在标准定义的模型的基础上引入领域驱动的思想,进行领域建模,建立领域对象与实现业务的映射关系,可以提高开发过程的灵活性,提高自主可控编程编译工具研发的核心竞争力。

(2)限界上下文——明确系统边界

GB/T 15969.3标准中规定了任务、变量、配置等多个部分,每个部分都有详细的设计约束和严格的定义。标准中还定义了三种程序组织单元(Programming Organisation Unit, POU):Program、Function、Function Block。用户编程时可以根据需要对程序功能进行模块化拆分及封装。因此,从用户角度来说,可以采用不同的领域模型进行控制系统编程;从开发者角度来说,需要提供建立不同领域模型的软件功能。限界上下文定义了每个模型的应用范围,在每个限界上下文中确保领域模型的一致性,引入限界上下文的概念和思想,在进行自主可控编程编译工具研发的过程中,采用表示各个领域模型之间关系的总体视图,通过持续集成确保多个限界上下文的模型统一,明确系统边界,提高软件的可伸缩性和可扩展性。

2 工业语言编程编译工具链

目前国内的自主研发编程编译软件的公司大都经历过第三方软件平台期。新成立的企业采用成熟的第三方软件平台,可以快速地推出产品占领市场积累资本,积攒使用经验,发掘新需求,然后在研发投入可支撑的情况下开展自主研发的工作。

研究自主可控工控行业编程编译工具需重点在攻克编译工具链,本文提出了适用于国产软硬件平台的编译工具链的关键技术研究方向。

(1)多种编程语言深度融合编程机制

GB/T 15969.3定义了五种 PLC 标准编程语言,包括三种图形化语言和两种文本化语言。在同一个控制应用中,用户可以根据需求自由选择不同的语言进行不同部分的逻辑编写。要求编程环境必须提供灵活的开发方式,并且同一种功能需求可以用不同的语言实现。

(2)高可扩展的中间代码架构

国产CPU芯片如龙芯[7]、飞腾[8]等架构不同,指令平台不同,编程编译软件需考虑支持龙芯MIPS架构X86平台、飞腾1500A芯片、国产SPARC V8处理器、等,因此在编译时要考虑各个平台的编译,设计一种与平台无关的中间代码架构,该结构可支持PLC各种编程语言的前端编译,使得后端编译只需支持该中间代码结构即可,提高了编译效率,减少了编译带来错误的可能性,为以后增加其他平台的支持提供了良好接口,大大缩短增加新平台支持所需的开发周期。

(3)抽象异构寄存器分配模型

由于不用的目标平台寄存器分配方式不同,针对每种平台进行设计开发需要投入大量的时间和人力,因此可根据编译目标平台的不同特征,设计一种针对异构平台的抽象寄存器分配模型,对不同的目标平台采用统一的寄存器配置机制,进行内存和寄存器的分配,在引入新平台支持时,可以方便地按照模型扩展,大大缩短开发周期。

(4)高兼容性的工业语言编译器、链接器

对不同的工业语言,应提供高兼容性的前端编译接口和统一的使用方法;对不同的目标平台,应提供高兼容性的编译后端接口,采用统一的编译接口生成不同的目标平台二进制指令。在进行语言扩展时不需要考虑目标平台兼容性,在进行目标平台扩展时也不需要考虑编程语言的不同。降低了工业语言和目标程序的耦合性,提高开发效率和扩展能力。

除了支持编译器编译后目标文件的链接,链接器应可支持符合标准的C语言代码链接,解决现有积累的算法库的重用,也照顾了部分原有熟悉通用计算机编程技术的开发人员。

(5)工业语言正确性自动化验证插件

利用编程编译工具提供的接口,自动化验证插件可以提供脚本自动打开、编译、执行测试用例的功能,并实时记录和跟踪每一步的运行结果,统计并生成测试报表,方便用户测试自己的程序,为用户调试和编程提供了更加高效的接口和更加准确的依据。

3 异构平台调试技术

开发过程不可能一蹴而就,需要借助调试工具进行不断的测试、检查和修改才能写出高可靠性的程序,所以调试器是软件开发过程中的必备工具[9-10]。因此,自主可控编程编译工具对于调试技术的研究必不可少。工业语言的调试涉及图形语言和文本语言,同时在自主可控方面还要兼顾不同的目标平台。通过充分研究现有成熟的计算机语言的开发环境和调试手段,深入分析现有计算机语言调试策略的优点,结合工业语言的特点,提出用于工业语言的调试策略研究,调试器应可提供不同目标平台的调试,简化用户逻辑程序调试过程。

(1)异构多目标平台调试策略

考虑适用于不同平台的调试方法需要提供一套用于异构多目标平台调试的策略和模型,程序的可执行文件的结构,全局变量、局部变量以及各种信息的存储方式,可执行文件中包含的调试信息结构,调试信息的整体组织结构和存储方式等[11],都将是异构多目标平台调试研究的重点。

(2)多种调试命令结合

对于图形化语言和文本语言有不同的调试手段和调试命令。对文本语言应能支持设置断点、检查寄存器的值、支持逐行单步调试[11]、步入和步过、查看/改变变量、查看内存等调试手段。对于图形化语言,需根据图形语言的特点,提供实用的调试方法,如对LD语言,可支持对网络设置断点、执行单个网络等命令。

(3)多任务/多线程调试技术

工业控制系统在调试时应该支持多任务/多线程调试[12],在进行非嵌入式平台调试时,如仿真器上可以仿真多任务、多线程,在各个线程之间进行切换,向指定线程发送命令等。

4 国产化基础软硬件平台适配

编程工具作为大型软件,要想兼容X86系列、飞腾系列、龙芯系列等平台,需研究可跨Windows、国产操作系统、国产硬件平台的工业编程软件实现技术,从可移植性、可兼容性等方面进行分析,应该着重研究如下两个关键技术。

(1)异构多目标平台自适应编译架构

第一,采用源到源编译[13],实现编程编译工具在不同处理器架构平台的移植。

第二,编程工具作为IDE提供给用户使用时,应提供异构多目标平台自适应编译功能,用户不需关心工程文件运行的目标平台,编程工具在进行编译、下载、调试、仿真时根据目标平台自适应处理和加载。

(2)工业语言异构平台可移植

在不同平台上使用编程工具保存的用户工程,不需做额外处理,应能支持在不同平台间无缝拷贝使用。因此应设计一种与平台无关的用户工程文件,实现图形化语言、文本语言、网络组态、硬件组态等内容的统一化保存,该项设计能够大大简化用户工程的移植工作,提高目标工程一致性。

5 可信编译

编程编译工具的可信性对于整个工控系统而言具有非常关键的意义,如果编译器不可信,则很难保证系统所运行逻辑的可信性。可信编译是指编译器在保证编译正确的同时,提供相应的机制保证编译对象的可信性[14],因此可信编译理论和技术的研究也将是工控行业自主可控编程编译工具研究的关键技术之一。

6 结论

编程编译工具作用于控制工程的设计、调试、运行、维护等全生命周期,对于控制对象的安全稳定运行具有重要的意义。本文对自主可控工控行业编程编译工具的几项关键技术进行了分析,提出了一些设计原则和策略,希望能给在工控行业中进行自主可控编程编译工具研究的相关人员提供有益的帮助。

猜你喜欢
工控异构调试
试论同课异构之“同”与“异”
吴健:多元异构的数字敦煌
基于航拍无人机的设计与调试
FOCAS功能在机床调试中的开发与应用
核电厂主给水系统调试
工控速派 一个工控技术服务的江湖
异构醇醚在超浓缩洗衣液中的应用探索
工控速浱 一个工控技术服务的江湖
无线通信中频线路窄带临界调试法及其应用
热点追踪 工控安全低调而不失重要