发明名称 一种应用于PLC开发的梯形图转换为语句表的方法
摘要 本发明提出了一种应用于PLC开发的梯形图转换为语句表的方法,以一种基于“节点势能”的图元数据集合描述梯形图,进而基于“节点势能”关系按特定的步骤将梯形图转化为最终二叉树数据结构,最后通过遍历最终二叉树得到语句表。本发明通过对梯形图“节点势能”的确定,将梯形图图元间的连接关系抽象为数值关系,从而以一种复杂度较低的数据结构将梯形图完整地描述出来。该数据结构与现有方法相比更加简单清晰,并且降低了转换的复杂度,能够转换含多输出的梯形图程序及复杂的梯形图程序。该转换方法还能够为其他类似图形关系的解算提供参考,具有普遍适用性。
申请公布号 CN102736552A 申请公布日期 2012.10.17
申请号 CN201210222777.3 申请日期 2012.07.01
申请人 西北工业大学 发明人 魏晓晴;吴旭光;牛云;郝方
分类号 G05B19/05(2006.01)I 主分类号 G05B19/05(2006.01)I
代理机构 西北工业大学专利中心 61204 代理人 陈星
主权项 一种应用于PLC开发的梯形图转换为语句表的方法,其特征在于:包括以下步骤:步骤1:以基于“节点势能”的图元数据集合描述梯形图,其中基于“节点势能”的单个图元数据结构包括:图元类型,图元左、右节点势能值,图元行、列值,图元地址和图元属性参数;步骤2:给图元的左、右节点赋节点势能值:步骤2.1:从上到下逐行扫描梯形图,每行按从左到右顺序扫描,除竖线为,按规则2.1给图元的左、右节点赋节点势能值:规则2.1:a、第一行最左端图元的左节点势能值=0;b、对于同一图元,其右节点势能值=左节点势能值+1;c、对于同一行左侧相邻一列有图元的图元,其左节点势能值=前一个被扫描图元右节点势能值;d、对于同一行左侧相邻一列无图元的图元,其左节点势能值=前一个被扫描图元右节点势能值+1;步骤2.2:按照规则2.2对特殊类型图元的左、右节点势能值进一步处理:规则2.2:a、首先将连接左母线的图元的左节点势能值赋0,将连接右母线的图元的右节点势能值赋N,其中N为远大于梯形图中图元个数与梯形图行数之和的数值;b、其次处理竖线连接的节点:令下行节点的势能值等于上行节点的势能值;c、最后处理横线连接的节点:令横线左侧相邻图元的右节点势能值、横线的左节点势能值、横线的右节点势能值、横线右侧相邻图元的左节点势能值相等,且等于其中的最小值;步骤3:将用图元数据集合描述的梯形图转化为二叉树数据结构,其中二叉树数据结构包括:索引号,二叉树类型,左、右节点势能值,行值,根节点内容,左、右节点指针,独立标志位和遍历标志位:步骤3.1:从上到下逐行扫描采用图元数据集合描述的梯形图,每行按从左到 右顺序扫描,建立除横线和竖线外的每个图元对应的初始二叉树数据结构;其中初始二叉树中的索引号按建立顺序从0开始依次递增;二叉树类型,左、右节点势能值,行值等于对应图元数据结构中的图元类型,图元左、右节点势能值,图元行值;根节点内容为对应图元数据结构中图元地址和图元属性参数对应的操作数,左、右节点指针为空,独立标志位设为独立,遍历标志位设未被遍历;步骤3.2:按照索引号从小到大顺序扫描所有独立二叉树,在扫描得到的右节点势能值不为N的独立二叉树范围中,按照并联规则处理所有并联关系;步骤3.3:按照索引号从小到大顺序扫描经过步骤3.2处理后的所有独立二叉树,在扫描得到的右节点势能值不为N且二叉树类型不为取反、上升沿、下降沿中任一类型的独立二叉树范围中,按照串联规则处理所有“节点交汇处有且仅有两个二叉树串联”的串联关系;步骤3.4:重复步骤3.2至步骤3.3,直至没有新的二叉树生成,进入步骤3.5;步骤3.5:按照索引号从小到大顺序扫描经过步骤3.4后的所有独立二叉树,在扫描得到的右节点势能值不为N的独立二叉树范围中,按串联规则处理完所有剩余的串联关系:串联取反、上升沿二叉树、下降沿二叉树,节点交汇处有两个以上二叉树串联;处理完后剩余的独立二叉树为左节点势能值为0的二叉树或右节点势能值为N的二叉树;步骤3.6:按照索引号从小到大顺序扫描经过步骤3.5处理后的剩余独立二叉树,按串联规则处理所有剩余独立二叉树,得到最终二叉树;最终二叉树左节点势能值为0,右节点势能值为N;所述并联规则为:对某两个二叉树a,b,若二叉树a左节点势能值=二叉树b左节点势能值,二叉树a右节点势能值=二叉树b右节点势能值,则a,b为并联关系;若将并联关系建立为一个新的二叉树,则新的二叉树的索引号按已有的二叉树构建序列继续依次排列,类型为“并联块”,左、右节点势能值与并联的两个二叉树的左、右节点势能值相等,行值等于并联的两个二叉树行值中的小值,根节点内容为并联关系指令,左支指向行值较小的二叉树,右支指向行值较大的二叉树,二叉树设为独立, 未被遍历;构建新二叉树的同时将并联的两个旧二叉树a和b设为非独立;所述串联规则为:对某两个二叉树a,b,若二叉树a右节点势能值=二叉树b左节点势能值,则a,b为串联关系;若将串联关系建立为一个新的二叉树,则新的二叉树的索引号按已有的二叉树构建序列继续依次排列,二叉树类型为“串联块”,左节点势能值=a的左节点势能值,右节点势能值=b的右节点势能值,左支指向二叉树a,右支指向二叉树b,根节点内容为左右支二叉树类型决定的指令,行值等于二叉树b的行值,二叉树设为独立,未被遍历;构建新二叉树的同时将串联的两个旧二叉树a和b设为非独立;步骤4:遍历步骤3得到的最终二叉树,建立语句表;若有M支最终二叉树,则按行值从小到大依次遍历,且只遍历一次;对于二叉树类型为关系块且右支连接有关系块的二叉子树,采用后续遍历,否则采用中序遍历,其中关系块指并联块或串联块;遍历时遇到左叶子二叉树时,向语句表中加写装载指令。
地址 710072 陕西省西安市友谊西路127号