刚用300,对FC的理解不太深,用FC做个电机启保停的块,我这2中定义接口的方式不同,只定义IN和OUT接口,多次调用FC1没问题,如果定义IN OUT 和Temp ,多次调用就会有影响,那么我以后用FC时什么时候定义TEMP接口?怎么活用FC?
最佳答案
临时变量(TEMP)是一种在块执行时,用来暂时存储数据的变量,这些临时数据存储在PLC工作存储器中局部数据堆栈(L Stack)中。当块执行时它们被用来存储数据,一旦块执行结束,堆栈重新分配。
这个in,out,in_out都是针对这个程序块来说的,in变量是外部输入的,只能被本程序块读,不能被本程序块写,out是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写。in_out本程序块和其他程序都可以读写这个引脚的值。如果你把本程序块作为一个stat变量来调用就另说了!
回答者: zhangli0 - 顶级工程师 第12级 2011-3-1 21:38
在回答你的问题之前,有必要对变量声明表有一个基本了解。在STEP7中有两种用来定义符号地址的表格形式:符号表(共享符号)和变量声明表(局域符号),其本质都是为了建立绝对地址与符号地址之间的内在联系,但表格针对的对象不同。共享符号是整个程序所使用的共同符号(用于全局符号定义的表为符号表);而局域符号是某一特定逻辑快(OB、FB、FC等)所使用的临时性标记,只能在特定的逻辑块中进行临时性定义。用于临时性的、局域符号定义的表被称为变量声明表,又称局部变量声明表。
局部变量声明表分为参数(输入参数IN、输出参数OUT、输入/输出参数IN_OUT)和局部变量。局部变量又包括静态变量(STAT)和临时变量(TEMP)两种。参数可在调用块(逻辑块,块中的形参)和被调用块(功能FB有自己自动生成的背景数据块DI,而功能FC只能使用共享数据块,提供调用块的形参的实际参数值,与调用块形式参数一一对应,数据类型必需一致)。静态变量和临时变量是仅供逻辑块本身使用数据,不能用作不同程序块之间的数据接口。
通过以上分析,我们知道所谓局部变量(包括静态变量和暂态变量)都是指对特定的逻辑块而言的,局部变量只是在它所在的块中有效,离开具体的逻辑块谈上述变量是没有意义的,你不能在其他块中调用利用变量(包括静态变量和暂态变量),这是与共享符号不一致的,共享符号可以被任意块调用。在每个逻辑块的前上面部分就是变量声明表的区域,在变量声明表中,用户声明本块中专用的变量,即局部变量包括块的形参和参数的系统属性。你可以在不同的块中使用相同的局部变量符号不会产生冲突。
静态变量(STAT)在PLC运行期间始终被存储。S7 将静态变量定义在背景数据块(针对FB而言,FC和OB无静态变量),当被调用块运行时,能读出或修改静态变量;被调用块结束后,静态变量保留在数据块中;
临时变量(TEMP)是一种在块执行时,用来暂时存储数据的变量,这些数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中。临时变量可以在组织快OB、功能FC和功能块FB中使用,当块执行时它们被用来临时存储数据,一旦块执行介绍,堆栈重新分配,临时变量中的数据将丢失。
在程序块中,如果在块的变量声明表中有局部变量符号,编程是STEP7软化自动在局部变量名前加一个“#”号,如果要访问与局部变量重名的全局变量(在符号表中定义),则全局变量必须使用双引号(如“Symbol”)
参考:http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=67704&cid=1029
提问者对于答案的评价:
谢谢你们的回答,看来我还有很长的路要走
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc126007.html