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

📄 workstep.c

📁 Keil单片机软件开发平台下的一个51系列单片机工程
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************************************************
**相控充电机主控器系统 软件设计:刘宝贵,硬件设计:刘宝贵 调试:刘宝贵
**本系统使用编译器为 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 + -