by海綿
級(jí)別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 93 個(gè)
工控威望: 2564 點(diǎn)
下載積分: 3537 分
在線時(shí)間: 148(小時(shí))
注冊(cè)時(shí)間: 2021-12-03
最后登錄: 2024-12-22
查看by海綿的 主題 / 回貼
樓主  發(fā)表于: 2023-09-02 11:37
下面是SCL寫(xiě)的模擬量采集,用來(lái)調(diào)用。放在了FC塊,跑起來(lái)也沒(méi)什么不一樣,放在FB塊 就是多一個(gè)DB塊,里面也就是 當(dāng)前的傳感器數(shù)據(jù) 也沒(méi)什么重要的東西,所以有了疑問(wèn),是放在那個(gè)塊比較好呢???

下面SCL使用方法,保存為txt文件,修改文件后綴為scl ,博圖導(dǎo)入外部源文件 就可以生成fc塊了

復(fù)制代碼
  1. FUNCTION "模擬量數(shù)據(jù)處理" : 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.       傳感器實(shí)際值 : Real;
  14.       傳感器修正后結(jié)果 : Real;
  15.       傳感器故障 : Bool;
  16.    END_VAR
  17.    VAR_TEMP
  18.       i : Int;
  19.       j : Real;
  20.       k : Int;
  21.    END_VAR
  22. BEGIN
  23.     //數(shù)據(jù)處理
  24.     IF #模擬量輸入 <= #模擬量量程下限 THEN    //判斷輸入值是否低于模擬量設(shè)定下限值
  25.         #傳感器實(shí)際值 := #傳感器量程下限;     //輸出直接為浮點(diǎn)數(shù)設(shè)定值下限
  26.     END_IF;
  27.     IF #模擬量輸入 >= #模擬量量程上限 THEN     //判斷輸入值是否高于模擬量設(shè)定上限值
  28.         #傳感器實(shí)際值 := #傳感器量程上限;      //輸出直接為浮點(diǎn)數(shù)設(shè)定值上限
  29.     END_IF;
  30.     IF #模擬量輸入 > #模擬量量程下限 AND #模擬量輸入 < #模擬量量程上限 THEN
  31.         //判斷輸入值是否在設(shè)定值限值內(nèi)
  32.         #i := #模擬量輸入 - #模擬量量程下限;    //實(shí)時(shí)值與模擬量下限值的差
  33.         #k := #模擬量量程上限 - #模擬量量程下限; //模擬量設(shè)定值的區(qū)間
  34.         #j := #傳感器量程上限 - #傳感器量程下限; //浮點(diǎn)數(shù)設(shè)定值的區(qū)間
  35.         #傳感器實(shí)際值 := #j * #i / #k + #傳感器量程下限;
  36.     END_IF;
  37.     //傳感器數(shù)值修正
  38.     #傳感器修正后結(jié)果 := #傳感器實(shí)際值 + #傳感器修正值; //對(duì)實(shí)際的的傳感器數(shù)值進(jìn)行結(jié)果修正
  39.     //傳感器故障檢測(cè)
  40.     IF #模擬量輸入 < #模擬量量程下限 THEN    //判斷輸入值是否低于模擬量設(shè)定下限值
  41.         #傳感器故障 := true;                  //輸出傳感器故障
  42.     END_IF;
  43.     IF #模擬量輸入 > #模擬量量程上限 THEN     //判斷輸入值是否高于模擬量設(shè)定上限值
  44.         #傳感器故障 := true;                   //輸出傳感器故障
  45.     END_IF;
  46.     IF #傳感器實(shí)際值 < #傳感器量程下限 THEN    //判斷結(jié)果是否低于傳感器量程設(shè)定下限值
  47.         #傳感器故障 := true;                  //輸出傳感器故障
  48.     END_IF;
  49.     IF #傳感器實(shí)際值 > #傳感器量程上限 THEN     //判斷結(jié)果是否高于傳感器量程設(shè)定上限值
  50.         #傳感器故障 := true;                   //輸出傳感器故障
  51.     END_IF;
  52. END_FUNCTION

sunzengli
級(jí)別: 論壇先鋒
精華主題: 0
發(fā)帖數(shù)量: 699 個(gè)
工控威望: 1080 點(diǎn)
下載積分: 1582 分
在線時(shí)間: 223(小時(shí))
注冊(cè)時(shí)間: 2021-07-09
最后登錄: 2024-12-20
查看sunzengli的 主題 / 回貼
1樓  發(fā)表于: 2023-09-02 12:56
沒(méi)有問(wèn)題,實(shí)際上FB能做的FC都能做,反之一樣。
FB就是自帶背景的FC,在某些情況下很好用,但是如果你是先把數(shù)據(jù)處理的很合理,道理是一樣的。
像你這種簡(jiǎn)單的輸入輸出處理,反而是FC更好,簡(jiǎn)潔清楚。因?yàn)槟阌星逦耐獠繑?shù)據(jù)和輸出要求,不需要背景數(shù)據(jù)塊,就沒(méi)有必要一定要用FB了。
hstec2002
級(jí)別: 論壇先鋒
精華主題: 0
發(fā)帖數(shù)量: 489 個(gè)
工控威望: 1892 點(diǎn)
下載積分: 8465 分
在線時(shí)間: 680(小時(shí))
注冊(cè)時(shí)間: 2021-05-05
最后登錄: 2024-12-20
查看hstec2002的 主題 / 回貼
2樓  發(fā)表于: 2023-09-02 14:13
能用FC絕對(duì)不用FB
QQ: 2845452345