PLC编程实用指南(第3版)
上QQ阅读APP看书,第一时间看更新

2.8 工程方法编程

2.8.1 分散控制及其应用

1.分散控制算法要点

在本章第7节讲到流程图法编程,实质上也是分散控制。它们都是按反馈输入的情况一步步推进,各个步也都可按要求实现不同的控制输出。两者不同只是分散控制源于工程控制实践,而流程图算法源于计算机程序流程管理。

本章第7节介绍分散控制算法没有讲分支。其实正如流程图算法一样,它也可能有分支。有平行分支与选择分支,以至于更为复杂的分支。图2-56为平行分支的原理图。

从图2-56知,它的“动作2完成”信号将起动两个动作,“动作3”及“动作33”。起动后,这两个分支将平行工作。直到这里的“动作4完成”“动作44完成”信号都产生了,才能进入“动作5”。

从图2-57知,它的动作2完成后,有两个动作完成信号选择:“动作2完成A”与“动作2完成B。如得到是“动作2完成A”,则进入分支A,直到分支A完成。如得到是“动作2完成B”,则进入分支B,直到分支B完成。

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

图2-56 平行分支框图

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

图2-57 选择分支框图

2.分散控制程序实现

分散控制的“动作”“步”或“动作完成”可以是实际输出、输入点,直接实现输出控制与得到输入反馈。也可不是实际输出点、输入点,通过转换间接实现输出控制与输入反馈。后者具有柔性,实现程序灵活,通用性强,易读,易改,是很值得提倡的设计。

(1)使用间接实现

所要做的工作有如下两个:

1)根据“动作”或“步”的数量,设计与其相等的“动作”或“步”的逻辑控制程序。

2)设计输入、输出转换程序。

(2)逻辑控制程序的实现方法

1)基本指令实现。其思路是,开始工作时先使第一步用的工作位ON,并保持。当第一步工作完成时,使第1步用的工作位OFF,同时启动第2步用的工作位,并使其保持ON。这样一步步推进,直到整个工作完成。具体程序略。

2)移位指令实现。本法的优点指令使用效率高,是在一定步数内(受移位字的限制),增加“步”数,控制输出程序量不增加。

3)步进指令实现。本章第7节流程图算法的程序实现用的就是此方法。程序单元化强,扫描时间也可减少。

4)SFC语言实现,是步进指令的进一步发展。图2-58所示为合理时PLC的相应程序。运行开始,先进入初始步(init)。当“start”ON,则进入“Step1”步。到了“Step1F”条件ON,则转入“Step2”步。以此类推。直到“Step4F”条件ON,则取决于“Auto”条件ON否,或转到“Step1”继续工作,或转到“init”等待新的命令。以下为它使用的变量声明:

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

各个步(Step)的所执行的动作要另行编写。

(3)输入、输出转换程序

这在间接输入、输出控制时才用到它。这在本书第1章第6节典型程序中也已有介绍。以下应用实例中还将具体说明。

分散控制应用实例,用的是本章第3节的例3组合机床动力头运动控制,其要求与其完全一样。

1)设计控制程序。结合本例,用6个“动作”的顺序控制程序。步进逻辑可采用以上介绍的任意一个,具体略。

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

图2-58 SFC语言分散 控制程序

2)确定输入、输出组合逻辑。本例用间接输入、输出。实际地址用符号地址,如XK1、XK2、…、DT1、DT2。按要求,其输出与“动作”的关系为:

“动作1”“动作2”“动作4”“动作5”DT1应为ON,动力头前进。其它情况为OFF,动力头后退。

“动作1”“动作3”“动作4”“动作6”DT1应为ON,动力头快速。其它情况为OFF,动力头慢速。

其逻辑式应为

DT1=“动作1”+“动作2”+“动作4”+“动作5”

DT2=“动作1”+“动作3”+“动作4”+“动作6”

按要求,其输入与“动作完成”的关系为:

2XKON应产生与“动作1完成”信号;3XKON应产生与“动作2完成”信号;2XK OFF应产生与“动作3完成”信号;3XK再次ON应产生与“动作4完成”信号;4XKON应产生与“动作5完成”信号;1XKON应产生与“动作6完成”信号。

所以,其逻辑表达式应为

“动作1完成”=XK2

“动作2完成”=XK3

“动作3完成”=XK2非

“动作4完成”=XK3

“动作5完成”=XK4

“动作6完成”=XK1

“原位”=XK1

图2-59为相应的输入、输出逻辑梯形图。

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

图2-59 输入、输出逻辑梯形图

有了步进逻辑程序加上这个转换程序,PLC运行后,即可实现所要求的控制功能。

2.8.2 集中控制及其应用

集中控制算法要点已在本章第1节做了说明。以下仅讨论它的算法程序实现及应用实例。

1.集中控制程序实现

集中控制程序可用系统时钟、定时器(或功能块)或时钟脉冲激发计数器(或功能块),再加上一系列的比较去实现。如学校的打铃控制,就可用要求打铃的时间与系统时钟的时间进行不断比较。只要比较相等,则输出一定时间的打铃操作。否则,什么也不做。再如一个十字路口交通岗上的红绿灯,可按预定的时序控制哪个方向的灯亮,哪个方向的灯不亮,而不考虑行车、行人的情况。

图2-60所示为PLC用时钟脉冲激发计数器及步进计数器的集中控制算法梯形图程序。

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

图2-60 集中原则梯形图程序

从图2-60知,它由工作控制、集中控制器及虚拟输出逻辑几部分组成。这里的梯形图用的是符号地址。由于4种PLC计数器使用上的差别,所以相应程序也稍有不同。

集中控制器主要由两个增计数器及相应的存储区组成。增计数器用C0、C1(欧姆龙PLC小机型没有增计数器,故用可逆计数器CNTR 000、CNTR 001,但减计数不用)。计数器C0用以步进,而C1用于计时。

当系统起动,进入工作,计数器C0按每次C1计时的情况,作增计数。对欧姆龙PLC,CNTR 000计到设定值,再计入1,其计数值自动回到0,并产生输出(CNT 000常开触点ON,常闭触点OFF);而对西门子、三菱PLC,则每计数到设定值,C0的常开触点ON,通过程序用复位指令(对三菱)或在复位端(对西门子)使其复位,回到0。这时,如自动工作OFF,则其常闭触点将使工作线圈OFF,工作停止;否则,又从0开始,又执行第一步动作。计数的设定值为间接数,取决于“总步数”的值。

提示:欧姆龙PLC的“总步数”应为实际步数减1,而其它两种PLC的“总步数”应等于实际步数。

计数器CNTR 001对100ms脉冲作增计数。处工作状态时,开始计,每100ms加1。到了设定值,再加1,即回到0,并产生输出;而对西门子、三菱PLC,则每计数到设定值,C1的常开触点ON,通过程序用复位指令使其复位,回到0。复位后,又为新的计数做准备;产生输出也就为C0计数器提供步进信号。

C1的设定值为间接地址。3种PLC使用的间接地址方法不同。具体情况是:

对图2-60a:间接地址为DM998,即以它的值为地址的DM单元的内容,作CNTR 001的设定值。而DM998的值为DM996的值加CNT 000的现值。这意味着这个设定值放在DM区的开始位置由DM996确定。

对图2-60b:间接地址为VD993,即以它的值为地址的VW单元的内容,作CNTR 001的设定值。在程序中,先把VB700的地址赋值给VD993,然后与C0现值乘2(指针地址以字节计,而本程序用的是以字计)后相加。这意味着这个设定值放在V区的开始位置为VB700。

提示:欧姆龙的P-0.1s、三菱的M8012为产生100ms脉冲的特殊继电器。而西门子S-200没有此特殊继电器。图2-59是用一段小程序由定时器T33生成。对S7-200,如用的是1或10ms级定时器,则它必须放在这计数器之前,否则计数器将不能计入此脉冲。本例用的为10ms级定时器,故作这么放置。对图2-60c:间接地址为D995中。而D995的值为D900V0的内容传来的,即变址器V0值(即C0的值)与900之和,作为D的地址的内容。这意味着这个设定值放在D区的开始位置为D900。

这里的输出是虚拟的,实际输出将由实际地址用输出逻辑确定。虚拟输出也用了间接地址。具体情况是:

对图2-60a:间接地址为DM999,即以它的值为地址的DM单元的内容,作为“虚拟输出”值。而DM999的值为DM995的值加CNT 000的现值。这意味着这个“虚拟输出”在DM区的开始位置由DM995确定。

对图2-60b:间接地址为VD989,即以它的值为地址的VW单元的内容,作为“虚拟输出”值。在程序中,先把VB300的地址赋值给VD989,然后与C0现值乘2(指针地址以字节计,而本程序用的是以字计)后相加。这意味着这个“虚拟输出”在V区的开始位置为VB300。

对图2-60c:间接地址为D800V0中,即为变址器V0值(即C0的值)与800值之和,作为D的地址的内容。这意味着这些“虚拟输出”在D区的开始位置为D800。

这里虚拟输出用了一个字,16位。可对16个逻辑量进行控制。控制步数的变化对程序没有影响,步数多少只受C0最大值及数据区大小的限制。所以,这个程序的功效比用分散方法进行定时控制要强得多。只是在实际运行前,需对有关DM、VW或D区作好设定。

程序工作过程:当“起动”信号ON,“工作”输出将ON,并自保持,系统进入工作状态。“虚拟输出”将从∗DM999、∗VD989或V800V0传来数据,将根据前者的内容产生虚拟输出(如要产生实际输出,可把此输出再作传递)。与此同时,C1开始计数,每100ms加1。

当CTR001计数到∗DM998设定的值,再计入1,而当C1计数到∗VD993或D995设定的值,其输出ON,产生“步进”信号。从而使CTRN 000或C0加1计数,DM998、VD993或V0也随之赋以新值(加1),实现了步进,其虚拟输出则是新一步的设定值。

这样延续,直到CTRN 000计到“总步数”,再计入1,或C1计数到“总步数”,其输出ON,并自身复位(现值回到0)。这时,如“自动”ON,则开始新的循环,继续工作;如“自动”OFF,“工作”OFF,“虚拟输出”置0,系统工作停止。

图2-60d为和利时PLC程序。它的编程软件变量名不支持英文,与图2-60a、b、c对应的变量定义如下:

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

此外,它不用指针而用数组,效果一样,而且更简明。

图2-60d中节1为工作起、停控制。这时,“start”ON,可使“work”ON,使系统进入工作状态。

图2-60d中节2为调用定时功能块。以在定时时间到时,生成步计数脉冲。以此替代图2-60a、b、c的计数器C1。

图2-60d中节3为调用增计数功能块C0。每完成一步控制,计数功能块加1。到100步,计数功能块复位。并使C0.Q常闭触点OFF,以实现系统工作控制。

图2-60d中节4为产生虚拟输出、控制时间设定及转换。这里用2个数组存放虚拟输出及步定时时间。步定时时间存放在字中,用于定时功能块设定还要做字到时间变量的类型转换。

图2-60d中节5为当系统工作停止,禁止所有输出。

其工作过程是:先是第0步(对应于计数现值为0)。随着计数值的增加而一步步推进。如第0步工作,则虚拟输出取自数组“Xout[0]”的值,时间设定取自数组“XTime[0]”的值。一旦T1的定时时间达到“XTime[0]”的值,定时功能块发出脉冲,并复位。而计数功能块加1,进入第1步。第1步的虚拟输出取自数组“Xout[1]”的值,时间设定取自数组“XTime[1]”的值。一旦T1的定时时间达到“XTime[1]”的值,定时功能块也发出脉冲,并也复位。而计数功能块再加1,进入第2步,直到100步,系统或停止工作,或从头开始,重复这个过程。

如果实际系统没有100步,只要把不用的步的时间设定设为0,就会自动把这个步越过。如果100步不够用,也可增大这个的设定。

应指出的是,这里的步进逻辑不一定非用计数功能块不可。也用加1指令或普通的加指令。只是,用它时,在每进行一次步进,还要判断步进是否完成,没有用计数功能块方便。

提示:集中控制没有反馈,所以没有分支。

2.集中控制程序实例

(1)设计一个十字路口交通岗上的红绿灯控制程序

如图2-61所示,共有6个灯。南北向红、黄、绿,用R1、Y1、C1代表,东西向用R2、Y2、C2代表。其实际地址分配略。这6个灯能依时间变化工作,如图2-62所示。图中S表示时间,单位为秒(s)。

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

图2-61 交通信号灯设置示意图

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

图2-62 动作时序图

考虑到此系统为定时工作,故使用集中原则控制,用图2-60的梯形图程序。数据设定分别是:

对图2-60a:本例有4个工作步,故“总步数”设为#3。

DM996、DM995,可任意设,只要所设的数据不被覆盖即可。本例DM996、DM995分别设为#100与#0。即虚拟输出设定值地址,从DM0000开始;步的定时值设定值地址,从DM0100开始。

DM0000~DM0005依各步要求的虚拟输出设定。

DM0100~DM0105依各步要求的定时值设定。

有关这些DM区的设定值及其备注,见表2-13。

2-13 参数选择

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

对图2-60b:设其“虚拟输出”实际地址为MW1(使用M2.0~M2.7及M1.0~M1.7,共16位,但仅用其中6位)。本例有4个工作步,故“总步数”设为K4。

