下面是SCL写的模拟量采集,用来调用。放在了FC块,跑起来也没什么不一样,放在FB块 就是多一个DB块,里面也就是 当前的传感器数据 也没什么重要的东西,所以有了疑问,是放在那个块比较好呢???
下面SCL使用方法,保存为txt文件,修改文件后缀为scl ,博图导入外部源文件 就可以生成fc块了
复制代码- FUNCTION "模拟量数据处理" : Void
 - { S7_Optimized_Access := 'TRUE' }
 - VERSION : 0.1
 -    VAR_INPUT 
 -       模拟量输入 : Int;
 -       传感器量程上限 : Real;
 -       传感器量程下限 : Real;
 -       模拟量量程上限 : Int;
 -       模拟量量程下限 : Int;
 -       传感器修正值 : Real;
 -    END_VAR
 -    VAR_OUTPUT 
 -       传感器实际值 : Real;
 -       传感器修正后结果 : Real;
 -       传感器故障 : Bool;
 -    END_VAR
 -    VAR_TEMP 
 -       i : Int;
 -       j : Real;
 -       k : Int;
 -    END_VAR
 - BEGIN
 -     //数据处理
 -     IF #模拟量输入 <= #模拟量量程下限 THEN    //判断输入值是否低于模拟量设定下限值
 -         #传感器实际值 := #传感器量程下限;     //输出直接为浮点数设定值下限
 -     END_IF;
 -     IF #模拟量输入 >= #模拟量量程上限 THEN     //判断输入值是否高于模拟量设定上限值
 -         #传感器实际值 := #传感器量程上限;      //输出直接为浮点数设定值上限
 -     END_IF;
 -     IF #模拟量输入 > #模拟量量程下限 AND #模拟量输入 < #模拟量量程上限 THEN
 -         //判断输入值是否在设定值限值内
 -         #i := #模拟量输入 - #模拟量量程下限;    //实时值与模拟量下限值的差
 -         #k := #模拟量量程上限 - #模拟量量程下限; //模拟量设定值的区间
 -         #j := #传感器量程上限 - #传感器量程下限; //浮点数设定值的区间
 -         #传感器实际值 := #j * #i / #k + #传感器量程下限;
 -     END_IF;
 -     //传感器数值修正
 -     #传感器修正后结果 := #传感器实际值 + #传感器修正值; //对实际的的传感器数值进行结果修正
 -     //传感器故障检测
 -     IF #模拟量输入 < #模拟量量程下限 THEN    //判断输入值是否低于模拟量设定下限值
 -         #传感器故障 := true;                  //输出传感器故障
 -     END_IF;
 -     IF #模拟量输入 > #模拟量量程上限 THEN     //判断输入值是否高于模拟量设定上限值
 -         #传感器故障 := true;                   //输出传感器故障
 -     END_IF;
 -     IF #传感器实际值 < #传感器量程下限 THEN    //判断结果是否低于传感器量程设定下限值
 -         #传感器故障 := true;                  //输出传感器故障
 -     END_IF;
 -     IF #传感器实际值 > #传感器量程上限 THEN     //判断结果是否高于传感器量程设定上限值
 -         #传感器故障 := true;                   //输出传感器故障
 -     END_IF;
 - END_FUNCTION
 
  |