2015年是我第一次使用博途软件,这一年也是小弟初入工控这行业的起点。未参加工作以前在学校里学的是西门子的step7 v5.5这个编程软件,感觉这个软件相对于同为plc厂家三菱的gx强大的不是一点半点,然而在我初次使用了西门子的tia portal之后,心中的感触用一句话来形容就是“五岳归来不看山,黄山归来不看岳”。好了扯的有点远啦,言归正传,我掉进的这个坑,还要从第一次使用博途软件说起。 那是15年的夏天,甲方上了我公司一套大型的设备,对工期催促的比较急,说是设备晚投入生产一天就会损失好几万,相应的就要扣工程款5%。于是乎为了赶进度,设备还没有安装好,我和我的同事们就匆匆赶赴现场,进行调试前的准备工作。因为这是第一次使用新的软件,出厂之前对柜子进行了尤为仔细的检查,相应的功能也都单独试了一遍。到了现场也如我预料的前期的各个部分的单独测试也都十分的顺利,就在当我信心满满的开始进行设备的顺序启动运行的时候,奇怪的事情发生了。开机后就发生了惊人的连续噼里啪啦的接触器断开吸合的声音,吓的我直接把总闸都拉了,WTF! 刚才发生了什么?脑子里第一个想法就是是不是一个变量给了多个输出点,然后就小心翼翼的把电上了,plc打在线监控程序。不得不说博途的查找交叉使用功能很赞,对于复用的变量可以很快查到其位置,很快都查了一遍,输出的各个逻辑部分都正常的。这个时候我突然想到以前遇到过M点地址重叠的故障,比如说程序里用到两个变量,一个mw0另外一个MW1,这样他们有一部分地址重叠,cpu就会报错。为了防止接触器反复吸合产生巨大的响声,我把输出点全部屏蔽了,然后启动顺序运行,满心希望cpu会报故障然而并没有。这个时候我就有点慌,心里默念冷静点、冷静点,要一步步的查,既然接触器会吸合,那么肯定有输出,于是我从输出开始向前查找。(话说这个时候已经夜里11点了,早下班了,而我还蹲在现场忍受着蚊虫叮咬,还没有吃晚饭)就这样一个个的查找,突然眼前一段程序引起了我的注意,一个temp变量在FB程序中做逻辑输出,输入点没有得电而temp却得电了,什么鬼!脑子里飞速想到了一个念头,这个temp变量在其他地方使用过,这是一个局部的临时变量查找起来倒是很快,结局是不幸的,我没有找到其他地方使用过这个变量。这个时候到了12点,我有点崩溃了,于是又没头没脑的把硬件检查了一遍,再次确定硬件没有毛病(这个时候已经糊涂了)。为了不耽误明天的工作,我拖着疲惫的身体带着对temp变量的疑惑回宾馆了,这个时候已经凌晨一点了。 那个时候刚进入工控这个行业,不知道有西门子论坛西门子客服这好东西,不然我想我会少走一些弯路。第二天一大早我有匆匆赶往现场,在现场一待又是到了夜里10点多,所有的temp变量都被我看了几遍,想从中找出一点规律。但是却令我倍感失望,这哪有什么规律,我这个时候甚至都开始怀疑博途软件有问题了!心里暗骂博途软件太坑了,为什么step7 5.5 FB中输出变量也可以在FB内部做输入,而博途中的却需要用temp来做这中间变量的工作!这个时候突然的灵感让我想到一些什么,于是我把一个FB块中的所有temp变量全部换成static类型的,激动的把改好的块下了进去,好了!这可把我高兴坏,虽然不知道为什么,但我还是把所有的FB块的TEMP变量都改了,编译,下载!开始启动运行,随着设备的轰鸣声,设备终于会按着程序运行了。而这两天的种种苦累也在这一刻得到了最好的回报! 后来设备正常运行后,我才有空仔细的研究关于TEMP变量的问题。“临时变量可以在组织快OB、功能FC和功能块FB中使用,当块执行时它们被用来临时存储数据,一旦块执行结束,堆栈的地址将被重新分配用于其它程序块使用,此地址上的数据不会被清零,直到被其他程序块赋予新值。需要遵循“先赋值,再使用”的原则“。虽然知道了原理,至今仍然喜欢在bit类型的变量使用static,其他类型使用temp变量。虽然我遇到的这个问题是个小问题,也许大神们都不把它当问题,但这里仅为抛砖引玉。在工控行业,才刚刚入门,愿以后的日子里与大家共同进步!最后把官方关于temp变量的分析贴出来给像我一样的小白看—— 有常见的几种情况导致程序运行不正常: 1.
某个块程序运行时好时坏,其中某个数值或多个数值偶尔不正常 总结,在使用临时变量TEMP时: 遇到如上情况,FC块可采用M区或全局DB地址;FB块也可采用自身背景DB的STAT静态变量 |
电工学习网 ( )
GMT+8, 2021-12-6 20:45