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 45d28b2..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/main/compiler_info.h b/source/main/compiler_info.h index a160232..c53d27a 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-07-03 18:20:09" +#define BUILD_DATE "2023-07-04 09:17:01" #define SOFT_VERSION "0.10" 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