更新EW模块驱动

This commit is contained in:
ranchuan
2023-10-31 18:12:21 +08:00
parent 873029149d
commit a83444b3c8
17 changed files with 3483 additions and 355 deletions

View File

@@ -37,12 +37,14 @@
else{\
e->judge_flag[index/8]|=(1<<(index%8));}}\
// 任务执行结果校验
#define EXE_FLAG_CHECK(index)\
(e->exe_flag[index/8]&(1<<(index%8)))?1:0
#define EXE_ACK_CHECK(index)\
(e->exe_ack[index/8]&(1<<(index%8)))?1:0
// 取任务结果的第index位
#define GET_RET_DATA(i)\
(data[i*2]|(data[i*2+1]<<8))
// 获取第i位是否置位
#define BIT_CHECK(d,i)\
((d)[i/8]&(1<<(i%8)))?1:0
// 添加错误代码
@@ -88,7 +90,7 @@ static void elec_task_judge(elec_judge_def *e,int index,uint8_t *data)
TASK_FLAG_CHECK(index);
const scheme_task_def *task=&e->scheme->task[index];
uint16_t temp;
if(EXE_FLAG_CHECK(index)){
if(EXE_ACK_CHECK(index)){
elec_add_errcode(e,task->err);
}
for(int i=0;i<task->item_num;i++){
@@ -101,35 +103,6 @@ static void elec_task_judge(elec_judge_def *e,int index,uint8_t *data)
// 电源准备
static void elec_power_on(elec_judge_def *e,int index,uint8_t *data)
{
INDEX_CHECK(index);
TASK_FLAG_CHECK(index);
const scheme_task_def *task=&e->scheme->task[index];
uint16_t temp;
if(EXE_FLAG_CHECK(index)){
elec_add_errcode(e,1);
}
}
// 上电充能
static void elec_charge(elec_judge_def *e,int index,uint8_t *data)
{
INDEX_CHECK(index);
TASK_FLAG_CHECK(index);
const scheme_task_def *task=&e->scheme->task[index];
uint16_t temp;
temp=GET_RET_DATA(0);
if(temp<task->range[0].min||temp>task->range[0].max){
elec_add_errcode(e,1);
}
temp=GET_RET_DATA(1);
if(temp<task->range[1].min||temp>task->range[1].max){
elec_add_errcode(e,task->range[1].err);
}
}
@@ -176,8 +149,8 @@ static void elec_current(elec_judge_def *e,int index,uint8_t *data)
const static elec_judge_fun g_jq_judge_table[]={
elec_power_on, //0 电源准备
elec_charge, //1 上电充能
elec_task_judge, //0 电源准备
elec_task_judge, //1 上电充能
elec_task_judge, //2 设置总线电压
elec_current, //3 获取总线电流
elec_task_judge, //4 扫描UID
@@ -218,8 +191,8 @@ elec_task_judge, //36 验证缓存数据
const static elec_judge_fun g_xt_judge_table[]={
elec_power_on, //0 电源准备
elec_charge, //1 上电充能
elec_task_judge, //0 电源准备
elec_task_judge, //1 上电充能
elec_task_judge, //2 设置总线电压
elec_current, //3 获取总线电流
elec_task_judge, //4 扫描UID
@@ -263,8 +236,8 @@ elec_task_judge, //38 验证管壳码
const static elec_judge_fun g_ew_judge_table[]={
elec_power_on, //0 电源准备
elec_charge, //1 上电充能
elec_task_judge, //0 电源准备
elec_task_judge, //1 上电充能
elec_task_judge, //2 设置总线电压
elec_current, //3 获取总线电流
elec_task_judge, //4 扫描UID
@@ -353,28 +326,29 @@ int elec_err_classify(int err)
return err;
}
// 根据优先级报错
// 找到异常代码序号
int elec_report_err(elec_judge_def *e)
{
static const uint8_t pro_table[]={1,3,7,8,2,4,5,6,0};
uint8_t err=0;
static const uint8_t pro_table[]={1,3,7,8,2,4,5,6,20,0};
uint8_t index=0;
for (int i=0;i<sizeof(pro_table);i++){
for(int j=0;j<ERR_LIST_LEN;j++){
if(e->err_list[j]==pro_table[i])
return pro_table[i];
if((err==0)&&(e->err_list[j]!=0)){
err=e->err_list[j];
if(e->marerr_list[j]==pro_table[i])
return j;
if((index==0)&&(e->marerr_list[j]!=0)){
index=j;
}
}
}
return err;
return index;
}
// 异常判断
// task_num要判断的任务数
void elec_judge(elec_judge_def *e,int task_num,uint8_t *exe_flag,uint8_t *data)
void elec_judge(elec_judge_def *e,int task_num,uint8_t *exe_ack,
uint8_t *exe_flag,uint8_t *data,uint8_t *marerr,uint8_t *suberr)
{
const scheme_task_def *task;
memset(e,0,sizeof(elec_judge_def));
@@ -383,31 +357,38 @@ void elec_judge(elec_judge_def *e,int task_num,uint8_t *exe_flag,uint8_t *data)
e->judge_fun_num=elec_calc_judge_fun_num(e->judge_fun_table);
e->short_circuited=1500;
e->open_circuited=80;
e->exe_flag=exe_flag;
e->exe_ack=exe_ack;
if(task_num>e->scheme->task_num)
task_num=e->scheme->task_num;
for(int i=0;i<task_num;i++)
{
task=&e->scheme->task[i];
if(task->taskid<e->judge_fun_num){
e->judge_fun_table[i](e,i,data);
}else{
elec_add_errcode(e,6);
// 只判定已执行的任务
if(BIT_CHECK(exe_flag,i)){
task=&e->scheme->task[i];
if(task->taskid<e->judge_fun_num){
e->judge_fun_table[task->taskid](e,i,data);
}else{
elec_add_errcode(e,6);
}
}
data+=task->item_num*2;
}
DBG_LOG("err_table:%02x %02x %02x %02x %02x %02x %02x %02x",
DBG_LOG("err_table:%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
e->err_list[0],e->err_list[1],e->err_list[2],e->err_list[3],e->err_list[4],
e->err_list[5],e->err_list[6],e->err_list[7],e->err_list[8],e->err_list[9]
);
for(int i=0;i<ERR_LIST_LEN;i++){
e->err_list[i]=elec_err_classify(e->err_list[i]);
e->marerr_list[i]=elec_err_classify(e->err_list[i]);
}
DBG_LOG("err_table2:%02x %02x %02x %02x %02x %02x %02x %02x",
DBG_LOG("err_table2:%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
e->err_list[0],e->err_list[1],e->err_list[2],e->err_list[3],e->err_list[4],
e->err_list[5],e->err_list[6],e->err_list[7],e->err_list[8],e->err_list[9]
);
DBG_LOG("err report=%d",elec_report_err(e));
int index=elec_report_err(e);
DBG_LOG("marerr report=%d",e->marerr_list[index]);
DBG_LOG("suberr report=%d",e->err_list[index]);
if(marerr) *marerr=e->marerr_list[index];
if(suberr) *suberr=e->err_list[index];
}