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