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 结束语
应用程序模型的概念,实现了图形化编程环境,通过数控系统中主轴控制的一个应用实例表明,上述分析方法和原理是有效、可行的。