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

📄 menuosd.c

📁 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构
💻 C
📖 第 1 页 / 共 5 页
字号:
	{
		tankdelaytime++;
		TankStatusSet(TankNo,0);//料门关
	}
	else if(tankdelaytime >= (struPS.ucMaterialDelay)*100)
		hz=1;

	return hz;
}

unsigned char MDProc2(unsigned char TankNo)
{
	unsigned char hz=0;

	if(tankdelaytime2==0)
		tankdelaytime2++;
	else if(tankdelaytime2 >= (struPS.ucMaterialDelay)*100)
		hz=1;

	return hz;
}

//处理容差
//return 0:OK 1:bottom limit 2:top limit
unsigned char TProc(unsigned char TankNo,unsigned short CTWeight)
{
	if((struDV.usDire_MValu[TankNo] - struPS.ucTolerance[TankNo])*10 > CTWeight)
		return 1;
	else if((struDV.usDire_MValu[TankNo] + struPS.ucTolerance[TankNo])*10 < CTWeight)
		return 2;
	else
		return 0;
}

//点动(每一圈为100ms时)
unsigned char ClickactProcess(unsigned char TankNo)
{
	unsigned char hz=0;

	if(firsttime==0)
	{
		TankStatusSet(TankNo,1);//只打开当前罐门
		firsttime++;
	}
	else if(firsttime >= (struPS.ucClickActionTime)*100)
	{
		TankStatusSet(TankNo,0);//关闭当前秤上所有罐门
		firsttime=0;	//时间归零
		hz=1;
	}

	return hz;
}

//卸料延迟(每一圈为100ms时)
unsigned char OffloadProcess()
{
	unsigned char hz=0;

	if(firsttime==0)
		firsttime++;
	else if(firsttime >= (struPS.ucOffloadDelay)*100)
	{
		firsttime=0;	//时间归零
		hz=1;
	}

	return hz;
}

void Auto_process(unsigned char APtype,unsigned char *PauseFlag)
{
	unsigned char ToleranceJudge,i;

	//struAP.ucCurrent_Material_No value is from zero.
	if(APtype == 0)
	{
		//中断的恢复
		if(*PauseFlag == 1)
		{
			for(i=0;i<TOTAL_M_NUM;i++)
			{
				if(struAP.usCurrent_Material_Value[i] != 0)
					t15[i]=1;//set t15[]
			}
			for(i=TOTAL_M_NUM-1;i>=0;i--)
			{
				if(t15[4]==1)//set Material No
				{
					struAP.ucCurrent_Material_No = 4;
					break;
				}
				else if(t15[0]==0)
				{
					struAP.ucCurrent_Material_No = 0;
					break;
				}
				else if(t15[i]==0 && t15[i-1]==1)
				{
					struAP.ucCurrent_Material_No = i;
					break;
				}
			}
			EEPROMReadBytes(E2prom_AUTO_PUDD,&(struAP.usTank_Number),2);
			*PauseFlag=0;
		}

		struAP.usCurrent_Display_Value=struAP.usCurrent_Balance_Value;
		for(i=0;i<struAP.ucCurrent_Material_No;i++)
		{
			if(struAP.usCurrent_Display_Value > struAP.usCurrent_Material_Value[i])
				(struAP.usCurrent_Display_Value)-=struAP.usCurrent_Material_Value[i];
			else
				struAP.usCurrent_Display_Value = 0;
		}

		if(struDV.usDire_MValu[struAP.ucCurrent_Material_No]!=0 && t15[struAP.ucCurrent_Material_No]==0)
		{
			if(FallProc(struAP.ucCurrent_Material_No) > struAP.usCurrent_Display_Value)//落差后的值大于当前值时
				TankStatusSet(struAP.ucCurrent_Material_No,1);//料1开
			else
			{
			//	TankStatusSet(struAP.ucCurrent_Material_No,0);//料1关
				//秤延时ucMaterialDelay(0.0)秒再判断
				if(MDProc(struAP.ucCurrent_Material_No)==1)
				{
					//判断是否在容差范围内
					ToleranceJudge = TProc(struAP.ucCurrent_Material_No,struAP.usCurrent_Display_Value);
					if(ToleranceJudge ==0 || ToleranceJudge ==2)
					{//OK,秤多
						TankStatusSet(struAP.ucCurrent_Material_No,0);//料1关
						if(MDProc2(struAP.ucCurrent_Material_No)==1)
						{
							tankdelaytime=tankdelaytime2=firsttime=0;	//确认完成后,再把秤延时时间归零
							struAP.usCurrent_Material_Value[struAP.ucCurrent_Material_No]=struAP.usCurrent_Display_Value;	//让实际值等于秤值
							EEPROMWriteBytes(E2prom_AUTO_PUDD+5,struAP.usCurrent_Material_Value,10);
							t15[struAP.ucCurrent_Material_No]=1;
							(struAP.ucCurrent_Material_No)++;
						}
					}
					else//不足秤
					{//进行点动
						if(ClickactProcess(struAP.ucCurrent_Material_No) ==1)
							tankdelaytime = 0;//点动后,为下次点动需要秤延时,则归零
					}
				}
			}
		}
		else if(struDV.usDire_MValu[struAP.ucCurrent_Material_No]==0)
		{
			struAP.usCurrent_Display_Value = 0;	//当前显示值也为零
			TankStatusSet(struAP.ucCurrent_Material_No,0);//料1关
			struAP.usCurrent_Material_Value[struAP.ucCurrent_Material_No]=0;	//由于配方为零,则也要让实际值等于零
			EEPROMWriteBytes(E2prom_AUTO_PUDD+5,struAP.usCurrent_Material_Value,10);
			t15[struAP.ucCurrent_Material_No]=1;
			(struAP.ucCurrent_Material_No)++;
		}
		
		if(t15[0] == 1 && t15[1] == 1 && t15[2] == 1 && t15[3] == 1 && t15[4] == 1)
			current_model = UI_DH_AutoFinish;
	}
	else
		TankStatusSet(99,0);	//关所有的
}

/*hz add DH_mAutoStart*/
/*********************************************************************
Function:初始化,画DH_mAutoStart和按键功能
*********************************************************************/
unsigned char UI_DH_mAutoStart()
{
	unsigned char PauseFlag=0;
	unsigned char APtype=0;

	SaveRunStat(1);
	LCDCharacterWritten(0,0,Str_AutoStart[0]);
	LCDCharacterWritten(7,1,Str_Common[0]);
	LCDCharacterWritten(0,2,Str_AutoStart[1]);
	LCDCharacterWritten(0,3,Str_AutoStart[2]);//zend

	memset(t15,0,5);
	struAP.ucCurrent_Material_No = tankdelaytime = tankdelaytime2 = firsttime = 0;
	if(AD_value > struBC.usBalanceZeroValue)
		RemainWeight=(unsigned short)((float)(AD_value - struBC.usBalanceZeroValue) / struBC.ssBalanceUnitValue);	//当前总重
	else
		RemainWeight=0;
	current_model=UI_CURRENT_MODEL;
	while(1)
	{
		Function_init();

		/* msg process */
		if((b_key_code & 0x1E) == BUTTON_PAUSE || struAP.usCurrent_Balance_Value >= struPS.usMaxWeight*10 || struAP.ucCurrent_Status == 1)	//暂停
		{
			APtype=1;//暂停功能
			if(struAP.usCurrent_Balance_Value >= struPS.usMaxWeight*10)
				LCDCharacterWritten(0,2,Str_Error[0]);
			else
				LCDCharacterWritten(0,2,Str_AutoStart[3]);
			if(struAP.ucCurrent_Status == 1)
				PauseFlag = 1;
		}
		else if((b_key_code & 0x1E) == BUTTON_RUN) //开始
		{
			LCDCharacterWritten(0,2,Str_AutoStart[1]);
			APtype=0;
		}
		if((b_key_code & 0x1F) == BUTTON_MANUALMODE)//手动
			current_model = UI_DH_ManualStandby;
		
		struAP.ucCurrent_Status = 0;
		Display_AutoWeight(2,3);
		Auto_process(APtype,&PauseFlag);
		Display_TankNumber(1,0);
		Display_MaterialNo(7,0);
		Display_MaterialWeight(1,1);
			
		/* model check */
		if(current_model !=UI_CURRENT_MODEL)
			break;
	}
	return current_model;
}

