2 PLC程序图形化编程环境的实现和梯形图与语言的转换
2.1 PLC程序图形化编程环境的实现
PLC图形编程环境采用双向链表数据结构描述和记录屏幕编辑位置的状态。该链表的数据结构如下:以梯形图每行的头指针作为链表的一个节点,每个节点指向一个动态数组,动态数组的每一元素中存储的是特定行的梯形图元素。PLC有2类指令:基本指令和功能指令。基本指令共12个,完成简单的“与”、“或”等基本逻辑运算;功能指令共24个,实现定时、记数、译码、加、减、乘、除等复杂功能口单个梯形图元素的数据结构为:
2.3 语言程序转换为梯形图程序的算法
语言程序转换为对应梯形图程序的算法如下:
(1)读取一条PL.C.指令,若为指令结束标志则转(6)口若为RD,RD. NOT等建立新梯级指令则转(2):若为AND, AND用.NOT或OR , OR .NOT或RTI.STK, RD.NOT. DTK或TMR01、SUB5等增加梯形图的列或行的指令则转(3);若为DR.STK,AND.STK等块并联指令则转(4):
(2)添加一新数组元素,根据当前指令和上一梯级最大行值填写该数组元素的数据域;
(3)添加一新数组元素,根据当前指令和前一数组元素数据域信息填写新数组元素的数据域;
(4)添加一新数组元素,根据因DR.STK、AND.STK增加的数组元素数目修改前一数组元素数据域的连接方式,然后删掉因OR.STK指令和}AND.STK指令增加的数组元素;
(5)转(1);
(6)按动态数组各元素数据域的信息绘制梯形图。
此算法稍作修改就可作为梯形图程序向语言程序转换的算法:此时指令结束标志、建立新梯级指令、行或列增加指令、块并联中表示连接方式的DR.STK, AND.STK指令等均表现为相应的梯形图符号口
3 PLC程序的执行
数控系统中的PLC根据所处理机床事件的实时性要求,可划分为高级PLC和低级PLC。前者主要处理急停、超程、循环启动、进给保持等实时性要求较高的事件,后者处理机床控制面板输入和辅助功能M、S、T)等实时性要求较低事件。
对每一个PLC指令,都需要编写好其对应的执行函数,建立函数地址表口当PLC程序执行时,查询指令链表并从函数地址表中调用执行函数。
3.1 PLC程序在内存中存储的数据结构
上位机PLC程序在内存中的表示使用了动态数组,这样可以将PLC程序直接存储为相应的文件,以便将来的修改等操作。对下位机而言,一个好的数据结构对提高系统的执行效率是非常关键的,特别是对数控系统这种具有较高实时性要求的系统更是如此,而由于下位机不是在Windows2000下运行,因此需要对上位机数据结构作较小的转换。考察PLC指令系统发现:基本上每个功能指令前面都有一个或几个基本指令作为控制指令,对于没有控制指令的功能指令,可为其增加一空操作(NOP)指令作为控制指令,这样就可利用每一个功能指令与它的最后一个基本控制指令,将功能指令同基本指令联系起来,即用图2所示的链表结构来实现PLC程序在内存中的存储。
该链表的数据结构如下:
3.2 PLC程序的执行算法
PLC的执行如图2所示:当某级PLC程序被调用时,头指针指向基本指令链表的表头,然后沿链表往后移动并执行相应的指令,一直到该级PLC链表的结尾为止。在执行过程中,当某一基本指令链接有功能指令时,即基本指令为功能指令的最后一个控制条件时执行该功能指令口当功能指令执行完后,返回到基本指令并执行下一个基本指令。在PLC执行过程中,各指令逻辑操作的结果暂存于“堆栈寄存器”中,同时各指令也从“堆栈寄存器”中获取中间结果参与逻辑运算口所谓“堆栈寄存器”是一个16位的内存区,所涉及的“移位”,“与”,“或”等基本逻辑操作是用C语言的相应逻辑运算来实现的。
PLC执行程序的具体算法可用伪代码表示如下:
4 PLC程序编辑和转换实例
编辑PLC梯形图程序时,只需用鼠标单击窗口左侧工具栏中的图标,在左窗口的相应位置即可白动画出需要的梯形图元素口通过双击已画出的梯形图元素,可弹出对话框。在对话框的标记栏和地址栏中可分别输入该元素的标识和地址,如W1和Y1.0;在对话框的参数栏中可输入参数,如20和R30整个梯形图编辑过程非常直观、简单。通过点击程序生成菜单中的语句生成生成子菜单,可实现梯形图程序向语句程序的转换,如图3。编辑PLC语言程序时,可在右窗口输入PLC指令,如RD X7.0口同理点击程序生成菜单中的梯图生成子菜单,可将右边的语言程序转换成左边的梯形图程序。
5 结束语
本文提出的内嵌式软PLC在基于Windows2000的开放式数控系统中的实现方法体现了数控系统的开放性要求,易于实现与硬件无关性要求,统一的数据结构易于实现深度的系统开放,方便的编程环境、灵活的编程方式可降低PLC编程进门门槛,方便用户使用,另外该方法降低了系统成本。