【应用】1200PLC实现三层电梯模拟控制

您所在的位置:网站首页 电梯轿厢设计图 【应用】1200PLC实现三层电梯模拟控制

【应用】1200PLC实现三层电梯模拟控制

2023-11-27 11:31| 来源: 网络整理| 查看: 265

使用西门子1200PLC和虚拟工厂仿真实现三层电梯的模拟控制 

文章目录

目录

文章目录

前言

一、编程前的准备

1.博图

2.虚拟工厂

二、电梯控制要求 

1.实验原理

2.具体控制要求

3.I/O分配 

4.在虚拟工厂布置场景和变量

三、编写思路 

四、编写程序

1.单个按钮对电梯的控制

 1.初始化块 

2.电梯开门关门 

3.外部和内部按钮 

 4.电梯上升和下降

5.到达楼层 

6.触发开门关门

7.效果

8.小结 

2.多个内部按钮的控制

1.外部和内部按钮 

 2.内部按钮多重控制

3.电梯在1层执行1 2 3 

 4.电梯在1层执行 2 1 3

 5.电梯在1层执行3 2 1 

6.效果 

7.小结 

3.多个外部按钮的控制

 1.外部1层(第5第6控制要求)

 2.外部3层(控制要求:第7第8)

3.到这里外部按钮的部分就完成了,但是控制要求还没完: 

4.互锁 

5.控制

 6.小结

4.程序完善 (指示灯)

1. 外部内部指示灯

 2.上升下降指示灯

3.楼层指示灯

五、完整程序 

1.主程序 

​编辑 2.fc块

1.初始化 

 2.外部内部呼叫按钮

​编辑 3.上升下降

4.按钮指示灯 

6.到达楼层 

7.内部按钮多重控制 

8.外部按钮控制 

9.开门关门 

总结

前言

在前面几篇笔记中写过一些PLC实现的应用案例,像传送带,自动装料系统模拟等等,这些都比较简单一些,属于小型控制案例,这篇文章所要实现的三层电梯主要是用1200和factoryio进行模拟仿真来实现的一个中小型应用案例,和前面相比难度会大大不同,来接着向下看吧!

一、编程前的准备

为了控制效果可见,这里使用博图和factoryio(虚拟工厂)这两个软件进行编写并调试。

在虚拟工厂里没有直接的电梯模型,但是有一个非常相似的虚拟设备——升降机!和电梯的运动原理一样,都是上升和下降;在编程之前要在博图创建好项目(注意:一定是仿真项目,带有驱动的)并且在虚拟工厂中建好升降机的场景;然后定义变量并上传的博图变量中!

1.博图

创建博图项目时,一定要导入虚拟工厂的工程模板(虚拟工厂的驱动),否则无法和虚拟工厂进行仿真连接。

2.虚拟工厂

 在虚拟工厂创建一个场景,里面的东西主要就是:升降机、电梯外部的按钮和内部按钮、限位等;根据电梯的控制要求进行添加,然后和博图连接上。大概是这样:

二、电梯控制要求  1.实验原理 电梯有安装在各楼层门口的上升和下降呼叫按钮进行呼叫操纵,其操纵内容为电梯的运 行方向。电梯轿厢内设有楼层内选按钮 S1 、 S2 、 S3 , SU1 为一层上升呼叫按钮, SU2 为二 层上升呼叫按钮, SD2 为二层下降呼叫按钮, SD3 为三层下降呼叫按钮。 SQ1 、 SQ2 、 SQ3 为停靠限位开关, L1 、 L2 、 L3 为楼层指示灯,L4、L5为电梯上升下降指示灯,L6、L7、L8、L9为电梯外部按钮指示灯,L10、L11、L12为电梯内部按钮指示灯, UP 、 DOWN 为轿厢上升、下降指示, OPEN 、 CLOSE 为轿厢开门、关门指示。 开始时,按下 启动按钮  使轿厢停靠在 1 层,当有外呼电梯信号 时,轿厢响应该外呼信号到达该楼层,延时 1S 打开轿厢门,再延时 2S 后自动关闭轿厢门, 内选需要到达的楼层,到达楼层后延时 1S 开门。电梯上升途中只响应上升呼叫,下降途中 只响应下降呼叫,任何反方向的呼叫均无效。例如,电梯停在一层,在三层轿厢外呼叫时, 电梯响应呼叫(从一层运行到三层),若电梯在没到达二层时,在二层外呼叫上升,电梯经 二层停后继续上升到三层;如若电梯在没到达二层时,在二层外呼叫下降,电梯到达三层后 下降途径二层再停止。 2.具体控制要求 ( 1 )当轿厢停于 1 层或 2 层时,按 SD3 或 S3 ,则轿厢上升至 3 层停,延时 1S 开门, 再延时 2S 关门。 (2 )当轿厢停于 3 层或 2 层时,按 SU1 或 S1 ,则轿厢下降至 1 层停,延时 1S 开门, 再延时 2S 关门。 (3 )当轿厢停于 1 层时,若按 SD2 或 SU2 或 S2 ,则轿厢上升至 2 层停,延时 1S 开 门,再延时 2S 关门。 (4 )当轿厢停于 3 层时,若按 SD2 或 SU2 或 S2 ,则轿厢下降至 2 层停,延时 1S 开 门,再延时 2S 关门。 (5 )当轿厢停于 1 层时,若按 SU2 或 S2 ,同时按 SD3 或 S3 ,则轿厢上升至 2 层(延 时 1S 开门,再延时 2S 关门)暂停 5S ,继续上升至 3 层停,延时 1S 开门,再延时 2S 关 门。 (6 )当轿厢停于 1 层时,若按 SD2 ,同时按 SD3 或 S3 ,则轿厢上升至 3 层(延时 1S 开门,再延时 2S 关门)暂停 5S ,转而下降至 2 层停,延时 1S 开门,再延时 2S 关门。 (7 )当轿厢停于 3 层时,若按 SD2 或 S2 ,同时按 SU1 或 S1 ,则轿厢下降至 2 层(延 时 1S 开门,再延时 2S 关门)暂停 5S ,继续下降至 1 层停,延时 1S 开门,再延时 2S 关 门。 (8 )当轿厢停于 3 层时,若按 SU2 ,同时按 SU1 或 S1 ,则轿厢下降至 1 层(延时 1S 开门,再延时 2S 关门)暂停 5S ,转而上升至 2 层停,延时 1S 开门,再延时 2S 关门。 (9 )当轿厢停于 2 层时,若先按 SD3 或 S3 ,接着按 SU1 或 S1 ,则轿厢上升至 3 层 停,延时 1S 开门,再延时 2S 关门。 ( 10 )当轿厢停于 2 层时,若先按 SU1 或 S1 ,接着按 SD3 或 S3 ,则轿厢下降至 1 层停,延时 1S 开门,再延时 2S 关门。

(11)当轿厢分别停在1、2、3层时,若先按S1,接着按S2,然后再按S3,则轿厢按照所按的先后顺序分别到达1、2、3层。(延时1s开门,再延时2s关门)

(12)当轿厢分别停在1、2、3层时,若先按S2,接着按S1,然后再按S3,则轿厢按照所按的先后顺序分别到达2、1、3层。(延时1s开门,再延时2s关门)

(13)当轿厢分别停在1、2、3层时,若先按S3,接着按S2,然后再按S1,则轿厢按照所按的先后顺序分别到达3、2、1层。(延时1s开门,再延时2s关门) 

3.I/O分配  I/O分配 输入输出名称作用地址名称作用地址SQ11层停靠限位I0.1UP电梯上升Q0.0SQ22层停靠限位I0.2DOWN电梯下降Q0.1SQ33层停靠限位I0.3L4电梯上升指示灯Q0.2SU1外部1层上升按钮I0.4L5电梯下降指示灯Q0.3SU2外部2层上升按钮I0.5OPEN电梯开门Q0.4SD2外部2层下降按钮I0.6CLOSE电梯关门Q0.5SD3外部3层下降按钮I0.7L1电梯到一层指示灯Q0.6S1电梯内1层按钮I1.0L2电梯到二层指示灯Q0.7S2电梯内2层按钮I1.1L3电梯到三层指示灯Q1.0S3电梯内3层按钮I1.2L6外部1层上升指示灯Q1.1SB1启动按钮I1.3L7外部2层上升指示灯Q1.2L8外部2层下降指示灯Q1.3L9外部3层下降指示灯Q1.4L10电梯内1层指示灯Q1.5L11电梯内2层指示灯Q1.6L12电梯内3层指示灯Q1.7 4.在虚拟工厂布置场景和变量

根据控制要求和I/O分配,我们将虚拟工厂的场景布置好并定义一下变量:场景需要1个升降机,3个限位传感器,3个3色灯,8个按钮(7个内部和外部,1个启动)。将这些组合在一起拼成1个模拟电梯;然后将英文的名称改为变量表中的名称,方便使用和确认。

将场景中的各个部件的英文名改成中文的(连点两下就可以更改了) ,然后再文件---驱动中选择最后一个模拟仿真(S7-PLCSIM)。

 

 在虚拟PLC中将变量拖拽上去。

 

最后就是将变量导出到文件夹,然后再博图中导入就OK了。

 点击右下角导出:

然后在博图变量表中导入刚刚的文件夹:步骤如下

OK,最后再将博图仿真和虚拟工厂连接上,前期的工作就完成了!下面就是编写思路和程序啦! 

三、编写思路 

 看过控制要求后,理一下思路;实验原理主要是这个电梯的大致运行要求,在具体控制里面是要实现的控制要求;如果不太好理解,可以想象一下平时坐的电梯:在外面选择上升或下降,然后电梯到达你所在的楼层,然后电梯开门关门,最后在电梯里面选择所要到达的楼层,电梯上升或下降到达目的地,OK!下图可以参考一下:

 我们再看一下具体控制要求可以发现:1、2、3、4是要求电梯可以在3层之间任意呼叫;5、6、7、8、9、10这几步是要求电梯在2个外部或内部按钮同时按下或先后按下,进行相应的动作;11、12、13是电梯内按钮都按下,电梯进行什么样的动作。

四、编写程序

当这样分析过之后,可以简单划分为3个部分:单个按钮对电梯的简单控制,多个内部按钮的控制,多个外部按钮的控制。 

1.单个按钮对电梯的控制

好的先看一下要求:

开始时,按下 启动按钮 使轿厢停靠在 1 层,当有外呼电梯信号 时,轿厢响应该外呼信号到达该楼层,延时 1S 打开轿厢门,再延时 2S 后自动关闭轿厢门, 内选需要到达的楼层,到达楼层后延时 1S 开门。

1.按下启动按钮后,电梯轿厢到一层;这里可以是一个初始化的动作,按下之后接通一层限位,当离开限位之后断开,电梯就停在一层限位。 

2.不管是外呼还是内呼电梯都要相应并到达楼层,然后开门关门;我们可以看到每次到达楼层都要开门关门,那每次都要写开门关门,会很麻烦。这里我们可以将开门关门程序写到一个fc块中每次只要调用一下就可以了,非常方便!

3. 然后就是外部和内部的按钮,既然都能呼叫电梯,放在一起就可以;但是题目要求每一层都可以呼叫,那按下按钮之后,就分三种情况:1层,2层,3层。这里我们也做一个块。

4.然后就是电梯的上升和下降了。 

5.最后就是当到达指定的楼层之后,触发开门关门就OK了。 

 理通之后,我们建立5个块:

 1.初始化块 

 在块里面将初始化程序写进去,置位中继1,接通电梯上升(中继2是后面要用的,这里不用管),到达限位后复位掉,让电梯到一层的指示灯亮。

2.电梯开门关门 

电梯开门关门 ,这里使用定时器1,延时1s开门,然后2s之后断开电梯开门,接通电梯关门,然后计时2s,时间到后断开一下中继10(这里数据块传送是后面用的,这里不需要)。

