产品描述
西门子模块1FL6042-2AF21-1MB1
控制过程:
1、i0.0闭合后,t37开始计时;q0.1、q0.3、q0.4吸合;
2、当计时到20秒后,m0.1吸合,q0.1复位、q0.2、q0.3、q0.5吸合;
3、当计时到40秒后,m0.2吸合,q0.2、q0.3复位,q0.5吸合;
4、当计时到60秒后,m0.3吸合,q0.2、q0.3复位,q0.5吸合;
5、当计时到80秒后,m0.0吸合并自锁,t37、q0.5复位;
6、如果此时i0.0没有打开,q0.1、q0.3、q0.4吸合并锁定;
7、按下停止按钮i0.1,全部输出复位。
首先要注意sr触发器用来对图中的m0.0置位和复位,同时也对q输出端可选的bool变量置位和复位。程序中的m0.0和局部变量#zuudianyuan(主)的作用是重复的,可以只用其中之一。
sr触发器有记忆和保持的功能。调用一次fc1,m0.0用来记忆一台设备的启动、停止命令。调用两次fc1,能用m0.0同时记忆两台设备的启动、停止命令吗?当然不行。
要想多次调用fc,其中有记忆功能的变量不能使用**地址,也不能使用局部变量中的临时变量。
较简单的解决方法是删除图中的线圈,将m0.0改为要控制的#zuudianyuan。
对于s7-300来说,sr方框上的地址可以使用输出参数。但是对于s7-200的子程序(相当于s7-300的fc),如果使用输出参数,多次调用该子程序时就会出错。应改为in_out参数
local data顾名思义为本地数据,在西门子控制器中有一部分内存空间被设置为l区间,它被用于控制器在运行程序时存储临时数据。由于编写fb/fc程序的需要和ob中调用功能块结构的不同,不同的ob由于调用不同的fb/fc,因此所需的local data的大小各不相同(被调用的fb/fc将占用当前调用他的ob块的local data资源)。在控制器硬件组态中的cpu属性设置中,memory选项卡用于设置local data的分配。如果相应ob块实际运行所需的local data大于硬件组态中所设置的local data大小,那么相应的程序将无法运行,cpu将报告intf错误,甚至更为严重的情况下cpu可能会停止运行。但如果盲目将local data的分配设置过大,将会浪费一部分宝贵的cpu内存空间。
s7 300cpu中的local data不可修改,每个**级固定设置为256 bytes,s7 400的local data则可以人为修改。由此可以看出正确设置s7400 cpu的local data的大小非常重要。在控制器硬件组态中cpu属性? memory选项卡的local data区域用于设置基于**级的local d
pic5: 查看ob的**级
获得所有上述信息后,即可计算当前程序所需的local data大小。假设当前项目下使用的功能块及ob块上述相关信息如下表所示:
ob/fb/fc | priority**级 | 所需local data(bytes) |
fb1 | x | 100 |
fc1 | x | 400 |
ob1 | 1 | 26 |
ob35 | 12 | 26 |
ob121 | x | 20 |
ob122 | x | 20 |
ob的调用关系如上图pic4所示。根据调用结构计算,单独运行各ob块时所需的local data如下:
ob1: ob1 + max(sum(fb1,fc1), fc1) =26+max(sum(100,400), 400)=526
ob35: ob35 + sum(fb1,fc1) =26+sum(100,400)=526
ob121: ob121=20
ob122: ob122=20
较终cpu属性中local data的设置如下:
**级 1 所需local data大小至少为526 + 20 + 20 = 566 bytes;
**级12所需的local data大小至少为526 + 20 + 20 = 566 bytes;
注:为什么上述**级1和12中需要加入 两个20呢,因为程序运行的任何位置都有可能会执行ob121、ob122,所以需要加上ob121和ob122所需的本地数据。pcs7中(pic2所示)进行各**级所需local data大小计算时已经自动加入了这部分的大小。
具体的计算法则可以归纳为一下几点:
1. 从内往外,从低往高;
即:基于程序的调用结构,从较低层、较内层逐步往上、往外计算;
2. 同级取较大,内外求和;
即:程序调用结构中,同层fb/fc中所需的local data取各所需local data中的较大值;某一**级所需的local data大小取所有相同**级ob所需的local data的较大值;上下调用层级各自所需local data需求和;
3. 结果叠加ob121(编程错误)、ob122(i/o读取错误);
即:较终计算出的某**级所需的local data大小需要叠加上ob121、ob122所需的local data;
如果项目中cpu设置的local data小于程序所需local data大小时会有如下后果:
产品推荐