APP下载

枚举归纳法在PLC案例教学中的应用*

2022-05-27薄敬东杨志刚崔传金

科技与创新 2022年10期
关键词:归纳法楼层指令

薄敬东,杨志刚,崔传金

(华北理工大学电气工程学院,河北 唐山 063210)

常用的可编程控制器的编程方法有经验设计法和顺序设计法,经验设计法来源于传统继电器控制逻辑,基本单元电路是“启—保—停”电路;顺序设计法是分析被控对象的运行过程,将过程分解为单元动作,进而形成工步的概念。在应用这2个方法设计程序时,开发者往往倾向于单个逻辑判断,将所有满足条件一一列出,建立逻辑关系,得到最后结果,缺少对结果的归纳与总结提升,导致程序不具备通用性。

1 程序设计中的归纳法

程序设计本质上是逻辑代数。在控制系统案例[1]的设计开发中,常用枚举法列写所有可能条件,来判断最终结果。这种分析方法简单,但是随着条件的增多,导致程序繁杂。如何从具体、个别的前提上升到一般、概括性的结论呢?就是归纳逻辑研究内容[2-3]。归纳逻辑中的枚举归纳推理是控制系统案例分析的常用工具。本文以6层电梯系统设计为案例,在经验法和顺序设计法基础上,探讨枚举归纳推理在程序设计中的应用,实现程序设计的精炼。

2 归纳法编程的应用

以6层电梯平层上呼信号开门和上行信号判读为例,比较枚举法编程和枚举归纳法编程的优缺点,给出相应的分析过程。

2.1 开门信号处理

以电梯停止在本层楼层,判断是否存在上呼信号去开门程序为例,常见的继电逻辑程序如图1所示。在电梯停止的前提下,1层上呼按钮有效并且当前层在1层,产生开门有效信号;2层上呼按钮有效,并且当前层在2层,产生开门有效信号。以此类推,层数越多,并联的逻辑指令越多。其逻辑关系如公式(1)所示。令X1表示1层上召唤按钮是否按下,如果按钮按下,则X1=1,否则X1=0;X2表示2层上召唤按钮是否按下;以此类推,X6表示6层上召唤按钮是否按下;Y1表示轿厢是否停在1层位置,变量名为楼层位置信号通道1,如果检测电梯在1层,则Y1=1,否则Y1=0;Y2表示轿厢是否停在2层位置;以此类推,Y6表示轿厢是否停在6层位置;Z表示电梯运行状态;W表示本层开门信号是否有效。因而,可得计算本层开门中间信号的表达式为:

图1 枚举法计算上召唤开门

按照公式(1)的表达式,书写梯形图指令可得图1所示程序。所得程序易于理解,但是对于层数较多时,需要增加变量,比较烦琐。

以上为分析法,将所有情况列举。能否将以上列举情况归纳总结,通过设计通用性算法实现开门条件的计算呢?综上可知,电梯无方向停止前提下,所在当前层有上呼使能开门中间信号。如果能依据当前层数值(可通过平层开关与运行方向计算当前楼层数值),自动提取出当前层的上呼信号(将上召唤改名为上呼)是否存在,即可判断是否开门。

令W表示本层开门中间信号是否有效,Z表示电梯运行状态,X表示上呼记录字节变量,Y表示当前楼层对应位是否为1的变量。可将逻辑表达式归纳为:

只需要计算出电梯当前层是否存在上呼按钮信号即可。为此,将外呼信号和内选信号进行指令登记后[4],按照表1规则排列。

表1 记录输入信号变量各位含义

外部输入信号分为3类,为内选信号、上呼信号、下呼信号。用一个字节有8位二进制数表述6层楼层呼叫记录信号,便于方便描述,将最低位0设为0层外界记录信号,1位为1层信号,以此类推,到6层的信号,其中第7位为7层信号,全是0。其中0层和7层全为0,未使用。具体方法通过解码指令来实现当前楼层的解码,将输入值指定的输出值中的某个位置位。以西门子S7-1200西门子控制器为例,如果输入当前楼层数值为3,使用“解码”指令可输出一个2进制数为2#00001000,也就是说第3位为1,其余位全是0。表1所列数据格式的第3位,恰好是电梯3层的3类外部输入信号。用3层的解码值与上呼记录变量进行逻辑与操作,如果结果不为0,则说明存在3层上呼信号,得到当前层的上呼信号。再与电梯运行状态信号进行逻辑与操作,即可实现中间开门信号的计算,如图2所示。与常用继电逻辑编程方式相比,该程序指令少,书写简单,便于电梯程序的修改与升级。

