调用块前面加个条件行么?
刘玉蓉
发布于2014-11-03 17:17
100
0
标签:
假如在OB1里调用一个功能FC1,功能块FB1,我在用call的时候在前面加了一个常开触点,也就是PLC的输入I0.0,I0.1作为调用条件,这样设计可以控制FC1、FB1的调用,请问这样做有什么坏处?别人说这样调用当条件满足时会运行功能及功能块里的内容,如果不满足了就会停止,当再次满足这个条件时,程序会接着原来的状态运行,比如上次定时器定时的值会记忆,然后再次满足条件时这个定时器会接着上次的值继续运行?这样操作是不是很危险?
佳答案
首先说明一点:你这样做是可行的,不过不建议这样做。一般,我们把一个大的系统,分成若干个耦合度小的功能模块(例如,自动仓库系统,可以分为调度模块,查询模块,入库模块,出库模块),每一个模块是一个fb,由各个fb来根据条件调用哪个具体的功能模块(比如定位动作功能、装载卸载货物功能、出入仓功能等等),功能模块有具体的fc、fb组成。这样可以分模块,分功能的来设计、修改,互相之间依赖少,容易实现,逻辑清楚,方便理解,今后系统的增加、变更也会容易的多。
其次:“比如上次定时器定时的值会记忆”这个说法是错误的。我认为定时器和字符串是2个难点,你对定时器的理解不完全。定时器,可以理解为一个单独的设备。也许你会有疑问,你可以这样测试一下,在模拟器中,给一个定时器赋值,你会发现定时器里面就开始运行。调用fc中,在fc中使用定时器定义一个比较大的s5t,断开fc的运行条件,你会发现定时器还在运行。定时器与你调用他的条件无关,只要你启动了,他就会“一如既往”的运行下去,就好比打印机,我们用word打印了,即使关掉word,打印机也会继续打印,知道完成。所以,你在把定时器使用在fc中,一定要注意这个特性,另外还需要注意的一点是:用于启动定时器的变量,一定要放在in_out中,因为定时器需要一个上升沿判断。还有后一点,对于时间精度要求特别高的工艺要求,连续使用定时器要考虑误差——定时器是由上升沿判断,会有一个周期的误差。