首页 理论教育 实现简单线性链表程序并附例子

实现简单线性链表程序并附例子

时间:2023-06-16 理论教育 版权反馈
【摘要】:图2-7O 间接地址实现线性链表控制程序其它PLC类似也做以上结构与变量或标签定义。执行节5,将使程序复原。图2-71 实现线性链表算法梯形图程序图2-71 实现线性链表算法梯形图程序(续)图2-72 欧姆龙PLC实现线性链表算法梯形图程序表2-23 内部变量表2-24 输出变量提示:欧姆龙新推出的CJ2机,梯形图语言也可用下标变量访问数组。

实现简单线性链表程序并附例子

1.用间接地址程序实现

算法框图见图2-2线性链表算法的框图。其实现程序见图2-70。与混合控制不同的是,它不用计数器,而增加一个标号设定与链接数据。其反馈输入用“计算输入”处理,其它的处理也与混合控制程序相同。

图2-70a为欧姆龙PLC程序。这里每次(也可与图2-70b类似只在初始化时读取一次)总是先读取所存放的设定输入、设定输出及设定标号的DM区的初始地址,继而与标号(inDx)相加得到指向设定数据的指针值,最后用指针值作为地址读取设定值。

图2-70b为西门子PLC程序。它先用仅在初始工作ON一个周期的SM0.0特殊继电器,读取所存放的设定输入、设定输出及设定标号的数据的初始字节地址,继而与标号相加得到指向设定数据的指针值,最后用指针值作为地址读取设定值。

图2-70c为三菱PLC程序。它用变址器处理间接地址,直接用inDx与初始地址合用,不必单独读取初始地址。

执行上述程序,当计算输入与设定输入一致,则把该数表的标号传送给下标(inDx),产生新的输出、输入及标号数据,进而进行新的控制。这样一步步推进,直到新的标号为0,说明控制已完成(工作完成ON),结束本循环。如设置为自动工作(自动ON),则又重新开始新的循环,否则,工作停止。程序复原。

要提及的是,西门子地址是按字节分配的。而这里用的设定输入、输出为字,所以其标号设定应按双字节编排。而标号为双字,故标号赋值给Indx后,要自加1次。这相当于按4字节编排。

2.用数组或结构数组程序实现

首先,要定义一个结构(STRUCT)。以和利时PLC为例:

978-7-111-56641-0-Chapter03-138.jpg

再就是,声明所使用的变量。最主要的是声明一个结构数组“kz”。

978-7-111-56641-0-Chapter03-139.jpg

978-7-111-56641-0-Chapter03-140.jpg

978-7-111-56641-0-Chapter03-141.jpg

图2-7O 间接地址实现线性链表控制程序

978-7-111-56641-0-Chapter03-142.jpg

其它PLC类似也做以上结构与变量或标签定义。具体略。

图2-71所示为这个算法实现的多个品牌PLC梯形图程序。本程序除了用结构数组代替间接寻址,也与图2-66程序一样,把输入分为ON有效输入及OFF有效输入,分别用两个数组设定,而不用“计算输入”处理。

图2-71a为和利时PLC程序。其第1、2节为工作控制及生成虚拟输出。节3为ON与OFF虚拟输入与设定值比较。如果比较不一致,则继续实施原标号指向的数据控制。如果结果一致,则ON_wfsh及OFF_wfsh均ON,说明反馈输入完成。之后将在节4把新的标号赋值给下标(inDx),进而生成新的控制输出、反馈输入等数据,以实现进一步控制。而如果新的下标值为0,说明整个控制完成,则wF(工作完成)ON,与以前混合控制介绍的一样,视自动工作(Auto)ON否,或重新开始新的循环,或停止工作。执行节5,将使程序复原。

图2-71b为ABPLC程序。它的梯级从0开始,其0~4与和利时的1~5对应。1、2节为工作控制及生成虚拟输出。图2-71c为施耐德PLC程序,与图2-71a也类似。图2-71d为三菱PLC程序,使用它的DXwork2软件编写的,大体也类似。

图2-72所示为欧姆龙PLC程序。因为它不能定义结构以及数组的下标,也不能用变量访问,所以只能沿用图2-66的办法,用定义一个数组功能块处理。这里不用结构,只是分别定义多个数组,而不是定义含有多个成分的一个数组结构,本质上是相同的。

从图2-72知,它不用计数器,而多了一个标号数组。用它指向次一步要使用的控制以反馈数据。本程序定义的功能块除了定义变量,要有4个语句,即(www.xing528.com)

978-7-111-56641-0-Chapter03-143.jpg

其功能也是根据下标变量转换为设定控制输出、设定ON反馈输入及设定OFF反馈输入。但增加一个标号输出。功能块定义有内部、输入、输出及标号4种变量。内部变量为AT(与地址关联)变量,直接可访问实际数组所使用的地址,见表2-23。

输入变量idd,为功能块读取的下标(inDx)值。输出变量见表2-24。用以输出设定控制输出、设定ON反馈输入、设定OFF反馈输入及设定标号。

调用此功能块(该程序使用名称为mm)后,这里yOO、xON、xOFF及n实际即为sdOut[indx]、sdONin[indx]、sdOFFin[indx]及n[inDx]。它的梯级从0开始,而不是和利时从1开始。其它说明略。

978-7-111-56641-0-Chapter03-144.jpg

图2-71 实现线性链表算法梯形图程序

978-7-111-56641-0-Chapter03-145.jpg

图2-71 实现线性链表算法梯形图程序(续)

978-7-111-56641-0-Chapter03-146.jpg

图2-72 欧姆龙PLC实现线性链表算法梯形图程序

2-23 内部变量

978-7-111-56641-0-Chapter03-147.jpg

2-24 输出变量

978-7-111-56641-0-Chapter03-148.jpg

提示:欧姆龙新推出的CJ2机,梯形图语言也可用下标变量访问数组。可不必使用这里的功能块。

3.应用实例

本例用的是本章2.3.4节的例3组合机床动力头运动控制相同。

对比2.8.3节混合控制应用例2,本例所用的控制逻辑为线性链接数表,要用设定标号替代计数器,所以,要在结构数组中增加有关标号的设定,或增加一个标号数组设定(对欧姆龙PLC)。其它的,如有关ON及OFF输入、输出设定,以及实际ON及OFF输入、输出到虚拟ON及OFF输入、输出转换程序则完全相同的。这个标号设定见表2-25。

2-25 结构数组或标号数组设定

978-7-111-56641-0-Chapter03-149.jpg

这样,只要做好上述数据设定,再运行图2-71或图2-72及图2-73程序,也完全可实现所要求的控制。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