西門子博途編程-模擬量斷線超量程處理(中值法)


溫度PID控制時, 有多個溫度測量點, 但最終只有一個溫度作為反饋值參與PID控制, 我們有時會采用平均值法, 計算所有溫度的平均值來作為PID的反饋值. 但在某一路溫度探頭斷線的情況下, 溫度值為零, 這時平均值就會小很多.

像這種情況下中值法比較有效.  原理如下: 對於一組溫度, 模擬量轉換為數字量后, 對溫度值進行排序, 取中間的那個值作為PID反饋值. 如果是偶數, 取中間兩個值除以2后作為反饋值.

排序采用西門子LGF的庫中的希爾排序, 但它是FB的, 使用上還的帶個DB塊, 現修改為FC, 功能上做了簡化. 程序如下:

OB

“LGF_ShellSortReal”函數是個排序函數, 對采集的溫度”data”.sourceArray 數組進行排序, 排序后的輸出為 “data”.destArray. 然后對”data”.destArray 采集最中間的一個值, 這樣可以刪除調最小和最大的值, 最后的結果輸出到value_1 中.

 

 

FC_Interface_Shell

FC_ShellSortReal

排序的數組長度最大不能操作1000, 如果有其它需求, 可以修改temp變量MAX_ARRAY_ELEMENTS.

 

FC_arrayMiddle

這個函數就是取中值函數.

 

DB

sourceArray 是亂序的溫度, 排序后的溫度間 destArray.

其實在現實中, 大范圍的加熱必然導致溫度不均勻, 可以采用分段加熱. 這時中值法就不是很有效了. 因為采用分段加熱后, 每段就1-2組溫度采集點, 像這種情況, 需要判斷探頭是否斷線, 如果斷線就切換另外一組, 可以中上篇博客中的error信號來判斷.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM