下面是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
|