基于高级语言的精确位置控制在塑料机械行业中的应用
这些运动机构的位置准确性对于机器的整体性能和制品精度都有较大影响,比如,注塑机开模位置的准确度,有利于机械手进入取出成品,注射终的位置也会影响到注射量和成品的重复精度。
为了提高位置精度,比较有效的做法是提高执行机构的响应和精确度,使用高精度的比例阀或伺服阀。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所有,未经许可不得转载。