VW300~VW306依各步要求的虚拟输出设定。

VW700~VW706依各步要求的定时值设定。

有关这些VW区的设定值及其备注,见表2-14。

2-14 参数选择

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

对图2-60c:设其“虚拟输出”实际地址为K4M200(使用M201~M216,共16位,但仅用其中6位)。本例有4个工作步,故“总步数”设为K4。

D800~D803依各步要求的虚拟输出设定。

D900~D903依各步要求的定时值设定。

有关这些D区的设定值及其备注,见表2-15。

2-15 参数选择

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

对图2-60d:使用2个数组tTime及Xout。其各下标0~3的设定值见表2-16所示。

2-16 参数选择

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

实际输出逻辑,见图2-63。

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

图2-63 输出梯形图

做了以上设定后,再运行图2-63、图2-60梯形图程序,完全可实现所要求的功能。

显然,这个集中控制梯形图程序比本书所讨论有关程序都要简单。同时,要进一步增加控制功能时,如增加控制步数,增加输出变量数,本程序基本可不动,只要更改DM、VW或D的设定即可。而任何别的梯形图程序,为此都要做大的改动。程序量也将按比例增加。

到此应该看到,用集中控制算法设计程序的优越了。它既高度集成化,用的多为字处理指令,指令使用的效率很高;又高度柔性化,用参数设定即可改变与增加程序的功能,程序的通用性很强。它所控制的点数、步数及有关参数设定几乎都不受限制。唯一的限制是PLC数据区的容量及实际输入输出点数。

图2-60所示程序,还可增加配方控制。办法是再声明一个类似虚拟输出指针或数组。而它的值或索引与虚拟输出、时间设定相同。以取得与步输出对应的参数,如某某设定值。以在实施开关量控制的同时,也对模拟量作控制。用此法对水泥搅拌生产进行控制是很方便的。

附带在此提及的是,各PLC厂商多提供有凸轮控制器,如FM352电子凸轮控制器,是S7-300的一个功能模块。如把增量式编码器与它连接,即可灵活地处理位置或时间相关任务。其实质与这里介绍的集中控制的机理基本是相同的。但它用模块实现,可以减轻CPU负荷,而这里则是用程序实现。

2.8.3 混合控制及其应用

1.混合控制算法

本章第1节已介绍了基本的混合控制算法要点。此外混合控制也可有分支,而且也还可有不同的分支结构。图2-64所示为较常用的一种分支算法框图。

从图2-64可知,它在主干程序中,每次步动作完成,都要判是否进入分支程序。如进入分支程序,一旦分支步完成,则工作停止。而若未进入分支程序,如自动工作,将周而复始地执行主干程序。一般讲,这里的主干程序用于系统正常工作,而分支程序则当系统不正常时才使用。与流程图算法一样,除了条件分支,还可并行分支。

2.混合控制程序实现

根据所用PLC提供的资源,可以有多种方法用于程序实现。较常用的是:

(1)用间接寻址(指针)实现的梯形图程序

图2-65所示的是与图2-1对应的梯形图程序。

从图2-65知,它由工作控制、集中控制器、虚拟输出及虚拟输入几部分组成。

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

图2-64 分支算法的框图

1)集中控制器。对图2-65a:使用一个可逆计数器(CNTR 000,减计数不用)。当“工作”ON时,每次“步进”ON,则CNT 000加1,实现步进。计数到设定值(存于符号地址“总步数”中)后,再加1,CNTR 000现值又回到0,同时,其常开触点ON,常闭触点OFF。这时,如自动工作OFF,其常闭触点将使“工作”OFF,工作停止;否则,又将从0开始计数。而“步进”什么时候ON,取决于“计算输入”通道的内容与DM998值指向的DM地址的内容进行比较的结果。当这两者相等时,即得到了应有的反馈信号,表示动作完成,则“步进”ON。

对图2-65b:使用一个增计数器(C0)。当“工作”ON时,每次“步进”ON,则C0加1,实现步进。计数到设定值(存于符号地址“总步数”中)后,C0常开触点ON,C0常闭触点OFF。前者使C0复位,现值又回到0。如自动工作OFF,后者将使“工作”OFF,工作停止;否则,又将从0开始计数。而“步进”什么时候ON,取决于“计算输入”通道的内容与VD993作指针,指向的VW的内容进行比较的结果。当这两者相等时,即得到了应有的反馈信号,表示动作完成,则“步进”ON。

