恭喜,你发布的帖子
发布于 2022-04-06 10:04:56
1楼
首先,静态变量(STAT)和临时变量(TEMP)都属于局部变量,即当前块内部使用的变量元素,只能在当前块内定义并使用,在其他块中是无法访问的。两者的区别在于:
静态变量只能在FB中定义,该类型变量是有专属的存储区域的,即背景数据块,在STAT中定义的变量其存储的数值是可以通过背景数据保持的,如置复位、边沿检测等如需使用应定义到STAT中;
临时变量,在OB、FC、FB块中都可以定义使用,特点是没有专用的寄存器,而使用主调OB作为它们的公共寄存器空间,换言之定义到TEMP中的变量元素值是有可能被在其他块中定义的TEMP元素覆盖或访问的。所以用户可以将每周期都需要重新运算而无需保持的变量定义到TEMP管脚中临时使用。
所以,您截图中的边沿检测存储器,建议使用静态变量,而不是临时变量的原因就在于此,因为如果边沿检测被定义到临时变量,那么其存储功能可能由于是公共存储空间而被其他块的临时变量覆盖掉,进而无法实现功能。
其次,您提及到的InOut,Input,Output,这是我们所谓的形参,即当前块内部与外部世界的参数接口,如果涉及到外部的状态变化输入,或者执行结果输出则需要定义为参数;如果仅是内部的中间运算,状态处理则使用局部变量即可。同理,您截图中的例子,因为边沿检测的执行机制是块内部的判断,形参只需要是触发信号即可,而边沿检测位完全与外部世界无关,所以就被定义为STAT静态变量。(当然,因为这是FB块;但如果是FC块,因为FC只有TEMP,按照上文解释,边沿检测存储不建议使用TEMP,所以虽然边沿检测存储位与外部世界无关,但也要被定义为INOUT类型的形参,才能借用外部世界的一个未用的存储器实现该功能)
推荐帖推荐理由:学习课程程序过程中,发现使用了较多的静态变量和临时变量,这两种变量对于理解程序至关重要。看了老师的讲解,发现自己以前的理解感觉停留在表面上,不深入。希望大家多参考老师的回帖,仔细理解和琢磨。(推荐人:无秦)
请填写推广理由:
分享
只看
楼主