0 引言
软件PLC的开发中,各编程语言模块的开发是关键环节。在IEC1131 3标准提出的5种编程标准语言中,指令语言和梯形图语言应用最为广泛。指令表语言的解析过程主要是根据编译原理,通过词法分析、语法分析及语义分析等环节,最终生成中间代码。梯形图是图形化的编程语言,其编程模块包括编辑和编译2部分,其中面向用户的编辑环境已经有很成熟的应用。另外,对于不同操作系统的数控系统,PLC程序的控制执行策略是不同,如何设计简单高效的程序执行机也是软件PLC的重点环节。以前的一些研究在一定程度上实现了软件PLC的部分功能,但都没有涉及程序的描述模型的概念,提出针对所有语言的通用解决方案。在此提出了PLC程序的描述模型和通用可执行数据结构,开发了梯形图的图形化编程模块,并设计了基于RT Linux的数控系统的PLC程序的执行机。
1 梯形图编程环境
梯形图的编程环境包括编辑和检查2个环节。编辑的任务是提供一个编制PLC程序的工具,使之方便地完成程序草图的设计、修改、检查和储存等编辑功能。梯形图程序结构模型如图1所示。结构模型中,每个方框代表一个单元。单元类型可分为:输入单元(包括常开单元、常闭单元等。每个单元对应于输入寄存器中相应的地址);输出单元(基本功能单元、扩展功能单元等。输出单元对应逻辑运算结果输出地址);逻辑单元(主要指串联符号与并联符号,其一般不参与运算,但决定输入单元之间的逻辑关系,是逻辑计算依据);空单元(梯形图中的空白部分是空单元所处位置,空单元表示没有实际单元,但不意味没有含义。解析梯形图程序的过程中,空单元也需要加以分析,是有意义的);功能单元(包括计时器、计数器等其它实现特殊功能的单元)。模型中的最小元素是单元(即图1中的小方块),因此梯形图草图能够记录于一个二维数组lad-der_draft[MAX_ROW][MAX_COL]中。其中,MAX_COL表示图中的一列最多可以容纳的单元数量,MAX_ROW表示梯形图最多可以容纳的行的数量。数组中每个结构体成员记录着草图中每个单元的每项信息,包括单元的类型、单元寄存器的地址、寄存器类型、自然行号、列号和备注说明等。事实上,梯形图程序草图对应于一个面向对象的数组,还包括对数组的操作。对于用户,绘制草图的过程实质是对数组ladder_draft[MAX_ROW][MAX_COL]的操作过程。操作主要包括4种:De-lete cell,删除梯形图上已存在的一个单元;Deleterow,删除梯形图上的一自然行,其下的一行自动连接上;Undo,撤销上一次的删除操作;Redo,解除上一步的撤销操作。梯形图程序流程如图2所示,程序经编辑环节需进行检查,检查出错误需要报错。
图1 梯形图程序结构模型
a.程序的语法错误检查。语法检查负责检查各个单元的参数是否正确。如寄存器地址是否越界、重复,计时器、计数器的设定值是否超过了限定的最大值等。当发现错误时,保存错误类型即错误所在的行号和列号。流程如图2a所示。
b.程序的逻辑错误检查。梯形图的逻辑错误负责检查指令位置,如并联单元的顺序,输出单元是不是存在,位置是否合理等等。当发现错误时,同样提示报错,流程如图2b所示。
图2 程序流程