对图2-65c:也是使用一个增计数器(C0)。当“工作”ON时,每次“步进”ON,则C0加1,实现步进。计数到设定值(存于变量名“总步数”中)后,C0常开触点ON,C0常闭触点OFF。前者通过程序,用复位指令(RST)使C0复位,现值又回到0。如自动工作OFF,后者将使“工作”OFF,工作停止;否则,又将从0开始计数。而“步进”什么时候ON,取决于“计算输入”的内容与D900V0(900+V0的值作D的地址)的内容进行比较的结果。当这两者相等时,即得到了应有的反馈信号,表示动作完成,则“步进”ON。

2)虚拟输入。对图2-65a:用“虚拟输入”及“反虚拟输入”两个通道。两者内容相反,其对应位,如前者为1,则后者为0;如前者为0,则后者为1。而使用其中哪一位作为虚拟输入,由∗DM998确定。∗DM998的哪一位设为1,即使用哪一位作为反馈输入。而这个反馈输入是用正(ON),还是用反(OFF)信号,则取决于∗DM996与∗DM998的对应的位是怎么设的。设为1,反馈输入用的是反虚拟输入(用OFF信号);设为0反馈输入用的是正虚拟输入(用ON信号)。

为此,在该图的程序中,要先进行∗DM996与#0比较,如相等,则使用ON信号;反之,使用OFF信号。使用ON信号时,“计算输入”为∗DM998直接与“虚拟输入”通道的内容作“与”运算;用OFF信号,“计算输入”为∗DM998与“反虚拟输入”通道的内容作“与”运算。这个“计算输入”与∗DM998比较,如相等,即收到应有的反馈,从而产生“步进”信号,并将引起计数器CTRN 000加1、步进。

DM998的值等于CNT 000现值与DM991之和,所以,DM991决定了指针DM998的初值。DM996值等于CNT 000现值与DM992之和,所以,DM992决定了指针DM996的初值。

对图2-65b:使用“虚拟输入”及“反虚拟输入”两个字。两者内容相反,其对应位,如前者为1,则后者为0;如前者为0,则后者为1。而使用其中哪一位作为虚拟输入,由∗VD993确定。∗VD993的哪一位设为1,即使用那一位作为反馈输入。而这个反馈输入是用正(ON),还是用反(OFF)信号,则取决于∗VD985与∗VD993的相对应的位是怎么设的。设为1,反馈输入用的是反虚拟输入(用OFF信号);设为0反馈输入用的是正虚拟输入(用ON信号)。

为此,在该图的程序中,要先进行∗VD985与0比较,如相等,则使用ON信号;反之,使用OFF信号。使用ON信号时,“计算输入”为∗DM993直接与“虚拟输入”通道的内容作“与”运算;用OFF信号,“计算输入”为∗DM993与“反虚拟输入”通道的内容作“与”运算。这个“计算输入”与∗DM993比较,如相等,即收到应有的反馈,从而产生“步进”信号,并将引起计数器C0加1、步进。

在程序中,先把VB500的地址赋值给VD993,VB700的地址赋值给VD985,然后与C0现值乘2(指针地址以字节计,而本程序用的是以字计)后相加。这意味着这些设定值放在V区的开始位置为VB500、VB700。

对图2-65c:用“虚拟输入”及“反虚拟输入”两个字。两者内容相反,其对应位,如前者为1,则后者为0;如前者为0,则后者为1。而使用其中哪一位作为虚拟输入,由D700V0(700+V0的值作D的地址)确定。D D700V0的哪一位设为1,即使用那一位作为反馈输入。而这个反馈输入是用正(ON),还是用反(OFF)信号,则取决于D900V0(900+V0的值作D的地址)与D700V0的相对应的位是怎么设的。设为1,反馈输入用的是反虚拟输入(用OFF信号);设为0反馈输入用的是正虚拟输入(用ON信号)。

为此,在该图的程序中,要先进行D900V0与0比较,如相等,则使用ON信号;反之,使用OFF信号。使用ON信号时,“计算输入”为D700V0直接与“虚拟输入”字的内容作“与”运算;用OFF信号,“计算输入”为D700V0与“反虚拟输入”字的内容作“与”运算。这个“计算输入”与∗DM998比较,如相等,即收到应有的反馈,从而产生“步进”信号,并将引起计数器C0加1、步进。

在程序中,V0是由C0传送来的。这说明,这些设定值放在D区的开始位置为D700、D900。

以上所用的虚拟输入用计算方法处理,虚拟输入可于书记输入完全对应。输入程序转换简单。

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

图2-65 混合控制逻辑梯形图程序

3)虚拟输出。对图2-65a:使用“虚拟输出”通道。其值是由以DM999值为地址DM字的内容传来的。这个DM字的内容设成什么样,“虚拟输出”就有什么样的输出。DM999的值为DM995的值加CNT 000的现值。故DM999的初值由DM990内容确定。

对图2-65b:使用“虚拟输出”字。其值是由以VD999值为指针指向的VW字的内容传来的。这个字的内容设成什么样,“虚拟输出”就有什么样的输出。在程序中,先把VB300的地址赋值给VD999,然后与C0现值乘2(指针地址以字节计,而本程序用的是以字计)后相加。这意味着这些设定值放在V区的开始位置为VB300。

对图2-65c:使用“虚拟输出”字。其值是由D800V0(800+V0的值作D的地址)的内容传来的。这个字的内容设成什么样,“虚拟输出”就有什么样的输出。在程序中,在程序中,V0是由C0传送来的。这说明,这些设定值放在D区的开始位置为D800。

4)程序工作过程。当“起动”信号ON,“工作”输出将ON,并自保持,系统进入工作状态。“虚拟输出”将从∗DM999、∗VD989活V800V0传来数据,将根据前者的内容产生虚拟输出,如要产生实际输出,可把此输出再作传递。

随着实际输出控制的推进,系统的实际输入将传递给“虚拟输入”(有关程序另附)。程序将根据∗DM998、∗DM996,或∗VD993、∗VD985,或D900V0、V700V0的设定,把“虚拟输入”进行逻辑处理,然后得到“计算输入”。再把“计算输入”与∗DM998、∗VD993或D900V0的设定进行比较。直到两者相等,说明已完成此步控制,进而产生步进信号,使CTRN 000,或C0加1计数。DM998、VD993或V0也随之赋以新值(加1),实现了步进,其虚拟输出则是新一步的设定值。

这样延续,直到CTRN 000计到“总步数”,再计入1,或C1计数到“总步数”,其输出ON,并自身复位(现值回到0)。这时,如“自动”ON,则开始新的循环,继续工作;如“自动”OFF,“工作”OFF,“虚拟输出”置0,系统工作停止。

(2)用数组寻址实现的梯形图程序

它比前者更简明。但要求PLC能设定数组,而且所设定数组能用下标变量访问。图2-66所示为与图2-1对应的梯形图程序

本程序除了用数组代替间接寻址,还用新的算法处理反馈输入。具体是把输入分为ON有效输入及OFF有效输入,分别用2个数组设定,而不是先设哪个为输入位有效位,再设所用的有效输入是ON还是OFF。

表2-17所示为上述程序定义的符号变量或标签。有的用中文,有的不能用中文则用英文。其含义见注释。

这里共同都是定义了3个数组,即sdOut(设定输出)、sdONin(设定ON输入)和sd-OFFin(设定OFF输入)。都是100(下标从0~100,实际101个字)。分别用于设定控制输出及设定ON、OFF反馈输入。其它变量与间接寻址程序雷同。

图2-66a为和利时PLC程序。它的编程软件变量名用英文。图2-66中节1为工作起、停控制。这时,“start”ON,可使“work”ON,使系统进入工作状态。

图2-66中节2为生成步进控制信号。只要控制动作完成,即生成脉冲信号。

图2-66中节3为调用增计数功能块。每完成1步控制,计数功能块加1。到100步,计数功能块复位。并使C1.Q常闭触点OFF,以实现系统工作控制。

图2-66中节4为生成虚拟输出。

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

图2-66 与图2-1对应的梯形图程序

2-172-66程序定义的符号变量或标签

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

图2-66中节5为设定ON反馈输入与ON虚拟输入先与,后再比较,以确定设定的ON输入是否完成。如完成则ON_wfchON。

图2-66中节6为设定OFF反馈输入与OFF虚拟输入先与,后再比较,以确定设定的OFF输入是否完成。如完成则OFF_wfchON。

以上两者均ON,则说明步动作完成。将在节2起动Step(步进)信号,是及技术功能块加1。步控制前进1步。

图2-66中节7为不工作时,逻辑关系复原。

其工作过程是:当系统启动,进入工作,计数功能块C1按每得到“STEP”脉冲一次,则作一次增计数。计数到设定值(total最大可设为100),C1.Q的常开触点ON,通过计数功能块的“RESET”端,使计数功能块复位,计数值恢复到0。如“Auto”OFF,其常闭触点C1.Q将使“work”线圈OFF,工作停止;否则,又从0开始,又执行第1步。

