临时变量TEMP赋值问题
今天我快下班时,在“找答案”栏目中看到有这样的贴子。其疑问是关于300plc在编辑用户程序调用函数FC时的临时变量赋值问题。问题的链接:
http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=189930&cid=1029
西门子无论是那一类型的plc,在调用子程序(带参数;不带参数)中的临时变量时,必须是先赋值,后使用,这个的调用临时变量最基本的原则。
临时变量必须先赋值的真正含义是:当被调用函数FC结束后,这些临时变量运算结果值会释放掉不执行数据传递,而是作为一个随机数(根据运算中的结果),当再次调用子程序时,如果不事先赋值,那么这些随机数会进入另外一个子程序,从而进入新的运算,这样的运算结果一定会是错误的结果。函数的临时变量TEMP仅仅局限于该函数FC内部过程运算处理,而并不直接参与函数处理的数据传递,只是在调用时起作用。
那个网友在调用函数FC的临时变量时,这样做赋值,图示:
从图示中明显可以看出,网友的编程含义是想先给临时变量#T_one = 1;#T_zero = 0赋值,然后再在下面的程序段中实现具体的控制运算(第一个疑问答案的正确的)。
既然,临时变量只能在调用时才生效,那么,在过程运算处理时是否可以被修改状态?答案当然是肯定的,因为临时变量仅仅作用于中间数据过程处理,结果还需要具体的控制程序来确定,来做一个验证,按网友的程序基础验证,(带参数的函数FC,起、保、停控制)
创建一个项目,并创建带参数的函数FC1,图示:
在组织块OB1中多次调用FC1,图示:
使I0.0 = 1,Q0.0 = 1;使I0.3 = 1,Q0.0 = 1 / Q0.1 = 0;改变其它输入状态,FC1执行仍然正确。说明在OB1调用FC1程序段2时,临时变量TEMP的赋值有效,打开FC1,也可以看到运行过程,图示:
#T_one为1,#T_zero 为赋值有效0。FC1的虚线框是因为我没有在FC1最后没有写SET SAVE语句,写入后的FC1为实线框了,图示:
采用其它变量修改临时变量的状态?图示:重新修改FC1
由此可见,临时变量可以在过程控制中通过其它变量多次写入新值,以达到控制过程处理数据时的要求。
如果这些临时变量没有在调用前,不事先赋值呢?运行的结果大家试试,毕竟,这个验证程序相对理解的过程简单,容易理解深入。