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