3000行能写什么程序(3000行代码能写个啥)

哈喽,大家晚上好呀!


上次给大家分享了我们的学员陆冯在智控教育阶段性的学习的分享,广受好好评~今天我们继续带来他的技术分享第二篇。大家一起来学习吧!



常州智控教育成长营——阶段学习分享2

【技术分享】 作者:陆冯


主要内容:

注意:本文是只针对(智控教育新北校区的分拣设备)的技术总结,不针对其它设备。

1.分拣设备的硬件认知

2.分拣设备的编程思路和具体操作方法

3.机构简化、暂停、预停、信号锁存、产品计数、预设产量—等等一招鲜战术的原理


各位同学大家好!


很荣幸用word文档形式来进行技术分享,这也次我首次进行word版本的项目工程讲解,如有错误之处,请各位指正!

(设备总体视图)


首先我们明确一点,我们要做的,是让这个设备安全、正确、高效地运作起来。这是我们的唯一目的!那么为了这个目的去进行PLC编程调试。一个好的电气工程师编写出来的程序,应当具有:安全性、正确性、高效性、移植性和扩展性。


PLC程序其实就是人的意志的延伸,你的思维和意识基本决定了这台设备是个傻瓜,还是聪慧过人,当然,这个世界上不可能有完美的程序.......



1.分拣设备的硬件认知


硬件包括所有机械部分、电气部分,工作原理和工作现象,是你必须要搞清楚的。

(电磁阀视图)


本设备重点要说的,是上图这7个电磁阀,其中有一个备用;那么剩下的6个,其中有4个(蓝色的)是具有弹簧复位功能的单电控电磁阀:


说白了,给电就是气缸伸出,不给电就是气缸缩回,没电弹簧就推回去了,这个很好理解;


但是,有2个(红色的)电磁阀,是没有弹簧复位的双电控电磁阀:


PLC I/O表中 也是使用了 4个输出,才控制住了这 2个电磁阀。



说白了,左边给电一次,就跑左边不回家了,右边给电一次就跑右边不回家了,左右两家哪家给电,往哪家跑。有趣的解释:【它是一个“热爱电的家伙”,且“极度轻浮”,比如:左边电磁线圈只要给一次电,就可以把它骗回来,并且不需要一直给电;但是,如果此时右边来给了电,而此时,恰巧左边又没在给电,那么它就会跑到右边..】


重点:我们的“摆动气缸”和“移动气缸”,就是两个没有弹簧复位的双电控电磁阀!


我们在实际操作中出现了很多不一样的初始状态,摆动气缸和移动气缸分别具有两种位置,从而可以得出,我们所有同学,只可能出现4种初始位置状态(都是正确的):

1.移动气缸取料位(左边)+摆动气缸取料位(左边);

2.移动气缸取料位(左边)+摆动气缸放料位(右边);

3.移动气缸放料位(右边)+摆动气缸取料位(左边);

4.移动气缸放料位(右边)+摆动气缸放料位(右边);


当然,我们的单电控带弹簧复位电磁阀的初始位置也很重要,一般我们认为断电状态下,它所处于的位置为“初始位置”。


那么搞清楚了以上电磁阀的硬件认知,很多人就应当知道自己错在了哪里,被这个搞昏头的不少吧?我当年也被搞过,搞不清楚或者是无法正确控制它的初始位置,所谓的后面的自动运行程序,就是没有一楼的二楼!


除了上面的这个难点,你还要搞清楚,各个传感器分别检测的是哪个执行机构的哪个位置,我们这个项目里其实就是:6个气缸的各自的2个端部磁性开关。


装在任何一个气缸上的2个传感器,必然只可能有1个得电——因为气缸,只存在两个工作位置中的一个,它不可能既在左限位,又在右限位。


那么,到这里,这台分拣设备编程之前所要了解的,已经基本说完了。



2.分拣设备的编程思路和具体操作方法

解决了上面的硬件认知问题,我们在程序编写过程中就胸有成竹了!


下面介绍第一种编程方式:


启动后自动运行--单流程循环程序--能够启动、停止、复位,三位互锁。


首先,建议大家如果没有多少编程经验,请不要贸然使用FB\FC的形参和实参调用。其实在主程序里面,哪怕3000行程序,只要你实现了功能,就是王道。


我那天下午刚接完线,用时不到10分钟,就完成了:“启动按钮按下一次,搬运并且分拣一个工件”的单周期不循环流程。其实用的就是主程序+PLC I/O变量表,没有任何FC、FB、DB,不需要嵌套、调用、形式参数的间接寻址,可以有效避开很多不必要的,因为对软件不熟悉而产生的错误。


(流程图)


这张流程图,基本阐述了这个设备最基本功能的流程框架。


注意:以上流程图中的任何一个方框都在步态存储器中有自己独立的数字(就是状态),至少是单独的一步,甚至是多步。提醒各位不要在一个步里面想干太多的事情,简单点,一步就干一件事情,然后检测一下干完没有,如果ok就去下一步,多写几步而已,可以避免好多信号不保持,而带来的离奇错误。



提示:

IF (“First scan”=1) THEN

{

“步态存储器”:=1;

}

END_IF;


IF (“步态存储器”=1) THEN

{

“复位程序”:=1;

IF (“复位完成”=1)THEN

{

“步态存储器”:=2;

}

END_IF;

}

END_IF;


所有运行程序必须被关在,步态存储器的笼子里!!!想换笼子,只能是主令电器/上位机的指令。


流程解析:

上电之后,1200 PLC会在第一个扫描周期内置位Firstscan系统标志位,我们用它来进行系统复位。


复位程序:

关闭所有单电控电磁阀的输出,并且将双电控电磁阀设置在一边有电、一边没电的状态,将设备初始位置设为自己想要的那个位置。


如果已经执行复位程序成功,那么这台设备,6个气缸,都应当拥有的自己的传感器信号输出了,比如升降气缸应当是上升到位,而双电控电磁阀控制的气缸上面,是哪个传感器得电,就得看你选的设备初始位置是什么了。


然后,我们如果满足(所有传感器常开触点串联)这个条件,那么我们将进入复位完成状态,等待启动按钮的启动。


而接下来的自动程序,无非是,顺序控制。你用SET\RST成对配合也好,还是MOVE+比较指令也好,都是一样的。


步态条件满足——去执行什么——执行好了——去下一步。


很容易就能实现程序的单流程循环自动运行。

当然,停止按钮和复位按钮,是怎么分配权限的?我们一般这么干:

1.停止按钮高于一切,任何情况下按下停止,都将进入停止状态;

2.启动按钮按下时,必须在设备复位完成状态,在设备初始位置时,才有效;

3.复位按钮按下时,设备必须处于停止状态,才有效,才会去执行复位程序;

(就算用三个开关量表示设备状态,这事也很简单)


三位互锁——设备3个状态只能存在于1种状态中,遵循以上原则。


上面所描述的这种,单流程循环+三位互锁的运行方式,不涉及大量的标志位调用,不需要什么多深的编程思想和工程经验,甚至不考虑设备运行节拍,完全是巷子里面扛木头,直来直去。


但是这是基础,是每个人必须去走的一关,没有一步登天,没有功德圆满。


启动-保持-停止,6个“字”已经讲完了PLC。可是——何时启动?何时保持?何时停止?如何启动?如何保持?如何停止?这6个“问”,你能回答为:“启动-保持-停止”这6个字吗???


当遇到,某位操作员按着启动按钮不放、手动模式下按启动、设备启动中按复位、复位中按停止或者启动、手动模式下已经改了很多机构的初始位置----再切换为自动,等等等等,你的程序能经受住考验吗?


唯有把程序关进“设备状态的笼子”里面,才有回答上面这些问题的“可能性”!



下面介绍第二种编程方式:


(流程图)



看到这里,突然发现,多了“选择结构”和“并行结构”。我水平有限,也说不清楚。但是还是尝试着解释一下吧!解释如下:

手/自动切换会自动进入设备复位程序,引起设备自动复位(当然你可以设置为进入停止状态,等人工按下复位按钮,进行复位);这样就确保了手/自动切换,无论哪种进入哪种模式,最开始的那一刻,设备均处于“初始位置状态”,不会因为手动模式下的操作被保留,带回到自动模式下。

也就是保证了,设备会因为“模式切换”,而进行自我归零,不产生累计误差。


至于并行架构,我是这么理解的:


供料部分说:我只负责供料,只要放料位没料了,我就去取料;并且我会告诉分拣部分,我这次抓的是什么料(SET料识别标志位);而且要是我发现没料了,我就不干了,然后大声说:“没料了,人类来给我加料!”(SET缺料标志位,而人加完料,按下启动按钮后,会RST缺料标志位);


运料部分说:我只负责运料,只要供料部分把料送到了(料送到的信息是靠电容传感器),我就去抓取,然后送给分拣部分,但是!我在把料给分拣部分时,我得问他一下,他准备好了没有?如果没有,可不能给他(这里是指检查分拣部分准备完成标志位);


分拣部分说:我只根据供料部分SET的料识别标志位,决定我咋干,如果是金属的,我就把它放在左边,如果不是,就把它放在右边;对了,我还要给运料部分那个兄弟说一声:我已经准备好了(SET分拣部分准备完成标志位);


这很像美国的总统制度,三只狗互相制约。


好了,我想我已经说的很形象了.........


我给我女朋友讲故事,都没这么形象。



3.机构简化、暂停、预停、信号锁存、产品计数、预设产量—等等一招鲜战术的原理


首先给各位普及相关思想,这些玩意儿都是建立在之前的基础上,这些功能,说实话只是“一片叶子”,没有合适的程序架构和遵守相关原则,是做不出来的。我们的树干,必须又粗又壮,这“叶子”才会多,这些吸引人眼球的的“一招鲜”,才能被展现出来。


一个个讲过去吧!


A.机构简化:

双电控电磁阀和单电控电磁阀,在程序中如果比较的话,为了不出错,基本上,双控会比单控多一行程序,因为双电控电磁阀要用两个输出,那么这个时候想办法啊!怎么把它变成和单电控电磁阀一样,一行搞定,还不出错???


FC块不带参调用 就是答案。

把SET/RST配合起来,变成一个块调用,方便、快速、还正确。



B.暂停:

暂停功能,其实就是记住当前设备状态,按下停止之后设备不再动,保持当前位置,再次按下启动,继续去执行未完成的任务。

很简单,做到本文第2点讲的,并且程序中每一个动作都与传感器条件相关联;禁止使用普通线圈,必须只使用SET/RST指令进行顺序控制编程;禁止使用定时器(信号滤波除外);必须使用IO映射,并且分为监视机构和执行机构两种,在暂停按钮按下,暂停标志位启动时,执行机构的IO映射:=NOT(“暂停标志位”)就行了。启动按钮复位暂停标志位就OK了。


C.预停:

停止按钮按下时,置位预停标志位,在自动流程,最后一步时,设置选择结构,是回第一步,还是停止(根据预停标志位决定),如果停止,顺便把预停标志位自己也RST掉,以便于下次使用。



D.信号锁存、产品计数、预设产量

其实,在我们这套设备里面,供料机构分辨的“料识别标志位”,就是信号锁存,因为我检测的时候,我的分拣机构就能迅速完成料的分拣吗?不是,而是等待运料部分把料给搬运过来,典型的“秋后算账程序”,我记住你是“金属的”,还是“塑料的”,然后过了一段时间,才依靠信号锁存下来的“证据”,决定把你放到哪个仓库。


产品计数就不用说了,上面这说的内容后面加个计数器,或者ADD,或者INC指令,操作一个DINT类型的数字就行,这叫“记账本”,但是记住,为了准确,通常用上升沿来做这些加法指令/加法计数器的EN(使能)条件。


预设产量,说白了就是触摸屏设定了一个值,然后把这个值和产品计数的数值比较,当设置的数量到了之后,程序最后一步做一个选择结构,如果数量到了——进入停止程序。


当然除了这些,还有缺料报警、放料完成后按启动继续运行什么的,基本都是这个套路,本人不在赘述。


感谢各位观看,谢谢各位!