/*hz add DH_mAutoFinish*/
/*********************************************************************
Function:初始化,画DH_mAutoFinish和按键功能
*********************************************************************/
unsigned char UI_DH_mAutoFinish()
{
	unsigned char i;
	unsigned char AFtype=0;	//0:没卸 5:正卸 6:反卸

	SaveRunStat(2);
	LCDCharacterWritten(0,0,Str_AutoFinish[0]);
	LCDCharacterWritten(1,1,Str_AutoFinish[1]);
	LCDCharacterWritten(1,2,Str_AutoFinish[2]);
	LCDCharacterWritten(7,3,Str_Common[0]);

	//firsttime2=0;
	current_model=UI_CURRENT_MODEL;
	while(1)
	{
		Function_init();

		/* msg process */
		if((b_key_code & 0x1E) == BUTTON_PAUSE)
		{
			if(AFtype==5 || AFtype==6)
			{
				LCDCharacterWritten(0,1,Str_AutoStart[3]);
				TankStatusSet(6,0);
				TankStatusSet(5,0);
				AFtype=1;
			}
		}
		else if((b_key_code & 0x1E) == BUTTON_REVERSE_OFFLOAD)	//反向卸料
		{
			//if(DelayOffload())
			//{
				LCDCharacterWritten(1,1,Str_AutoFinish[4]);
				LCDCharacterWritten(1,2,Str_Clear);
				if(!AFtype)
					PrintOut(2);
				AFtype=6;
			//}
		}
		else if((b_key_code & 0x1E) == BUTTON_FRONTAL_OFFLOAD)	//正向卸料
		{
			//if(DelayOffload())
			//{
				LCDCharacterWritten(1,1,Str_AutoFinish[5]);
				LCDCharacterWritten(1,2,Str_Clear);
				if(!AFtype)
					PrintOut(2);
				AFtype=5;
			//}
		}
		else if((b_key_code & 0x1F) == BUTTON_MANUALMODE)//手动
			current_model = UI_DH_ManualStandby;
		//else
		//	firsttime2=0;
		
		Display_TankNumber(1,0);
		Display_BalanceWeight(0,3,'-');
		if(AFtype==5 || AFtype==6)
		{
			if(struAP.usCurrent_Balance_Value > struPS.ucSetZeroValue*10 && ((struBC.usBalanceZeroValue)-5) < AD_value)
				TankStatusSet(AFtype,1);
			else if(OffloadProcess()==1)
			{
				TankStatusSet(AFtype,0);
				if(MDProc2(0)==1)
				{
					tankdelaytime2=0;	//确认完成后,时间归零
					(struAP.usTank_Number)++;	//自动时的批次累加
					(struQT.usTank_Number)++;	//统计时的批次累加
					if(struAP.usTank_Number == struDV.usTank_Number && struDV.usTank_Number!=0)
					{
						current_model = UI_DH_AutoStandby;	//批次完成
						struAP.usTank_Number=0;
					}
					else
						current_model = UI_DH_AutoStart;	//卸料完成

					for(i=0;i<TOTAL_M_NUM;i++)//加统计
					{
						struQT.usDire_MValu[i]+=struAP.usCurrent_Material_Value[i];
						struAP.usCurrent_Material_Value[i]=0;	//清struAP.usCurrent_Material_Value
					}
					EEPROMWriteBytes(E2prom_QUER_TOTA,&struQT,QUERY_TOTAL_VALUE_LEN);
					EEPROMWriteBytes(E2prom_AUTO_PUDD+5,struAP.usCurrent_Material_Value,10);
				}
			}
		}

		/* model check */
		if(current_model !=UI_CURRENT_MODEL)
			break;
	}
	return current_model;
}

#if 0
/*hz add DH_mAutoTerminate*/
/*********************************************************************
Function:初始化,画DH_mAutoTerminate和按键功能
*********************************************************************/
unsigned char UI_DH_mAutoTerminate()
{
	unsigned char return_model;

	LCDCharacterWritten(0,0,Str_AutoTerminate[0]);
	LCDCharacterWritten(1,2,Str_AutoTerminate[1]);

	current_model=UI_CURRENT_MODEL;
	while(1)
	{
		Function_init();
	}
	return current_model;
}
#endif

