1.6 PLC程序实例
本节将介绍三个典型程序实例。为以后学习PLC编程积累一些实例知识。
1.6.1 控制输出程序
1.等效控制输出
输出仅取决于控制输入现状态。图1-78所示的就是这类输出。它把开关接输入点X000,负载用灯接输出点Y000,然后运行图示程序。
图1-78 等效控制输出实例
从图1-78所记载的各周期I/O状态知,在周期0时,由于开关已合上,输入点X000的值为1。经运行程序,输出点Y000也变为1。进而输出点合上,输出电路通,灯亮。在周期n时,开关断开,则输入点X000的值为0,输出点Y000也变为0,输出点断开,输出电路断,灯灭。可知,这里灯的工作唯一取决于开关的现状态。
2.长效控制输出
控制输出不完全取决于输入的现状态,还与输入的历史有关。输入对输出有长效作用。如图1-79所示,这里用2个按钮控制接触器,再用接触器控制一盏灯。
图1-79 长效控制输出实例
从图1-79知,SB1合,X000变为1,运行程序后Y000也变为1,进而使继电器KM得电,其常开触点合,使灯亮。之后,即使SB1断开,X000变为0,但由于Y000的触点与X00是并联的,故仍可保持为1,仍可使继电器KM得电。所以,灯保持亮。可知,这里开始时SB1合是可产生长效输出的。
类似SB2合,X001变为1,运行程序后使Y000也变为0,进而使继电器KM失电,其常开触点断,使灯灭。之后,这个作用也是长效的。
在继电器电路中,称这种电路为起、保、停电路。
3.短效控制输出
它的控制输出也不完全取决于输入的现状态。其输入对输出仅有短暂的作用,故称短效输出。如图1-80梯形图程序,用开关控制一盏灯。但中间插入辅助继电器M0。
图1-80 短效控制输出实例
在稳定状态,Y000永远为0。但在过渡状态下,它可为1个周期。像这样仅为1个周期的信号也称脉冲信号,或微分输出。用其去控制灯的工作当然没有意义。但这在内部逻辑处理时,它是很有用的。
1.6.2 单按钮起停程序
1.单按钮即时起、停程序
图1-81为“单按钮起、停”梯形图程序,操作数为符号地址。
从图1-81a可知,当“按钮按”OFF时,“按钮按脉冲”及“控制脉冲生成”均OFF。而“按钮按”ON时,则“按钮按脉冲”“控制脉冲生成”均ON。但在下一个扫描周期时,因“控制脉冲生成”的常闭触点将使“按钮按脉冲”OFF。即当“按钮按”ON时,“按钮按脉冲”仅ON1个扫描周期。脉冲信号也因此得名。
若无脉冲信号,其“工作”的状态不会改变。因为这里的“工作”状态是双稳的,其为ON或OFF均成立。不妨看一下它的逻辑关系就清楚了。但一旦有脉冲信号作用,则其状态将改变。若开始为OFF将改变为ON,反之,将改变为OFF。也正因此,即可用这里的“起停”对这里的“工作”作“单按钮起停”控制。
如所用的PLC有生成脉冲的指令,则可直接用它生成脉冲。图1-81b中的上升箭头及图1-81c、d中的P,就是相关的直接产生脉冲的操作。当然也可如图1-81a,先由“按钮按”生成“按钮按脉冲”,然后如图1-81a那样处理有关指令。
图1-81b的短斜线及图1-81c的NOT指令为“取反”逻辑运算。因为这里脉冲是直接生成的,故必须这么处理。而图1-81d用了SR指令。三菱PLC也可用ALTP指令实现单按钮启停。
图1-81 单按钮起停电路
图1-81e、f分别为和利时与AB的PLC程序。它不好用中文命名。其符号含义可对照其它图理解。
除了图1-81所示程序,图1-82所示程序也具有同样功能。只是这里用的是触点先并后串。脉冲信号用微分指令生成。这里图1-82a所示的是“工作”未启动的情况。这时,如加入1次作用信号,将使“工作”从OFF变为ON、进入图1-82b状态。在图1-82b状态下,再加入1次作用信号,将使“工作”从ON变为OFF、又回到图1-82a状态。
图1-83所示也是用一次作用信号去起、停“工作”的梯形图程序。它用的是KEEP指令。图1-83a是未工作的情况。这时,如加入一次作用信号,将使原OFF的工作位变为ON、进入图1-83b状态。在图1-83b,再加入一次作用信号,将使已ON的工作位变为OFF、又回到图1-83a状态。而一次作用信号则是也是由“起、保、停”位通过微分(DIFU)指令产生的。
图1-82 单按钮起、停工作过程第1例
图1-84所示也是用一次作用信号去起、停“工作”的梯形图。它的起、停分别用SET与RSET指令。其中,图1-84a是SET指令在前执行的逻辑,图1-84b是RESET指令在前执行的逻辑。效果是相同的。
读者也许注意到,在图1-84中,分别加有操作数为“10.09”位的上微分(DIFU,对图1-84a)、下微分(DIFD,对图1-84b)指令,且还用10.09位的常闭触点串入RSET(对图1-84a)、SET(对图1-84b)的输入端。这么做是必不可少的。如无此,或指令的顺序作不适当的调整,都将无法实现这个功能。
图1-83 单按钮起、保、停逻辑第2例
图1-84 单按钮起、保、停逻辑第3例
图1-85所示为图1-84所示程序的续编。它的起、停也是分别用SET与RSET指令。但添加中间变量“工作1”。它在最后一个梯级时由“工作”赋值。未到执行这梯级指令时,即时“工作”状态变化,但“工作1”不变化。这样,尽管图1-85a、图1-85b指令顺序不同,但效果是相同的。
类似的还有很多实现方法,如也可用计数器指令处理等。同一问题多有很多决方案。这不仅将有助于拓宽编程思路,还可进一步熟悉与利用好PLC资源。
2.单按钮短按起、长按(超过1s)停程序
上述单按钮起、保、停梯形图程序,是起、是停,容易“糊涂”。其实,完全可使用按钮按下不同的时间,去区分是起还是停。很多小仪器以至手机也多是这么处理的。图1-86所示为单按钮短按起、长按(超过1s)停程序。
这里用了定时器TIM5,只有按钮按下超过1s,它将起动工作。
图1-86c和d为和利时PLC类似程序。读者可对照图1-86a和b理解。
其它PLC也很容易编写类似程序。它与两按钮启停程序所差的只是这里使用了定时指令或功能块。
图1-85 单按钮起、保、停逻辑第3例续
图1-86 单按钮短按起、长按(超过1s)停程序
3.单按钮长按(超过1s)起、短按停程序
图1-87所示为单按钮长按(超过1s)起、短按停程序。
该图为长按(超过1s)起动、短按停车程序。这里用了定时器TIM6,只有按钮按下超过1s,它的常开触点才接通,才能把未工作的输出10.08起动工作。如果按下时间少于1s,10.08将停止工作。
用单按钮起、停设备,可节省PLC的输入点与按钮,还可简化操作面板的布置,而实现它的PLC程序也不复杂(如单纯用继电器实现这个控制,则较复杂),故这是目前较常用的。
图1-87 单按钮长按(超过1s)起、短按停程序
提示:别小看这个长短信号。历史上有线电报用的莫尔斯码就是这样长短信号的组合。习惯上把短信号称为“嘀”,把长信号称为“嗒”。由若干个“嘀-嗒”组成“电码”,若干电码组成“电文”。用此,即可完成电报的发送及接收,并进而实现通信双方的信息传递。
1.6.3 求公因数程序
求公因数欧几里得的这个算法(Euclid’s Algorithm),如用表达式表达,则是:
图1-88是子程序,用以实现上述花括弧内的算法。对其中图1-88a到了余数zz(DM7、VW8、D7或remainder)为0时,即EQ或pEQON时,则输出公因数。否则,一直进行相应运算。这里xx,yy为形式参数。调子程序前用x,y对其赋值。
图1-88 求两个整数的公因数子程序
提示:DIV指令为整除运算指令。如图1-88a,其商存于DM6中,而余数存于DM7中。如图1-88b,其商存于VW6中,而余数存于VW8中。如图1-88c,其商存于D6中,而余数存于D7中。故判断DM7或VW8或D7是否为0,即可知道YY能否XX整除。图1-88d节1为求“模”运算。目的是得到余数。节2是判断得到的余数是否为0。节3、4是如果余数为0,输出结果(Comma Factor),并返回主程序。节5如果余数(remainder)不为0,变换求“模”运算数据,为下一次计算准备。
图1-89所示主程序,用以实现上述花括弧外的算法。AA为求解起动信号,一旦它ON,将使pAAON一个扫描周期,并用它去起动bAA或call_calculate,进而调上述子程序。直到EQ或图1-89d的pEQON(即zz=0),并通过pEQ使bAA或call_calculate OFF,则退出子程序调用。图1-89d的pEQ不是微分输出,所以,图1-89d第1节增加了它的复位操作,即call_calculate OFF后,如pEQON,自身将复位。这也为新的计算做准备。
图1-89 求两个整数的公因数主程序
提示:图1-89程序用了微分指令及bAA或call_calculate的自保持功能,目的是确保在pEQOFF,即yy未能被xx整除时,子程序一直在调用。而到了EQON,即yy能被xx整除时,又可使bAA OFF,子程序停止调用。在多周期完成运算的情况下,这么处理是很方便的。