diff --git a/checker_gen1.uvoptx b/checker_gen1.uvoptx
index 2d73e36..18269cd 100644
--- a/checker_gen1.uvoptx
+++ b/checker_gen1.uvoptx
@@ -120,7 +120,7 @@
0
DLGUARM
- d
+ 4
0
@@ -153,12 +153,36 @@
UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM))
-
+
+
+ 0
+ 0
+ 99
+ 1
+ 134399730
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ .\source\rt_thread\board.c
+
+ \\checker_gen1_app\source/rt_thread/board.c\99
+
+
+
+
+ 0
+ 1
+ g_tempptr
+
+
1
- 0
- errbit
+ 8
+ file
0
@@ -370,7 +394,24 @@
UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM))
-
+
+
+ 0
+ 0
+ 99
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .\source\rt_thread\board.c
+
+
+
+
0
@@ -1428,7 +1469,7 @@
lwip
- 1
+ 0
0
0
0
diff --git a/python/checker_save.py b/python/checker_save.py
index d93f66f..e057a32 100644
--- a/python/checker_save.py
+++ b/python/checker_save.py
@@ -2,21 +2,69 @@
import lupa
from lupa import LuaRuntime
import execjs
+import json
+
+
+
+
+def lua_test(lua_file:str,json_file:str,data:bytearray):
+ # 初始化lua运行环境
+ lua = LuaRuntime(unpack_returned_tuples=True)
+ # 初始化全局变量 json
+ save_json=lua.eval("function(a) json=a end")
+ with open("file/json.lua",encoding="utf-8") as f:
+ save_json(lua.execute(f.read()))
+ # 初始化全局变量 prints
+ save_prints=lua.eval("function(a) prints=a end")
+ with open("file/prints.lua",encoding="utf-8") as f:
+ save_prints(lua.execute(f.read()))
+ # 初始化全局变量 cfg_name
+ lua.execute("cfg_name=\""+json_file+"\"\n")
+ # 初始化全局变量 check_data
+ s=data.hex(' ')
+ # print("输入数据",s)
+ s=s.replace(" ",",0x")
+ s="0x"+s
+ lua.execute("check_data={"+s+"}\n")
+ # 执行判定脚本
+ with open(lua_file,encoding="utf-8") as f:
+ a,b=lua.execute(f.read())
+ print(a,b)
+
+
class save:
- def __init__(self) -> None:
- pass
+ def __init__(self,scheme:str) -> None:
+ self.scheme=scheme
+ with open(scheme,"rb") as f:
+ self.json_obj=json.loads(f.read())
+
+ # 计算返回参数个数
+ def calc_retnum(self):
+ num=0
+ for i in self.json_obj["TaskArray"]:
+ num=num+i["ReturnCount"]
+ return num
+ # 计算超限错误字节个数
+ def calc_parerrnum(self):
+ return (self.calc_retnum()+7)//8
+
+ # 调用这个函数保存数据
def save(self,data:bytearray):
d=data[1:]
+ ret_num=self.calc_retnum()*2+8+self.calc_parerrnum()
for i in range(20):
- self.save_item(d[i*28:i*28+28])
+ self.save_item(d[i*ret_num:i*ret_num+ret_num])
def save_item(self,d:bytearray):
+ # print("save_item",d.hex(" "))
+ errnum=self.calc_parerrnum()
s='=\"'+d[0:8].hex()+'\"'+','
- s+='=\"'+self.hex2bit(d[8:10])+'\"'+','
- s+=self.hex2int(d[10:])
- print(d[8:10].hex(' '))
+ s+='=\"'+self.hex2bit(d[8:8+errnum])+'\"'+','
+ s+=self.hex2int(d[8+errnum:])
+ # print(d[8:8+errnum].hex(' '))
print(s)
+ lua_test("file/judge-xt.lua",self.scheme,d)
with open("./file/save.csv","+a") as f:
f.write(s+'\n')
def hex2int(self,d:bytearray):
@@ -40,25 +88,6 @@ class save:
-def lua_test():
- # 初始化lua运行环境
- lua = LuaRuntime(unpack_returned_tuples=True)
- # 初始化全局变量 json
- save_json=lua.eval("function(a) json=a end")
- with open("file/json.lua",encoding="utf-8") as f:
- save_json(lua.execute(f.read()))
- # 初始化全局变量 prints
- save_prints=lua.eval("function(a) prints=a end")
- with open("file/prints.lua",encoding="utf-8") as f:
- save_prints(lua.execute(f.read()))
- # 初始化全局变量 cfg_name
- lua.execute("cfg_name=\"file/checker_ye_cfg.json\"\n")
- # 初始化全局变量 check_data
- lua.execute("check_data={0xB5,0x96,0xEC,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x21,0x00,0x12,0x01,0x00,0x00,0x00,0x00,0xB5,0x00,0xB1,0x00,0x6B,0x00,0x00,0x00,0xA5,0x02,0xA4,0x02,0x00,0x00,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}\n")
- # 执行判定脚本
- with open("file/judge.lua",encoding="utf-8") as f:
- a,b=lua.execute(f.read())
- print(a,b)
def js_test():
@@ -71,7 +100,10 @@ def js_test():
if __name__ == "__main__":
- sa=save()
- print(sa.hex2bit(bytes([0xab,0xcd])))
- # lua_test()
- js_test()
+ # sa=save()
+ # print(sa.hex2bit(bytes([0xab,0xcd])))
+ # js_test()
+ check_data=bytearray([0xB5,0x96,0xEC,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x21,0x00,0x12,0x01,0x00,0x00,0x00,0x00,0xB5,0x00,0xB1,0x00,0x6B,0x00,0x00,0x00,0xA5,0x02,0xA4,0x02,0x00,0x00,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00])
+ lua_test("file/judge-xt.lua","file/EX_Coder_Test_2023-07-4.json".encode("gbk").decode("utf-8"),check_data)
+ # lua_test("file/judge-xt.lua","file/checker_ye_cfg.json",check_data)
+
diff --git a/python/checker_test.py b/python/checker_test.py
index c6ed527..42167d2 100644
--- a/python/checker_test.py
+++ b/python/checker_test.py
@@ -144,13 +144,14 @@ class port:
def send(self,cmd:int,data:bytearray):
self.cmd=cmd
self.cmd_no+=1
- # print("send:",data.hex(","))
- self.ser.write(self.encode(data))
+ d=self.encode(data)
+ # print("send:",d.hex(","))
+ self.ser.write(d)
# 测试批检仪
- def checker_test(self,times:int):
+ def checker_test(self,times:int,scheme:str):
print("批检仪测试:")
tick=0
- save=checker_save.save()
+ save=checker_save.save(scheme)
data=bytearray()
while(ticklen(acks)*8) or index<1 then
+ print("index out of range.index=",index)
+ return false
+ end
+ local temp=acks[math.floor((index-1)/8)+1]
+ local i=(index-1)%8
+ if ((math.floor((temp % exp2(i+1))/exp2(i)))~=0) then
+ return false
+ else
+ return true
+ end
+end
+
+
+-- 展示任务回复,0成功,1失败
+function show_acks(acks)
+ -- prints:print_a(acks)
+ print("return_ack:(0:ok;1:err)")
+ local str=""
+ for i=1,len(json_table["TaskArray"]),1 do
+ local ack=find_ack(i,acks)
+ if ack==true then
+ str=str.."0, "
+ else
+ str=str.."1, "
+ end
+ end
+ print(str)
+end
+
+
+
+-- 统计指定index之前应该跳过的数据长度和当前index的返回长度
+function calc_skip(index,tasks)
+ local len=0
+ -- for i=1,table.getn(tasks),1 do
+ local i=1
+ while i39000) then
+ del(err_code,0)
+ print("check current")
+ return find_index(task["TaskIndex"]+2,3)
+ elseif(ret_value[2]<1) then
+ -- 新小板程序在开路时会返回0,保险起见还是看一下电流
+ del(err_code,0)
+ print("check current")
+ return find_index(task["TaskIndex"]+2,3)
+ end
+ ---- 排除检测板异常
+ del(err_code,1)
+ print("check chip UID")
+ -- 下一步检测UID
+ return find_index(task["TaskIndex"]+2,4)
+ end
+end
+
+
+
+
+-- 扫描uid,成功则芯片正常,返回下一个检测任务,nil停止检测
+function XT_Test_ScanUID(task,err_code)
+ if(find_ack(task["TaskIndex"]+1,mid(check_data,1,8))==false)then
+ -- 通信失败,返回芯片异常,检测结束
+ print("task failed.task_index=",task["TaskIndex"])
+ only(err_code,5)
+ return nil
+ else
+ -- ret_value=find_return(task["TaskIndex"]+1)
+ -- -- 最大反馈时间在范围之外,芯片异常
+ -- if(ret_value[2]task["TestStandard"][2]["Max"]) then
+ -- only(err_code,5)
+ -- return nil
+ -- end
+
+ print("check charge")
+ return find_index(task["TaskIndex"]+2,8)
+ --print("读取芯片代码")
+ --return find_index(task["TaskIndex"]+2,6)
+ end
+end
+
+
+
+
+
+
+-- 判断低压电流,返回下一个检测任务,nil停止检测
+function XT_Test_BaseCurLow(task,err_code)
+ if(find_ack(task["TaskIndex"]+1,mid(check_data,1,8))==false)then
+ -- 电流检测错误只能是检测器异常,检测结束
+ print("task failed.task_index=",task["TaskIndex"])
+ only(err_code,1)
+ return nil
+ else
+ -- 返回正向电流,反向电流
+ ret_value=find_return(task["TaskIndex"]+1)
+ print("current:",ret_value[1])
+ -- 电流为0,开路,返回接触异常
+ if(ret_value[1]<10) and (ret_value[2]<10)then
+ only(err_code,3)
+ return nil
+ -- 电流过大,短路,返回芯片异常
+ elseif((ret_value[1]>task["TestStandard"][1]["Max"]) and (ret_value[1]<1500))
+ or ((ret_value[2]>task["TestStandard"][2]["Max"]) and (ret_value[2]<1500))
+ then
+ only(err_code,5)
+ return nil
+ elseif((ret_value[1]>1500) and (ret_value[2]>1500))then
+ only(err_code,3)
+ return nil
+ end
+ -- 排除接触异常
+ del(err_code,3)
+ print("read chip UID")
+ -- 下一步检测芯片
+ return find_index(task["TaskIndex"]+2,4)
+ -- print("读取芯片代码")
+ -- return find_index(task["TaskIndex"]+2,6)
+ end
+end
+
+
+-- 检测充能,失败则电容异常
+function JQ_Test_ChgEnergy(task,err_code)
+ if(find_ack(task["TaskIndex"]+1,mid(check_data,1,8))==false)then
+ -- 充能错误只能是检测器异常,检测结束
+ print("task failed.task_index=",task["TaskIndex"])
+ only(err_code,1)
+ return nil
+ else
+ ret_value=find_return(task["TaskIndex"]+1)
+ if((ret_value[1]>task["TestStandard"][1]["Max"]) or (ret_value[1]task["TestStandard"][2]["Max"]) or (ret_value[2]task["TestStandard"][3]["Max"]) or (ret_value[3]1)then
+ -- 如果找不到任务,则应该是方案错误,这里返回其他异常
+ print("can not find task,fun_index=",fun_index)
+ insert(err_code,6)
+ end
+ break
+ end
+ fun_index=task["TaskIndex"]+1
+ task=tasks_judge_fun[fun_index](task,err_code)
+ end
+ return err_code
+end
+
+-- 判断一个任务的子错误
+function judge_task(task,data)
+ local range=task["TestStandard"]
+ local ret={}
+ -- print("judge task")
+ if range~=nil then
+ -- print("judge task")
+ for i=1,len(range),1 do
+ if(data[i]range[i]["Max"]) then
+ -- print("task=",task["TaskBrief"],"out of range:")
+ -- print("err code=",task["ResultErrCode"][i])
+ table.insert(ret,task["ResultErrCode"][i])
+ end
+ end
+ end
+ return ret
+end
+
+
+-- 依次判断主错误
+function judge_list()
+ local acks=mid(check_data,1,8)
+ for i=1,len(json_table["TaskArray"]),1 do
+ local ack=find_ack(i,acks)
+ local task_p=json_table["TaskArray"][i]
+ local ret_value=find_return(i)
+ local err_code=judge_task(task_p,ret_value)
+ if ack==false then
+ table.insert(err_code,task_p["ExecuteErrCode"])
+ end
+ if len(err_code)>0 then
+ print("task:",task_p["TaskBrief"],"err_code:")
+ prints:print_a(err_code)
+ return get_err_code(err_code)
+ end
+ end
+ return nil
+end
+
+
+-- 要校验小板的版本号,方案的版本号
+-- 脚本产生的异常从210开始,0xd2
+
+function check_env()
+ -- 校验输入数据的长度
+ local skip,l=calc_skip(len(json_table["TaskArray"]),json_table["TaskArray"])
+ -- print("requier len=",skip+l)
+ local num_requre=skip+l+8+check_erryternum
+ if(num_requre>len(check_data)) then
+ print("check data too less.",num_requre,len(check_data))
+ return "数据长度与方案不符",210
+ end
+ -- if(json_table["PlanID"]~=PLAN_ID) then
+ -- print("plan id check err.")
+ -- return "方案ID不符",211
+ -- end
+ return "ok",0
+end
+
+
+
+
+
+function main()
+ check_erryternum=clac_cfg_errbytenum()
+ local err_str_table={"检测器异常","主电容异常","接触异常","桥丝阻值异常","芯片异常"}
+ local ch_err,ch_code=check_env()
+ if(ch_code~=0) then
+ return ch_err,ch_code
+ end
+ -- 展示任务执行结果
+ show_acks(mid(check_data,1,8))
+ -- 开始判定
+ local err_code=judge()
+ if(len(err_code)>1) then
+ prints:print_a(err_code)
+ return "检测项目不足,无法判定",212
+ end
+ prints:print_a(err_code)
+ local err=get_err_code(err_code)
+ if(err~=nil) then
+ if(err==0) then
+ err=judge_list()
+ if(err==nil)then
+ return "ok",0
+ else
+ return "具体错误待定义",err
+ end
+ else
+ return err_str_table[err],err
+ end
+ else
+ print("err:err_code is none.")
+ return "数据不合规",213
+ end
+end
+
+
+-- 先返回错误描述,再返回错误码
+return main()
+
+
+
diff --git a/python/prottcp.py b/python/prottcp.py
index 1d285b5..ca03f77 100644
--- a/python/prottcp.py
+++ b/python/prottcp.py
@@ -441,12 +441,12 @@ if __name__ == "__main__":
# u.init("utcp:7777")
# u.send_file(0xee,"file/JQ_JCXB_V54.bin")
# u.send_file(0xed,"../Objects/checker_gen1_app_20230602.bin")
- u.cmd=0x01
+ u.cmd=0x34
print(u.encode(bytearray([0x0a,0x00])).hex(' '))
- # with open("file/EX三码绑定测试2023-06-26.json","rb") as f:
+ # with open("file/EX三码绑定测试2023-07-3.json","rb") as f:
# json_obj=json.loads(f.read())
# d=scheme_to_byte(json_obj)
- # # print("len=",len(d),d.hex(","))
+ # print("len=",len(d),d.hex(","))
# d+=scheme_to_host(json_obj)
diff --git a/source/ReadMe.txt b/source/ReadMe.txt
index 191a7bc..e37a5cd 100644
--- a/source/ReadMe.txt
+++ b/source/ReadMe.txt
@@ -129,4 +129,7 @@
解决不插网线会导致程序重启的bug
2023.6.28
要实现重复注相同码不报错的功能,重复检测不报错,要使用两套方案
+2023.7.3
+ 检测错误码
+ 解决tcp下升级方案死机的问题,原因是内存没有回收导致的内存不足
\ No newline at end of file
diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h
index d731545..c53d27a 100644
--- a/source/main/compiler_info.h
+++ b/source/main/compiler_info.h
@@ -6,8 +6,8 @@
-#define BUILD_DATE "2023-06-28 18:04:06"
-#define SOFT_VERSION "0.01"
+#define BUILD_DATE "2023-07-04 09:17:01"
+#define SOFT_VERSION "0.10"
diff --git a/source/prebuild.py b/source/prebuild.py
index ba5f379..006dd11 100644
--- a/source/prebuild.py
+++ b/source/prebuild.py
@@ -4,6 +4,13 @@ import datetime
from datetime import datetime, timedelta
+
+
+# 定义软件版本号
+SOFT_VERION = "0.10"
+
+
+
# 定义mod文件的名称和路径
MOD_FILE="mod_signals.c"
MOD_PATH="./source/task/"
@@ -126,7 +133,7 @@ def creat_compile_info(dst:str):
f.write("#ifndef compiler_info__\n")
f.write("#define compiler_info__\n\n\n\n\n\n\n")
f.write("#define BUILD_DATE \""+utc_time+"\"\n")
- f.write("#define SOFT_VERSION \"0.01\"\n")
+ f.write("#define SOFT_VERSION \""+SOFT_VERION+"\"\n")
f.write("\n\n\n\n\n\n\n#endif\n")
diff --git a/source/soft/bytearray.c b/source/soft/bytearray.c
index de50686..ac50bde 100644
--- a/source/soft/bytearray.c
+++ b/source/soft/bytearray.c
@@ -9,7 +9,7 @@
-#define ARR_MAX_PRINT_LEN 20
+#define ARR_MAX_PRINT_LEN 50
#define ARRAY_APPEND_SKIP 50
diff --git a/source/soft/mystdlib.c b/source/soft/mystdlib.c
index 4e77273..67d5035 100644
--- a/source/soft/mystdlib.c
+++ b/source/soft/mystdlib.c
@@ -144,12 +144,17 @@ void *malloc(uint32_t size)
{
mallco_dev *self=&g_self;
uint32_t offset;
+ int used=0;
void *ret_addr=NULL;
offset=mem_malloc(size);
if (offset!=0XFFFFFFFF)
{
ret_addr=(void*)((uint32_t)self->membase+offset);
}
+ else{
+ used=mem_perused();
+ param_check(used);
+ }
return ret_addr;
}
diff --git a/source/task/tran_for_coder2.c b/source/task/tran_for_coder2.c
index a14edd5..8dcd71c 100644
--- a/source/task/tran_for_coder2.c
+++ b/source/task/tran_for_coder2.c
@@ -319,13 +319,19 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
uint32_t errcode=0;
uint8_t *ack_d=&w->ack[(addr)*6];
ack_d[0]=addr+slave_addr_off();
- ack_d[1]=ack;
+ if(ack==-1) ack_d[1]=208; // 208表示通信超时
+ else ack_d[1]=ack==0?0:209;// 209表示小板返回了命令失败
// TODO: 还有4字节数据
- errcode=in_range_err(arr_data(data)+8+8,arr_data(data));
- ack_d[2]=errcode&0xff;
- ack_d[3]=(errcode>>8)&0xff;
- ack_d[4]=(errcode>>16)&0xff;
- ack_d[5]=(errcode>>24)&0xff;
+ if(data)
+ {
+ errcode=in_range_err(arr_data(data)+8+8,arr_data(data));
+ ack_d[2]=errcode&0xff;
+ ack_d[3]=(errcode>>8)&0xff;
+ ack_d[4]=(errcode>>16)&0xff;
+ ack_d[5]=(errcode>>24)&0xff;
+ if(ack_d[1]==0) ack_d[1]=ack_d[2];
+ }else{
+ }
w->ack_num++;
if(w->ack_num>=10)
diff --git a/source/task/transmit.c b/source/task/transmit.c
index 419208c..4e9e191 100644
--- a/source/task/transmit.c
+++ b/source/task/transmit.c
@@ -371,6 +371,9 @@ static void when_scheme_done(ucport_def *u)
DBG_WARN("can not fond variable \"tran\"");
return;
}
+ DBG_LOG("memused:%d",mem_perused());
+ rt_thread_mdelay(100);
+ DBG_LOG("memused:%d",mem_perused());
for(int i=0;i