1
0
forked from me/IronOS

first commit

This commit is contained in:
minidso
2016-04-30 20:56:50 +05:00
commit 4d014816a7
141 changed files with 77255 additions and 0 deletions

425
S100App/Src/CTRL.c Normal file
View File

@@ -0,0 +1,425 @@
/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
File Name : CTRL.c
Version : S100 APP Ver 2.11
Description:
Author : Celery
Data: 2015/08/03
History:
2015/07/07 ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2015/08/03 <20>Ż<EFBFBD><C5BB>ƶ<EFBFBD><C6B6>ж<EFBFBD>
*******************************************************************************/
#include <stdio.h>
#include <string.h>
#include "CTRL.h"
#include "Bios.h"
#include "UI.h"
#include "HARDWARE.h"
#include "S100V0_1.h"
#include "Disk.h"
#include "MMA8652FC.h"
#define HEATINGCYCLE 30
/******************************************************************************/
DEVICE_INFO_SYS device_info;
/******************************************************************************/
u8 gCtrl_status = 1;
u16 gHt_flag = 0;
vs16 gTemp_data = 250;//25<32><35>
s16 gPrev_temp = 250; // ǰһ<C7B0><D2BB><EFBFBD><EFBFBD>ֵ
u8 gIs_restartkey = 0;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־*/
u8 gPre_status = 1;
const DEVICE_INFO_SYS info_def = {
"2.11", //Ver
2000, //T_Standby; // 200<30><30>C=1800 2520,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
3000, // T_Work; // 350<35><30>C=3362, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
100, //T_Step;
3*60*100, //Wait_Time; //3*60*100 3 mintute
6*60*100 // Idle_Time; //6*60*100 6 minute
};
struct _pid {
s16 settemp; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s16 actualtemp; //<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
s16 err; //<2F><><EFBFBD><EFBFBD><EFBFBD>¶Ȳ<C2B6>ֵ
s16 err_last; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>¶Ȳ<C2B6>ֵ
s32 ht_time; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
u16 kp,ki,kd; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>΢<EFBFBD><CEA2>ϵ<EFBFBD><CFB5>
s32 integral; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
} pid;
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_Ctrl_Status
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1>ǰ״̬
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><>ǰ״̬
*******************************************************************************/
u8 Get_CtrlStatus(void)
{
return gCtrl_status;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Set_CtrlStatus
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>õ<EFBFBD>ǰ״̬
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:status <20><><EFBFBD>õ<EFBFBD>״̬
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><>
*******************************************************************************/
void Set_CtrlStatus(u8 status)
{
gCtrl_status = status;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Set_PrevTemp
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>ǰһ<C7B0><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:temp ǰһ<C7B0><EFBFBD>ֵ
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><>
*******************************************************************************/
void Set_PrevTemp(s16 temp)
{
gPrev_temp = temp;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_HtFlag
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD>ȱ<EFBFBD>־,<2C><><EFBFBD>ȱ<EFBFBD>־<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><>ǰ<EFBFBD><C7B0><EFBFBD>ȱ<EFBFBD>־
*******************************************************************************/
u16 Get_HtFlag(void)
{
return gHt_flag;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_TempVal
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>¶ȵ<C2B6>ֵ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><>ǰ<EFBFBD><EFBFBD>
*******************************************************************************/
s16 Get_TempVal(void)
{
return gTemp_data;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: System_Init
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:NULL
*******************************************************************************/
void System_Init(void)
{
memcpy((void*)&device_info,(void*)&info_def,sizeof(device_info));
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: PID_init
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: PID<49><44><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:NULL
*******************************************************************************/
void Pid_Init(void)
{
pid.settemp = 0;
pid.actualtemp = 0;
pid.err = 0;
pid.err_last = 0;
pid.integral = 0;
pid.ht_time = 0;
pid.kp = 15;
pid.ki = 2;
pid.kd = 1;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Pid_Realize
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: PID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:temp<6D><70>ǰ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>λ/50us
*******************************************************************************/
u16 Pid_Realize(s16 temp)
{
u8 index = 0,index1 = 1;
s16 d_err = 0;
pid.actualtemp = temp;
pid.err = pid.settemp - pid.actualtemp; //<2F>²<EFBFBD>
if(pid.err >= 500) index = 0;
else {
index = 1;
pid.integral += pid.err;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
if(pid.settemp < pid.actualtemp) {
d_err = pid.actualtemp - pid.settemp;
if(d_err > 20){
pid.integral = 0; //<2F><><EFBFBD><EFBFBD>5<EFBFBD><35>
index1 = 0;
index = 0;
}
}
////////////////////////////////////////////////////////////////////////////////
if(pid.err <= 30) index1 = 0;
else index1 = 1;
pid.ht_time = pid.kp * pid.err + pid.ki * index * pid.integral + pid.kd * (pid.err - pid.err_last)*index1;
pid.err_last = pid.err;
if(pid.ht_time <= 0) pid.ht_time = 0;
else if(pid.ht_time > 30*200) pid.ht_time = 30*200;
return pid.ht_time;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Heating_Time
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ʱ<EFBFBD><CAB1>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:temp<6D><70>ǰ<EFBFBD>ȣ<C2B6>wk_temp <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>λ/50us
*******************************************************************************/
u32 Heating_Time(s16 temp,s16 wk_temp)
{
u32 heat_timecnt;
pid.settemp = wk_temp;
if(wk_temp > temp) {
if(wk_temp - temp >= 18)gHt_flag = 0;//<2F><><EFBFBD><EFBFBD>
else gHt_flag = 2;//<2F><><EFBFBD><EFBFBD>
} else {
if(temp - wk_temp <= 18)gHt_flag = 2;//<2F><><EFBFBD><EFBFBD>
else gHt_flag = 1;//<2F><><EFBFBD><EFBFBD>
}
heat_timecnt = Pid_Realize(temp);//Sub_data * 1000;
return heat_timecnt;
}
/*******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Status_Tran
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6>жϵȿ<CFB5><C8BF><EFBFBD>״̬ת<CCAC><D7AA>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: NULL
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>: NULL
*******************************************************************************/
void Status_Tran(void)//״̬ת<CCAC><D7AA>
{
static u16 init_waitingtime = 0;//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>־λ: 0=> δ<><CEB4>ʼ<EFBFBD><CABC>,1=><3E>ѳ<EFBFBD>ʼ<EFBFBD><CABC>
static u8 back_prestatus = 0;
s16 heat_timecnt = 0,wk_temp;
u16 mma_active;
switch (Get_CtrlStatus()) {
case IDLE:
switch(Get_gKey()) {
case KEY_V1:
if(gIs_restartkey != 1) {
if(Read_Vb(1) < 4) {
Set_CtrlStatus(TEMP_CTR);
init_waitingtime = 0;
TEMPSHOW_TIMER = 0;
UI_TIMER = 0;
G6_TIMER = 0;
}
}
break;
case KEY_V2:
if(gIs_restartkey != 1) {
Set_CtrlStatus(THERMOMETER);
UI_TIMER = 0;
Set_LongKeyFlag(1);
}
break;
case KEY_CN|KEY_V3:
break;
}
if(gIs_restartkey && (KD_TIMER == 0)) {
gIs_restartkey = 0;
Set_gKey(NO_KEY);
}
if(Read_Vb(1) == 0){
if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
Set_CtrlStatus(ALARM);
}
if(gPre_status != WAIT && gPre_status != IDLE){
G6_TIMER = device_info.idle_time;
Set_gKey(NO_KEY);
gPre_status = IDLE;
}
break;
case TEMP_CTR:
switch(Get_gKey()) {
case KEY_CN|KEY_V1:
case KEY_CN|KEY_V2:
Set_HeatingTime(0);
Set_CtrlStatus(TEMP_SET);
HEATING_TIMER = 0;
EFFECTIVE_KEY_TIMER = 500;
break;
case KEY_CN|KEY_V3:
Set_HeatingTime(0);
Set_LongKeyFlag(0);
Set_CtrlStatus(IDLE);
gPre_status = TEMP_CTR;
gIs_restartkey = 1;
KD_TIMER = 50; //
break;
}
if(Read_Vb(1) >= 4) {
Set_HeatingTime(0);
Set_LongKeyFlag(0);
Set_CtrlStatus(IDLE);
gPre_status = TEMP_CTR;
gIs_restartkey = 1;
KD_TIMER = 50; // 2<><32>
}
wk_temp = device_info.t_work;
if(HEATING_TIMER == 0) {
gTemp_data = Get_Temp(wk_temp);
heat_timecnt = Heating_Time(gTemp_data,wk_temp); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Set_HeatingTime(heat_timecnt);
HEATING_TIMER = HEATINGCYCLE;
}
if(Get_HeatingTime() == 0) {
HEATING_TIMER = 0;
}
mma_active = Get_MmaShift();
if(mma_active == 0) { //MMA_active = 0 ==> static ,MMA_active = 1 ==>move
if(init_waitingtime == 0) {
init_waitingtime = 1;
ENTER_WAIT_TIMER = device_info.wait_time;
}
if((init_waitingtime != 0) && (ENTER_WAIT_TIMER == 0)) {
gHt_flag = 0;
UI_TIMER = 0;
Set_HeatingTime(0);
Set_gKey(0);
G6_TIMER = device_info.idle_time;
Set_CtrlStatus(WAIT);
}
} else {
init_waitingtime = 0;
}
if(Get_AlarmType() > NORMAL_TEMP) { //////////////////<2F><><EFBFBD><EFBFBD>
if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
Set_CtrlStatus(ALARM);
}
break;
case WAIT:
wk_temp = device_info.t_standby;
if(device_info.t_standby > device_info.t_work) { //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȱȹ<C8B1><C8B9><EFBFBD><EFBFBD>¶ȸ<C2B6>
wk_temp = device_info.t_work;
}
if(HEATING_TIMER == 0) {
gTemp_data = Get_Temp(wk_temp);
heat_timecnt = Heating_Time(gTemp_data,wk_temp); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Set_HeatingTime(heat_timecnt);
HEATING_TIMER = 30;
}
if(Read_Vb(1) >= 4) {
Set_HeatingTime(0);
Set_LongKeyFlag(0);
Set_CtrlStatus(IDLE);
G6_TIMER = device_info.idle_time;
gPre_status = WAIT;
gIs_restartkey = 1;
KD_TIMER = 50; // 2<><32>
}
if(G6_TIMER == 0) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Set_HeatingTime(0);
Set_LongKeyFlag(0);
gIs_restartkey = 1;
KD_TIMER = 200; // 2<><32>
gPre_status = WAIT;
Set_CtrlStatus(IDLE);
}
mma_active = Get_MmaShift();
if(mma_active == 1 || Get_gKey() != 0) {
UI_TIMER = 0;
G6_TIMER = 0;
init_waitingtime = 0;
Set_CtrlStatus(TEMP_CTR);
}
if(Get_AlarmType() > NORMAL_TEMP) { //////////////////<2F><><EFBFBD><EFBFBD>
if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
Set_CtrlStatus(ALARM);
}
break;
case TEMP_SET:
if(EFFECTIVE_KEY_TIMER == 0) {
Set_CtrlStatus(TEMP_CTR);
TEMPSHOW_TIMER = 0;
}
break;
case THERMOMETER:
if(KD_TIMER > 0) {
Set_gKey(NO_KEY);
break;
}
switch(Get_gKey()) {
case KEY_CN|KEY_V1:
case KEY_CN|KEY_V2:
back_prestatus = 1;
break;
case KEY_CN|KEY_V3:
Zero_Calibration();
if(Get_CalFlag() == 1) {
Disk_BuffInit();
Config_Analysis(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55>
}
KD_TIMER = 200; //20150717 <20>޸<EFBFBD>
break;
default:
break;
}
if(back_prestatus == 1) {
back_prestatus = 0;
Set_HeatingTime(0);
Set_CtrlStatus(IDLE);
gPre_status = THERMOMETER;
gIs_restartkey = 1;
Set_LongKeyFlag(0);
KD_TIMER = 50; //
}
break;
case ALARM:
switch(Get_AlarmType()) {
case HIGH_TEMP:
case SEN_ERR:
wk_temp = device_info.t_work;
gTemp_data = Get_Temp(wk_temp);
if(Get_AlarmType() == NORMAL_TEMP) {
Set_CtrlStatus(TEMP_CTR);
Set_UpdataFlag(0);
}
break;
case HIGH_VOLTAGE:
case LOW_VOLTAGE:
if(Read_Vb(1) >= 1 && Read_Vb(1) <= 3) {
Set_HeatingTime(0);
Set_LongKeyFlag(0);
gIs_restartkey = 1;
UI_TIMER = 2; // 2<><32>
gPre_status = THERMOMETER;
Set_CtrlStatus(IDLE);
}
break;
}
if(Get_HeatingTime != 0) {
Set_HeatingTime(0) ; //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
HEAT_OFF();
}
break;
default:
break;
}
}
/******************************** END OF FILE *********************************/