int uiSwingCount = 0; //定义自摆角度的计数,SCALE_SP*ucAngle /////原来为unsigned int@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if(uiCountSP==0&&Hall_SPZJ == H_ON) //判断计数为0时,不在水平中间点 { //先注释 Err[0] = 1; HuoerSPZJ = 0;//++++++水平中间霍尔没找到,或已坏++++++++ }
if(Err[1]==1) //判断当前是在水平零点位置且逆转 { Prog_ChangeSP(SET_STOP);//指令要求水平电机停止 Err[1] = 0; //清标志位 num--; //清错误计数值!!!!!!!!!!!!!!!!!!!!!!! }
//有个问题:只能发送一次转反转指令,碰到这句话,就不行了,因为现在就是超计数值了 // if(uiCountSP > uiSwingCount || uiCountSP < (0-uiSwingCount))//转动脉冲数已经到达自摆设定角度计数的极限 // { // mes_SP = 0x4C; //+++++设置标志位,水平电机停止,等待轮询 //Prog_ChangeSP(SET_STOP); /* CS1 = 0; XRA = 1; XRB = 1; CS1 = 1; NOP2(); CS1 = 0; */ // }
if(Hall_SPLD == H_OFF && ucStateSP == SET_ANTI) //判断当前是在水平零点位置且逆转 { Err[1]=1; //??????????????????????????测试有没有可能,第二次不能再转的可能??????????????????????????? }
//有个问题:只能发送一次正反转指令,碰到这句话,就不行了,因为现在就是超计数值了 if(uiCountSP >= uiSwingCount && ucStateSP == SET_WISE) //防止正转时达到计数最大值 (手动模式) { mes_SP = 0x4C; //+++++设置标志位,水平电机停止,等待轮询 //Prog_ChangeSP(SET_STOP); ucStateSP = SET_STOP; //记得要设置电机转动方向标志位为停止状态!!! }
if(bPreSFZYA != SFZYA && bRestMotor == 0b0) //判断当前SFZYA的状态值是否为上升沿。++++++同时不是复位模式。
if(bPreSFZYA != SFZYA) //判断当前SFZYA的状态值是否为上升沿。++++++同时不是复位模式???????????? { bPreSFZYA = SFZYA; Count_num++; //判断水平电机是否停止的脉冲计数//复位模式下使用
else { if(Hall_SPLD == H_OFF) //找到第一个零点,即左零点 { Prog_ChangeSP(SET_STOP); step_one = 0; //回到第一步,等待第二次复位 bRestMotor = 0b0; //清复位标志,应该再加上竖直霍尔????????????????????? } }
case 0xE7: //指令要求复位 { bAutoSwing = 0b0; //自动模式标识,0b0为手动模式,0b1为自动模式即自摆模式 bRestMotor = 0b1; //设置电机复位标识为1,表示开始复位 //Prog_ChangeSZ(SET_ANTI); //启动竖直电机逆时针转动 Prog_ChangeSP(SET_ANTI); //水平电机逆时针转动 step_one = 0; //++++++++++++++++++++++++复位第一阶段 num_while = 0; //开始循环计数 break; }
else if(SPMsg == SET_WISE) //判断是否要求水平电机采取顺时针旋转措施 { if(right_SPLD == 1 && Cannotfind_SPLD == 0) //正在右磁铁,禁止右转, 2013.1.9增加 && Cannotfind_SPLD == 0防止电机复位不成功造成的影响 { XRA = 1; XRB = 1; ucStateSP = SET_STOP; //当前水平电机为停止状态 2013.1.5 SendChar(0x35);//++++++++++++++ } else { XRA = 1; //修改F/R电平时应先将邋ON1置高,即关闭电机+++++++++ NOP2(); XRB = 1; XRA = 0; CountSP_Copy = uiCountSP + 30; //++++++++记录当前水平电机脉冲计数加10的值 ucStateSP = SET_WISE; //当前水平电机为正转状态2013.1.5 num_while = 0; //循环计数开始 SendChar(0x36);//++++++++++++++ } }
if( (OL_SZ == 1 || OL_SP == 1)) //2013.1.17注释 && bRestMotor == 0b0 { IC4 = 0;//蜂鸣器报警 } else { IC4 = 1;//取消报警 }