欧姆龙自动化(中国)有限公司 FAE中心 王琦、陈志杰
1引言
直线饮料灌装机主要用于灌装各种各样的瓶装饮料,适合于大中型饮料生产厂家。直线饮料灌装机主要包括进瓶、抓瓶、灌装、拧盖、抓瓶、出瓶等几个步骤,在进瓶阶段,通过带有10个固定夹的皮带一次带入10个瓶,在第一个抓瓶阶段,10个抓手同时把10个瓶抓入输送链,在灌装阶段,2组10根罐装管分2次向10个瓶中罐液体,在拧盖阶段,一个伺服带动10个拧盖机构进行拧盖,在第二个抓瓶阶段,把装满的10个瓶从输送链中抓出,送上输出皮带,在出瓶阶段,输出皮带送出已罐瓶,直线饮料灌装机的系统框图如图1所示。
客户原先用传统的PLC开发过直线灌装机,各轴伺服通过运动控制模块进行控制。各轴的动作时序采用位置判断,然后分别以一定的速度和位置启动各个轴的方式来完成。在过去3年中卖出过5、6套设备,运行效果不好,发生异常停机的频率很高,而且没有暂停功能,每次停机都要全部重新寻原点,生产效率比较低。采用欧姆龙SYSMAC NJ系列新一代PLC进行改造之后,用电子凸轮功能来替代以往的普通运动指令,故障率低,并且很容易完成“暂停”功能。
2系统工作原理及控制需求
饮料灌装机主要包括三大部分:恒压储液罐、夹瓶及灌装头部分、变频调速传送带部分,系统控制功能结构如图2所示。主机的上部是恒压储液罐,里面有上限位和下限位液位传感器,液面低于下限位时恒压储液罐为空,饮料通过进液电磁阀流入恒压储液罐,液面达到上限位时进液电磁阀断电关闭,使液位保持稳定。
2系统工作原理及控制需求
饮料灌装机主要包括三大部分:恒压储液罐、夹瓶及灌装头部分、变频调速传送带部分,系统控制功能结构如图2所示。主机的上部是恒压储液罐,里面有上限位和下限位液位传感器,液面低于下限位时恒压储液罐为空,饮料通过进液电磁阀流入恒压储液罐,液面达到上限位时进液电磁阀断电关闭,使液位保持稳定。
恒压储液罐下面是夹瓶及装瓶头部分,共有20个灌装头。夹瓶装置由气压缸驱动下降,下降到位后,夹瓶装置由另一组气缸夹紧定位,下降及夹紧由行程开关控制位置。夹紧定位后,灌装头由第三组气缸驱动下降,到位后灌装头电磁阀打开,开始灌液,延时后电磁阀关闭,通过控制电磁阀的开启时间达到灌装容量控制。放瓶动作流程如图3所示。
图3 放瓶动作流程
传送带电动机由变频器控制,实现无级变速,达到系统经济运行的目的。电机启动1s后,进瓶气缸缩回、开始进瓶,3s后出瓶处气缸伸出挡住空料瓶。进瓶处设置光电开关检测进瓶个数,当达到相应数量后传送带电动机停止。灌装头下降到瓶口,由通过触摸屏输入的时间,使PLC控制灌装头的开启时间。灌装结束后,灌装头上升,夹瓶装置放松、上升。出瓶处气缸缩回,传送电动机又开始转动,1s后进瓶处气缸缩回,光电开关又开始检测进瓶个数。出瓶动作流程如图4所示。
图4 出瓶动作流程
在本项目中,需要研究的重点课题有以下几点:(1)电子凸轮代替时序控制;(2)暂停功能;(3)工位判断;(4)回零停止;(5)急停保护;(6)曲柄的线性处理;(7)凸轮表的变换。其中,暂停功能和曲柄的线性处理是客户以往旧设备未能实现的功能。
3系统解决方案
3.1方案配置(见表1)
3.2系统功能实现
(1)电子凸轮代替时序控制
以“进瓶水平”(MC_BottleInHorizontal)为例,主轴为虚轴,从轴为实轴。时序图如图5所示。
3系统解决方案
3.1方案配置(见表1)
3.2系统功能实现
(1)电子凸轮代替时序控制
以“进瓶水平”(MC_BottleInHorizontal)为例,主轴为虚轴,从轴为实轴。时序图如图5所示。
主轴以360为一个周期,进行循环速度控制。主轴、从轴都在零位。从轴开始的时候并不启动,而是在主轴位置到达285时开始启动,当主轴位置到达360时,从轴停止。在下一个周期,主轴到达120的时候,从轴开始返回(反转),主轴位置到达220的时候,从轴停止(回零位)。进瓶水平轴与主轴构成的电子凸轮表如图6所示。
从图6可以看到,主轴为0的时候,从轴也是0,而根据时序图的要求,从轴的“0”应该在主轴的“285”。显然这样的动作是不正确的。这样编制凸轮表的原因在于,NJ的电子凸轮表的起始点必须为两个“0”,即主轴、从轴都从0开始,如图7所示。
解决这个问题的办法是对编制好的凸轮表进行“偏移”,偏移的程序如图8所示。
通过MasterOffset将主轴向后偏移280,这时的动作时序和凸轮形状就与工艺要求相符了,但要注意的是,这时的从轴起始位置不为0,会造成起始速度“无穷大”,从而引发伺服报警。将MasterScaling设置为280,就可以将从轴的起始点推迟到“主轴280”的位置,当主轴启动时,从轴并不启动,而是等到主轴到达280位置时再启动,这样就可以实现客户的工艺要求了。
(2)暂停功能
这套系统相比以前用CS、CJ来做的系统而言,一个很重要的亮点就是可以很容易的实现“暂停功能”,具体程序如图9所示。
(2)暂停功能
这套系统相比以前用CS、CJ来做的系统而言,一个很重要的亮点就是可以很容易的实现“暂停功能”,具体程序如图9所示。
当需要暂停设备时,只需执行MC_Stop指令即可。当再次启动时,只需再次执行MC_Velocity指令,设备会从当前停止的位置继续运行。暂停的好处是,当操作人员需要暂时停止设备,做简单处理,后面又需要快速恢复生产状态时,不需要重新寻原点。对生产效率的提高帮助很大。
(3)工位判断
每排模板上应该夹住10个瓶子进行灌装、加盖、整盖、拧盖、判断缺盖等工序,但由于各种客观情况(风道等问题),并不能保证每次都夹满10个瓶子。当少于10个瓶子的时候,整排都不能进行任何操作,否则设备会产生严重故障(比如无瓶加盖会卡住模板)。解决这个问题的办法是,采用位移指令进行工位判断,具体程序如图11所示。
(3)工位判断
每排模板上应该夹住10个瓶子进行灌装、加盖、整盖、拧盖、判断缺盖等工序,但由于各种客观情况(风道等问题),并不能保证每次都夹满10个瓶子。当少于10个瓶子的时候,整排都不能进行任何操作,否则设备会产生严重故障(比如无瓶加盖会卡住模板)。解决这个问题的办法是,采用位移指令进行工位判断,具体程序如图11所示。
(4)回零停止
当按下停止按钮后,各轴的最终停止位置必须是自己的“原点”,这样,在下一次启动时,就不需要重新全体寻原点了(全体回零时间较长)。另外一方面,如果各轴都在原点的话,绝对不会出现“撞车”的现象,否则如果其中一根轴不在原点就停止动作,其它的轴在回零过程中很容易撞上它。回零停止的方法采用Cam_Out指令,程序如图12所示。
当按下停止按钮后,各轴的最终停止位置必须是自己的“原点”,这样,在下一次启动时,就不需要重新全体寻原点了(全体回零时间较长)。另外一方面,如果各轴都在原点的话,绝对不会出现“撞车”的现象,否则如果其中一根轴不在原点就停止动作,其它的轴在回零过程中很容易撞上它。回零停止的方法采用Cam_Out指令,程序如图12所示。
如图12程序所示,当需要停止主拖动轴时,必须要等待主拖动当前动作完成后。根据虚轴的位置判断,当虚轴处于90到140之间时,主拖动处于停止状态,这时执行MC_CamOut指令,就可以将这个从轴顺利脱出凸轮表。
在启动和停止过程中,必须特别注意一个问题,那就是回零停止和启动过程一样,必须要按照严格的顺序来执行。例如,停止时,“出瓶”早于“主拖动”,“主拖动”早于“进瓶”,而进瓶时刚好相反。这样才能保证在下次启动时,出瓶工位的瓶子刚好被抓出,而进瓶工位则是空的,刚好可以开始放瓶。如果不按照顺序启动,则会使进瓶工位“有瓶”状态下打开模板,导致瓶子掉落;或者出瓶工位“有瓶”,但不抓瓶,导致瓶子转到机器底下。这些都是不允许的。
(5)急停保护
对于“撞车”的保护,是整个系统设计中非常重要的一部分。如果所有轴都能够严格按照自己凸轮曲线进行运动,并且没有挂进凸轮的轴也能够正常动作的话,“撞车”原则上是不会发生的。但由于伺服故障、气缸故障等诸多因素的产生,会使得“撞车”发生的概率增加。
“撞车”的情况可以分为两大类,一类是“凸轮动作”内部碰撞,另一类是凸轮动作与非凸轮动作之间的碰撞。例如:进瓶抓瓶机构与进瓶皮带之间,由于进瓶抓瓶的原点位于进瓶皮带上方,下移放瓶时需要水平和垂直两根轴同时动作,才能绕过皮带。如果此时进瓶水平轴由于种种原因没有动作,只有垂直轴在动作,气爪将直接砸在皮带上,造成设备严重的损坏。这属于凸轮动作内部撞车。再例如:当拧盖机构进行拧盖时,拧盖爪抓在瓶子上,如果此时拖板提前开始动作,则会将瓶子拉坏,甚至将模板掀翻。这属于凸轮轴与非凸轮轴之间的碰撞。为避免这些问题的产生,编写了一系列程序,部分程序如图13所示。
在启动和停止过程中,必须特别注意一个问题,那就是回零停止和启动过程一样,必须要按照严格的顺序来执行。例如,停止时,“出瓶”早于“主拖动”,“主拖动”早于“进瓶”,而进瓶时刚好相反。这样才能保证在下次启动时,出瓶工位的瓶子刚好被抓出,而进瓶工位则是空的,刚好可以开始放瓶。如果不按照顺序启动,则会使进瓶工位“有瓶”状态下打开模板,导致瓶子掉落;或者出瓶工位“有瓶”,但不抓瓶,导致瓶子转到机器底下。这些都是不允许的。
(5)急停保护
对于“撞车”的保护,是整个系统设计中非常重要的一部分。如果所有轴都能够严格按照自己凸轮曲线进行运动,并且没有挂进凸轮的轴也能够正常动作的话,“撞车”原则上是不会发生的。但由于伺服故障、气缸故障等诸多因素的产生,会使得“撞车”发生的概率增加。
“撞车”的情况可以分为两大类,一类是“凸轮动作”内部碰撞,另一类是凸轮动作与非凸轮动作之间的碰撞。例如:进瓶抓瓶机构与进瓶皮带之间,由于进瓶抓瓶的原点位于进瓶皮带上方,下移放瓶时需要水平和垂直两根轴同时动作,才能绕过皮带。如果此时进瓶水平轴由于种种原因没有动作,只有垂直轴在动作,气爪将直接砸在皮带上,造成设备严重的损坏。这属于凸轮动作内部撞车。再例如:当拧盖机构进行拧盖时,拧盖爪抓在瓶子上,如果此时拖板提前开始动作,则会将瓶子拉坏,甚至将模板掀翻。这属于凸轮轴与非凸轮轴之间的碰撞。为避免这些问题的产生,编写了一系列程序,部分程序如图13所示。
图13所示两段程序是对进、出瓶模板的空间保护,当模板被气缸顶起时,模板绝对不能拖动,否则会被掀翻。这里依旧采取通过对主轴位置的判断,来判断从轴。当主轴位置处于320和360之间时,模板被气缸顶起,同时由模板开合轴将模板分开。如果此时气缸突然下降,模板将来不及合拢,而被掀翻。此时可通过MC_ImmediateStop指令完成急停操作。
(6)曲柄的线性处理
整套设备采用了多个曲柄机构,比如灌装、拧盖升降等等。根据曲柄机构的特性,当伺服匀速旋转时,曲柄机构的垂直速度并不是匀速的,并且垂直位置也不是线性变化的。而灌装机构需要一个相对稳定的速度(主要是防止液体飞溅),和一个线性的标定(可以通过对伺服位置的设定,直接标定灌装量)。解决速度基本恒定的方式如下:
IF 30>=MC_Fill1.Act.Pos OR (180>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>150) THEN
Fill1_Velocity_Out:=LREAL#1*灌装1速度HMI;
ELSIF (60>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>30) OR (150>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>120) THEN
Fill1_Velocity_Out:=LREAL#0.8*灌装1速度HMI;
ELSIF (80>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>60) OR (120>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>100) THEN
Fill1_Velocity_Out:=LREAL#0.5*灌装1速度HMI;
ELSIF 100>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>80 THEN
Fill1_Velocity_Out:=LREAL#0.3*灌装1速度HMI;
END_IF;
(6)曲柄的线性处理
整套设备采用了多个曲柄机构,比如灌装、拧盖升降等等。根据曲柄机构的特性,当伺服匀速旋转时,曲柄机构的垂直速度并不是匀速的,并且垂直位置也不是线性变化的。而灌装机构需要一个相对稳定的速度(主要是防止液体飞溅),和一个线性的标定(可以通过对伺服位置的设定,直接标定灌装量)。解决速度基本恒定的方式如下:
IF 30>=MC_Fill1.Act.Pos OR (180>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>150) THEN
Fill1_Velocity_Out:=LREAL#1*灌装1速度HMI;
ELSIF (60>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>30) OR (150>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>120) THEN
Fill1_Velocity_Out:=LREAL#0.8*灌装1速度HMI;
ELSIF (80>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>60) OR (120>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>100) THEN
Fill1_Velocity_Out:=LREAL#0.5*灌装1速度HMI;
ELSIF 100>=MC_Fill1.Act.Pos AND MC_Fill1.Act.Pos>80 THEN
Fill1_Velocity_Out:=LREAL#0.3*灌装1速度HMI;
END_IF;
用以上公式,可以在灌装伺服到达各个位置时,给予不同的速度,通过对角速度赋予“多段速”来实现垂直速度的基本恒定。再通过每10ms写入一次速度的方式,来实现速度的变换。解决位置可标定的方法如下:
纠偏角度转弧度:=DegToRad(REAL#15);
Fill1_Feed_rad:=ACOS(临时数字1);
Fill1_Feed:=RadToDeg(Fill1_Feed_rad)-REAL#15;
临时数字:=REAL#3.14*REAL#16*REAL#7.5;
临时数字1:=COS(纠偏角度转弧度)-HMI气缸1进给量/临时数字;
通过平面解析几何和三角函数运算,求得伺服角位置和曲柄垂直位置之间的线性关系。
最终实现,触摸屏上面可以直接设定以“毫升”为单位的灌装量值。
(7)凸轮表的变换
凸轮表编制好以后,每根轴都会按照自己的凸轮表数据进行重复运动。但是,如果更换了产品(主要是瓶子大小有变化),个别轴的动作就要发生变化。例如:把220mm高的瓶子换成了300mm,那么出瓶放瓶时,气爪距离传送带的高度就要增加,这就要求凸轮表可以通过程序进行变换,程序如下:
FOR IndexOutUp := UINT#10#0 TO UINT#10#360 DO
IF IndexOutUp<=UINT#10#70 THEN
Cam_BottleOutUp[IndexOutUp].Distance:= Cam_BottleOutUp00[IndexOutUp].Distance*2*BottleOutUpFeed1;
ELSIF IndexOutUp>UINT#10#70 and IndexOutUp<=UINT#10#85 THEN
Cam_BottleOutUp[IndexOutUp].Distance:= (Cam_BottleOutUp00[IndexOutUp].Distance-0.5)*2*(BottleOutUpFeed2 - BottleOutUpFeed1)+BottleOutUpFeed1;
ELSE
Cam_BottleOutUp[IndexOutUp].Distance:= Cam_BottleOutUp00[IndexOutUp].Distance * BottleOutUpFeed2;
END_IF;
END_FOR;
在上述程序中,Cam_BottleOutUp00[IndexOutUp].Distance是出瓶顶升凸轮表的点,IndexOutUp是FOR循环语句的循环变量,通过FOR循环语句,将凸轮表内的若干个点依次更改,再通过如下指令进行保存,这样,这根从轴就会按照新的凸轮表来进行运动了。
纠偏角度转弧度:=DegToRad(REAL#15);
Fill1_Feed_rad:=ACOS(临时数字1);
Fill1_Feed:=RadToDeg(Fill1_Feed_rad)-REAL#15;
临时数字:=REAL#3.14*REAL#16*REAL#7.5;
临时数字1:=COS(纠偏角度转弧度)-HMI气缸1进给量/临时数字;
通过平面解析几何和三角函数运算,求得伺服角位置和曲柄垂直位置之间的线性关系。
最终实现,触摸屏上面可以直接设定以“毫升”为单位的灌装量值。
(7)凸轮表的变换
凸轮表编制好以后,每根轴都会按照自己的凸轮表数据进行重复运动。但是,如果更换了产品(主要是瓶子大小有变化),个别轴的动作就要发生变化。例如:把220mm高的瓶子换成了300mm,那么出瓶放瓶时,气爪距离传送带的高度就要增加,这就要求凸轮表可以通过程序进行变换,程序如下:
FOR IndexOutUp := UINT#10#0 TO UINT#10#360 DO
IF IndexOutUp<=UINT#10#70 THEN
Cam_BottleOutUp[IndexOutUp].Distance:= Cam_BottleOutUp00[IndexOutUp].Distance*2*BottleOutUpFeed1;
ELSIF IndexOutUp>UINT#10#70 and IndexOutUp<=UINT#10#85 THEN
Cam_BottleOutUp[IndexOutUp].Distance:= (Cam_BottleOutUp00[IndexOutUp].Distance-0.5)*2*(BottleOutUpFeed2 - BottleOutUpFeed1)+BottleOutUpFeed1;
ELSE
Cam_BottleOutUp[IndexOutUp].Distance:= Cam_BottleOutUp00[IndexOutUp].Distance * BottleOutUpFeed2;
END_IF;
END_FOR;
在上述程序中,Cam_BottleOutUp00[IndexOutUp].Distance是出瓶顶升凸轮表的点,IndexOutUp是FOR循环语句的循环变量,通过FOR循环语句,将凸轮表内的若干个点依次更改,再通过如下指令进行保存,这样,这根从轴就会按照新的凸轮表来进行运动了。
4结束语
通过系统现场调试及客户的试生产,所有控制要求的解决方案都得以验证,满足客户的改造需求,并且效果良好。
通过系统现场调试及客户的试生产,所有控制要求的解决方案都得以验证,满足客户的改造需求,并且效果良好。
共0条 [查看全部] 网友评论