📄 workstep.c
字号:
/*********************************************************************************************************
**相控充电机主控器系统 软件设计:刘宝贵,硬件设计:刘宝贵 调试:刘宝贵
**本系统使用编译器为 keil c51.exe V7.06
**本系统使用汇编器为 keil A51.exe V7.07
**本系统使用联接器为 keil BL51.exe V5.03
**本系统使用 RTX_TINY
**如果等程序有问题或者是Bug请与作者联系
**与作者联系方法:邮箱:baoguiliu@163.com,baoguiliu@sohu.com 电话:0451-6677970-6738
**
**
**VER1.0
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: WorkStep.C
**创 建 人: 刘宝贵
**最后修改日期:
**描 述: 工作步骤处理
**
**--------------历史版本信息----------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include"includes.h"
uint8 bdata ErrorType;
sbit DeviceError = ErrorType^0;//设备故障
sbit DeviceDLError = ErrorType^1;//断流故障
sbit DeviceGLError = ErrorType^2;//过流故障
sbit DeviceGYError = ErrorType^3;//过压故障
sbit DeviceGWError = ErrorType^4;//充电机过温故障
sbit DeviceGWErrorIO = P1^6; //过温信号输入端
//sbit GL = ErrorType^0;
//sbit GL = ErrorType^0;
/*********************************************************************************************************
** 函数名称: TaskWorkStep
** 功能描述: 工步处理
** 输 入: 无
** 输 出: 无
** 全局变量:
** 调用模块: ClearDA
**
** 作 者: 刘宝贵
** 日 期: 2004年4月28日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void TaskWorkStep(void) _task_ 3
{
RunKeySetupStep = 0;
Stop();
while (1)
{
while(State != RUN || Step > STEP_MAX)
{
os_wait(K_TMO, 50/OS_MSEL_PER_TICKS, 0);
}
for(;Step <= STEP_MAX;Step++)
{
ErrorType = 0;//清除告警信息
EepromWriteByte(E2Step ,Step);
EepromWriteByte(E2ProgramNo ,ProgramNo);
if(RunKeySetupStep==1)
{
Step--;
RunKeySetupStep = 0;
EepromWriteByte(E2Step ,Step);
}
LoadSingleStep(ProgramNo,Step);//读取工步
if(CheckSingleStep() == 0)//检测读取的工步是否合法 0:不合法。
{
Mode=99;
}
if(Mode==99 || Step == STEP_MAX)
{
RunToStop();
Step = 0;
EepromWriteByte(E2Step ,Step);
ProgramNo = 0;
EepromWriteByte(E2ProgramNo ,ProgramNo);
State = STOP;
EepromWriteByte(E2State ,State);
LastTimeS = 0;
EepromWriteWord(E2LastTimeS ,(unsigned int)(LastTimeS>>16) );
EepromWriteWord(E2LastTimeS +2,(unsigned int)LastTimeS );
AmountQ10S = 0;
EepromWriteWord(E2AmountQ10S ,(unsigned int)(AmountQ10S>>16) );
EepromWriteWord(E2AmountQ10S +2,(unsigned int)AmountQ10S );
break;
}
AmountQ10S = 0;
switch(Mode)
{
case 11://静电
{
while(1)
{
if(State==RUN)
{
Stop();
if(LastTimeS/60>=JumpTimeM)
{
break;
}
if(RunKeySetupStep==1)
{
break;
}
}
else if(State==PAUSE)
{
while(State==PAUSE)
{
os_wait(K_TMO,100/OS_MSEL_PER_TICKS,0);
}
}
else if(State == STOP)
{
Step = STEP_MAX-1;
break;
}
os_wait(K_TMO,500/OS_MSEL_PER_TICKS,0);
}
}break;
case 22://充电 分为恒流充电和恒压充电两种 恒流时不能设置控制电压 恒压时不能设电压转换条件
case 33://再充电 按设置电流值进行恒流充电控制,直至人为结束该阶段
{
if(SetupU==0)//恒流充电 转换条件有 时间 电压 电量
{
StopToCharge();
while(1)
{
if(State==RUN)
{
if(RunKeySetupStep==1)
{
RunToStop();
break;
}
if(LastTimeS/60>=JumpTimeM || MeasureU >= JumpU || AmountQ10S/36000 >= JumpQ)
{
RunToStop();
break;
}
}
else if(State==PAUSE)
{
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);
}
}
else if(JumpU==0)//恒压充电 转换条件有 时间 电量,过程是先恒流充到设定电压再恒压到转换条件
{
unsigned char count;
count = 0;
StopToCharge();
while(1)//恒流恒压充电充到转换条件
{
if(State==RUN)
{
if(MeasureRealU > SetupU)//电压大于设定值
{
if(MeasureRealU - SetupU > 10)//实时的测量值比设定值大1V以上5秒钟调一次
{
if(++count==10)//5秒
{
MeasureUAdjust = MeasureRealU;
AdjustVoltage();
count = 0;
}
}
else
{
if(++count==20)//10秒
{
MeasureUAdjust = MeasureU;
AdjustVoltage();
count = 0;
}
}
}
else//电压小于设定值
{
if(SetupU - MeasureRealU > 10)//实时的测量值比设定值小1V以上5秒钟调一次
{
if(++count==10)//5秒
{
MeasureUAdjust = MeasureRealU;
AdjustVoltage();
count = 0;
}
}
else
{
if(++count==20)//10秒
{
MeasureUAdjust = MeasureU;
AdjustVoltage();
count = 0;
}
}
}
if(RunKeySetupStep==1)
{
RunToStop();
break;
}
if(LastTimeS/60 >= JumpTimeM || AmountQ10S/36000 >= JumpQ)
{
RunToStop();
break;
}
}
else if(State==PAUSE)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -