PLC学习笔记(五)电梯逻辑

今天意外关注起发生在9年前的那起温州动车追尾事故,原本是想时隔多年再追问内心的困惑,掩埋列车是否合理?
但浏览更新时间停留在很久之前的帖子、报道,看到了最后获救的女童小伊伊,还有她远在天国的父母,我不胜悲痛。读到身为教师骨干的爸爸的好友的祭文,强烈的情感抒发使人感同深受,还有那对中国制造的拷问,也让我羞愧——
安全生产,可我在进行电梯实验测试时,留意到一个现象:即使未开门到位,乘客也会自行上梯。那我在为提高评分时,便想到过利用这一漏洞减少开门时间。在冰冷的分数之外,我好像忽视了实际生产的安全性。如今,我的念头完全被打消,生命面前,再高的分数也是不及格!

PLC学习笔记(三)循环遍历续篇

在我看来,编程的魅力就在于利用有限的语言写出无限的循环,把清晰的指令交给计算机去做最枯燥无味的重复工作。
因此,对于本次电梯的控制,当完成了对应输入输出变量的控制能够进行初始化工作及前往指定楼层后,便需要把电梯的选层与当前楼层综合得到前进目标的逻辑完整。

PLC学习笔记(一)FC与FB

任务 为实现电梯项目模块化设计,要应用PLC编程的函数(FC)与函数块(FB),但对二者的区分不清楚,凭感觉应用,但出了问题也不知从何处理,还是学习一下基础知识,主要搬运他人的整理。 区别 FB–功能块,带背景数据块(FB≈FC+DB) FC–功能,相当于函数 FB,FC块均相当于子程序,既可以调用其它FB,FC块,也可以被OB,FB,FC块调用。 文章:西门子PLC中FC与FB用法的详解 重要问题 PLC的程序执行在扫描周期内由上到下,顺序执行,因此在FC中,线圈的顺序很重要! 对于我的这个问题看到一篇文章写得很好:Step7 FC功能中的Temp变量,转载如下: 例 如果在TEMP接口中新建一个变量A,数据类型为BOOL,地址0.0start和driver是外部输入输出接口。 分析 程序的扫描是从上到下。S7 FC中的接口TMEP中的变量必须遵守:先赋值后使用的原则。 1程序,当start的值从0变为1,A也将从0变为1。扫描到第一段程序时,因为A的值已经发生改变,程序将成功扫描到A的常闭触点从1变为0,那么driver线圈将成功得从原来的1改变为0。 2程序,因为扫描到第一段程序的时候CPU没有发现A的值改变。之后A值将一直保持不变,即使start的值从0变为1,A值也不会发生改变;结果是程序没有反应。 心得体会 西门子这一点比其他的PLC都灵活,FB的DB作为FB的变量的固定存放地址,而Temp则是有系统分配临时区L地址。比如:存在FC1,FC2两个功能,它们都有两个Temp,那么当调用FC1时,系统分配L区域地址给FC1的Temp,如分配了LB0,LB1,那么当FC1调用完成后,系统认为LB0,LB1已经不需要,但是西门子的系统不会对临时区进行清零,只是继续分配,当调用FC2时,系统将LB0,LB1重新分配给FC2的Temp,此时如果不遵循先赋值后使用的准则,那么FC2的Temp使用的值将是FC1的Temp的值。临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失。因此, 在PLC扫描运行时, FC块中的临时变量TEMP不能自锁! TEMP变量使用原则 TEMP变量不能自锁的原因显而易见: 每个扫描周期开始时,TEMP变量的值并不像Q或M那样可以保持上个周期的值。除非明确对其赋值,否则它的值是不确定的。 第一次出现某个TEMP变量,必须是对其赋值(或线圈刷新)的写指令,而不能是读指令。 如果出现问题,建议使用STAT变量替代。 建议是做逻辑不用TEMP,只在做运算是用TEMP,会省去很多麻烦