关于 S7 的一些杂谈 临时数据区,OB,FB 和 FC 里的临时数据区的功能是一样的,程序每次执行时,临时数据的数据是不确定的,他属于动态数据,是由操作系统从数据栈里分配给 FB 的,程序退出后,要把这些数据内存归还给操作系统
OB 的临时数据的前 20 个字节是操作系统在调用 OB 是分配给 OB 的特殊区域,相当于 OB 的入口参数,每次系统调用 OB 时就会把相应的数据写在这 20 个字节里,我们的用户程序会根据这 20 个字节的特定数据处理自己要处理的问题,这里我以是 OB40(硬件中断)为例,OB40_MDL_ADDR 是触发中断的模块的逻辑基址,OB40_POINT_ADDR,指出哪个通道已超出哪条限制等,我们就可以根据这些数据编写我们的硬件中断处理程序
首先,我简单的说说 FB 和 FC 的区别,FB 是具有存储功能的,FC 没有存储功能,这是一般的理解;FB 需要背景数据块,而 FC 是没有的;参数的传递方式不同,FB 的输入输出对应着背景数据块地址,而FC 的输入输出是没有实际地址对应的,只有的程序调用时,才会和实际的地址产生对应关系
FB 参数传递的是数据,FC 参数传递的是数据的地址
FB(功能块)的处理方式是围绕着数据块处理数据,他的入口参数和出口参数都是数据块里的数据,以及STAT 的数据都是数据块里,入口参数和出口参数、STAT 可以认为是静态数据,这些数据不会因为函数消失而逝去,他会一直保存在数据块里
FB 里的变量与他的背景数据块是一一对应的,而他的对应并不是一层不变的
更确切的说,FB 里的变量在调用时将根据 AR2 的值当作偏移量与背景数据块是一一对应
如果一个 FB 功能块里没有入口参数、出口参数及STAT 数据,他将不需要背景数据块,这时的 FB 和没有入口出口参数的 FC 就没有什么区别了,就只能使用临时变量和全局变量了