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 程序流程
2 描述模型数据结构及执行机原理
PLC程序编译的最终目的是获得可执行文件。对于硬件PLC,将可执行文件送往硬件执行模块即可。对于本文中的软件PLC,程序描述模型的记录,即可执行程序通用数据结构,是可执行文件的主要内容。因此,选择恰当的程序描述模型是整个问题的关键,该模型需要完整地表述梯形图程序中所包含的层次特征和所有单元之间的逻辑关系。基于此点,我们设计模型结构如图3所示。
图3 模型结构
模型在形式上类似梯形图中的一个梯级,包含有5个层次,从低到高依次是:单元层次、逻辑行层次、段层次、梯级层次、梯形图层次。
a.自然行。梯形图中的所有水平并列的单元构成了一个自然行。
b.逻辑行。由单元组成,段内是并联关系。同处一个自然行的单元不一定同处一个逻辑行。图中的每个矩形框代表一个逻辑行。
c.段。由逻辑行组成。梯级内的段与段是串联关系。图3中,从上到下、并行排列的几个矩形框构成一段。
d.梯级。由相互联系而不可分割的一个或数个自然行组成,同时也由段串联组成。图3中前3个输入段与最后的输出段构成一个梯级。
e.梯形图。由一个或数个梯级依次排列而成。各梯级间一般有逻辑或者时间上的顺序。
针对具体梯形图的设计规模,还需要制定一些规则,即每个梯形图最多包含60个自然行;每个自然行包含12个单元;每个逻辑行至多包含6个单元;每段至多包含6个逻辑行,每个梯级至多包含4段,其中包含1个输出段;整个梯形图至多包含20个梯级以及30个输出单元。规则中的参数可以通过实际的情况灵活修改。
程序模型的作用在于为解析PLC程序提供参照,描述模型的数据结构即为PLC程序的最终数据结构。对应程序模型,数据结构同样分为5个层次,分别为单元、逻辑行、段、梯级、梯形图。
struct SLadderCell //单元层次
{
char type; //单元类型
int address; //地址
int setting_value; //设定
int current_value; //当前值
char reg_type; //寄存器类型
int result_value; //单元值
};
struct SLadderRow //逻辑行层次
{
int cell_num; //实际包含的单元数量
struct SLadderInputCell cell[MAX_CELL_OF
_ROW]; //记录一行的单元
int result_value; //行的值
};
段、梯级的数据结构与逻辑行的数据结构大体类似,不再重复。其中,最重要的梯形图程序模型的层次结构如下。
struct SLadderGragh //梯形图程序层次
{
int layer_num; //实际包含的梯级数
int output_num; //实际的输出单元的数
SLadderLayer layer [MAX _ LAYER _ OF _
GRAPH]; //梯级的记录
};
针对以上通用数据结构,设计软件PLC执行机结构如下。
PLC executive //PLC程序执行机
{
FOR (LAYER NO. < ACTUAL LAYER
NUMBER)
{
FOR (SEGMENT NO. < ACTUAL SEG-
MENT NUMBER)
{
FOR (LOGIC ROW NO. < ACTUAL LOG-
IC ROW NUMBER)
{
FOR (CELL NO. <ACTUAL CELL NUM-
BER)
{
ROW RESULT = ROW _ RESULT &&
VALUE OF THE NEXT CELL //单元之间执行
与运算
}
SEG RESULT = SEG_RESULT || VALUE
OF THE NEXT LOGIC ROW //逻辑行间执行
或运算
}
LAYER RESULT = LAYER RESULT &&
VALUE OF THE NEXT SEGMENT //段之间
执行与运算
}
}
}
3 梯形图的解析
梯形图解析的最终目的是通用数据结构,程序描述模型的结构框架是解析的参照标准,具体的步骤是通过层次分析、逻辑判断,为每个单元在程序描述模型中/定位0,即确定单元的梯级号、段号、行号和列号。单元数据结构的数据成员分为2组:第1组包括单元类型、单元对应的寄存器地址和类型、备注说明及单元在图中的自然坐标等,这些成员在编辑草图的过程中由设计者直接确定;第2组为逻辑行号、逻辑列号、梯级号和段号。这些成员的数值需要分析得出。分析的基本方法是扫描二维数组ladder_draft[MAX_ROW][MAX_COL],单元类型是扫描的关注点。扫描分为2步进行:第1次扫描过程中,当扫描到某个具体单元时,由于没有后继单元的信息便无法计算出当前单元的完整信息。这次扫描的目的在于向中间结果数组中记录相应信息。无论是设计文本编程环境还是图形化编程环境,我们的分析都应着眼于表意的最小元素。对于PLC程序,最小表意元素是一个完整的梯级。当扫描处在某个梯级当中,打破了梯形图的最小表意单元(梯级),则无法得出单元的完整信息。SRowPropertynaturerow[MAX_ROW]是中间结果数组,主要记录自然行的信息。通过该数组可确定梯形图单元在/垂直方向0的参数(梯级号和逻辑行号)。中间结果数组的数据结构如下。
struct SRowProperty
{
int or_num; //并联符的个数
int layer_no; //自然行所在的梯级
int logic_row; //自然行的逻辑行号
int seg_num; //自然行出现过的段的数量
};
自然行的信息是划分梯级的依据。凡是存在并联符的自然行和其上面相邻的一行必属同一梯级,凡没有并联符的、非空自然行是新梯级的开端。准确划分梯级,将确定每个自然行所处的梯级号以及每个自然行在所属梯级的位置(逻辑行号)。自然行的梯级号和逻辑行号与该自然行上每个单元的梯级号和逻辑行号是一个概念。第2步扫描针对/水平方向0的参数(段号和逻辑列号),结合了中间结果,能最终实现对段的准确划分。段的处理方式与梯级划分的区别在于梯级划分在于找到梯级的/首0,而段的划分在于找到段的/尾0。段的划分与逻辑列号的确定是同一过程。
综上所述,编译就是参照PLC的程序模型对梯形图的划分过程,从图划分成梯级,梯级划分成段,段划分成逻辑行,最后是单元,依次进行。
4 应用实例
图4所示是一个在编程环境完成的主轴运动控制的局部梯形图。
图4 主轴运动控制的局部梯形
图4中包括主轴旋转方向控制(顺时针旋转SPCW或逆时针旋转SPCCW)、主轴齿轮换档控制(低速档SPL或高速档SPH)以及主轴停(SPOFF)的控制。控制方式分为手动(HAND)和自动(AU-TO)2种工作方式。在/主轴顺时针旋转0梯级中,HAND=/10,主轴旋转方向选择旋钮置于顺时针位置,CW.M(顺转开关信号)=1,又由于主轴停止旋钮开关OFF.M没接通,SPOFF常闭接点为/10,使主轴手动控制顺时针旋转。当方向选择旋钮置于逆时针接通状态时,和顺时针旋转分析方式相同,使主轴逆时针旋转。
第1,第2和第3自然行为第1梯级,即/主轴顺时针旋转0梯级。第1行中,HAND与SW.M 2个常开单元是串联,SW.M右旁为一个串联单元,标志逻辑行的结束; SPOFF是常闭单元是新逻辑行的开始,其右边的串联单元同样表示这个逻辑行的结束,第1行是没有并联单元的;第2行中,串联关系的AUTO和M03组成一个逻辑行,M03右边的右并联单元是逻辑行的结束标志;第3行和第2行几乎完全一样。应该注意到,第2行和第3行都存在并联单元,这个信息在第一步扫描时记录在中间结果数组中。这表明第2行、第3行与第1行有/联系0,即同属一个梯级;第4行没有并联单元,表明这是一个新梯级,即/主轴逆时针旋转0梯级的首行。由上述可知,段的划分与判断逻辑行的终止是一个概念,一个逻辑行的结束就是其所属的段在其所处的自然行上的结束。
局部梯形图共包含5个梯级,除了/主轴顺时针旋转0梯级、还有/主轴逆时针旋转0梯级、/主轴停0梯级、/变低速档齿轮0梯级以及/变高速档齿轮0梯级。但分析的原理与步骤与第1个梯级的相似,不再重复。
5 结束语
应用程序模型的概念,实现了图形化编程环境,通过数控系统中主轴控制的一个应用实例表明,上述分析方法和原理是有效、可行的。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:基于开放式数控系统平台的软件PLC