具体工作过程是分步实现的。先是第0步(对应于计数现值为0)。随着计数值的增加而一步步推进。如第0步工作,则虚拟输出取自数组“sdOut[0]”的值,ON、OFF虚拟输入取决于数组“sdONin[0]”及“sdOFFin[0]”的值。一旦“sdONin[0]”与xnONin相等及“sdOFFin[0]”与xnOFFin相等,则使“ON_wfsh”及“OFF_wfsh”ON,说明动作完0成。将在节2,生成步进信号“STEP”。进而在节3,使计数功能块增1,进入第1步。第1步的虚拟输出取自数组“sdOut[1]”的值,反馈输入的设定则取自数组“sdONin[1]”及“sdOFFin[1]”的值。一旦这两个比较又相等,说明动作1完成。有将实现步进,进入第2步。如此直到步总数完成,系统或停止工作,或从头开始,重复这个过程。

要提到的是如果用ABBPLC上述程序也完全使用。

图2-66b为欧姆龙PLC程序。它的高档或新型机虽可设定数组,但它的梯形图语言对数组访问时,其下标不能用变量。而它的ST语言可以,但只能在功能块中才可使用这个语言。为此,本程序定义了一个用ST语言编写的功能块。用下标变量动态访问数组,以取得不同步的设定控制输出及ON、OFF设定。而这个功能块除了定义变量,只有3个语句,即

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

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

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

2-18 功能块内部变量

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

2-19 功能块输出变量

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

调用此功能块(该程序使用名称为mm)后,这里yOO、xON及xOFF实际即为sdOut[indx]、sdONin[indx]、sdOFFin[indx]。

它的梯级从0开始,而不是和利时从1开始。其它说明略。

图2-66c为ABPLC程序。它的标签名用英文。此外,它的计数功能块的计数预设值只能用即时数(immediate),这里指定100。为此,它增加了设定输出判断。如设定输出位0,说明控制完成,将使计数功能块复位,并用OfchON去取代其它程序的计数完成信号。

图2-66d为三菱PLC程序。但使用的是它的Works2编程软件。因为此软件支持数组编程。它的变量名可以用中文。

图2-66e为施耐德PLC程序。标签名为英文。因为step为其关键字只好用stp代替。

所有程序在workOFF都要复位。所不同的是,欧姆龙的只使虚拟输出复位,其它的还要使反馈完成位复位。这与各自比较指令特点有关。前者不比较,这个完成位将OFF,不必另作复位;后者不比较将保持原比较的结果值,所以需复位。

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

图2-67 输入输出程序

3.混合控制程序实例

[应用例1] 用的是本章第3节的例3,其要求与其完全一样。

本例用图2-65程序。并新增图2-67所示实际输入输出程序。图2-65a的“虚拟输出”实际地址设为220;“虚拟输入”实际地址设为200。实际输入、输出用符号地址。图2-65b的“虚拟输出”实际地址设为MW1(使用M2.0~M2.7及M1.0~M1.7,共16位,但实际仅用其中2位);“虚拟输入”实际地址设为MW3(使用M3.0~M3.7及M4.0~M4.7,共16位,但实际仅用其中4位)。图2-65c的“虚拟输出”实际地址设为K4M200(使用M201到M216,共16位,但实际仅用其中2位),“虚拟输入”实际地址设为K4M300(使用M301到M316,共16位,但实际仅用其中4位)。

有关数据区的设定见表2-20:

2-20 数据区参数选择

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

做了以上设定后,再运行图2-65加图2-67梯形图程序,经测试证明,它完全可实现所要求的功能。

[应用例2]:用的也是本章第3节的例3,其要求与其完全一样。但本例用图2-66程序。并新增图2-68所示实际输入输出程序。

其控制逻辑使用数组设定控制输出及设定ON、OFF反馈输入,即图2-68逻辑。其转换程序很简单,以和利时、ABPLC为例,见图2-68。此程序功能只是把虚拟输出转好为实际输出,把实际输入转换为虚拟输入。

其设定数据也很简单,除了Total设为6,数组设定如表2-21所示。

有了上述数组设定,执行图2-66和2-68程序,即可实现本例控制功能。

[应用例3]:设计要求同本章第3节的例1。其I/O分配也略,并也使用相应符号地址,即XX1、XX2、XX3、QQ、TT、MM、HH、II、LL,时间继电器符号为TM、TL等。其含义同上述例1。这里的关键是,把工作过程分成“步”,每“步”对应一个输出,然后用输入对“步”作控制。本例共分5步:

1)打开阀门XX1,直到行程开关IION;

2)关闭XX1,同时打开阀门XX2,直到行程开关HHON;

3)关闭XX2,接通MM,使搅拌机工作,并保持6s;

4)MM工作6s(用定时器TM)后,停止工作,并打开阀门XX3,到行程开关LL从ON到OFF。

5)再延时2s(用定时器TL),工作停止,或又重复此过程。

2-21 应用例2数组设定

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

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

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

针对此例用图2-65梯形图程序。但也要增加实际输入、输出及定时逻辑。见图2-69。

对图2-65和图2-69有关地址设定是:

图2-65a:“虚拟输出”实际地址也设为220;“虚拟输入”实际地址设为230。

图2-65b:“虚拟输出”实际地址设为MW1(使用M2.0~M2.7及M1.0~M1.7,共16位,但实际仅用其中4位);“虚拟输入”实际地址设为MW3(使用M3.0~M3.7及M4.0~M4.7,共16位,但实际仅用其中3位)。

图2-65c:“虚拟输出”实际地址设为K4M200(使用M201~M216,共16位,但实际仅用其中4位),“虚拟输入”实际地址设为K4M300(使用M301~M316,共16位,但实际仅用其中3位)。

3种PLC的实际输入的符号地址都用HH、MM、LL、QQ、TT。实际输出的符号地址都用XX1、XX2及XX3。而QQ即为图2-29的“起动”,TT即为图2-29的“停止”。

此外,还要对有关数据区作设定。具体设定值,见表2-22。

增加了以上实际输入、输出及定时程序,再按上各表对数据区做了设定,运行图2-65及图2-69程序,完全可实现设计的要求。

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

图2-69 第三节设计例一新梯形图程序

2-22 数据区参数选定

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

2.8.4 工程方法编程再思考

1.工程设计算法思想要点

在以上介绍的工程设计算法中,分散控制机集中控制较简单。而混合控制及将要介绍的线性链表算法较复杂。但这两者本质上是相同的。都是一个步控制完成后向另一步推进。不同的只是前者按步顺序依次推进,后者按链接标号灵活推进。从效果来看,这两个控制完全可以替代前两个控制。如不把反馈输入直接用于动作转换,而用于控制步的推进,分散控制也就等同于混合或链表控制;如把有关时间也作为反馈信号,则混合控制也就等同于集中控制。

分散控制虽是很常见的顺序控制工程算法。只要按上述步骤处理,可很容易完成各种自动控制程序的设计。只是它的程序量将随“动作”数量的增加而增加,这也是它的一个不足。

而混合控制与链表控制程序则不同,“动作”数量的增加只是数据量及转换程序的增加,基本逻辑不变。很“规范”,又很“万能”。避开了麻烦的时序逻辑处理,即可用于按部就班工作的各种顺序控制。它所控制的点数、步数几乎不受限制。唯一的限制是PLC的数据区的容量及PLC的实际输入输出点数。

2.工程设计算法控制器设计思路

1)工程设计算法控制关键要有控制器。混合控制使用的控制器最简单的是增计数器。可指定预置计数值,即步进总步数,计数值达到即完成全部控制。

此外也可使用加一或加指令计数。但要增加步总数的比较控制。

2)设定数据的存放与访问方法有两个。一个是用间接地(寻)址;另一个是数组(含结构)。后者程序简明,但要求PLC有此设定功能。

间接地址各家PLC各有不同方法。但本质都是相同的。不同的只是初始地址有的要预先读取,有的直接指定。后者当然要简单些。

数组,有还可先定义结构,再定义结构数组,比较简明。只是要求PLC能声明此类数据的功能。

3.工程设计算法反馈输入设计方案

由于同一输入位,其实际输入作用可能是ON,也可能OFF。为此可以反馈输入就要顾及此2中情况。使用的办法有:用“计算输入”输入处理;用ON、OFF分类处理。前者输入转换较简单,虚拟输入与实际输入可完全一一对应。后者要用则要ON、OFF两虚拟输入与ON、OFF两实际输入分别对应,转换程序量要增加。但这两反馈输入同时存在时,也可处理,程序更万能些。

也可考虑使用标志值做虚拟输入。这样也许输入比较只需1个。但实际输入(某个位的ON、OFF)到虚拟输入的转换要用赋值指令。而且要顾及不同的实际输入对标志值的赋值不相互影响,各自要保持“或”关系。

4.工程设计算法控制输出设计

控制输出可以用:直接输出;标志值输出;虚拟输出。较常用的是虚拟输出。只是要增加虚拟输出到实际输出的转换。而这个转换较简单,但所设计的程序则较灵活,更便于修改。