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

📄 pid.c.bak

📁 基于485的51单片机多机通讯程序
💻 BAK
📖 第 1 页 / 共 3 页
字号:
		if(rot_front==1)
		{
			rot_dir=1;
			PWM0=204;
			rot_enable=1;
			rot_front=0;
		}

		if(rot_reverse==1)
		{
			rot_dir=0;
			PWM0=204;
			rot_enable=1;
			rot_reverse=0;
		}

		if(wire_add==1)
		{
			wire_dir=1;
			PWM1=204;
			wire_enable=1;
			wire_add=0;
		}

		if(wire_dec==1)
		{
			wire_dir=0;
			PWM1=204;
			wire_enable=1;
			wire_dec=0;
		}

		if(motor_stop==1)
		{
			PWM0=0;
			PWM1=0;
			wire_enable=0;
			rot_enable=0;
			rot_front=0;
			rot_reverse=0;
			wire_add=0;
			wire_dec=0;
			motor_stop=0;
		}

		if(resend==1)
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			resend=0;
		}

		if(urgent_stop==1)
			goto BEGIN;
	}

	get_v_r();
	if(r%10>=5)
		pulse_num=r/10+1;
	else
		pulse_num=r/10;
	pulse_num=pulse_num/2;
	pulse_num1=r/2;
	if(pp.k1==0)
		K21=OFF;
	else
		K21=pp.k21;
	const0=(float)(motor_v)*(float)(tooth_num);
        const0=(float)(const0*3.14);
        const0=(float)(const0/360/r);		//motor_v*tooth_num*3.14*pp.d/360/r
	temp_data0=const0*pp.d/10;
	temp_data00=(float)(pp.dv21)/temp_data0;
	delt_rot=255*temp_data00;
	if(delt_rot==0)
		delt_rot=1;
	temp_data00=(float)(pp.v21_p)/temp_data0;
	rot_vp=255*temp_data00;
	temp_rot_vp=12;
	rp_academic_num=60*r*pp.v21_p;
	rp_academic_num=rp_academic_num/pp.d/157;
	if(K21==ON)
	{
		temp_data00=(float)(pp.v21_b)/temp_data0;
		rot_vb=255*temp_data00;
		temp_rot_vb=12;
		rb_academic_num=60*r*pp.v21_b;
		rb_academic_num=rb_academic_num/pp.d/157;
	}
	if(rot_vp>12)
		n_cm1=pp.t21*250/(rot_vp-12);
	else if(rot_vp<12)
		n_cm1=pp.t21*250/(12-rot_vp);

	K3=pp.k3;
	if(pp.k1==0)
		K31=OFF;
	else
		K31=pp.k31;
	const1=1900;				//6600*10*165*314
	temp_data00=(float)(pp.dv31)/(float)(const1);
	delt_wire=255*temp_data00;
	if(delt_wire==0)
		delt_wire=1;
	temp_data00=(float)(pp.v31_p)/(float)(const1);
	wire_vp=255*temp_data00;
	temp_wire_vp=12;
	if(K31==ON)
	{
		temp_data00=(float)(pp.v31_b)/(float)(const1);
		wire_vb=255*temp_data00;
		temp_wire_vb=12;
	}
	if(wire_vp>12)
		n_cm0=pp.t32*250/(wire_vp-12);
	else if(wire_vp<12)
		n_cm0=pp.t32*250/(12-wire_vp);
	work=3;
	if(WIRE==ON)
		kk=1;
	else
		kk=0;
	nonce_sec=0;
	if(K31==ON||K21==ON)
		IEN1=IEN1|0X08;			//允许CT3,电流脉冲
	do
	{
		if(urgent_stop==1)			//急停后返回
			goto BEGIN;

		if(rot_ok==0&&start_rot==1)	//开始旋转
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			if(pp.k2==CW)
				rot_dir=1;
			else
				rot_dir=0;
			rot_ok=1;
			if(K21==ON)
			{
				CTCON=CTCON|0x40;
				IEN1=IEN1|0x08;		//CT3
			}
			CML1=TML2+0XC8;
			if(CML1<TML2)			//CM1,400us,旋转速度变化时间
				CMH1=TMH2+1+0X00;
			else
				CMH1=TMH2+0X00;
			rot_enable=1;
			IEN1=IEN1|0X20;			//允许CM1
			IEN1=IEN1|0x01;			//允许CT0
			start_rot=0;
		}

		if(pp.k3==ON&&wire_ok==0&&start_wire==1)//开始送丝
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			wire_dir=1;
			wire_ok=1;
			CML0=TML2+0xC8;			//CM0,400us,送丝速度变化时间
			if(CML0<TML2)
				CMH0=TMH2+1+0X00;
			else
				CMH0=TMH2+0X00;
			wire_enable=1;
			IEN1=IEN1|0X10;			//CM0
			start_wire=0;
		}

		if(need_para==1)			//显示焊接角度
		{
			ini_sbuf(M_main,parameter1,0,0,0,0);
			sbuffer[2]=FINISH/256;
			sbuffer[3]=FINISH%256;
			s_byte_nums=5;
			TR_noans();
			need_para=0;
		}

		if(urgent_stop==1)
				goto BEGIN;
		if(rot_ok==1&&rot_front==1&&r_slope_ok==1)	//旋转速度加
		{

			if(delt_state==0||delt_state==1)
			{
				if(temp_rot_vp+delt_rot>=255)
					temp_rot_vp=255;
				else
					temp_rot_vp=temp_rot_vp+delt_rot;		//rot_vp=rot_vp-255*pp.dv21/1250
			}
			if(K21==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_rot_vb+delt_rot>=255)
						temp_rot_vb=255;
					else
						temp_rot_vb=temp_rot_vb+delt_rot;		//rot_vb=rot_vb-255*pp.dv21/1250

				}
			}
			else
				PWM0=temp_rot_vp;
			rot_front=0;
		}

		if(rot_ok==1&&rot_reverse==1&&r_slope_ok==1)	//旋转速度减
		{
			if(delt_state==0||delt_state==1)
			{
				if(temp_rot_vp<=delt_rot)
					temp_rot_vp=0;
				else
					temp_rot_vp=temp_rot_vp-delt_rot;		//rot_vp=rot_vp+255*pp.dv21/1250
			}
			if(K21==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_rot_vb<=delt_rot)
						temp_rot_vb=0;
					else
						temp_rot_vb=temp_rot_vb-delt_rot;		//rot_vb=rot_vb+255*pp.dv21/1250

				}
			}
			else
				PWM0=temp_rot_vp;
			rot_reverse=0;
		}

		if(urgent_stop==1)
				goto BEGIN;
		if(K3==ON&&WIRE==ON&&wire_ok==1&&wire_add==1&&w_slope_ok==1)//送丝速度加
		{
			if(delt_state==0||delt_state==1)
			{
				if(temp_wire_vp+delt_wire>=255)
					temp_wire_vp=255;
				else
					temp_wire_vp=temp_wire_vp+delt_wire;		//wire_vp=wire_vp-255*pp.dv31/2500
			}

			if(K31==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_wire_vb+delt_wire>=255)
						temp_wire_vb=255;
					else
						temp_wire_vb=temp_wire_vb+delt_wire;	//wire_vb=wire_vb-255*pp.dv31/2500
				}
			}
			else
				PWM1=temp_wire_vp;
			wire_add=0;
		}

		if(K3==ON&&WIRE==ON&&wire_ok==1&&wire_dec==1&&w_slope_ok==1)//送丝速度减
		{
			if(delt_state==0||delt_state==1)
			{
				if(temp_wire_vp<=delt_wire)
					temp_wire_vp=0;
				else
					temp_wire_vp=temp_wire_vp-delt_wire;		//wire_vp=wire_vp+255*pp.dv31/2500
			}
			if(K31==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_wire_vb<=delt_wire)
						temp_wire_vb=0;
					else
						temp_wire_vb=temp_wire_vb-delt_wire;		//wire_vb=wire_vb+255*pp.dv31/2500
				}
			}
			else
				PWM1=temp_wire_vp;
			wire_dec=0;
		}

		if(urgent_stop==1)
				goto BEGIN;
		if(wire_ok==1&&WIRE==OFF)		//手动关丝
		{
			PWM1=0;
			wire_enable=0;
			kk=0;
		}

		if(wire_ok==1&&kk==0&&WIRE==ON)	//手动开丝
		{
			wire_enable=1;
			if(K31==OFF)
				PWM1=temp_wire_vp;
			kk=1;
		}

		if(decrease==1&&rot_ok==1&&K21==ON)
		{
			CTCON=CTCON&0x3F;
			IEN1=IEN1&0xF7;			//CT3
			PWM0=temp_rot_vp;
			K21=OFF;
		}

		if(urgent_stop==1)
			goto BEGIN;
		if(in_sector==1&&new_sector==1)		//进入区间
		{
			K21=pp.x[nonce_sec][1];
			K3=pp.x[nonce_sec][5];
			K31=pp.x[nonce_sec][6];
			if(K21==ON||K3==ON&&K31==ON&&kk==1)
			{
				if(p_b==0)
					CTCON=CTCON|0x40;
				else
					CTCON=CTCON|0x80;
				IEN1=IEN1|0x08;		//CT3
			}
			rot_pid_ok=0;
			temp_data0=const0*pp.x[nonce_sec][0]/10;
			temp_data00=(float)(pp.x[nonce_sec][2])/temp_data0;
			rot_vp=255*temp_data00;
			if(K21==ON)					//脉动旋转开关
			{
				temp_data00=(float)(pp.x[nonce_sec][3])/temp_data0;
				rot_vb=255*temp_data00;
			}
			r_slope_ok=0;
			if(rot_vp!=temp_rot_vp)
			{
				c_cm1=0;
				if(rot_vp>temp_rot_vp)
					rot_slope_delt=rot_vp-temp_rot_vp;
				else
					rot_slope_delt=temp_rot_vp-rot_vp;
				n_cm1=pp.x[nonce_sec][4]*250/rot_slope_delt;
				IEN1=IEN1|0X20;			//CM1
			}


			if(K3==ON&&kk==1)
			{
				wire_ok=1;
				temp_data00=(float)(pp.x[nonce_sec][8])/(float)(const1);
				wire_vp=255*temp_data00;
				if(K31==ON)
				{
					temp_data00=(float)(pp.x[nonce_sec][9])/(float)(const1);
					wire_vb=255*temp_data00;
				}
				w_slope_ok=0;
				if(wire_vp!=temp_wire_vp)
				{
					c_cm0=0;
					if(wire_vp>temp_wire_vp)
						wire_slope_delt=wire_vp-temp_wire_vp;
					else
						wire_slope_delt=temp_wire_vp-wire_vp;
					n_cm0=pp.x[nonce_sec][7]*250/wire_slope_delt;
					IEN1=IEN1|0X10;		//CM0
				}

			}
			new_sector=0;
		}

		if(K3==ON&&WIRE==ON&&wire_ok==1&&stop_wire==1)		//停止送丝
		{

			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			PWM1=0;
			wire_enable=0;
			wire_ok=0;			//抽丝时没有脉动
			delay(2);				//79um
			if(pp.t34>0)
			{

				retract=1;			//抽丝标志
				wire_dir=0;
				CML0=TML2+0X50;			//100ms
				if(CML0<TML2)
					CMH0=TMH2+1+0XC3;
				else
					CMH0=TMH2+0XC3;
				n_cm0=pp.t34;
				c_cm0=0;
				temp_data00=(float)(pp.v32)/(float)(const1);
				temp_data00=temp_data00*255;
				PWM1=(unsigned char)(temp_data00);
				wire_enable=1;
				IEN1=IEN1|0X10;			//允许CM0,抽丝
			}
			stop_wire=0;
		}

		if(decrease==1&&K3==ON&&WIRE==ON&&wire_ok==1)
		{
			PWM1=0;
			wire_enable=0;
			wire_ok=0;			//抽丝时没有脉动
			delay(2);				//79um
			if(pp.t34>0)
			{
				retract=1;			//抽丝标志
				wire_dir=0;
				CML0=TML2+0X50;
				if(CML0>TML2)
					CMH0=TMH2+1+0XC3;
				else
					CMH0=TMH2+0XC3;				//100ms
				n_cm0=pp.t34;
				c_cm0=0;
				temp_data00=(float)(pp.v32)/(float)(const1);
				temp_data00=temp_data00*255;
				PWM1=(unsigned char)(temp_data00);			
				wire_enable=1;
				IEN1=IEN1|0X10;			//允许CM0,抽丝				
			}
		}
		if(urgent_stop==1)
			goto BEGIN;
		if(rot_stop==1)			//停止旋转
		{
			PWM0=0;
			rot_enable=0;
			IEN1=IEN1&0XF7;		//禁止CT3,电流脉冲
			IEN1=IEN1&0XFE;		//禁止CT0,焊接角度

			if(wire_ok==1&&WIRE==ON)
			{
				PWM1=0;
				wire_enable=0;
				wire_ok=0;			//抽丝时没有脉动
				delay(2);				//79us
				if(pp.t34>0)
				{
					retract=1;			//抽丝标志
					wire_dir=0;
					CML0=TML2+0X50;			//100ms
					if(CML0<TML2)
						CMH0=TMH2+1+0XC3;
					else
						CMH0=TMH2+0XC3;
					n_cm0=pp.t34;
					c_cm0=0;
					temp_data00=(float)(pp.v32)/(float)(const1);
					temp_data00=temp_data00*255;
					PWM1=(unsigned char)(temp_data00);
					wire_enable=1;
					IEN1=IEN1|0X10;			//允许CM0,抽丝
				}
			}

			rot_stop_ok=1;
		}
		if(urgent_stop==1)
				goto BEGIN;

	}while(rot_stop_ok==0);

	while(need_para==0)
	{
		if(urgent_stop==1)
				goto BEGIN;
	}
	ini_sbuf(M_main,parameter1,0,0,0,0);
	sbuffer[2]=FINISH/256;
	sbuffer[3]=FINISH%256;
	s_byte_nums=5;
	TR_noans();
	need_para=0;
	if(pp.b==ON)
	{
		while(auto_return==0)
		{
			if(urgent_stop==1)
				goto BEGIN;
		}
		ini_sbuf(M_main,answer,S_ANSW,0,0,0);
		s_byte_nums=4;
		TR_noans();
		if(pp.k2==CW)
			rot_dir=0;
		else
			rot_dir=1;
		PWM0=255;
		rot_enable=1;
		IEN1=IEN1|0X01;				//允许CT0,焊接角度

		while(return_ok==0)
		{
			if(urgent_stop==1)
				goto BEGIN;
			if(need_para==1)
			{
				sbuffer[0]=M_main;
				sbuffer[1]=parameter1;
				sbuffer[2]=FINISH/256;
				sbuffer[3]=FINISH%256;
				sbuffer[4]=0;
				s_byte_nums=5;
				TR_noans();
				need_para=0;
			}
		}
		ini_sbuf(M_main,answer,S_ANSW,0,0,0);
		s_byte_nums=4;
		TR_noans();
	}

	while(to_begin==0)
	{
		if(urgent_stop==1)
			goto BEGIN;
	}
	goto BEGIN;
}

⌨️ 快捷键说明

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