⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plc_gshd.cld

📁 华中机床的plc程序
💻 CLD
📖 第 1 页 / 共 5 页
字号:
		case 2:
					if((X[2]&R[102]&1)==1)
					 { Y[1]&=~2;       Y[1]|=1;   break;}
					 else break;
		case 0:
			if(spdl_dwell>0){spdl_dwell-=1;break;}
			//if(spdl_stat==0)
			Y[1]&=~3;
	}

//-------------------spindle control-------------------------

	if((P[25]==0)||(P[25]==1))	spdl_dangwei=0;	//set spindle stage
	else if(P[25]<5)
	{
		if		  ((X[P[26]]&P[27])==P[30])								spdl_dangwei=0;
		else if ((X[P[26]]&P[27])==P[31])								spdl_dangwei=1;
		else if(((X[P[26]]&P[27])==P[32])&&(P[25]>=3)) 	spdl_dangwei=2;
		else if(((X[P[26]]&P[27])==P[33])&&(P[25]>=4)) 	spdl_dangwei=3;
		else                            								spdl_dangwei=-1;
	}

	if((mode_sel==MODE_JOG)&&(Manual_GongSi==1)&&(Y[34]&4))
	{
		if(X[GongSi_L_switch1]&GongSi_L_switch2)			spdl_ctrl=2;
		if(X[GongSi_H_switch1]&(~R[100+GongSi_H_switch1])&GongSi_H_switch2)	spdl_ctrl=0;
	}

	if((mode_sel==MODE_HANDWHEEL)
	 &&(X[0+P[97]]==0)
	 &&((*ch_ctrl(0)&CH_ESTOP)==0)
	 &&((Y[34]&0x10)==0))
				handwheel(0,axis_sel,-handwheel_mul);
	else	handwheel(0,-1,0);

//protect the Dao Ku and Z Axis
	if((X[2]&0xc)!=4)
	{
		if((mod_M_code(0)!=6)&&(mod_M_code(0)!=41))		*sys_ext_alm()|= 0x8000;
		else                                          *sys_ext_alm()&=~0x8000;

		if((*axis_stat(2)&AX_COORD_SETUP)==0)
		{
			*axis_ctrl(2)|=AX_LOCK;
			auto_enable=0;
			if(spdl_ctrl&3)spdl_ctrl=0;
		}
		else
		{
			if((*F_l[23])<(-120000))
//			if(get_axis_pos(2)<(-140000))
			{
				*axis_ctrl(2)|=AX_LOCK;
				auto_enable=0;
				if(spdl_ctrl&3)spdl_ctrl=0;
			}
			else if(mod_M_code(0)!=6){
//				if(get_axis_pos(2)<(-10000))
				if((*F_l[23])<(-10000))
					auto_enable=0;
				if(spdl_ctrl&3)spdl_ctrl=0;
			}
		}
	}
	else         *sys_ext_alm()&=~0x8000;
	//xjc

	if((spdl_ctrl==4)||(spdl_ctrl==0)) out_dac(0);
	if((spdl_ctrl&3)==0) *ch_spdl_speed(0)=0;

	if((X[3]&(~R[103])&8)&&(Y[1]&8)&&(spdl_ctrl==4))
	{
		spdl_stat=0x84;
		dx_stat_dwell=132; //2 seconds
	}
	if((spdl_stat==0x84)&&(dx_stat_dwell>1))dx_stat_dwell--;
	if((spdl_stat==0x84)&&(dx_stat_dwell<=1))
	{
		spdl_stat=4;
		dx_stat_dwell=0;
		dx_dwell=0;
	}


	if((mod_M_code(0)!=40)&&(mod_M_code(0)!=6))
												 if(R[500]==0) Y[1]&=~0x10;
	if((mod_M_code(0)!=41)&&(mod_M_code(0)!=6))  Y[1]&=~0x20;

	if(R[500]!=0)
		 if((X[2]&0x4)==0x4)
				{Y[1]&=~0x10;R[500]=0;}

	if(R[150]!=0)                          //add
		 if((((X[3])&(~R[103]))&0x8)==0x8)
                                {R[152]=1;R[150]=0;dxwancheng=1;}
	if(R[152]!=0)
		 if(((X[3]|R[103])&0x08)==0)
                         {R[150]=0;R[152]=0;dxwancheng=0;}    //add


	runhua();
	magzine();
//	atc();
	if(mod_M_code(0)==6)	atc();
	else 								{ atc_ctrl=0;atc_stag=0;}

	R_ul[132/4]=X_ul[32/4];
	R_ui[130/2]=X_ui[30/2];
	R_ui[104/2]=X_ui[4/2];
	R_ul[100/4]=X_ul[0/4];
}

void plc2(void)
{
	int i,xy_step_mul,not_home_jog_speed;
	unsigned char not_home_feedover;
	unsigned char not_home_rapidover;
	unsigned int da_test_step;

	R_ul[272/4]=X_ul[32/4]&(~R_ul[232/4]);
	R_ui[270/2]=X_ui[30/2]&(~R_ui[230/2]);

	R_ui[244/2]=X_ui[4/2]&(~R_ui[204/2]);
	R_ul[240/4]=X_ul[0/4]&(~R_ul[200/4]);

//chao_cheng lamp
	if(X[0+P[97]])	Y[34]|= 1;
	else						Y[34]&=~1;

	//runhua();

										not_home_jog_speed=P_i[91];
	if(P_i[91]>1000) 	not_home_jog_speed=1000;
	if(P_i[91]<=0) 		not_home_jog_speed=200;

										not_home_feedover =P_i[92];
	if(P_i[92]>30)  	not_home_feedover =30;
	if(P_i[92]<=0)  	not_home_feedover =10;

										not_home_rapidover=P_i[93];
	if(P_i[93]>20)  	not_home_rapidover=20;
	if(P_i[93]<=0)  	not_home_rapidover=10;

	if(reset_dwell>0)		return;

	if(((sv_en==1)&&(reset_dwell==0)&&(reset_lamp_dwell==3))||(P[99]!=0))
	{
		switch(R[270]&0x1f)
		{
			case 0x01: //AUTO
				*ch_ctrl(0)&=~CH_SGL_BLK;
				mode_sel=(auto_enable)? MODE_AUTO:0;
				if(mode_sel==MODE_AUTO){Y[30]&=~0x1f;Y[30]|= 1;}
				else                                 Y[30]&=~1;
				break;
			case 0x02: //SGL BLK
				*ch_ctrl(0)|=CH_SGL_BLK;
				mode_sel=(auto_enable)? MODE_AUTO:0;
				if(mode_sel==MODE_AUTO){Y[30]&=~0x1f;Y[30]|=2;}
				else                                 Y[30]&=~2;
				break;
			case 0x04:mode_sel=MODE_JOG;        Y[30]&=~0x1f;Y[30]|=4;    break;
			case 0x08:mode_sel=MODE_STEP;       Y[30]&=~0x1f;Y[30]|=8;    break;
			case 0x10:mode_sel=MODE_REF_RETURN;	Y[30]&=~0x1f;Y[30]|=0x10;	break;
		}
		if(mode_sel==MODE_STEP)	    {if(X[4]&0xf){mode_sel=MODE_HANDWHEEL;Y[3]|=0x40;}}
		if(mode_sel==MODE_HANDWHEEL){if((X[4]&0xf)==0){mode_sel=MODE_STEP;Y[3]&=~0x40;}}
		asm cli
			*ch_ctrl(0)&=~CH_MODE_MSK;
			*ch_ctrl(0)|=mode_sel;
			/*
			//----------dry run setup-----------
			if(Y[30]&1){
				if((X[32]&(~R[232])&1)&&((*ch_stat(0)&CH_CYCLE_LAMP)==0)) Y[32]^=1;
				if(Y[32]&1) *ch_ctrl(0)|= CH_DRY_RUN;
				else        *ch_ctrl(0)&=~CH_DRY_RUN;
			}
			else{
				*ch_ctrl(0)&=~CH_DRY_RUN;
				Y[32]&=~1;
			}
			//----------dry run setup-----------
			*/
		asm sti
	}

	da_test_step=1<<(4*(((Y[32]&0x1e)+2)/5));
	switch(R[271]&7)
	{
		case 4:
			if(spdl_ctrl==0)				Y_ui[28/2]+=da_test_step;
			spdl_override+=10;
			if(spdl_override>=150)	spdl_override=150;
			break;
		case 1:
			if(spdl_ctrl==0)				Y_ui[28/2]-=da_test_step;
			if(spdl_override>=20)		spdl_override-=10;
			else										spdl_override=10;
			break;
		case 2:
			spdl_override=100;
	}
	Y[31]&=~2;	if(spdl_override==100)   Y[31]|= 2;
	(*G_ui[169])=R_ui[702/2];

	switch(R[273]&7)
	{
		case 4:*ch_rapidover(0)+=(*ch_rapidover(0)>=100)? 0:10;break;
		case 2:*ch_rapidover(0)=100;                           break;
		case 1:*ch_rapidover(0)-=(*ch_rapidover(0)>=10)? 10:0; break;
	}

	if(*ch_rapidover(0)<10) 	*ch_rapidover(0)=0;
	if(*ch_rapidover(0)>100) 	*ch_rapidover(0)=100;
	Y[33]&=~2;	if(*ch_rapidover(0)==100) Y[33]|= 2;

	switch(R[275]&7)
	{
		case 4:*ch_feedover(0)+=(*ch_feedover(0)>=200)? 0:10;break;
		case 2:*ch_feedover(0)=100;                          break;
		case 1:*ch_feedover(0)-=(*ch_feedover(0)>=10)? 10:0; break;
	}
	if(*ch_feedover(0)<10) 		*ch_feedover(0)=0;
	if(*ch_feedover(0)>200) 	*ch_feedover(0)=200;
	Y[35]&=~2;	if(*ch_feedover(0)==100) 	Y[35]|= 2;

	jog_speed=*ch_feedover(0);

	if(((((*axis_stat(0))&(*axis_stat(1))&(*axis_stat(2)))&AX_COORD_SETUP)==0)&&(P[90]==0))
	{
		if(*ch_feedover(0)>not_home_feedover) *ch_feedover(0)=not_home_feedover;
		if(*ch_rapidover(0)>not_home_rapidover) *ch_rapidover(0)=not_home_rapidover;
	}

	if(X[33]&0x10) 		jog_speed*=3;
	jog_speed=(jog_speed>600)? 600:jog_speed;

//  STEP-------
	switch(R[272]&0x1E)
	{
		case 0x02:  step_mul=1;	  Y[32]&=~0X1E;Y[32]|=0x02;break;
		case 0X04:  step_mul=10;  Y[32]&=~0X1E;Y[32]|=0x04;break;
		case 0x08:  step_mul=100; Y[32]&=~0X1E;Y[32]|=0x08;break;
		case 0x10:  step_mul=1000;Y[32]&=~0X1E;Y[32]|=0X10;break;
	}

	switch(X[4]&0x0f)
	{
		case 0x01: 	axis_sel=0; 		break;
		case 0x02: 	axis_sel=1; 		break;
		case 0x04: 	axis_sel=2; 		break;
		case 0x08: 	axis_sel=3; 		break;
		default:   	axis_sel=-1;
	}
	switch(X[4]&0x70)
	{
		case 0x10:  handwheel_mul=1; 		break;
		case 0x20:  handwheel_mul=10;  	break;
		case 0x40:  handwheel_mul=100; 	break;
		default:    handwheel_mul=1;
	}
	if(P[95]==1)
	{
		if(step_mul<=100)handwheel_mul=step_mul;
		else             handwheel_mul=100;
	}
	if(((*axis_stat(axis_sel)&AX_COORD_SETUP)==0)&&(P_i[90]==0))
	{
		if(handwheel_mul>10)	handwheel_mul=10;
	}

	// cycle lamp
	if(*ch_stat(0)&CH_CYCLE_LAMP)
	{
		Y[31]|=0X40;
		if(P[75]/100) Y[e_cycle_lamp1]|=e_cycle_lamp2;
	}
	else
	{
		Y[31]&=~0X40;
		if(P[75]/100) Y[e_cycle_lamp1]&=~e_cycle_lamp2;
	}

	// feedhold lamp
	if(*ch_stat(0)&CH_FEEDHOLD_LAMP)
	{
		Y[35]|=0X40;
		if(P[76]/100) Y[e_feedhold_lamp1]|=e_feedhold_lamp2;
	}
	else
	{
		Y[35]&=~0X40;
		if(P[76]/100) Y[e_feedhold_lamp1]&=~e_feedhold_lamp2;
	}

// axis lock switch and lamp
//	if((*ch_stat(0)&CH_CYCLE_LAMP)==0)
	if(	mode_sel==MODE_JOG)
	{
		if(Manual_GongSi==1)
		{
			if(R[274]&4)	Y[34]^=4;
		}

		if(R[274]&0x10) {Y[34]^=0x10;if((Y[34]&0x10)==0)Y[34]&=~0x08;}
		if(R[274]&0x08)  Y[34]^=0x08;
	}
	if(Y[34]&0x10)           Y[34]|=8;

	if((Y[34]&0x10)||((Y[34]&4)&&(Manual_GongSi==1)&&((P[19]/10000)==0)))
				{	for(i=0;i<4;i++)	*axis_ctrl(i)|= AX_LOCK;	}
	else 	{	for(i=0;i<4;i++)	*axis_ctrl(i)&=~AX_LOCK;
					if(Y[34]&0x08)		*axis_ctrl(2)|= AX_LOCK;	}

/*
//-------------- zi dong huan dang --------------
	if((mod_M_code(0)!=11)&&(mod_M_code(0)!=13)) huandang_stag=0;
//-------------- zi dong huan dang --------------
*/

//--------------manual--------------
	if(((*ch_stat(0)&CH_CYCLE_LAMP)==0)
	 &&((*ch_ctrl(0)&CH_ESTOP)==0)
	 &&((Y[34]&0x10)==0))
	{
		//manual collant on/off
		if(R[270]&0x20) Y[30]^=0x20;
		if(Y[30]&0x20) Y[0]|= 0x20;
		else           Y[0]&=~0x20;

		//shou dong huan dao
		if((((X[i_sm_z_s1]&i_sm_z_s2)||(P[56]==0)||(P[99]==1))
			&&(spdl_ctrl==0)&&((Y[30]&0x80)==0)&&((Y[32]&0x40)==0)))
		{
			if(R[270]&0x40) Y[30]^=0x40;
		}
		if((((X[i_sm_z_s1]&i_sm_z_s1)==0)&&(P[56]!=0))||(spdl_ctrl!=0)) Y[30]&=~0x40;

		if(Y[30]&0x40)
		{
			if(((R[270]&0x80)&&((P[77]%100)==0))||
				 ((P[77]%100)&&(R[e_toolctrl_switch1+240]&e_toolctrl_switch2)))
				Y[30]^=0x80;
			spdl_ctrl=0;
			auto_enable=0;
		}
		else
		{
			Y[30]&=~0x80;
			if(P[77]/100)	Y[e_toolctrl_lamp1]&=~e_toolctrl_lamp2;
		}
		if(Y[30]&0x80)
		{
			Y[0]|= 0x40;
			if(P[77]/100)	Y[e_toolctrl_lamp1]|=e_toolctrl_lamp2;
		}
		else
		{
			Y[0]&=~0x40;
			if(P[77]/100)	Y[e_toolctrl_lamp1]&=~e_toolctrl_lamp2;
		}

//manual dingxiang
	if(((spdl_ctrl==0)&&((Y[30]&0x40)==0)&&((Y[32]&0x80)==0))||(spdl_ctrl==4))
		{
			if(X[32]&(~R[232])&0x20)				Y[32]^=0x20;
			if(Y[32]&0x20)
			{
//				if(spdl_stat!=4){
					Y[1]|=1;
					if((dx_dwell==0)&&(spdl_stat!=4))dx_dwell=8;
					dingxiang();
//					spdl_stat=0x84;
//				}
			}
			else
			{
				dingxiangstop();
				//if(spdl_stat&4) spdl_stat=0;
			}
		}
		else  Y[32]&=~0x20;

//manual spindle zhi_dong

		if((R[272]&0x80)&&(P[22]==1))
		{
			Y[32]^=0x80;
			if(Y[32]&0x80)			spdl_zddwll=-1;
			else                spdl_zddwll=0;
		}
		if(Y[32]&0x80)
		{
			Y[1]|=4;
			spdl_ctrl=0;
			spdlcd_time=0;
			spdlcd_eng=0;
			Y[32]&=~0x40;
		}
		else Y[1]&=~4;

		if(spdl_zddwll_ahead>plc2_time)			spdl_zddwll_ahead-=plc2_time;
		else
		{
			spdl_zddwll_ahead=0;
			if(spdl_zddwll>plc2_time)	{	Y[32]|= 0x80;	spdl_zddwll-=plc2_time;	}
			else if(spdl_zddwll>=0)		{	Y[32]&=~0x80; spdl_zddwll=0;	}
		}

//spdl chongdong
		if((spdl_ctrl==0)&&((Y[30]&0x40)==0)&&((Y[32]&0x80)==0)&&((Y[32]&0x20)==0))
		{
			if((R[272]&0x40)||
				 ((P[78]%100)&&(R[e_SpdlStep_switch1+240]&e_SpdlStep_switch2)))
			{	spdlcd_eng=1;	spdlcd_time=Spdl_CD_Time;	}
		}
		if((spdlcd_time)>0)
		{
			spdlcd_time-=plc2_time;
			spdl_ctrl=1;Y[32]|= 0x40;
			if(P[78]/100)	Y[e_SpdlStep_lamp1]|=e_SpdlStep_lamp2;
		}
		else if(spdlcd_eng)
		{
			spdlcd_time=0;spdlcd_eng=0;spdl_ctrl=0;Y[32]&=~0x40;
			if(P[78]/100)	Y[e_SpdlStep_lamp1]&=~e_SpdlStep_lamp2;
		}
//spdl dingxiang
/*		if((spdl_ctrl==0)&&((Y[30]&0x40)==0)&&((Y[32]&0x80)==0))
		{

			//if(get_axis_pos(2)<=5){//031210
			if(*F_l[23]<=5){
			if(R[272]&0x20)				Y[32]^=0x20;
			}
			if(Y[32]&0x20) dingxiang();
			else           dingxiangstop();
		}
		else  Y[32]&=~0x20;*/

 //manual spindle control
		if(((Y[30]&0xC0)==0)&&((Y[32]&0xA0)==0))
		{
			switch((X[34])&0xE0)
			{
				case 0x20:  if(spdl_ctrl==0)
											spdl_ctrl=1;	break;
				case 0x80:	if(Spdl_Dir_Change_Mode==2)								break;
										if(spdl_ctrl==0)						spdl_ctrl=2;	break;
				case 0x40:  														spdl_ctrl=0;
										if((Y[32]&0x80)==0)
										{
											spdl_zddwll_ahead=Spdl_ZD_Dwell;
											spdl_zddwll=Spdl_ZD_Time;
										}
										break;
			}
		}

		for(i=0;i<4;i++)
		{
			if(mode_sel!=MODE_REF_RETURN)	set_axis_home(i,0);
			if(mode_sel!=MODE_JOG)				set_axis_jog(i,0);
		}

		Y[31]&=~0X38;Y[33]&=~0X38;Y[35]&=~0X38;//close the JOG lamps
		switch(mode_sel)
		{
			case MODE_REF_RETURN:
				if((X[35]&0x40)||
					 ((P[76]%100)&&(X[e_feedhold_switch1]&e_feedhold_switch2)))
					for(i=0;i<4;i++)	set_axis_home(i,0);
				else
				{
					if((X[31]&0X40)||
						 ((P[75]%100)&&(X[e_cycle_switch1]&e_cycle_switch2)))
					{
						Home_State=0;
						if(((*axis_stat(0)&AX_HOME_GOING)==0)&&((Y[34]&0x08)==0))
							set_axis_home(2,1);
					}

					if(*axis_stat(0)&AX_HOME_GOING)	Home_State|=0x10;
					if(*axis_stat(1)&AX_HOME_GOING)	Home_State|=0x20;
					if(*axis_stat(2)&AX_HOME_GOING)	Home_State|=0x40;
					if(*axis_stat(3)&AX_HOME_GOING)	Home_State|=0x80;

		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -