亚洲+欧美+日韩+综合aⅴ,日本添下边视频全过程,四虎永久在线精品免费AV,肥白大屁股BBWBBWHD

銅馬實業(yè)[m.kklgs.com.cn]提供電力安裝、電力運維、電力設(shè)計、電力施工、元器件采購等全方位服務(wù)!
186 8073 6169

銅馬提供24小時優(yōu)質(zhì)電力咨詢服務(wù)

動態(tài)新聞 news
您現(xiàn)在的位置:首頁 > 動態(tài)新聞 > 電力百科 > 用PLC實現(xiàn)流量累加算法講解
重慶電力安裝公司

用PLC實現(xiàn)流量累加算法講解

發(fā)布時間:2019/06/19 電力百科 標(biāo)簽:PLC流量累加瀏覽次數(shù):4075

在使用s7-1200PLC編寫程序的時候,如果項目上需要用到流量累積功能,但是本款PLC并沒有自帶流量累積功能塊。這時,就需要我們組態(tài)工程師自己編寫一個具有流量累積功能程序,或者將該程序封裝為FB塊或者FC塊。本文以封裝FB塊為例。

第一步:在程序塊目錄下單擊添加新塊,彈出添加新塊對話框,選中FB函數(shù)塊,在名稱欄填上需要命名的名字,如:Totalizer,選擇編程需要用的編程語言,本文以SCL語言講解,F(xiàn)B塊的編號可以通過手動或自動生成,然后單擊確認(rèn),如下圖所示

第二步:打開新建功能塊,并建立臨時變量,如下圖所示

第三步:程序編寫,如下圖所示:

程序編寫完成后,進行編譯,編譯沒有錯誤時,在FC(FC2,FLOWACCUM)中調(diào)用該FB塊,最后在OB30中斷塊中調(diào)用該FB塊。

第四步:在FC中調(diào)用名字為“Totalizer”的FB塊,并對輸入輸出參數(shù)賦值,如下圖所示

再在OB30中調(diào)用功能塊,OB30中斷塊是循環(huán)中斷塊,循環(huán)時間為100ms,如下圖所示

雙擊循環(huán)中斷OB30中斷塊,在中斷塊中調(diào)用FC2(FLOWACCUM)功能塊,如下圖所示

程序解讀:

變量定義:

變量名:Reset,數(shù)據(jù)類型:Bool,作用:累積清零

變量名:Accum,數(shù)據(jù)類型:Real,作用:存儲累積值

變量名:Total,數(shù)據(jù)類型:Real,作用:存放累計值

變量名:Intervall,數(shù)據(jù)類型:TIME,作用:流量單位中的時間,如m3/h,則:變量為1h=3600s,變量單位:秒

變量名:Intervall_DInt,數(shù)據(jù)類型:Dint,作用:存儲Intervall轉(zhuǎn)換為Dint數(shù)據(jù)類型后的值

變量名:Intervall_Real,數(shù)據(jù)類型:Real,作用:存儲Intervall_DInt轉(zhuǎn)換為Real數(shù)據(jù)類型后的值

變量名:Cycle,數(shù)據(jù)類型:TIME,作用:存儲程序循環(huán)時間,單位:秒

變量名:Cycle_DInt,數(shù)據(jù)類型:Dint,作用:存儲Cycle轉(zhuǎn)換為Dint數(shù)據(jù)類型后的值

變量名:Cycle_Real,數(shù)據(jù)類型:Real,作用:存儲Cycle_DInt轉(zhuǎn)換為Real數(shù)據(jù)類型后的值

程序代碼:

IF #Reset = true THEN //條件為真時

#Accum := 0.000000e000; //累積清零

#Total := 0.000000e000; //累積清零

ELSE

#Intervall_DInt := TIME_TO_DINT(#Intervall);//將時間型變量Intervall轉(zhuǎn)換為雙整型數(shù)據(jù),并存在變量中

#Intervall_Real := DINT_TO_REAL(#Intervall_DInt);//將雙整型數(shù)據(jù)轉(zhuǎn)換為實型數(shù)據(jù),并存在變量中

#Cycle_DInt := TIME_TO_DINT(#Cycle);//將時間型變量Cycle轉(zhuǎn)換為雙整型數(shù)據(jù),并存在變量中,本例為0.1s

#Cycle_Real := DINT_TO_REAL(#Cycle_DInt);//將雙整型數(shù)據(jù)轉(zhuǎn)換為實型數(shù)據(jù),并存在變量中

#Accum := ((#Value * #Cycle_Real) / #Intervall_Real) + #Accum;//累積計算

#Total := #Accum; //Kopiere Ergebnis nach #Total / Copy result to #Total.//累計值傳遞

END_IF;