/*hz add DH_mManualStandby*/
/*********************************************************************
Function:初始化,画DH_mManualStandby和按键功能
*********************************************************************/
unsigned char UI_DH_mManualStandby()
{
//	unsigned char ADisplayFlag;

	SaveRunStat(0);
	LCDCharacterWritten(0,0,Str_AMStandby[1]);
	LCDCharacterWritten(0,1,Str_AMStandby[2]);
	LCDCharacterWritten(7,2,Str_Common[0]);

	TankStatusSet(99,0);	//进入手动时要关所有的
	//firsttime2=0;
	current_model=UI_CURRENT_MODEL;
	while(1)
	{
		Function_init();

		/* msg process */
		if((b_key_code & 0x1F) == BUTTON_AUTOMODE)	//自动
			current_model = UI_DH_AutoStandby;
		if((b_key_code & 0x1E) == BUTTON_REVERSE_OFFLOAD)	//反向卸料
		{
			//if(DelayOffload())
			//{
				LCDCharacterWritten(0,1,Str_Clear);
				LCDCharacterWritten(1,1,Str_AutoFinish[4]);
				//ADisplayFlag=0;
				TankStatusSet(6,1);
			//}
		}
		else if((b_key_code & 0x1E) == BUTTON_FRONTAL_OFFLOAD)	//正向卸料
		{
			//if(DelayOffload())
			//{
				LCDCharacterWritten(0,1,Str_Clear);
				LCDCharacterWritten(1,1,Str_AutoFinish[5]);
				//ADisplayFlag=0;
				TankStatusSet(5,1);
			//}
		}
		else
		{
			LCDCharacterWritten(0,1,Str_AMStandby[2]);
			//ADisplayFlag=1;
			TankStatusSet(6,0);
			TankStatusSet(5,0);
			//firsttime2=0;
		}

		if(f_key_code==BUTTON_UP)
		{
			if(password ==0 || password ==1)
				password =1;
			else if(password ==2)
				password =3;
			else
				password =0;
		}
		else if(f_key_code==BUTTON_DOWN)
		{
			if(password ==1)
				password =2;
			else
			{
				if(password ==3)
					current_model = UI_DH_OtherMenu;
				password =0;
			}
		}
		else if(f_key_code==BUTTON_OK)
		{
			current_model = UI_DH_MainMenu;
			password =0;
		}

		//if(ADisplayFlag==1)
		//	Display_AD(5,1);
		Display_BalanceWeight(0,2,'-');
		if(struPS.usMaxWeight*10 < struAP.usCurrent_Balance_Value)
			LCDCharacterWritten(0,3,Str_Error[0]);
		else if(struPS.usMaxWeight<(struDV.usDire_MValu[0]+struDV.usDire_MValu[1]+struDV.usDire_MValu[2]+struDV.usDire_MValu[3]+struDV.usDire_MValu[4]))
			LCDCharacterWritten(0,3,Str_Error[1]);
		else if((struPS.usFall[0]>struDV.usDire_MValu[0] && struDV.usDire_MValu[0]!=0) ||
				(struPS.usFall[1]>struDV.usDire_MValu[1] && struDV.usDire_MValu[1]!=0) ||
				(struPS.usFall[2]>struDV.usDire_MValu[2] && struDV.usDire_MValu[2]!=0) ||
				(struPS.usFall[3]>struDV.usDire_MValu[3] && struDV.usDire_MValu[3]!=0) ||
				(struPS.usFall[4]>struDV.usDire_MValu[4] && struDV.usDire_MValu[4]!=0))
			LCDCharacterWritten(0,3,Str_Error[2]);
		else if((struPS.ucTolerance[0]>struDV.usDire_MValu[0] && struDV.usDire_MValu[0]!=0) ||
				(struPS.ucTolerance[1]>struDV.usDire_MValu[1] && struDV.usDire_MValu[1]!=0) ||
				(struPS.ucTolerance[2]>struDV.usDire_MValu[2] && struDV.usDire_MValu[2]!=0) ||
				(struPS.ucTolerance[3]>struDV.usDire_MValu[3] && struDV.usDire_MValu[3]!=0) ||
				(struPS.ucTolerance[4]>struDV.usDire_MValu[4] && struDV.usDire_MValu[4]!=0))
			LCDCharacterWritten(0,3,Str_Error[3]);
		else
			Display_DateTime();

⌨️ 快捷键说明

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