基于IEC61131-3标准的ST转化为IL语言的设计与实现

2016-01-18 02:44
自动化与仪表 2016年9期
关键词:语法结构编译器关键字

(许继电气股份有限公司,许昌 461000)

IEC61131-3国际标准为工业自动化控制系统的软件设计提供了标准化的编程概念和编程方法。其为开发应用程序提供了指令表IL、结构化文本ST、顺序功能图(文本版本)3种文本化语言和梯形图LD、功能图FBD、顺序功能图(图形版本)3种图形化语言[1]。ST做为工业控制平台的一种结构文本编程语言,有标准的关键字和语法结构,通过编程实现简洁、快速、高效程序控制的目的[2]。IL是一种便于使用的类似汇编器的编程语言,同时又作为其它文本化语言和图形化语言转译的公用中间语言。

编译程序是现代计算机系统的基本组成部分之一,它是将一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价程序,这是典型的处理模式,并非所有编译器都必须如此划分或者必须包含上述所有阶段。不过,多数使用的编译程序,包括本文的ST到IL语言的转化,也是采用上述几个阶段的工作过程[3-4]。目前,许继特高压直流输电系统控制保护平台需要把编程语言转化为IL公用中间语言供底层调用,本文针对ST到IL语言的转化提出了设计方案并对实现方法进行描述。以此为基础开发出的可视化的工业控制平台,进行实例测试,效果良好。本文只针对ST语言到IL语言的转化进行描述。

1 ST语言到IL语言转化设计

ST语言到IL语言的转化主要分为语法检查、结构分解、错误处理三方面的内容,图1所示为转化设计的总体方案流程。

图1 总体方案流程Fig.1 Flow chart of overrall plan structure

语法检查的过程是ST语言转化为IL语言的必要过程,只有语法检查没有错误,才进行转化过程[5]。ST语言需要进行语法检查,确定程序是否符合ST语言的语法结构[6-7]。把程序通过正则表达式的匹配分解为符号、关键字等最小单元,分析其前后是否符合语法结构[8];如果符合语法结构,语法检查成功,否则把错误的语法结构输出,显示在错误列表中,用户可以直接看出自己的程序错误出现在哪里[9]。

语法检查正确后,就可进行ST语言向IL语言的转化算法。首先通过正则表达式把ST程序分解为符号、关键字等最小单元,然后顺序地逐个读取,不同的关键字采用不同的情况处理,和IL语言一一对应,最后输出相同逻辑的IL程序文件[10]。

2 ST语言到IL语言转化实现

2.1 语法分解

根据上文的设计思路,图2所示为ST语言到IL语言转化的详细流程。

图2 转化流程Fig.2 Transformation design flow chart

首先得到ST程序的行数,然后逐行地读取程序内容,并对读取到的内容进行分析编译。得到某一行的程序内容之后,通过正则表达式的匹配,把此行的内容分解为最小单元,然后逐个读取每一个小单元。由于程序中包括了注释和控制程序的部分,所以小单元的内容被分为了注释、终结符、关键字、其它4种情况。

注释部分是对程序的说明,不参加程序的运行;同时IL语言和ST语言的注释格式相同,所以只需要把注释部分保持不变写到IL文件里。

终结符是指一个控制语句结束的标志,在ST语言中使用“;”做为终结符,以赋值语句“a:=2;”为例, 正则表达式把这个语句分解为了 “a”、“:=”、“2”、“;”4个小单元,当读到前3个小单元的时候,会把内容保存到TempText这个变量里面,读到最后一个终结符的时候,会处理TempText里面的内容,即把ST语句的“a:=2”转化为相同逻辑的IL语句,处理结束把TempText变量清空,用来记录后面的小单元的内容,并把生成的IL语句写入到IL文件里。

关键字指ST语法结构的关键字母。ST语法包括了IF条件、Case条件、FOR循环、WHILE循环、REPEAT循环、EXIT退出、RETURN返回7种情况,每种情况都有自己独特的结构。IF条件的情况可以是 IF…TEHN…ELSE..END_IF这种结构,“IF”、“THEN”、“ELSE”和“END_IF”4个小单元都是关键字。当读到关键字的时候,会把当前这个关键字的相关信息压入堆栈,然后再判断是否需要处理此时TempText里面的内容,如果需要处理,把处理结果写入IL文件,如果不需要处理,继续读取下面的单元。除了上面说明的3种情况,其它的文本内容都写入TmepText里面,等待需要处理的时候再处理。

TempText的内容多是四则运算或者逻辑运算,运算过程中涉及运算优先级的问题,通过逆波兰算法的应用,把运算表达式转化为后缀表达式,成功地解决各个运算符的优先级问题,提高了处理TempText的效率和正确性[4]。

结合图2,经过上述的几个步骤,语法结构正确的ST程序转化为相同逻辑的IL程序,实现ST语言到IL语言的转化。

2.2 实现结果

本节以一段ST语言的程序为例,将其转化为IL语言。此段ST程序包括了赋值语句和条件语句,程序如下所示:

转化为相同的逻辑的IL语言如下所示:

通过本文的设计方法,可以快速准确地把ST语言转化为IL语言。

3 结语

通过上述的设计方法,成功地把ST语言转化为了相同逻辑的IL语言,解决了特高压直流输电系统控制保护平台软件中ST编辑器转化为IL语言的问题,保证了平台的高效性和完整性。基于此方法设计的工业控制平台中的ST编辑器,在实际工程中得到了很好的应用,提高了工业控制平台的整体性能。同时,此设计方法和传统的编译器思想一致,但此方法操作简单、易读性强,也同样适用于别的文本语言之间的转化,为文本编程语言的相互转化提供了很好的思路。

[1]梁世武,李加恒,朱立国,等.基于IEC61131-3标准的ST语言文法分析器的实现与应用[J].仪器仪表标准化与计量,2015(5):26-29.

[2]王馨梅,王冬芳.编译器前端自动构造的研究与实现[J].微机发展,2004,14(4):82-83.

[3]郭书杰,马跃,王品.基于IEC61131-3的IL编译器的设计与实现[J].计算机工程与设计,2010,31(10):2300-2302.

[4]王明武,张士勇,陈应舒.IEC61131-3编程语言的现状与发展[J].制造业自动化,2010,32(10):102-104.

[5]徐颖,李春江,董钰山,等.GCC编译器中编译指导的自动向量化实现[J].计算机科学,2014,41(S2):364-367.

[6]侯恺.工业组态软件中CFC语言的设计实现及语言转换的研究[D].西安:西安电子科技大学,2013.

[7]张媛.堆栈在语法分析中的应用[J].天津科技,2014(4):20-22.

[8]王双庆,邢建春,王平,等.基于IEC61131-3的控制器组态软件开发[J].微计算机信息,2007,23(13):56-58.

[9]P Marwedel,R Leupers.Retargetable Compiler Technology for Embedded Systems:Tools and Applications[M].Kluwer Academic,2001.

[10]戴桂兰,张素琴.编译系统中间代码的一种抽象表示[J].电子学报,2002,30(12A);2134-2137.

猜你喜欢
语法结构编译器关键字
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
基于相异编译器的安全计算机平台交叉编译环境设计
成功避开“关键字”
运行速度大突破华为《方舟编译器》详解
长沙方言中的特色词尾
浅析古代汉语的名词动用
培养阅读技巧,提高阅读能力
大学英语B级等级考试词汇用法和语法结构解题技巧
通用NC代码编译器的设计与实现
智能垃圾箱