图2 枚举归纳法计算上呼开门

2.2 上行方向处理

如果电梯没有运行方向,判断当前电梯是否上行为例,探讨2种方法的优缺点。

常用处理方法如图3所示,在判断电梯上行信号时,采用枚举法。在电梯没有下行信号条件下,若2层登记(2层呼叫记录信号)有效,电梯若在2层以下,则置位上行信号;若3层登记有效,电梯若在3层以下,则置位上行信号;以此类推,将所有情况并联在一起,实现电梯上行方向置位。该方法简单有效,但是需要将所有楼层登记均列写出来。

图3 枚举法计算电梯上行程序

令Mup表示上行信号是否有效;Mdown表示下行信号是否有效;X1表示1层登记信号是否有效,包括上呼、下呼和内选3类信号是否登记;X2表示2层登记信号是否有效,包括上呼、下呼和内选3类信号是否登记;以此类推,X6表示6层登记信号是否有效,包括下呼和内选2类信号是否登记;Y2表示电梯所在楼层是否小于2层,Y3表示电梯所在楼层是否小于3层,同样,Y6表示电梯所在楼层是否小于6层。得到逻辑表达式为:

采用枚举归纳法,可通过计算实现该功能。总结归纳如下,在没有下行方向前提下,电梯当前层及当前层以上的上呼信号和高于当前层的下呼信号、内选信号都能产生电梯上行的信号。因而,只需要判断当前楼层以上是否有这些信号,就能判断电梯是否上行。令Mup表示上行信号是否有效,Mdown表示下行信号是否有效,X表示当前层和大于当前层的上呼信号是否存在,Y表示大于当前层的下呼信号是否存在,Z表示大于当前层的内选登记信号是否存在。可得:

其中,各楼层的信号记录参见表1,对于X、Y、Z的获取可通过对表1变量进行移位获得。如当前楼层是3层,则将上呼记录字节变量向右移位3次,再向左移位3次,3层以下的上呼信号就消失,得到X。将下呼记录字节变量向右移动4次,再向左移位4次,则3层和3层以下的下呼信号消失,得到Y。同样处理内选信号的Z。

具体程序如图4和图5所示。

图4 归纳法计算X、Y、Z

图5 枚举归纳法计算上行信号

由图4、5可看出,枚举归纳法得到的表达式简单明了,且具备一定通用性,便于电梯程序的升级。

2.3 上行目标平层处理

在电梯上下行过程中,需要判断是否平层停梯。此时如使用枚举法计算停梯条件的话,需要列举所有的条件。

为描述方便,以当前电梯在1层,只有4层下呼叫信号为例进行说明。前一小节已经详述运行方向的判断方法和程序,本例应该计算出向上运行。在向上运行的过程中,4层的上呼叫信号有效应该可以直接将电梯停止在4层,而4层下呼叫信号停止电梯就需要5层、6层没有呼叫信号,包括内选与上下呼叫信号,才能将电梯停止在4层。

令Mstopup表示上行停止变量;Mup表示上行是否有效信号;X1表示1层信号是否登记,包括上呼、下呼和内选登记;X2表示2层信号是否登记,包括上呼、下呼和内选登记;以此类推,X6表示6层信号是否登记,包括下呼和内选登记;Xup1代表1层上呼信号是否有效,Xsel1代表1层内选信号是否有效,Xdown1代表1层下呼信号是否有效(此处只是定义变量),以此类推,可定义其他5层的内选信号、上呼信号和下呼信号。Y1表示电梯所在楼层是否为1层,Y2表示电梯所在楼层是否为2层,同样,Y6=电梯所在楼层是否为6层。得到上行停梯逻辑表达式为:

由此可见,楼层越多,所需要罗列的条件也就越多,虽然概念明确,逻辑简单,但是程序书写与后期调试都是很大的工作量。依据前述的枚举归纳法,对上行停梯问题进行分析,看是否能简化问题表述。这里提出当前楼层和上行目标楼层2个概念。当前楼层是依据平层传感器自动计算出当前电梯所处的楼层,而上行目标楼层是依据不低于当前楼层的内选信号、上呼信号、下呼信号计算出来的上行目标楼层。在分析上行停梯过程,优先分析不低于当前楼层的内选信号和上呼信号,选择内选与上呼信号中,距离当前楼层最近的楼层当作目标楼层。这可以通过类似图4所示的移位指令,将低于当前层的内选和上呼信号消除,然后再将剩余楼层通过移位指令恢复到相应楼层位置。将二者进行或运算,得到总的上行信号组合。再通过PLC指令提供的编码指令(具体指令功能,可参阅相关文献),可将运算结果数值按照二进制表示,依据表1的定义方法,用编码指令取出右侧第一个不为0的位转换对应数值,该数值即为目标楼层的楼层数。依据表1的定义方法,该数字即为目标楼层的楼层数。在上行的条件下,比较当前楼层与目标楼层是否一致,如果一致,则停止上行运行。

刚才讨论只讨论内选与上呼信号,没有涉及下呼信号,这是因为如果有内选和上呼,在上行过程,优先响应内选与上呼。如果没有内选和上呼信号,则响应下呼信号。此时,如果当前电梯在1层上行,按文中假设,只有4层有下呼,则移位处理低于当前层信号后,保留4层信号信息,信号排列如表1所示,只在4层下呼位置有数值。通过译码指令,可将处理后下呼记录变量编码为数值4,即为目标楼层数值4,可与当前层数值进行比较,相同则满足停止电梯上行的条件。令Mstopup表示上行停止变量,Mup表示上行是否有效信号,Num_C表示平层开关计数的当前楼层数,Num_Tag_up表示内选、外呼计算出的上行目标楼层数,则逻辑关系为Mstopup=Mup×(Num_Tag_up==Num_C)。

简单描述为上行前提下,如果当前楼层等于上行目标楼层,则停梯信号有效。

这时有的读者会提出问题,如果没有内选和上呼信号,但4层和5层都有下呼信号,电梯在1层上行,应该去哪层呢?按照运行高效原则应该先去5层,然后运行方向向下,再去4层。细心的读者会发现,编码指令会把带有4、5层下呼标记的变量编码为4,因为编码指令的功能是从最低位开始编码的,这时需要将下呼变量的排列变成逆序,这样层数高的信号,就会排列到低位,通过编码指令,才能优先计算层数高的信号。具体过程,这里不赘述了,希望感兴趣的读者亲自尝试,体会下编程思考的乐趣。

依照此计算方法,随着楼层的增加,只需要将存储楼层的字节,扩大为字、双字即可解决楼层增加的问题,算法和程序不用改动,而上面的简单枚举法需要增加极大的书写代码的工作量,因而应用枚举归纳法,可将解决问题的方法通用化。

3 结语

通过对程序设计中的枚举法和枚举归纳法比较,可以看出,枚举法简单实用,便于理解,但书写繁多;枚举归纳法表达简单,通用性高,需要经过总结抽象分析,有一定难度。经过一定的总结分析与有一定枚举归纳意识的实战,能掌握程序设计中的归纳法,实现程序算法的通用性与代码的简化升级。通过2种方法比较,使学生掌握案例中程序的设计方法,引发学生主动思考,提升案例教学效果。

猜你喜欢

归纳法楼层指令
奶奶做的“楼层儿”
一样,不一样
楼层
《单一形状固定循环指令G90车外圆仿真》教案设计
新机研制中总装装配指令策划研究
电梯的升与降
高观点下的数学归纳法
用“不完全归纳法”解两道物理高考题
用“不完全归纳法”解两道物理高考题
数学归纳法在高考试题中的应用