PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 74|回复: 0

[CodeSys] 枕式包装机——电子凸轮应用

[复制链接]
发表于 2024-9-3 21:10:20 | 显示全部楼层 |阅读模式
在国内包装行业中,制造业数字化转型已经成为趋势,自动化成为制造业提升效率和竞争力的关键,本次设计了基于电子凸轮的枕式包装机控制系统,以提高生产效率和产品竞争力。(程序在最后源码 需要原程序的加微信私聊免费分享)

针对传统枕式包装机采用机械凸轮导致的适用性差、容易磨损、维护不方便,提出了采用电子凸轮的枕式包装机控制系统设计,本设计选择XDH-30A16作为核心控制元件,采用TG765S-XT作为上位机来进行人机交互;通过E5CWL-R1TC温度控制器来控制横封和纵封的温度;使用LX-101色标传感器来检测色标的位置;采用DS5C1伺服驱动器来控制伺服电机的转速并读取伺服电机当前位置;由PLC使用网线连接伺服驱动器通过Ethercat总线协议进行通讯。在PLC中通过编程实现电子凸轮飞剪功能,并设计梯形图和C语言实现枕式包装机控制系统各个功能的需求。一、主程序流程设计当系统上电后,各伺服电机轴使能,系统开始调用初始化子程序,初始化完成后,可以在触摸屏上设置系统参数来确定生产长度、生产速度和生产模式等参数,系统参数设置完成后,按下启动按钮,若当前生产模式为定标模式,则调用色标检测子程序,包装膜上有色标,在包装膜输送过程中每经过一个色标就用色标传感器检测一次,同时锁存一个位置,然后调用电子凸轮子程序,切刀轴根据锁存的位置进行切割,以保证每次切割都在色标上,若当前生产模式为定长模式,则会循环调用电子凸轮子程序,切刀轴每次切割的间距为设置的生产长度,按下停止按钮后系统停止运行,生产结束,主流程图如图所示。


二、色标检测子流程按下启动按钮,送膜轴与送料轴开始运行,此时色标传感器开始检测色标,每次检测到色标后,程序中都会将送膜轴的当前位置锁存到一个地址中,送膜轴的当前位置加上色标检测点与切刀轴的距离,就能判断出切刀轴何时切割能准确的切X色标上,色标检测流程图。


三、电子凸轮写点子流程首先在触摸屏设置系统参数,然后程序中的C语言会根据算法自动计算出电子凸轮各个关键点的位置关系,等待伺服电机停止后,在触摸屏上按下凸轮写点按钮后,程序中通过CAMWR指令来更改电子凸轮的关键点,如果没有完全写入触摸屏会弹出报警界面,需要重新按下按钮再次写入,直到没有报警界面弹出,证明完全写入,写入关键点后,系统会根据关键点位置生成电子凸轮曲线,如图所示。


四、电子凸轮飞剪关键点C语言算法(自定义凸轮)
从轴要完好的切断包装膜,需要与主轴在相同速度下进行切割,在程序中需要先计算出主轴和从轴的同步距离,然后根据同步距离和从轴的周长来判断切刀轴同步区开始的点位和同步区结束的点位,根据料长来计算出主轴的关键点位置,如果料长过长,从轴切割完成后有一个等待区,所以编号为0的电子凸轮曲线有4个关键点,如果料长短,则从轴切割完成后不需要等待,所以编号为1的电子凸轮曲线有3个关键点。
具体算法如下:

#define DFD *(FP64*)&D
#define DFHD *(FP64*)&HD
#define MasterPos1 DFHD[502]
#define SlaverPos1 DFHD[506]
#define MasterPos2 DFHD[602]
#define SlaverPos2 DFHD[606]
#define MasterPos3 DFHD[702]
#define SlaverPos3 DFHD[706]
#define MasterPos4 DFHD[902]
#define SlaverPos4 DFHD[906]
const int circumference = 314.0;
#define Synchronizationdistance DFHD[800]
#define Keypoints1 DFHD[804]
#define Keypoints2 DFHD[808]
#define Keypoints3 DFHD[812]
#define Keypoints4 DFHD[816]
#define Keypoints5 DFHD[820]
#define Materiallength DFHD[824]
#define Synchronizeangles DFHD[828]
Synchronizationdistance = ( ( Synchronizeangles / 360 ) * ( circumference ) );
Keypoints1 = ( ( circumference / 2 ) - ( Synchronizationdistance / 2 ) );
Keypoints2 = ( ( circumference / 2 ) + ( Synchronizationdistance / 2 ) );
Keypoints3 = Materiallength / 2;
Keypoints4 = Keypoints1 * 2;
Keypoints5 = ( Keypoints4 + Synchronizationdistance );
if ( Materiallength > 568 )
{HD[100] = 0;
MasterPos1 = Keypoints4;
MasterPos2 = Keypoints5;
MasterPos3 =  MasterPos1 + MasterPos2;
MasterPos4 = Materiallength;
SlaverPos1 = Keypoints1;
SlaverPos2 = Keypoints2;
SlaverPos3 = circumference;
SlaverPos4 = circumference;
}
if ( Materiallength <= 568    )
{HD[100] = 1;
MasterPos1 = ( Keypoints3 - ( Synchronizationdistance / 2 ) );
MasterPos2 = ( Keypoints3 + ( Synchronizationdistance / 2 ) );
MasterPos3 = Materiallength;
SlaverPos1 = Keypoints1;
SlaverPos2 = Keypoints2;
SlaverPos3 = circumference;
}
五、简易触摸屏功能设计本系统的触摸屏设计通过三个指示灯可以显示三个伺服电机的运行状态,可以输入生产料长,切刀轴的同步角度,主轴的运行速度,同时可以显示生产包数,有一个启动按钮、停止按钮、急停按钮和电子凸轮写点按钮,还可以选择定标定长模式,按下启动按钮后送膜轴和送料轴开始启动运行,按下停止按钮后送膜轴和送料轴停止运行,按下急停按钮后整个系统停止,更改参数后按下电子凸轮写点按钮可以把更改后的参数写入PLC的电子凸轮曲线关键点中,如果没完全写入会有报警界面弹出,按下定标/定长模式可以切换当前生产模式,触摸屏中可以看到当前生产模式,生产模式默认为定标模式。


六、成果展示
启动设备后选择定标模式,设置生产料长为700mm,同步角度为60°,主轴速度为1500r/min,在信捷编程软件中使用示波器监控主轴与从轴的速度曲线。


更改生产料长为400,其他参数不变,监控下的速度曲线变化如图。


将生产模式上设置为定长模式,其他参数不变,监控下的速度曲线。



六、结论
本设计是枕式包装机控制系统。主要由PLC、伺服驱动器、伺服电机、温度控制器、色标传感器、切刀传感器、物料传感器、触摸屏组成,通过使用EPLAN制图软件,细致地绘制了硬件电路图,程序设计与优化则依托于XDPProV3.7.17b编程软件,程序中设计了主程序、电子凸轮曲线的绘制、飞剪关键点算法、探针锁存、凸轮写点等功能,使用信捷伺服驱动器调试软件对伺服电机进行伺服增益调整,并通过触摸屏界面进行人机交互,在触摸屏中可以设置系统参数、更改当前生产模式、同时监控电机当前运行状态。相较于传统枕式包装机此设计的机械故障率更低,自动化程度更高,减少了人工成本,并提高产能。 七、直接上干货程序





















void FUNC1 ( PINT16S W, PBIT B ){
#define SysRegAddr_D_HD_HM_FS_HSD_HSCD_SD_SFD_SM_M_HCD_HTD_T
#define DFD *(FP64*)&D                      //双精度D
#define DFHD *(FP64*)&HD                      //双精度HD
typedef struct    {        FP64    Vel;
//00,目标速度        FP64    Acc;
//04,目标加速度        FP64    Dec;
//08,目标减速度        FP64    Jerk;
//12,目标加加速度        INT16U  Continueusmode;
//16,持续更新        INT16U  Derection;
//17,方向        INT16U  Buffermode;
//18,缓存模式
} A_VELMOVE1;


typedef struct  {     INT HH;
charFFG[];
}ARR;



#define Axis1(n) ( (A_VELMOVE1*)&HD[400+n*20] )
Axis1 ( 0 )->Acc = Axis1 ( 0 )->Vel * 1;
Axis1 ( 0 )->Dec = Axis1 ( 0 )->Vel * 1;
Axis1 ( 0 )->Jerk = Axis1 ( 0 )->Vel * 1;

typedef struct    {        FP64    Vel;
//00,目标速度        FP64    Acc;
//04,目标加速度        FP64    Dec;
//08,目标减速度        FP64    Jerk;
//12,目标加加速度        INT16U  Continueusmode;
//16,持续更新        INT16U  Derection;
//17,方向        INT16U  Buffermode;
//18,缓存模式
} A_VELMOVE2;


#define Axis2(n) ( (A_VELMOVE2*)&HD[1000+n*20] )    Axis2 ( 0 )->Vel = Axis1 ( 0 )->Vel * 1;
Axis2 ( 0 )->Acc = Axis1 ( 0 )->Vel * 1;
Axis2 ( 0 )->Dec = Axis1 ( 0 )->Vel * 1;
Axis2 ( 0 )->Jerk = Axis1 ( 0 )->Vel * 1;

aar ARRF[] = {1,2,3,4,5,6,7,8,9};




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-17 04:10 , Processed in 0.048254 second(s), 27 queries .

快速回复 返回顶部 返回列表