push(Y1Y2?K);
else
error();
else(X==$)
分析成功;
break;
其中,M[X,a]是指预测分析表中x行和a列相交处的产生式。
下面举例子来说明PLC程序语法分析程序的工作过程。
将指令用小写字母代替后,程序指令变为acababecdcf,将该字符串作为输入,分析过程如表2所示。
表2 PLC程序语法分析表
PLC指令表程序的分析是通过对指令表程序的解释而获得程序的逻辑,并以对话框形式演示程序的逻辑状态。在解释过程中,构造2个变量,1个用于存储分支块的逻辑值,另1个用于存储分支块前面语句的逻辑值。同时构造1个堆栈用来存储解释过程中的结果,分支块前面的值保存在堆栈中,整个分支块的值保存在1个临时变量中。
PLC指令表程序的解释过程为:1)当解释程序发现LD或LDI指令时,将临时变量值压入堆栈,临时变量赋值为1,临时变量与指令后面的元素进行逻辑与操作,将结果保存在临时变量中;2)当解释程序发现AND或ANI指令时,临时变量与指令后的元素进行与操作,将结果保存到临时变量中;3)当解释程序发现OR或ORI指令时,l临时变量与指令后的元素进行或操作,将结果保存到临时变量中;4)当解释程序发现ANB指令时,临时变量与栈顶的值进行与操作,将结果保存到临时变量中,同时堆栈将栈顶元素弹出;5)当解释程序发现ORB指令时,临时变量与栈顶的值进行或操作,将结果保存到临时变量中,同时堆栈将栈顶元素弹出;6)当解释程序发现OUT指令时,将临时变量与栈顶的值进行与操作,将结果保存在临时变量中。同时清空堆栈。
程序逻辑的仿真界面,如图3所示。
图3 程序逻辑仿真界面
程序中所包含的PLC元素会按类别以表格形式列出,元素的不同颜色表示元素的开关状态,红色代表高电平,白色代表低电平。当用鼠标改变输入元素的状态时。输出元素的状态会按照程序逻辑进行改变,改变的结果可由颜色的变化来显示。
软PLC程序的逻辑仿真结果表明,开发的软PLC编译系统能实现软PLC梯形图与指令表程序的相互转换,完成软PLC程序的文法设计和语法分析,对软PLC程序的运行指令作出正确解释,并能按照PLC的工作原理运行,使PC机完成相应的控制功能。开发的软件系统能很容易地实现PLC程序的编辑和逻辑仿真,系统结构简单,使用方法简便,为今后进~步研究和开发软PLC的下位机系统、不断完善软PLC系统的功能和实现其良好的控制特性奠定了基础。