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

📄 main_0928.c.bak

📁 基于485的51单片机多机通讯程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
		TR_ans();
	RESEND2: if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND2;
			}
			else
			{
				c_err=0;
				main_err=1;
				err=2;
				stop=0;
				while(urgent_stop==0);
				goto END_P;
			}
		}
		else
			c_err=0;
	}
	if(existent[3]==1)
	{
		s_p=1;
		point=&pp.k5;
		temp_delt=2;
		sbuffer1[0]=M_AVC;			//横摆和面板接收
		sbuffer1[1]=p_out_sec;			//横摆区间外参数
		for(temp_pc=2;temp_pc<28;temp_pc++)
		{
			if(temp_pc%2==0)
			{
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
				temp_delt++;
			}
			else
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
		}
		if(pp.sec_num>11)
			pp.sec_num=0;
		sbuffer1[28]=pp.k1/256;
		sbuffer1[29]=pp.k1%256;
		for(temp_pc=30;temp_pc<55;temp_pc++)
			sbuffer1[temp_pc]=0;
		s_byte_nums=55;
		TR_ans();
	RESEND3: if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND3;
			}
			else
			{
				c_err=0;
				main_err=1;
				err=2;
				stop=0;
				while(urgent_stop==0);
				goto END_P;
			}
		}
		else
			c_err=0;
	}
	if(pp.sec_num>0)
	{
		for(anum=0;anum<4;anum++)
		{
			if(existent[anum]==1)
			{
				s_p=1;
				for(snum=0;snum<pp.sec_num;snum++)
				{
					s_p=1;
					temp_delt=3;
					sbuffer1[0]=axis[anum];
					sbuffer1[1]=p_in_sec;
					sbuffer1[2]=snum;
					switch(anum)
					{
						case 0:	{
								point=&pp.x[snum][0];
								for(temp_pc=3;temp_pc<23;temp_pc++)
								{
									if(temp_pc%2==1)
									{
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
										temp_delt++;
									}
									else
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
								}
								sbuffer1[23]=0;
							}break;
						case 1:	{
								point=&pp.x[snum][10];
								for(temp_pc=3;temp_pc<23;temp_pc++)
								{
									if(temp_pc%2==1)
									{
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
										temp_delt++;
									}
									else
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
								}
								sbuffer1[23]=0;
							}break;
						case 2:	{
								point=&pp.x[snum][20];
								for(temp_pc=3;temp_pc<15;temp_pc++)
								{
									if(temp_pc%2==1)
									{
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
										temp_delt++;
									}
									else
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
								}
								for(temp_pc=15;temp_pc<24;temp_pc++)
									sbuffer1[temp_pc]=0;
							}break;
						case 3: {
								point=&pp.x[snum][26];
								for(temp_pc=3;temp_pc<11;temp_pc++)
								{
									if(temp_pc%2==1)
									{
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
										temp_delt++;
									}
									else
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
								}
								for(temp_pc=11;temp_pc<24;temp_pc++)
									sbuffer1[temp_pc]=0;
							}break;
						default:break;
					}
					s_byte_nums=get_byte_nums(p_in_sec);
					TR_ans();
	RESEND4:			if(resend==1||overtime==1)
					{
						c_err++;
						resend=0;
						overtime=0;
						if(c_err<5)
						{			
							TR_ans();
							goto RESEND4;
						}
						else
						{
							c_err=0;
							main_err=1;
							err=2;
							stop=0;
							while(urgent_stop==0);
							goto END_P;
						}
					}
					else
						c_err=0;
				}
			}
		}
	}

END_P:	p_send=0;
	s_p=0;
}

void send_param1()
{
	unsigned char	axis[]={M_current_P,M_RW_P,M_OA_P},temp_pc,temp_delt,snum,anum,c_err;

	p_send=1;
	s_p=1;
	c_err=0;
	if(existent[0]==1)
	{
		point=&pp.t01;
		temp_delt=2;
		sbuffer1[0]=M_current_P;		//电流和面板接收
		sbuffer1[1]=p_out_sec;			//电流区间外参数
		sbuffer1[52]=0;
		sbuffer1[53]=0;
		sbuffer1[54]=0;
		for(temp_pc=2;temp_pc<52;temp_pc++)
		{
			if(temp_pc%2==0)
			{
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
				temp_delt++;
			}
			else
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
		}
		s_byte_nums=55;
		TR_ans();
	RESEND:	if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND;
			}
			else
			{
				c_err=0;
				err=2;
				stop=0;
				while(urgent_stop==0);
					goto END_P1;
			}
		}
		else
			c_err=0;
	}
	if(existent[1]==1)
	{	
		s_p=1;
		point=&pp.k2;
		temp_delt=2;
		sbuffer1[0]=M_RW_P;			//旋转/送丝和面板接收
		sbuffer1[1]=p_out_sec;			//旋转/送丝区间外参数
		for(temp_pc=2;temp_pc<50;temp_pc++)
		{
			if(temp_pc%2==0)
			{
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
				temp_delt++;
			}
			else
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
		}
		for(temp_pc=50;temp_pc<55;temp_pc++)
			sbuffer1[temp_pc]=0;
		s_byte_nums=55;
		TR_ans();
	RESEND1: if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND1;
			}
			else
			{
				c_err=0;
				err=2;
				stop=0;
				while(urgent_stop==0);
					goto END_P1;
			}
		}
		else
			c_err=0;
	}
	if(existent[2]==1)
	{
		s_p=1;
		point=&pp.k4;
		temp_delt=2;
		sbuffer1[0]=M_OA_P;			//横摆和面板接收
		sbuffer1[1]=p_out_sec;			//横摆区间外参数
		for(temp_pc=2;temp_pc<52;temp_pc++)
		{
			if(temp_pc%2==0)
			{
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
				temp_delt++;
			}
			else
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
		}
		for(temp_pc=52;temp_pc<55;temp_pc++)
			sbuffer1[temp_pc]=0;
		s_byte_nums=55;
		TR_ans();
	RESEND2: if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND2;
			}
			else
			{
				c_err=0;
				err=2;
				stop=0;
				while(urgent_stop==0);
					goto END_P1;
			}
		}
		else
			c_err=0;
	}
	if(pp.sec_num>0)
	{
		for(anum=0;anum<3;anum++)
		{
			s_p=1;
			for(snum=0;snum<pp.sec_num;snum++)
			{
				if(existent[anum]==1||(anum==2&&(existent[anum]==1||existent[anum+1]==1)))
				{
					s_p=1;
					switch(anum)
					{
						case 0:	point=&pp.x[snum][0];break;
						case 1:	point=&pp.x[snum][10];break;
						case 2:	point=&pp.x[snum][20];break;
						default:break;
					}
					temp_delt=3;
					sbuffer1[0]=axis[anum];
					sbuffer1[1]=p_in_sec;
					sbuffer1[2]=snum;

					for(temp_pc=3;temp_pc<23;temp_pc++)
					{
						if(temp_pc%2==1)
						{
							sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
							temp_delt++;
						}
						else
							sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
					}
					sbuffer1[23]=0;

					s_byte_nums=get_byte_nums(p_in_sec);
					TR_ans();
	RESEND3:			if(resend==1||overtime==1)
					{
						c_err++;
						resend=0;
						overtime=0;
						if(c_err<5)
						{			
							TR_ans();
							goto RESEND3;
						}
						else
						{
							c_err=0;
							err=2;
							stop=0;
							while(urgent_stop==0);
								goto END_P1;
						}
					}
					else
						c_err=0;

				}
			}
		}
	}
END_P1:	p_send=0;
	s_p=0;
}

void ini_ram()
{
	for(times=0;times<6;times++)
	{
		readEEP_page();
		delay(13);
	}
}

void switch_state()
{
	ini_sbuf(M_P_RC,program,PRG,0,0,0,0);
	s_byte_nums=4;
	TR_noans();
	ini_sbuf(M_RC,command,com_weld_simu,0,0,0,0);
	s_byte_nums=4;
	wait_ans=1;
	TR_ans();
	wait_ans=0;
	YOUHU=rbuffer[3];
	new_switch11=0;
	ini_sbuf(M_current,infor,com_weld_simu,YOUHU,0,0,0);
	s_byte_nums=6;
	TR_noans();
//	TR_ans();

	ini_sbuf(M_RC,command,com_wire_on_off,0,0,0,0);
	s_byte_nums=4;
	wait_ans=1;
	TR_ans();
	wait_ans=0;
	WIRE=rbuffer[3];
	new_switch22=0;
	ini_sbuf(M_RW,infor,com_wire_on_off,WIRE,0,0,0);
	s_byte_nums=6;
	TR_noans();
//	TR_ans();

	ini_sbuf(M_RC,command,com_delt_switch,0,0,0,0);
	s_byte_nums=4;
	wait_ans=1;
	TR_ans();
	wait_ans=0;
	delt_state=rbuffer[3];
	delt_switch=0;
	ini_sbuf(M_ALL,infor,com_delt_switch,delt_state,0,0,0);
	s_byte_nums=6;
	TR_noans();
//	TR_ans();
}

void edit()
{
	while(editing==1)
	{
			if(edit_finish==1)
			{
				p_name=76;
				param=1;
				para_table();
				param=0;
				edit_finish=0;
				editing=0;
			}
			else if(param==1)
			{
				p_name=rbuffer[2];
				para_table();
				if(temp_edit_finish==1)
				{
					edit_finish=1;
					temp_edit_finish=0;
					delay(10);
				}
			}	
		while(in_sector==1)
		{
			get_SLA();
			point=&pp.x[nonce_sec][0];	
			for(p_sec=0;p_sec<30;p_sec++)
			{
				*(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
				COMM=(mainDDR+152+nonce_sec*60+p_sec*2)/256;
				writeEEP_word();
				delay(5);
			}
			in_sector=0;
		}
	}
}

void start_t2()
{
	TM2CON=0x8D;    /*16位溢出,分频系数8,f/12*/
	EA=1;
	TM2IR=0;
}

void count()
{
	n_t01=pp.t01;
	n_t02=pp.t02;
	if(pp.gas2==ON)
	{
		n_t03=pp.t03;
		n_t04=pp.t04;
	}
	n_t12=pp.t12;
	n_t17=pp.t17;
	n_t34=pp.t34;

	if(pp.t13_sd==0)
		n_t13=pp.t13;
	if(pp.n11_sd==0)
		n_n11=pp.n11;
	if(pp.t21_sd==0)
		n_t21=pp.t21;
	if(pp.t31_sd==0)
		n_t31=pp.t31;
	if(pp.t32_sd==0)
		n_t32=pp.t32;
	if(pp.t33_sd==0)
		n_t33=pp.t33;
	if(pp.t41_sd==0)
		n_t41=pp.t41;
	if(pp.t43_sd==0)
		n_t43=pp.t43;
	if(pp.t51_sd==0)
		n_t51=pp.t51;
	if(pp.t52_sd==0)
		n_t52=pp.t52;
}

void start_woa()		//送丝、横摆、弧长哪个时间短先启动哪个
{
	if(pp.k3==1&&WIRE==ON&&t31OK==0&&wire_stoped==0)
	{
		if((pp.t31_sd==0&&c_flow>=c_current+n_t31)||(pp.t31_sd==1&&FINISH>=pp.t31))
		{
			ini_sbuf(M_RW,command,com_wire,0,0,0,0);
			s_byte_nums=4;
			wait_ans=1;
			TR_ans();
			wait_ans=0;
			t31OK=1;
		}
	}
	if(pp.k4==1&&t41OK==0)
	{
		if((pp.t41_sd==0&&c_flow>=c_current+n_t41)||(pp.t41_sd==1&&FINISH>=pp.t41))
		{
			ini_sbuf(M_OSC,command,com_osc,0,0,0,0);
			s_byte_nums=4;
			wait_ans=1;
			TR_ans();
			wait_ans=0;
			t41OK=1;
		}
	}
	if(YOUHU&&pp.k5==1&&t51OK==0&&avc_stoped==0)
	{
		if((pp.t51_sd==0&&c_flow>=c_current+n_t51)||(pp.t51_sd==1&&FINISH>=pp.t51))
		{
			ini_sbuf(M_AVC,command,com_avc,0,0,0,0);
			s_byte_nums=4;
			wait_ans=1;
			TR_ans();
			wait_ans=0;
			t51OK=1;
		}
	}
}

void EX0_INT (void) interrupt 0			//急停
{
	EX0=0;
	EA=0;
	s_byte_nums=0;
	POINTER0=0;
	SSUM=0;
	POINTER1=0;
	RSUM=0;
	s_p=0;
	if(rc_err==1||pc_stop==1)
	{
		rc_err=0;
		last_FINISH=FINISH;
		delay(5);
		EA=1;
		stop=1;
	}
	else if(main_err==1)
	{	
		main_err=0;			//清主板出错标志
		EA=1;
		ini_sbuf(M_P_RC,err_infor,M_main,err,0,0,0);
		s_byte_nums=5;
		TR_noans();
		err=0;
		stop=1;
		urgent_stop=1;
	}
	else
	{
		EA=1;
		ini_sbuf(M_current,command,com_calling,0,0,0,0);
		s_byte_nums=4;
		TR_ans();		// 对方给正常时应答类型,出错时错误信息类型
		if(rbuffer[1]==answer)
		{
			ini_sbuf(M_RW,command,com_calling,0,0,0,0);
			s_byte_nums=4;
			TR_ans();
			if(rbuffer[1]==answer)
			{
				ini_sbuf(M_OSC,command,com_calling,0,0,0,0);
				s_byte_nums=4;
				TR_ans();
				if(rbuffer[1]==answer)
				{
					ini_sbuf(M_AVC,command,com_calling,0,0,0,0);
					s_byte_nums=4;
					TR_ans();
					if(rbuffer[1]==err_infor)
					{
						if(work!=0)
						{
							ini_sbuf(M_P_RC,err_infor,M_AVC,err,0,0,0);
							s_byte_nums=5;
							TR_noans();
						}
						else
						{
							if(err==18)
							{
								ini_sbuf(M_AVC,command,com_lift,0,0,0,0);
								s_byte_nums=4;
								TR_noans();
							}
						}
						
					}
				}
				else
				{
					ini_sbuf(M_P_RC,err_infor,M_OSC,err,0,0,0);
					s_byte_nums=5;
					TR_noans();
				}
			}
			else
			{
				ini_sbuf(M_P_RC,err_infor,M_RW,err,0,0,0);
				s_byte_nums=5;
				TR_noans();
			}
		}
		else
		{
			ini_sbuf(M_P_RC,err_infor,M_current,err,0,0,0);
			s_byte_nums=5;
			TR_noans();
		}
		urgent_stop=1;
	}
	delay(5);
	ini_sbuf(M_ALL,command,com_err_ok,0,0,0,0);
	s_byte_nums=4;
	TR_noans();
	POINTER1=64;
	wait_ans=0;
	if(pc_stop==1)
	{
		pc_stop=0;
		err_ok=1;
	}
}

⌨️ 快捷键说明

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