基于高級語言的精確位置控制在塑料機械行業中的應用
這些運動機構的位置準確性對于機器的整體性能和制品精度都有較大影響,比如,注塑機開模位置的準確度,有利于機械手進入取出成品,注射終的位置也會影響到注射量和成品的重復精度。
為了提高位置精度,比較有效的做法是提高執行機構的響應和精確度,使用高精度的比例閥或伺服閥。MOOG,REXROTH,意大利的ATOS,都有相應的液壓驅動產品。
然而,作為機器的中央控制單元 – 塑料機械的控制系統,軟件內的傳統做法是:檢測電子尺的位置反饋,判斷動作處于第幾個階段,決定輸出相應的流量和壓力,或者是否要結束動作。
這種做法的缺點是,比如,控制系統檢測到模板位置已經達到了設定的開模終的位置,然后流量和壓力才開始按照設定斜坡減速,再加上閥的響應延時,等到模板停穩之后,實際位置已經遠遠超過了設定值。
圖1是普通注塑機控制系統控制開模位置的效果示意圖,可以看到,就算使用高響應比例方向閥,過沖仍不可避免,而當執行機構的響應特性較差時,情況就更加糟糕。
GEFRAN(杰佛倫)是來自意大利的傳感器和自動化領域的先導者,有著三十多年的塑料機械行業經驗。對于這樣的控制場合,GEFRAN控制系統采用面向對象的高級語言編程,軟件內部集成了豐富的功能庫,這些功能庫,能分析運動過程的速度,斜坡,和點到點的位置,做出特殊算法處理。
圖 2
以圖2 曲線為例,V1,V2,V3為三段恒定速度,Q1,Q2為兩點位置值,要實現這樣的點到點位置曲線,必須要考慮中間的加減速過程。圖例中為:先實現一段上升斜坡,然后再實現兩段下降斜坡。對于塑料機械來說,上升斜坡采用基于時間的類型就能滿足要求:(速度變化△V) * 程序運行周期時間T_PLC / 加速時間T = 每隔一個程序運行周期需要增加的速度輸出變化。這樣的基于時間的加速斜坡算法很輕易就能實現,而對于下降斜坡,要準確的停在Q1位置,必須提前一定位置就進行減速,這個提前位置系數,取決于執行機構的響應速度,執行機構響應越快,這個值就可以設得越小,否則必須增大提前位置系數,從而延長運動過程的執行時間。
程序實現這樣的減速過程,至少有三種不同的算法可能性,讓我們分析各自優劣性。
第一種,基于時間
if (STOP_POSITION[i] == TIME_BASED){
if( Realpos > startPos) {
if (StartDecreaseOut[i] > TimeRampValue [i]) {
StartDecreaseOut [i] = StartDecreaseOut [i] – TimeRampValue[i];
}else{
StartDecreaseOut [i] = 0;
}
OutPutTemp = StartDecreaseOut [i];
}else{
StartDecreaseOut [i] = Real_Output;
}
return(OutPutTemp);
}
這種算法和加速斜坡類似,但存在一個致命缺點:由于起始下降的速度未定,就算機器出廠前設好了參數,最終用戶更換模具,或者改變開模速度曲線,都需要重新尋找最佳的斜坡起始點,因此,不能拿來用做控制。
第二種,基于位置斜坡

如圖所示,一旦提前點值確定,基于位置的斜率就可以確定下來了,因此不管開始準備下降時流量設定是多少,斜率總是一定的,而真正開始執行斜坡的位置,卻是不一定的,跟流量有關系,斜率確定如下:
if (STOP_POSITION == POSITION_RAMP_BASED){
Position_Ramp = AdvancePoint * Real_Output / Maxout;
If (Realpos > startPos) {
OutTemp = Maxoutabs * (EndPos - RealPos) / Position_Ramp;
if (Real_Output <= OutTemp) OutPutTemp = Real_Output;
}
return(OutPutTemp);
}
注釋(
STOP_POSITION:斜坡方式選項
POSITION_RAMP_BASED:基于位置斜坡方式
AdvancePoint:提前開始降速的位置
Position_Ramp:斜坡比例
Realpos :電子尺的當前實際位置
startPos:開始執行斜坡降速的電子尺位置
OutTemp:中間變量,流量
Real_Output:實際輸出流量
)
第三種,基于位置斜坡和數組陣列排點法
第三種算法是在第二種的基礎上加以改進和優化
在第二種控制方法中沒有解決開始執行斜坡的位置確定問題,這可以借助數組陣列排點法解決。比如預先定義一個32點的數組,表內的數值決定了最終運動曲線的形狀,如果我們把每一個點在坐標軸上列出來,就可以很清晰的看到它是一條線形的直線,上凸弧線,下凹弧線,或者是S型的曲線。比如16位的輸出最大點值32767,可以將其劃分成32段,
EXTERN int TAB_POS [33]
= { 0, 3913, 6330, 8242, 9882, 11331, 12651, 13875, 15012, 16076, 17092,
18060, 18981, 19869, 20717, 21541, 22341, 23110, 23862, 24598, 25310, 25998,
26679, 27343, 27991, 28631, 29247, 29863, 30463, 31056, 31632, 32200, 32767
}
程序內可以用簡單的FOR循環語句,實時獲取預先定義好的斜坡曲線形狀,計算分段位置值,然后根據實際位置值,修正速度輸出。
if (STOP_POSITION == POSITION_RAMP_ARRAY__BASED){
For (int j = 0; j <= 32; j++) {
TableTemp[j] = TAB_POS[j];
}
DeltaStop = EndPos – RealPos;
Temp1 = AdvancePoint / 32;
if (DeltaStop > AdvancePoint) {
stepg = 31;
restg = Temp1;
} else {
stepg = DeltaStop * 32 / AdvancePoint;
restg = AdvancePoint / 32 * stepg;
restg = DeltaStop - restg;
}
Temp2 = TableTemp [stepg+1] - TableTemp [stepg];
OutPutTemp = restg * Temp2 / Temp1;
OutPutTemp = OutPutTemp + TableTemp [stepg];
return(OutPutTemp);
}
注釋(
STOP_POSITION:斜坡方式選項
POSITION_RAMP_ARRAY__BASED:基于數組陣列排點的位置斜坡方式
AdvancePoint:提前開始降速的位置
TableTemp:獲取預定義數組的本地變量
TAB_POS:預先定義好的數組陣列
Temp1:中間變量,將提前位置按陣列數等分
Temp2:中間變量,將位置值映射成流量值
RealPos:電子尺的當前實際位置
EndPos:最終開模位置
DeltaStop:剩余需要走完多少位置值
stepg:當前采樣點模板位置處于第幾步陣列
restg:剩余采樣點共有幾步陣列
)
另外需要考慮的一點是,當執行程序的控制器的循環周期時間過長,陣列細分過少,或閥門開度不準確等原因,造成速度下降至零時停止在了位置設定值之前,此時需要有一個最小速度值,保證在這種情況下,能夠繼續前進至目標位置。

圖3是應用了這種位置控制算法后的注塑機開模效果圖,控制系統的硬件載體是GEFRAN公司的VEDO控制器和GiLogik2分布式遠程IO,憑借GDnet確定性實時以太網,輸入輸出信號能在100us內完成一次刷新,從而可以保證PLC程序周期在1ms內完成一個循環,配合以上所述的位置算法和高精確度的執行機構,可以控制注塑機開合模,托模,和注射單元的位置誤差在0.1mm范圍之內。
文章版權歸西部工控xbgk所有,未經許可不得轉載。