?? 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 + -