下面是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_VARBEGIN    //數據處理    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
 |