首页 理论教育 分支线性链表算法:要点与实现

分支线性链表算法:要点与实现

时间:2023-06-16 理论教育 版权反馈
【摘要】:图2-73 输入输出转换程序1.算法要点图2-74所示为分支线性链表算法的框图。图2-78 三个品牌PLC实现分支线性链表算法梯形图程序节4为判定设定输入ON、OFF输入1及2是否都为0。图2-79 分支线性链表程序实现实例其数据设定及其分支实现见图2-80所示。表2-26 西门子PLC线性数表分支控制数据设定运行任一上述分支控制程序及转换程序,加上数据设定。

分支线性链表算法:要点与实现

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

图2-73 输入输出转换程序

1.算法要点

图2-74所示为分支线性链表算法的框图。从图2-74知,起动之后,启用链表中标号0的数据。用它的指向,生成设定输出,再由设定输出产生虚拟输出,进而通过逻辑转换变为实际输出,以进行对系统第一步控制。

之后等待控制效果的反馈。过程是,先把判断设定输入1或2各是否为0。哪个为0,则退出输入判断,如都不为0,则可都参与输入判断。之后将根据虚拟输入结果选定那个的设定标号作为下一步的控制数据。进而生成分支。

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

图2-74 分支线性链表算法的框图

这个过程重复进行,直到次一标号为0,或2个输入设定均为0(该图未画出),则过程结束(停止),完成整个的顺序控制。

可知,这里实现分支顺序控制的算法很简洁。

2.程序实现

可以用间接地址实现,也可用数组实现。

(1)间接地址实现

图2-75、图2-76及图2-77分别为欧姆龙西门子及三菱PLC的相关程序。用的都是间接地址。但方法各不相同。欧姆龙用DM指针的值作为间接访问DM区。西门子用软元件(这里用数据区D)的实际地址访问。三菱用变址器与D存储器配合使用,也很简便。各个程序都有9个梯级(西门子多一个读取软原件实际地址的梯级)。

第1个梯级都是初始化,只要“工作”OFF,而“工作完成”有处ON状态,将复位。这是因为这个程序的“工作完成”是多输出,只好用置位置ON。

第2梯级为工作起停。

第3梯级西门子程序为读取软元件实际首地址的程序,其它的为确定设定输出间接地址并生成虚拟输出。

第4梯级(西门子为第5,以下也都是相差的一个梯级)为确定设定ON、OFF输入1间接地址,生成设定输入值,并检查是否为0。如有一不为0,则进一步与相应虚拟输入做“与”运算,再进行比较。如比较相等,则分别使“ON_wfsh1”及“OFF_wfsh1”ON。

第5梯级与第4梯级相似,但针对设定ON、OFF输入2而言,分别确定“ON_wfsh2”及“OFF_wfsh2”是否ON。

第6、7梯级,根据“ON_wfsh1”“OFF_wfsh1”ON、“ON_wfsh2”及“OFF_wfsh2”ON的情况,确定次一设定标号赋值,进而生成控制分支。但如赋给指针(inDx)的值为0,则把“工作完成”置位。要说明的是,西门子设定PLC标号是双字的,其取值前要对inDx值乘2,即这里用inDx自加一次。

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

图2-75 欧姆龙PLC间接地址实现线性链表分支控制程序

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

图2-76 西门子PLC间接地址实现线性链表分支控制程序

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

图2-77 三菱PLC间接地址实现线性数表分支控制程序

第8梯级根据“工作完成”置位与否,如不是自动工作,则将在第2梯级停止工作,如自动工作,又可重新开始新的循环。当然,这里未工作时指针及设定输出置为0也是程序初始化的需要,以避免出现“指针”值及设定输出值不确定可能出现的问题。

(2)数组实现

图2-78所示为几个品牌PLC相关程序。以下先对和利时PLC做说明。它先声明一个结构,即

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

再对变量做声明,即(www.xing528.com)

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

梯形图程序见图2-78所示。

图2-78a为和利时PLC程序。其中节1为复位程序。只要workOFF,而wF又为ON,则自身复位。

节2为起、保、停逻辑,用以起动work ON。

节3为生成虚拟控制输出。

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

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

图2-78 三个品牌PLC实现分支线性链表算法梯形图程序

节4为判定设定输入ON、OFF输入1及2是否都为0。哪个不都为0,则分别在第5、6节进行输入比较。如全为0则在第9节使wF(工作完成)置位,标志着控制完成。

节5、6先对设定ON、OFF输入与虚拟ON、OFF输入做“与运算”,其结果再与虚拟输入比较。如相等分别将使“ON_wfsh1”“OFF_wfsh1”ON、“ON_wfsh2”及“OFF_wfsh2”置位。

节7、8根据以上比较结果,决定对指针(inDx)赋值,确定次一步骤要传递的标号。并判断新赋值的指针是否为0。

节10视Auto(自动)是否置位,决定work(工作)复位还是开始新的循环。同时它还在程序启动时,可对指针及虚拟输出做正确的初始化赋值。

图2-78b为ABPLC程序。其标签定义与和利时相同。程序也是10个梯级。含义与类似。具体不再重复解释。

图2-78c为施耐德PLC程序。它的梯级1、2、3同和利时PLC。梯级4、5同和利时PLC的4。梯级6、7同和利时PLC的5。梯级8、9同和利时PLC的6。梯级9、10同和利时PLC的7、8。梯级11、12同和利时PLC的9、10。含义完全相同。这么处理只是画图的原因。

3.程序实例

本例用两组单按钮起停控制。按钮为A、A1,以分别控制Out、Out1起停。其实际输入、输出与虚拟输入、输出转换程序见图2-79。

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

图2-79 分支线性链表程序实现实例

其数据设定及其分支实现见图2-80所示。

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

图2-80 分支实现简图

从图2-80知,开始时,处状态0。这时有两个可能:按钮A1或A2一按一松。如前者则输出为1,即OUT1 ON,并进入状态2;否则为输出为2,即OUT2 ON,并进入状态5。

进入状态2又有两个可能:按钮A1或A2一按一松。如前者则输出为0,即OUT1 OFF,回到状态0;否则为输出为3,即OUT1、OUT2同时ON,并进入状态8。进入状态5也有两个可能……以下进程读者可以自行分析,这里不再赘述。有关这些标号的相关参数设定,以和利时PLC为例,见图2-81。

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

图2-81 分支控制实例有关设定数据

西门子PLC的设定要麻烦一些。这时因为的软元件地址以字节计,而实际使用的虚拟输入输出为字,标号及地址为双字(标号可以为字或字节,但运算时要转换)。所以本例设定值应为表2-26所示。

2-26 西门子PLC线性数表分支控制数据设定

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

运行任一上述分支控制程序及转换程序,加上数据设定。即可实现本例要求。当然,独立用两个单按钮分别控制两组启停逻辑是很简单的。本例只是用以说明本分支控制的可能应用。

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

我要反馈