by海绵
级别: 工控侠客
精华主题: 0
发帖数量: 92 个
工控威望: 2563 点
下载积分: 2705 分
在线时间: 144(小时)
注册时间: 2021-12-03
最后登录: 2024-12-02
查看by海绵的 主题 / 回贴
楼主  发表于: 2023-09-02 11:37
下面是SCL写的模拟量采集,用来调用。放在了FC块,跑起来也没什么不一样,放在FB块 就是多一个DB块,里面也就是 当前的传感器数据 也没什么重要的东西,所以有了疑问,是放在那个块比较好呢???

下面SCL使用方法,保存为txt文件,修改文件后缀为scl ,博图导入外部源文件 就可以生成fc块了

复制代码
  1. FUNCTION "模拟量数据处理" : Void
  2. { S7_Optimized_Access := 'TRUE' }
  3. VERSION : 0.1
  4.    VAR_INPUT
  5.       模拟量输入 : Int;
  6.       传感器量程上限 : Real;
  7.       传感器量程下限 : Real;
  8.       模拟量量程上限 : Int;
  9.       模拟量量程下限 : Int;
  10.       传感器修正值 : Real;
  11.    END_VAR
  12.    VAR_OUTPUT
  13.       传感器实际值 : Real;
  14.       传感器修正后结果 : Real;
  15.       传感器故障 : Bool;
  16.    END_VAR
  17.    VAR_TEMP
  18.       i : Int;
  19.       j : Real;
  20.       k : Int;
  21.    END_VAR
  22. BEGIN
  23.     //数据处理
  24.     IF #模拟量输入 <= #模拟量量程下限 THEN    //判断输入值是否低于模拟量设定下限值
  25.         #传感器实际值 := #传感器量程下限;     //输出直接为浮点数设定值下限
  26.     END_IF;
  27.     IF #模拟量输入 >= #模拟量量程上限 THEN     //判断输入值是否高于模拟量设定上限值
  28.         #传感器实际值 := #传感器量程上限;      //输出直接为浮点数设定值上限
  29.     END_IF;
  30.     IF #模拟量输入 > #模拟量量程下限 AND #模拟量输入 < #模拟量量程上限 THEN
  31.         //判断输入值是否在设定值限值内
  32.         #i := #模拟量输入 - #模拟量量程下限;    //实时值与模拟量下限值的差
  33.         #k := #模拟量量程上限 - #模拟量量程下限; //模拟量设定值的区间
  34.         #j := #传感器量程上限 - #传感器量程下限; //浮点数设定值的区间
  35.         #传感器实际值 := #j * #i / #k + #传感器量程下限;
  36.     END_IF;
  37.     //传感器数值修正
  38.     #传感器修正后结果 := #传感器实际值 + #传感器修正值; //对实际的的传感器数值进行结果修正
  39.     //传感器故障检测
  40.     IF #模拟量输入 < #模拟量量程下限 THEN    //判断输入值是否低于模拟量设定下限值
  41.         #传感器故障 := true;                  //输出传感器故障
  42.     END_IF;
  43.     IF #模拟量输入 > #模拟量量程上限 THEN     //判断输入值是否高于模拟量设定上限值
  44.         #传感器故障 := true;                   //输出传感器故障
  45.     END_IF;
  46.     IF #传感器实际值 < #传感器量程下限 THEN    //判断结果是否低于传感器量程设定下限值
  47.         #传感器故障 := true;                  //输出传感器故障
  48.     END_IF;
  49.     IF #传感器实际值 > #传感器量程上限 THEN     //判断结果是否高于传感器量程设定上限值
  50.         #传感器故障 := true;                   //输出传感器故障
  51.     END_IF;
  52. END_FUNCTION

sunzengli
级别: 论坛先锋
精华主题: 0
发帖数量: 685 个
工控威望: 1066 点
下载积分: 1553 分
在线时间: 220(小时)
注册时间: 2021-07-09
最后登录: 2024-12-02
查看sunzengli的 主题 / 回贴
1楼  发表于: 2023-09-02 12:56
没有问题,实际上FB能做的FC都能做,反之一样。
FB就是自带背景的FC,在某些情况下很好用,但是如果你是先把数据处理的很合理,道理是一样的。
像你这种简单的输入输出处理,反而是FC更好,简洁清楚。因为你有清晰的外部数据和输出要求,不需要背景数据块,就没有必要一定要用FB了。