3.外部和内部按钮 

 外部和内部的按钮呼叫,这里按下按钮后判断电梯在哪一层,然后传不同的数给数据块,让电梯上升或下降;这里电梯在2层或3层的时候为什么传相同的数呢?因为无论在2层还是3层按下1层按钮后都要回到1层,是相同的;下面的3层按钮也是一样的,不管在电梯1层还是2层按下按钮后都到达3层停。

 4.电梯上升和下降

 在呼叫按钮那里,根据每种情况,我们都给数据块传了相应的数,用比较指令来接通上升和下降就可以了,到达指定楼层限位后停止上升和下降,然后开门关门就OK了。(这里使用电梯开门关门的常闭,是为了避免开关门时电梯上升或下降)

5.到达楼层 

到达楼层之后,传相应的数字给数据块 ,来让电梯开门关门;最后不要忘记给数据块清零(否则就只能按一次)。

6.触发开门关门

根据到达楼层传的数来触发开门关门。 

7.效果

时长原因,这里是1层到2层效果;将上面程序写好可以实现外部内部按钮控制电梯到指定楼层;电梯左侧是每楼的上升和下降按钮呼叫,右侧是电梯内部的楼层选择按钮,左边三色灯的绿灯表示正在开门,红灯表示正在关门。 

8.小结 

这一部分实现不是特别的难,上面的程序只是我自己的一个思路,使用传送和比较指令来实现功能,不过都是使用的fc块来写的,然后拿来用,最后写完的话fc块会比较多;当然也可以直接使用线圈和直接写程序或者其他的方法,只要功能实现都是可以的!  

2.多个内部按钮的控制

 实现上面程序,我们就完成了具体要求的1,2,3,4条,用内外部按钮让电梯进行上升下降。

下面我们实现具体要求的11,12,13条:

(11)当轿厢分别停在1、2、3层时,若先按S1,接着按S2,然后再按S3,则轿厢按照所按的先后顺序分别到达1、2、3层。(延时1s开门,再延时2s关门)

(12)当轿厢分别停在1、2、3层时,若先按S2,接着按S1,然后再按S3,则轿厢按照所按的先后顺序分别到达2、1、3层。(延时1s开门,再延时2s关门)

(13)当轿厢分别停在1、2、3层时,若先按S3,接着按S2,然后再按S1,则轿厢按照所按的先后顺序分别到达3、2、1层。(延时1s开门,再延时2s关门)

这里我们以电梯在1层为例:分别按电梯内的123按钮,或者213按钮,或者321按钮,电梯按照先后顺序到达相应的楼层,2层3层也是123,213,321.

 那么只要完成其中一层的控制,二层三层依葫芦画瓢就可以啦!

 我是这么想的:

1.在1层的时候按123这三个,在没有写程序时电梯会在1层开门关门,然后上升到2层停止,只有3层没有执行,也就是说只要在电梯到2层开门关门后,再传一个数给相应的数据块,让他执行去3层就OK了。

2.在1层时按213这3个按钮,如果没写其他程序,电梯只会到2层开门关门,后面不会执行。那我们只要在到2层限位开门关门之后,传1个去1层的数值,到1层之后,再传1个去3层的数值,就可以了。

3.按321这3个的话和上面相同,到达第一个,传第二个,到第二个传第三个。

(但是这里要注意不能和前面的呼叫按钮重复,因为这个控制里面需要相应的数值。)

这里我们建一个多个内部按钮控制的块和电梯1层,2层,3层的块,(以及外部内部按钮的块,要再加一些控制):

1.外部和内部按钮 

  这里前面的3个程序段不变,在后边又增加了一些;增加了3个电梯内按钮的上升沿;触发3个按钮会给数据块789传入数值,代表这3个按钮 被按下;同时下面给数据块151617传的数是为了确定第一个被按下的按钮,执行第一个按钮对应的楼层,然后再执行后面的按钮对应的楼层。这样会有按钮按下的条件,再用条件来控制电梯就可以了。 

 2.内部按钮多重控制

 这里我们用上面按钮触发的3个条件:数据块7 8 9,接通相对应的楼层;这里的mw90,95,也是按钮按下时传的数,如果电梯在1层,我们按下这3个按钮,接通第一个将1传送给数据块11(下面的置位和复位是3层相互互锁,避免冲突)。

 

3.电梯在1层执行1 2 3 

当数据块11和数据块15等于1的时候(数据块15是用来判断是不是电梯内1层按钮先按下),mw90,95是2层和3层按下时传的数值;当条件满足,先将去3层的数据块4传0,然后等电梯到达2层,并且开门关门之后,传1给数据块4,让电梯上3层;(数据块20==0是判断是否关门完毕)。 最后到达楼层,将所用到的数据都清零。 

 好的,写到这里电梯在1层时执行1 2 3 层就完成了;那2 1 3和3 2 1怎么写呢!来接着往下看:

 4.电梯在1层执行 2 1 3

前面这里没有再使用数据块11了,而是用了一个中继15的常开,为什么呢!因为电梯在1层时,按下电梯内按钮2 1 3 那么电梯会首先上升到2层,那么在上升时电梯就不在1层停靠限位了;如果用数据块11就无法接通了;所以在上面我们用mw95和电梯上升指示灯为信号来接通程序。               

首先还是将去1层和2层的数据块传0,等待电梯到达2层停靠限位开门关门之后,再让电梯去1层,到一层停靠限位后,再去3层。 

 5.电梯在1层执行3 2 1 

这一个和上面基本相同,只要改一下数据块和楼层数据块就可以了。  

到这里,电梯在1层时,让电梯实现1 2 3 ,2 1 3 ,  3 2 1   的控制就完成了!那么电梯在2 层3 层的控制就和这相同,只要稍微修改一下就可以了。 

6.效果 

按下启动按钮,电梯到1层 ,然后依次按下1 2 3 电梯先开门关门,然后到2层开门关门,最后到达3层。

7.小结 

 这里我们第2个大的控制要求就完成了!不管在哪一层,按下随意的3个连续按钮(1 2 3 ,2 1 3 ,3 2 1),都可以按照先后顺序来执行上升或下降。稍微总结一下,这里的控制程序不是特别的好,稍微有些乱,不方便更改和阅读;但是目前来说我没有特别好的程序,好在控制要求可以实现!如果大家有好的思路或者程序可以写评论区或者私信! 

3.多个外部按钮的控制

下面来实现两个外部(内部)同时按或先后按的具体控制要求:

(5)当轿厢停于 1 层时,若按 SU2 或 S2,同时按 SD3 或 S3,则轿厢上升至 2 层(延 时 1S 开门,再延时 2S 关门)暂停 5S,继续上升至 3 层停,延时 1S 开门,再延时 2S 关 门。 (6)当轿厢停于 1 层时,若按 SD2,同时按 SD3 或 S3,则轿厢上升至 3 层(延时 1S 开门,再延时 2S 关门)暂停 5S,转而下降至 2 层停,延时 1S 开门,再延时 2S 关门。 (7)当轿厢停于 3 层时,若按 SD2 或 S2,同时按 SU1 或 S1,则轿厢下降至 2 层(延 时 1S 开门,再延时 2S 关门)暂停 5S,继续下降至 1 层停,延时 1S 开门,再延时 2S 关 门。 (8)当轿厢停于 3 层时,若按 SU2,同时按 SU1 或 S1,则轿厢下降至 1 层(延时 1S 开门,再延时 2S 关门)暂停 5S,转而上升至 2 层停,延时 1S 开门,再延时 2S 关门。 (9)当轿厢停于 2 层时,若先按 SD3 或 S3,接着按 SU1 或 S1,则轿厢上升至 3 层 停,延时 1S 开门,再延时 2S 关门。 (10)当轿厢停于 2 层时,若先按 SU1 或 S1,接着按 SD3 或 S3,则轿厢下降至 1 层停,延时 1S 开门,再延时 2S 关门。

 

 5,6,7,8这四条要求都是同时按下,9,10这两条在前面已经实现了,在2层时只相应先按下的按钮,上升或下降。

1.在1层时,同时按下SU2  SD3(或S2 S3)也就是外部2层上升和3层下降,或者电梯内的2层3层按钮 ;要求电梯先到2层开门关门后暂停5s再去3层。

然后如果同时按SD2 SD3,外部2层下降和3层下降,就先去3层,暂停5s然后下降去2层。

2.在3层时,也是两个按钮同时按下,然后先执行再执行。

这里的思路和内部的基本相同,两个按钮同时按下,传1个数;当等于这个数时,就执行先后操作。我们还建立fc块来给它封装一下,直接调用就好了。 

 

 

 1.外部1层(第5第6控制要求)

这里就比较简单一些,在一层限位时 按下相对应的按钮,传数给数据块;然后根据控制要求的先后顺序,先传0然后再传对应数值,让电梯运行。(这里的手动是模拟实现同时按下的效果,用了一个M点)

 

 2.外部3层(控制要求:第7第8)

结构思路和上面的一样。 

 

3.到这里外部按钮的部分就完成了,但是控制要求还没完: 

电梯上升途中只响应上升呼叫,下降途中 只响应下降呼叫,任何反方向的呼叫均无效。例如,电梯停在一层,在三层轿厢外呼叫时, 电梯响应呼叫(从一层运行到三层),若电梯在没到达二层时,在二层外呼叫上升,电梯经 二层停后继续上升到三层;如若电梯在没到达二层时,在二层外呼叫下降,电梯到达三层后 下降途径二层再停止。

在实验原理中:要求,上升时不能下降,下降时不能上升;并且还有一个控制要求。

1.第一个我们只要在上升下降时加上互锁就可以了。

2.第二关键点就在“是否到达2层”,我想到的还是这两个按钮按之后,传值,然后判断是否在2层;是就执行要求,不是就不执行。 

4.互锁 

在这里用上升下降的常闭,来进行互锁;并且还用了开门关门的互锁,防止电梯在开门关门时进行上升下降,这里需要注意。 

 

5.控制

这里用2层上升和下降的上升沿来传1个数值;  

 当两个按钮按下后,为了保证在2层之前,加上了2层3层的限位;如果在2层之前触发2层上升按钮,就先到达2层,然后再去3层。

 如果先按2层下降再按3层下降,则先去3层,然后去2层。 

 6.小结

这一部分写完,最后1个大的要求就完成了。控制要求实现不是太难,但是需要相应的条件,如果没有就自己创造条件! 

4.程序完善 (指示灯)

 3个主要控制要求完成后,就剩一些收尾工作了;指示灯的控制要求:

L1、L2、L3 为楼层指示灯,L4、L5为电梯上升下降指示灯,L6、L7、L8、L9为电梯外部按钮指示灯,L10、L11、L12为电梯内部按钮指示灯,UP、DOWN 为轿厢上升、下降指示,OPEN、 CLOSE 为轿厢开门、关门指示。

1.楼层指示灯:到达每层限位后让线圈得电,离开后灭。

2.电梯外部按钮指示灯:按下外部楼层按钮的时候置位线圈,到达限位开门关门后将线圈复位。

3.电梯内部按钮指示灯:和外部实现相同。

4.电梯上升下降指示灯:电梯上升下降时接上线圈,停止时灭掉。

5.开门关门指示灯:在开门关门线圈外再加指示灯就可以了。

1. 外部内部指示灯

 

 2.上升下降指示灯

3.楼层指示灯

 

五、完整程序  1.主程序 

每次上电的时候,都将所有的数组和线圈复位,这里用首次脉冲循环来触发。 

 2.fc块 1.初始化 

 2.外部内部呼叫按钮  3.上升下降

 

4.按钮指示灯 

 

6.到达楼层 

 

7.内部按钮多重控制 

 电梯1层:

 电梯2层:

电梯3层:

 

8.外部按钮控制 

 

外部1层:

 

外部3层:

 

9.开门关门 

 

总结

以上就是本文的全部内容了,将这个3层模拟电梯整体过了一遍;从主程序一直到fc块,这里我所用的大多都是传送和比较指令,题目的思路不复杂,但是要把它们整体连接起来还是用难度的。这里用了很多fc块,然后主程序调用;感觉还有很多可以改进的地方的,比如内部按钮的多个控制还有外部的,和上面的控制要求。这里还是给一个整体的思路,具体编写要根据自身的方法;这里程序只做参考使用。如果程序或者思路有问题,可以说一下,交流一下;另外3层电梯不止只用这1种方法,只要能实现功能都可以!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3