1.你所建立的这个变量名称不合法或者和其它变量重名。
2.该变量在程序内被调用时,格式未被定义。也就是说,你所建立的这个变量名需要你在symbls中声明它的格式,例如:word,int.dint等。该格式视你程序内使用情况而定。
3.sub_i为系统内单整型减法运算系统块,若你在程序中已经调用该功能块,那么与之同名的功能块将被替换,而且,所有你使用sub_i功能块的子程序都必须打开并保存一次方可。或者你可以在symbols中更改一下sub_i的名称,使之不会重名即可。
见于你所说的情况,我想,你大概是在修改程序,而不是设计。因为在设计过程中,一般不会出现此种情况,只有在你修改程序时,你无法全面观察全部程序内所有变量的名称,所以才会造成无法使用的情况。
STEP7 程序块的类型及区别(总结)在SIEMENS S7-300/400系列PLC中有多种程序块,如下图(在管理器右边的空白区域点击右键),主要有
:组织块(OB),功能块(FB),功能(FC),数据块(DB)及系统功能(SFC)和系统功能块(SFB)
等。
注:快捷菜单中的其它两项:数据类型和变量表。数据类型(UDT)用于指定程序中数据元素的大小与格
式;变量表(VAT)用来在程序调试和运行时修改和监视变量的内容(在地址栏中输入地址后,符号栏中
会自动显示在符号表中定义的符号)。
这几种程序块的功能简要说明如下:
说明:
调用程序块:OB,FB,FC(可以调用除OB块外的其它程序块);
被调用程序块:FB,FC,SFB,SFC。
1、组织块OB
OB由系统自动调用,并执行用户在OB块中编写的程序,所以OB的基本作用是调用用户程序。
在OB块中编写程序的最大容量,S7-300是16KB,S7-400是64KB。
除主程序循环OB1外,其它OB均是由事件触发的中断。
2、函数FC
函数FC有两个作用:(1)作为子程序用;(2)作为函数用,函数中通常带形参。
函数中程序的最大容量,S7-300是16KB,S7-400是64KB。
FC的形参通常也称为接口区,参数类型分为输入参数,输出参数,输入/输出参数和临时数据区。
在编写函数FC的输出参数时,应避免没有直接输出(否则,可能输出一个随机值,影响程序的判断
)。可以在函数的开始,将字输出参数清0,位输出参数复位。
3、函数块FB
FB与FC相比,FB每次调用都必须分配一个背景数据块,用来存储接口数据区(TEMP类型除外)和运
算的中间数据。其它程序可以直接使用背景数据区中的数据。
FB中程序的最大容量,S7-300是16KB,S7-400是64KB。
FB的接口区比FC多了一个静态数据区(STAT),用来存储中间变量。
程序调用FB时,形参不像FC那样必须赋值,可以通过背景数据块直接赋值。
由于FB带有背景数据块,输出参数不会输出随机值,可以不在FB中编写初始化程序。
4、数据块DB
DB用来存储用户数据及程序的中间变量,为全局变量。DB的最大容量,S7-300为32KB,S7-400为
64KB。
DB可分为共享数据块(Share DB)、背景数据块(Instance DB)和用户自定义数据(UDT)类型的
数据块。
★ 共享数据块可作为所有程序使用的全局变量,在CPU允许的条件下,一个程序可创建任意多个DB
,每个DB的最大容量为64KB。
默认条件下,共享数据块为掉电保持,在其属性菜单中选中“Non Retain”可以更改为掉电数据丢
失。
如CPU中无足够的内部存储空间保存数据,可将指定的数据保存到共享数据块。存储在共享数据块中
的数据可被其它任意一个块调用(全局变量)。这一点和背景数据块不同,背景数据块只能被指定的功
能块(FB)使用,保存在背景数据块中的数据只能在这个功能块中有效。
★ 背景数据块与FB和SFB关联,也是全局变量。背景数据块和共享数据块相比,只保存与FB或SFB接
口数据区(Temp)相关的数据。背景数据块中有一种比较特殊的数据块,称为多重背景数据块。有关多
重背景数据块的用法和使用注意事项请参看《怎样使用多重背景数据块》。
★ 基于UDT的数据块为全局变量,提供一个固定格式的数据结构,便于用户使用。
5、系统函数(SFC)和系统函数块(SFB)
我想Keil出现这个Bug的可能性不大。你可以先用代码定义的方式,测试一个你通过PreProcessor Symbols的量,例如
#define SYMBOL_1
#define SYSBOL_2
//define SYMBOL_3
//假如以下是你的程序中的代码
#ifdef SYMBOL_1
....
#endif
#if defined(SYMBOL_2)
...
#else
#if defined(SYMBOL_3)
....
#else
.....
#endif
#endif
如此,看一下程序是否能正确编译。一般情况下,是你的代码出现问题。
当然,如果你贴出部分代码看一下,就能比较好判断,因为你的问题说得比较乱。
共同探讨!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)