📄 menuosd.c
字号:
{
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 + -