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

📄 workstep.c

📁 Keil单片机软件开发平台下的一个51系列单片机工程
💻 C
📖 第 1 页 / 共 2 页
字号:
                                RunToStop();
                                while(State==PAUSE)
                                {
                                    os_wait(K_TMO,100/OS_MSEL_PER_TICKS,0);
                                }
                                StopToCharge();
                            }
                            else if(State == STOP)
                            {
                                RunToStop();
                                Step = STEP_MAX-1;
                                break;
                            }
                            os_wait(K_TMO,500/OS_MSEL_PER_TICKS,0);
                        }
                    }
                }break;
                case 88://反充电
                case 44://放电 恒流放电 转换条件有 时间 电压 电量 三个条件满足
                {
                    StopToDisCharge();
                    while(1)
                    {
                        if(State==RUN)
                        {
                            if(RunKeySetupStep==1)
                            {
                                RunToStop();
                                break;
                            }
                            if(Mode==44)//逆变
                            {
                                if(LastTimeS/60 >= JumpTimeM || MeasureU <= JumpU || AmountQ10S/36000 >= JumpQ)
                                {
                                    RunToStop();
                                    break;
                                }
                            }
                            else//反充电
                            {
                                if(LastTimeS/60 >= JumpTimeM)
                                {
                                    RunToStop();
                                    break;
                                }
                            }
                        }
                        else if(State==PAUSE)
                        {
                            RunToStop();
                            while(State==PAUSE)
                            {
                                os_wait(K_TMO,100/OS_MSEL_PER_TICKS,0);
                            }
                            StopToDisCharge();
                        }
                        else if(State == STOP)
                        {
                            RunToStop();
                            Step = STEP_MAX-1;
                            break;
                        }
                        os_wait(K_TMO,500/OS_MSEL_PER_TICKS,0);
                    }
                }break;
                case 55://设置电量
                {
                    AmountQ10S  = JumpQ;
                    AmountQ10S *= 36000;
                    EepromWriteWord(E2AmountQ10S   ,(unsigned int)(AmountQ10S>>16) );
                    EepromWriteWord(E2AmountQ10S +2,(unsigned int)AmountQ10S );
                }break;
                case 66://设置循环起始点
                {
                }break;
                case 77://设置循环次数
                {
                    if(RemainLoopTimes>0)
                    {
                        RemainLoopTimes--;
                        EepromWriteByte(E2RemainLoopTimes ,RemainLoopTimes);
                        for(Step=0;Step<STEP_MAX;Step++)
                        {
                            LoadSingleStep(ProgramNo,Step);
                            if(Mode==66 || Mode==99)
                            {
                                break;
                            }
                        }
                    }
                }break;
            }//switch(Mode)
            LastTimeS = 0;
            EepromWriteWord(E2LastTimeS   ,(unsigned int)(LastTimeS>>16) );
            EepromWriteWord(E2LastTimeS +2,(unsigned int)LastTimeS );
        }//for(;Step<SumStep;Step++)
    }//while(1)
}//void TaskWorkStep(void)
/*********************************************************************************************************
** 函数名称: TaskCalcCapa
** 功能描述: 
** 输 入:   无
** 输 出:   无
** 全局变量: 
** 调用模块: 
**
** 作 者: 刘宝贵
** 日 期: 2006年2月10日9:47
**-------------------------------------------------------------------------------------------------------
** 修改人: 刘宝贵
** 日 期: 
** 内  容:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void TaskCalcCapa(void) _task_ 4
{
    uint8 data   i;
    uint8 xdata StepImg;
    uint16 xdata MeasureIMax;
    uint16 xdata MeasureUMax;
    uint8  xdata StateLastTime;        //State 维持当前运行状态的时间
    uint16 xdata DeviceGWErrorLastTime;//充电机过温持续时间
    uint16 xdata DeviceGLErrorLastTime;//充电机过流持续时间
    ErrorType = 0;
    MeasureIMax = ClaculateSub(0,Ib,Ik);
    MeasureUMax = ClaculateSub(0,Ub,Uk);
    while (1)
    {
        for(i=0;i<10;i++)//每10秒钟进行一次空量积分
        {
            os_wait(K_IVL,1000/OS_MSEL_PER_TICKS,0);//间隔1秒
            if(State == RUN)
            {
                if(Debug == 1)
                {
                    JDQ_GJ = JDQ_OFF;
                }
                else
                {
                    if(ErrorType!=0)
                    {
                        JDQ_GJ = JDQ_ON;
                    }
                    else
                    {
                        JDQ_GJ = JDQ_OFF;
                    }
                }
                LastTimeS++;
                if(Step!=StepImg)
                {
                    StepImg = Step;
                    StateLastTime = 0;
                }
                if(StateLastTime<255)StateLastTime++;
                EepromWriteWord(E2LastTimeS   ,(unsigned int)(LastTimeS>>16) );
                EepromWriteWord(E2LastTimeS +2,(unsigned int)LastTimeS );
                //充电机过温检测及处理
                DeviceGWError = !DeviceGWErrorIO;
                if(DeviceGWError==1)
                {
                    DeviceGWErrorLastTime++;
                    if(DeviceGWErrorLastTime>300)//5分钟
                    {
                        State = STOP;
                    }
                }
                else
                {
                    DeviceGWErrorLastTime = 0;
                }
                //充电机过流处理
                if(DeviceGLError==1)
                {
                    DeviceGLErrorLastTime++;
                    if(DeviceGLErrorLastTime>1200)//20分钟
                    {
                        State = STOP;
                    }
                }
                else
                {
                    DeviceGLErrorLastTime = 0;
                }
                //断流及过流检测
                if((Mode==22 || Mode==44 || Mode==88) && ChangeStateFlag==0)//充 放 反充 时并且不在状态转换过程
                {
                    if(SetupU==0 && StateLastTime>180)//恒流充电或放电超过180秒时检测断流报警
                    {
                        if(SetupI>(MeasureIMax/100)*3 && MeasureI<SetupI/2)
                        {
                            DeviceDLError = 1;
                        }
                        else
                        {
                            DeviceDLError = 0;
                        }
                    }
                    else
                    {
                        DeviceDLError = 0;
                    }
                    if(StateLastTime>180)//超过180秒时检测过流报警
                    {
                        if(MeasureI > SetupI + SetupI/4 && MeasureI - SetupI > 50)
                        {//如果电流大于设定电流的1/4 且 电流大于设定电流0.5A
                            DeviceGLError = 1;
                        }
                        else
                        {
                            DeviceGLError = 0;
                        }
                    }
                    else
                    {
                        DeviceGLError = 0;
                    }
                }
            }
            else
            {
                StateLastTime=0;
                JDQ_GJ = JDQ_OFF;
            }
        }
        //容量积分 begin
        if(AmountQ10S < 0xFFFFFFFF-0xFFFF)
        {
            AmountQ10S+=MeasureI;
            EepromWriteWord(E2AmountQ10S   ,(unsigned int)(AmountQ10S>>16) );
            EepromWriteWord(E2AmountQ10S +2,(unsigned int)AmountQ10S );
        }
    }//while (1)
}

⌨️ 快捷键说明

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