自己用SCL写了个FC,给它建立了一个全局DB,怎么看逻辑都正常,应该可以锁存。实时运行结果是:输入变化输出就跟着变化,根本没有锁存,也不用Reset,输出跟着输入直接变化。分析半天也没找出来原因到底为啥DB里面的数据会清零。
后面找不出原因,直接又建立一个FB,源代码直接粘贴过去,OB1调用,配个背景DB运行正常。
为啥全局DB不行呢?
FUNCTION "Fault_Latch" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
InPut : Bool; // 输入信号
Reset : Bool; // 复位
Slct_Tp : Bool; // 0=No,1=NC
END_VAR
VAR_OUTPUT
Input_Latch : Bool; // 已锁存信号
In_Fualt : Bool; // 输入信号故障
END_VAR
BEGIN
// 输入信号
//InPut: bool 输入信号
//Reset: bool 复位
//Slct_Tp: bool 输入信号选择0=No,1=NC;
//输出信号
//Input_Latch : bool输入锁存信号
//In_Fualt : bool 故障信号
IF NOT #Slct_Tp AND #InPut AND NOT #Input_Latch THEN
#Input_Latch := 1;
#In_Fualt := 1;
END_IF;
IF #Input_Latch AND #In_Fualt AND #Reset THEN
#Input_Latch := 0;
#In_Fualt := 0;
END_IF;
END_FUNCTION