基于信捷PLC的鱼丸机伺服轴控制主要应用于食品加工行业,特别是针对鱼丸等肉制品成型加工过程中的自动化控制。这类应用场合和意义主要体现在以下几个方面:
提高生产效率:通过精确的伺服轴控制,可以实现鱼丸机的高速、连续生产,从而大大提高生产效率。相比传统手工制作或半自动设备,能够显著增加产量。保证产品质量一致性:伺服控制系统能够确保每次操作的一致性和精度,对于鱼丸成型的重量、形状大小等关键参数进行精准控制,有助于保持产品品质的一致性,提升产品的市场竞争力。 简化操作流程:采用信捷PLC作为核心控制器,配合人机界面(HMI),可使复杂的操作变得简单直观,减少人工干预,降低对操作人员技能的要求。 灵活调整生产能力:根据市场需求的变化,可以通过编程快速调整生产参数,如改变鱼丸的尺寸、生产速度等,以适应不同的生产需求,具有较高的灵活性。 维护方便:信捷PLC系统通常具备良好的兼容性和扩展性,易于与其他设备集成,并且支持远程监控与诊断功能,便于设备的日常维护和故障排查。 节能减排:精确的伺服控制系统可以根据实际需要调整功率输出,避免不必要的能源消耗,有利于实现绿色制造目标。 综上所述,基于信捷PLC的伺服轴控制在鱼丸机上的应用不仅提高了生产效率和产品质量,还为食品加工企业带来了便捷的操作体验和经济利益,同时也有助于推动行业的技术进步和发展。 一、部分程序 二、自定义凸轮C函数封装(一) void FUNC1(PINT16S W,PBIT B) { #define SysRegAddr_HD_D_HM_M
#define DD *(INT32S*)&D #define FPD *(FP32*)&D #define FDD *(FP64*)&D
#define DHD *(INT32S*)&HD #define FHD *(FP32*)&HD #define FPHD *(FP64*)&HD int a, b, c, d, i, o, p, k; int A, F, C, E; /***************K1轴数据触摸屏转化************/ for ( A = 1; A <= 21; A++ ) { if ( FHD[1012 + 10 * ( A - 1 )] == 360 ) { HD[1000] = A; } } D[1300] = HD[1000];//K1轴凸轮表段数 触摸屏 for ( a = 1; a <= 21; a++ ) { FDD[1300 + 12] = 0; FDD[1300 + 16 ] = 0; if ( FHD[1000 + 14 + 10 * ( HD[1000] - 1 )] != 360.0 ) { if ( a != HD[1000] ) { FDD[1300 + 16 + 24 * ( a )] = ( FHD[1000 + 14 + 10 * ( a )] - DHD[4004] ) * ( ( FP32 ) DHD[3200] / 100 ); //从轴位置 触摸屏来源 } else { FDD[1300 + 16 + 24 * ( HD[1000] - 1 )] = 0; } } else { FDD[1300 + 16 + 24 * ( a )] = ( FHD[1000 + 14 + 10 * ( a )] - DHD[4004] ) * ( ( FP32 ) DHD[3200] / 100 ); } FDD[1300 + 12 + 24 * ( a )] = FHD[1000 + 12 + 10 * ( a )];//主轴位置 触摸屏来源
FDD[1300 + 20 + 24 * ( a - 1 )] = FHD[1000 + 16 + 10 * ( a - 1 )];//参考速度 触摸屏来源 FDD[1300 + 24 + 24 * ( a - 1 )] = FHD[1000 + 18 + 10 * ( a - 1 )]; //参考加速度 触摸屏来源 D[1300 + 28 + 24 * ( a - 1 )] = 4;//轨迹类型 //触摸屏来源 }
/***********K1轴凸轮表生成指令数据处理*******************/ HD[10500] = D[1300];//K1轴凸轮表段数 HD[10502] = 1;//下一周期生效 for ( i = 1; i <= 21; i++ ) { HD[10500 + 8 + 24 * ( i - 1 )] = i - 1;//关键点序号 0开始 FPHD[10500 + 12 + 24 * ( i - 1 )] = FDD[1300 + 12 + 24 * ( i - 1 )];//主轴位置 FPHD[10500 + 16 + 24 * ( i - 1 )] = FDD[1300 + 16 + 24 * ( i - 1 )];//从轴位置 FPHD[10500 + 20 + 24 * ( i - 1 )] = FDD[1300 + 20 + 24 * ( i - 1 )];//参考速度 FPHD[10500 + 24 + 24 * ( i - 1 )] = FDD[1300 + 24 + 24 * ( i - 1 )];//参考加速度 HD[10500 + 28 + 24 * ( i - 1 )] = D[1300 + 28 + 24 * ( i - 1 )];//轨迹类型 }
/***************K2轴数据触摸屏转化************/ for ( F = 1; F <= 21; F++ ) { if ( FHD[1612 + 10 * ( F - 1 )] == 360 ) { HD[1600] = F; } } D[1900] = HD[1600];//K2轴凸轮表段数 触摸屏 for ( b = 1; b <= 21; b++ ) { FDD[1900 + 12 ] = 0; FDD[1900 + 16 ] = 0; if ( FHD[1600 + 14 + 10 * ( HD[1600] - 1 )] != 360.0 ) { if ( b != HD[1600] ) { FDD[1900 + 16 + 24 * ( b )] = ( FHD[1600 + 14 + 10 * ( b )] - DHD[4104] ) * ( ( FP32 ) DHD[3202] / 100 ); //从轴位置 触摸屏来源 } else { FDD[1900 + 16 + 24 * ( HD[1600] - 1 )] = 0; } } else { FDD[1900 + 16 + 24 * ( b )] = ( FHD[1600 + 14 + 10 * ( b )] - DHD[4104] ) * ( FP32 ) ( ( FP32 ) DHD[3202] / 100 ); } FDD[1900 + 12 + 24 * ( b )] = FHD[1600 + 12 + 10 * ( b )];//主轴位置 触摸屏来源
FDD[1900 + 20 + 24 * ( b - 1 )] = FHD[1600 + 16 + 10 * ( b - 1 )];//参考速度 触摸屏来源 FDD[1900 + 24 + 24 * ( b - 1 )] = FHD[1600 + 18 + 10 * ( b - 1 )]; //参考加速度 触摸屏来源 D[1900 + 28 + 24 * ( b - 1 )] = 4;//轨迹类型 //触摸屏来源 }
/***********K2轴凸轮表生成指令数据处理*******************/ HD[11100] = D[1900];//K1轴凸轮表段数 HD[11102] = 1;//下一周期生效 for ( o = 1; o <= 21; o++ ) { HD[11100 + 8 + 24 * ( o - 1 )] = o - 1;//关键点序号 0开始 FPHD[11100 + 12 + 24 * ( o - 1 )] = FDD[1900 + 12 + 24 * ( o - 1 )];//主轴位置 FPHD[11100 + 16 + 24 * ( o - 1 )] = FDD[1900 + 16 + 24 * ( o - 1 )];//从轴位置 FPHD[11100 + 20 + 24 * ( o - 1 )] = FDD[1900 + 20 + 24 * ( o - 1 )];//参考速度 FPHD[11100 + 24 + 24 * ( o - 1 )] = FDD[1900 + 24 + 24 * ( o - 1 )];//参考加速度 HD[11100 + 28 + 24 * ( o - 1 )] = D[1900 + 28 + 24 * ( o - 1 )];//轨迹类型 } /***************K3轴数据触摸屏转化************/ for ( C = 1; C <= 21; C++ ) { if ( FHD[2212 + 10 * ( C - 1 )] == 360 ) { HD[2200] = C; } } D[2500] = HD[2200];//K3轴凸轮表段数 触摸屏 for ( c = 1; c <= 21; c++ ) { FDD[2500 + 12 ] = 0;//主轴位置 触摸屏来源 FDD[2500 + 16 ] = 0; if ( FHD[2200 + 14 + 10 * ( HD[2200] - 1 )] != 360.0 ) { if ( c != HD[2200] ) { FDD[2500 + 16 + 24 * ( c )] = ( FHD[2200 + 14 + 10 * ( c )] - DHD[4204] ) * ( ( FP32 ) DHD[3204] / 100 ); //从轴位置 触摸屏来源 } else { FDD[2500 + 16 + 24 * ( HD[2200] - 1 )] = 0; } } else { FDD[2500 + 16 + 24 * ( c )] = ( FHD[2200 + 14 + 10 * ( c )] - DHD[4204] ) * ( ( FP32 ) DHD[3204] / 100 ); } FDD[2500 + 12 + 24 * ( c )] = FHD[2200 + 12 + 10 * ( c )]; //主轴位置 触摸屏来源
FDD[2500 + 20 + 24 * ( c - 1 )] = FHD[2200 + 16 + 10 * ( c - 1 )]; //参考速度 触摸屏来源 FDD[2500 + 24 + 24 * ( c - 1 )] = FHD[2200 + 18 + 10 * ( c - 1 )]; //参考加速度 触摸屏来源 D[2500 + 28 + 24 * ( c - 1 )] = 4;//轨迹类型 //触摸屏来源 }
/***********K3轴凸轮表生成指令数据处理*******************/ HD[11700] = D[2500];//K3轴凸轮表段数 HD[11702] = 1;//下一周期生效 for ( p = 1; p <= 21; p++ ) { HD[11700 + 8 + 24 * ( p - 1 )] = p - 1;//关键点序号 0开始 FPHD[11700 + 12 + 24 * ( p - 1 )] = FDD[2500 + 12 + 24 * ( p - 1 )];//主轴位置 FPHD[11700 + 16 + 24 * ( p - 1 )] = FDD[2500 + 16 + 24 * ( p - 1 )];//从轴位置 FPHD[11700 + 20 + 24 * ( p - 1 )] = FDD[2500 + 20 + 24 * ( p - 1 )];//参考速度 FPHD[11700 + 24 + 24 * ( p - 1 )] = FDD[2500 + 24 + 24 * ( p - 1 )];//参考加速度 HD[11700 + 28 + 24 * ( p - 1 )] = D[2500 + 28 + 24 * ( p - 1 )];//轨迹类型 } /***************K4轴数据触摸屏转化************/ for ( E = 1; E <= 21; E++ ) { if ( FHD[2812 + 10 * ( E - 1 )] == 360 ) { HD[2800] = E; } } D[3100] = HD[2800];//K4轴凸轮表段数 触摸屏 for ( d = 1; d <= 21; d++ ) { FDD[3100 + 12] = 0; FDD[3100 + 16] = 0; if ( FHD[2800 + 14 + 10 * ( HD[2800] - 1 )] != 360.0 ) { if ( d != HD[2800] ) { FDD[3100 + 16 + 24 * ( d )] = ( FHD[2800 + 14 + 10 * ( d )] - DHD[4304] ) * ( ( FP32 ) DHD[3206] / 100 ); //从轴位置 触摸屏来源 } else { FDD[3100 + 16 + 24 * ( HD[2800] - 1 )] = 0; } } else { FDD[3100 + 16 + 24 * ( d )] = ( FHD[2800 + 14 + 10 * ( d )] - DHD[4304] ) * ( ( FP32 ) DHD[3206] / 100 ); } FDD[3100 + 12 + 24 * ( d )] = FHD[2800 + 12 + 10 * ( d )];//主轴位置 触摸屏来源
FDD[3100 + 20 + 24 * ( d - 1 )] = FHD[2800 + 16 + 10 * ( d - 1 )]; //参考速度 触摸屏来源 FDD[3100 + 24 + 24 * ( d - 1 )] = FHD[2800 + 18 + 10 * ( d - 1 )]; //参考加速度 触摸屏来源 D[3100 + 28 + 24 * ( d - 1 )] = 4;//轨迹类型 //触摸屏来源 } /***********K4轴凸轮表生成指令数据处理*******************/ HD[12300] = D[3100];//K4轴凸轮表段数 HD[12302] = 1;//下一周期生效 for ( k = 1; k <= 21; k++ ) { HD[12300 + 8 + 24 * ( k - 1 )] = k - 1;//关键点序号 0开始 FPHD[12300 + 12 + 24 * ( k - 1 )] = FDD[3100 + 12 + 24 * ( k - 1 )];//主轴位置 FPHD[12300 + 16 + 24 * ( k - 1 )] = FDD[3100 + 16 + 24 * ( k - 1 )];//从轴位置 FPHD[12300 + 20 + 24 * ( k - 1 )] = FDD[3100 + 20 + 24 * ( k - 1 )];//参考速度 FPHD[12300 + 24 + 24 * ( k - 1 )] = FDD[3100 + 24 + 24 * ( k - 1 )];//参考加速度 HD[12300 + 28 + 24 * ( k - 1 )] = 4;//轨迹类型 } /**********主轴速度**************/
DHD[15002] = DHD[3572] * 3;//主轴速度
/************轴2速度**************/
if(D[17000] < 100) { DHD[3226] = DHD[3230]; DHD[3224] = DHD[3228]; DD[20100] = DHD[15002] * ( ( FP32 ) HD[20100] / 100 ) * 3; } if(D[17000] >= 100) { DHD[3226] = DHD[3234]; DHD[3224] = DHD[3232]; DD[20100] = DHD[15002] * ( ( FP32 ) HD[20100] / 100 ) * 3; } /*****第一段位置偏移******/ FDD[800] = DHD[4004];//K1 FDD[830] = DHD[4104];//K2 FDD[860] = DHD[4204];//K3 FDD[890] = DHD[4304];//K4 FDD[804] = 360;//速度 FDD[834] = 360; FDD[864] = 360; FDD[894] = 360; FDD[808] = 3600;//加速度 FDD[812] = FDD[808];//减速度 FDD[816] = FDD[808] * 10;//加加速度 FDD[838] = 3600;//加速度 FDD[842] = FDD[838];//减速度 FDD[846] = FDD[838] * 10;//加加速度
FDD[898] = 3600;//加速度 FDD[902] = FDD[898];//减速度 FDD[906] = FDD[898] * 10;//加加速度
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |