📄 yztask.c
字号:
if(MassTech.RepeatMode==TECH_RPT_BIDIRECT) //双向
{
dir=0;//改为反向移动
UDDivPtr=UDDivEndPtr;//分割点指针设置为终点指针
}
else//单向
{
UDDivPtr=0x00;//分割点指针设置为起点
(*hook)(UNIT_ACT);//先完成本次的作动(终点)
UD_FB(PARAM_VOID,0x00); //出退复位到原点
UD_FB(BodyPointHeight[MassTech.YBegin-1],PARAM_VOID); //升降到起点
posit=SUR_TECH_POSIT_RANGE_BEGIN;//预设起点到信息
(*hook)(UNIT_UD);//最后完成本次的位置调整
}
}
else if(UDDivPtr==UDDivEndPtr)//到达范围终点
{
UDRpdNum++;//反复次数递增
posit=SUR_TECH_POSIT_RANGE_END;//预设终点到信息
(*hook)(UNIT_ACT_UD);//进行上一分割点作动及本次的位置调整
}
else//到达中间分割点
{
posit=SUR_TECH_POSIT_DIVIS;//预设分割点到信息
(*hook)(UNIT_ACT_UD);//进行上一分割点作动及本次的位置调整
}
}
if(dir==0)//反向移动
{
UDDivPtr--;//指向上一分割点
if(UDDivPtr==0x00)//到达范围起点
{
UDRpdNum++;//反复次数递增
posit=SUR_TECH_POSIT_RANGE_BEGIN;//预设起点到信息
(*hook)(UNIT_ACT_UD);//进行上一分割点作动及本次的位置调整
dir=1;//改为正向移动
}
else//到达中间分割点
{
posit=SUR_TECH_POSIT_DIVIS;//预设分割点到信息
(*hook)(UNIT_ACT_UD);//进行上一分割点作动及本次的位置调整
}
}
}
PostPosit(SUR_TECH_POSIT_FINISH);//发布终止点到信息
//执行无升降的分割点动作
(*hook)(UNIT_ACT);
//发布升降结束信息
MsgSurMove_Nose.MsgClass=SUR_TECH_UD_FINISH;
OSMboxPost(MboxSurMove_Nose,&MsgSurMove_Nose);
}
void DivisPointSet(void)
{
INT8U i,large,small,tmp_part,div_base,div_num;
if((MassTech.YBegin<CNT_UD_NECK)||(MassTech.YBegin>CNT_UD_LIMIT)||(MassTech.YEnd<CNT_UD_NECK)||(MassTech.YEnd>CNT_UD_LIMIT)||(MassTech.AreaDivNum>CNT_PART_DIVIS_NUM))
return;
if(MassTech.AreaDivNum==TECH_VOID)
div_num=CNT_PART_DIVIS_NUM;
else
div_num=MassTech.AreaDivNum;
for(i=0;i<(CNT_PART_POINT_NUM-2)*CNT_PART_DIVIS_NUM+1;i++)
{
DivisPoint[i]=0x00;
}
if(MassTech.YBegin==MassTech.YEnd)
{
DivisPoint[0]=BodyPointHeight[MassTech.YBegin-1];
UDDivEndPtr=0x00;
return;
}
else if(MassTech.YBegin<MassTech.YEnd)
{
large=MassTech.YEnd;
small=MassTech.YBegin;
}
else
{
large=MassTech.YBegin;
small=MassTech.YEnd;
}
DivisPoint[0]=BodyPointHeight[small-1];
div_base=0x00;
for(tmp_part=small;tmp_part<large;tmp_part++)
{
for(i=1;i<div_num;i++)
{
DivisPoint[div_base+i]=DivisPoint[div_base]+(INT16U)i*(BodyPointHeight[tmp_part]-BodyPointHeight[tmp_part-1])/div_num;
}
div_base=div_base+i;
DivisPoint[div_base]=BodyPointHeight[tmp_part];
}
UDDivEndPtr=div_base;
if(MassTech.YBegin>MassTech.YEnd)
{
INT8U tmp_sml;
for(i=0;i<((UDDivEndPtr+1)>>1);i++)
{
tmp_sml=DivisPoint[i];
DivisPoint[i]=DivisPoint[UDDivEndPtr-i];
DivisPoint[UDDivEndPtr-i]=tmp_sml;
}
}
}
void PositionMove(INT8U ud_pst,INT8U fb_pst,INT8U ud_spd,INT8U fb_spd,INT8U ud_dly,INT8U fb_dly,INT8U bd_chk)
{
//清空所使用邮箱以前的信息
OSMboxAccept(MboxUD_Sur);
OSMboxAccept(MboxFB_Sur);
if(ud_pst!=PARAM_VOID)
{
//if(UD_IN_ERR(ud_pst))
if(ud_pst==UDNowPst)
OSMboxPost(MboxUD_Sur,YZ_MBOX_PST_ARRV);
else if VALID_LEVEL(ud_spd)
{
UDAimSpd=ud_spd;
}
else
{
UDAimSpd=DEFAULT_SPEED_UD;
}
UDAimPst=ud_pst;
}
if(fb_pst!=PARAM_VOID)
{
//if(FB_IN_ERR(fb_pst))
if(fb_pst==FBNowPst)
OSMboxPost(MboxFB_Sur,YZ_MBOX_PST_ARRV);
else if VALID_LEVEL(fb_spd)
{
FBAimSpd=fb_spd;
}
else
{
FBAimSpd=DEFAULT_SPEED_FB;
}
FBAimPst=fb_pst;
}
if(bd_chk!=PARAM_VOID)
{
if(bd_chk==TECH_SUR_MASSMODE_SHDR_DTCT)
{
EnDtct=EN_SHDR_DTCT;
OSMboxPend(MboxUD_Sur,0,&Err);
EnDtct=DIS_DTCT;
UDAimPst=UDNowPst;
OSMboxPost(MboxUD_Sur,YZ_MBOX_PST_ARRV);
}
else if(bd_chk==TECH_SUR_MASSMODE_BODY_DTCT)
{
EnDtct=EN_BODY_DTCT;
OSMboxPend(MboxFB_Sur,0,&Err);
EnDtct=DIS_DTCT;
FBAimPst=FBNowPst;
OSMboxPost(MboxFB_Sur,YZ_MBOX_PST_ARRV);
}
}
if(ud_dly!=PARAM_VOID)
{
OSTimeDly(TICKS(ud_dly));
UDAimPst=UDNowPst;
OSMboxPost(MboxUD_Sur,YZ_MBOX_PST_ARRV);
}
if(fb_dly!=PARAM_VOID)
{
OSTimeDly(TICKS(fb_dly));
FBAimPst=FBNowPst;
OSMboxPost(MboxFB_Sur,YZ_MBOX_PST_ARRV);
}
if(ud_pst!=PARAM_VOID)
{
OSMboxPend(MboxUD_Sur,0,&Err);
}
if(fb_pst!=PARAM_VOID)
{
OSMboxPend(MboxFB_Sur,0,&Err);
}
}
void OneShdrAct(void)
{
PositionMove(BodyPointHeight[CNT_UD_SHOULDER-1],PARAM_VOID,MassTech.UpDownSpeed,PARAM_VOID,PARAM_VOID,PARAM_VOID,PARAM_VOID);
OSTimeDly(TICKS(SHDR_KEP_TIME));
if (VALID_LEVEL(MassTech.ActStrength) && VALID_LEVEL(MassTech.KeepTime))
{
PositionMove(BodyPointHeight[CNT_UD_SHOULDER-1]+ShdrPrsStrDistTab[MassTech.ActStrength-1],PARAM_VOID,MassTech.UpDownSpeed,PARAM_VOID,PARAM_VOID,PARAM_VOID,PARAM_VOID);
OSTimeDly(TICKS(PrsKeepTimeTab[MassTech.KeepTime-1]));
}
PositionMove(BodyPointHeight[CNT_UD_SHOULDER-1]-PD(CNT_SHDR_SUP),PARAM_VOID,MassTech.UpDownSpeed,PARAM_VOID,PARAM_VOID,PARAM_VOID,PARAM_VOID);
}
void OneFBAct(void)
{
if(MsgTech_SurMove.MsgSurTech==TECH_SUR_MASSMODE_BODY_DTCT)
{
PositionMove(PARAM_VOID,PF(CNT_FB_LIMIT_DIST),PARAM_VOID,MassTech.FrontBackSpeed,PARAM_VOID,PARAM_VOID,TECH_SUR_MASSMODE_BODY_DTCT);
MsgSurMove_Nose.MsgClass=SUR_TECH_POINT_CHK_FINISH;
OSMboxPost(MboxSurMove_Nose,&MsgSurMove_Nose);
AllSurPstDist[BodyDtctPtr][0]=UDNowPst;
AllSurPstDist[BodyDtctPtr][1]=FBNowPst;
//检测指针递增
if(BodyDtctPtr<(CNT_PART_POINT_NUM-2)*CNT_PART_DIVIS_NUM)
BodyDtctPtr++;
OSMboxPend(MboxTech_SurMove,0,&Err);
}
else
{
UD_FB(PARAM_VOID,GetSurPstDist(UDAimPst));
MsgSurMove_Nose.MsgClass=SUR_TECH_SURFACE_ARRIVE;
OSMboxPost(MboxSurMove_Nose,&MsgSurMove_Nose);
OSMboxPend(MboxTech_SurMove,0,&Err);
UD_FB(PARAM_VOID,GetStrngDist(MassTech.ActStrength));
MsgSurMove_Nose.MsgClass=SUR_TECH_STRENG_ARRIVE;
OSMboxPost(MboxSurMove_Nose,&MsgSurMove_Nose);
OSMboxPend(MboxTech_SurMove,0,&Err);
if (VALID_LEVEL(MassTech.KeepTime)&& VALID_LEVEL(MassTech.FrontBackSpeed))
{
if((MsgTech_SurMove.MsgSurTech==TECH_SUR_MASSMODE_PRS)||(MsgTech_SurMove.MsgSurTech==TECH_SUR_MASSMODE_MOMI_PRS))
OSTimeDly(TICKS(PrsKeepTimeTab[MassTech.KeepTime-1]));
else if(MsgTech_SurMove.MsgSurTech==TECH_SUR_MASSMODE_FB_PRS)
PositionMove(PARAM_VOID,GetStrngDist(TECH_FB_LIMIT),PARAM_VOID,MassTech.FrontBackSpeed,PARAM_VOID,PrsKeepTimeTab[MassTech.KeepTime-1],PARAM_VOID);
}
}
UD_FB(PARAM_VOID,0x00);
}
//获得体型面位移距离
INT8U GetSurPstDist(INT8U ud_pst)
{
INT8U i;
if(AllSurPstDist[0][0]>=ud_pst)
return AllSurPstDist[0][1];
for(i=1;i<(CNT_PART_POINT_NUM-2)*CNT_PART_DIVIS_NUM+1;i++)
{
if(AllSurPstDist[i][0]>=ud_pst)
return AllSurPstDist[i-1][1]+(AllSurPstDist[i][1]-AllSurPstDist[i-1][1])*(ud_pst-AllSurPstDist[i-1][0])/(AllSurPstDist[i][0]-AllSurPstDist[i-1][0]);
}
}
//获得各按摩强度位移距离
INT8U GetStrngDist(INT8U strng)
{
if(strng==TECH_FB_BASE)
return 0x00;
if(strng==TECH_FB_SUR)
return GetSurPstDist(UDAimPst);
if VALID_LEVEL(strng)
return GetSurPstDist(UDAimPst)+StrDistTab[strng-1];
if(strng==TECH_FB_LIMIT)
return PF(CNT_FB_LIMIT_DIST);
return 0x00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -