diff --git a/checker_gen1.uvoptx b/checker_gen1.uvoptx
index 18269cd..0b92649 100644
--- a/checker_gen1.uvoptx
+++ b/checker_gen1.uvoptx
@@ -1177,7 +1177,7 @@
rt_thread
- 1
+ 0
0
0
0
@@ -2297,6 +2297,18 @@
0
0
+
+ 13
+ 142
+ 1
+ 0
+ 0
+ 0
+ .\source\coder\coder_judge.c
+ coder_judge.c
+ 0
+ 0
+
@@ -2307,7 +2319,7 @@
0
14
- 142
+ 143
5
0
0
diff --git a/checker_gen1.uvprojx b/checker_gen1.uvprojx
index e9e6aed..d15258b 100644
--- a/checker_gen1.uvprojx
+++ b/checker_gen1.uvprojx
@@ -1351,6 +1351,11 @@
1
.\source\coder\coder_lib.c
+
+ coder_judge.c
+ 1
+ .\source\coder\coder_judge.c
+
@@ -4266,6 +4271,11 @@
1
.\source\coder\coder_lib.c
+
+ coder_judge.c
+ 1
+ .\source\coder\coder_judge.c
+
diff --git a/python/checker_save.py b/python/checker_save.py
index e057a32..03c0c1a 100644
--- a/python/checker_save.py
+++ b/python/checker_save.py
@@ -3,6 +3,8 @@ import lupa
from lupa import LuaRuntime
import execjs
import json
+import datetime
+from datetime import datetime, timedelta
@@ -18,8 +20,16 @@ def lua_test(lua_file:str,json_file:str,data:bytearray):
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")
+ # lua.execute("cfg_name=\""+json_file+"\"\n")
+
+ # 初始化配置字符串
+ save_cfg_str=lua.eval("function(a) check_cfg_str=a end")
+ with open(json_file,encoding="utf-8") as f:
+ a=f.read()
+ save_cfg_str(a)
+
# 初始化全局变量 check_data
s=data.hex(' ')
# print("输入数据",s)
@@ -28,15 +38,20 @@ def lua_test(lua_file:str,json_file:str,data:bytearray):
lua.execute("check_data={"+s+"}\n")
# 执行判定脚本
with open(lua_file,encoding="utf-8") as f:
- a,b=lua.execute(f.read())
- print(a,b)
+ lua.execute(f.read())
+ a,b=lua.globals().main()
+ return a,b
+ return "脚本执行失败",0xd1
class save:
- def __init__(self,scheme:str) -> None:
+ def __init__(self,scheme:str,script:str) -> None:
self.scheme=scheme
+ self.script=script
+ self.save_file=scheme.split(".")[0]+".csv"
+ print("save file:",self.save_file)
with open(scheme,"rb") as f:
self.json_obj=json.loads(f.read())
@@ -54,24 +69,34 @@ class save:
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*ret_num:i*ret_num+ret_num])
- def save_item(self,d:bytearray):
+ slave_num=len(d)//ret_num
+ for i in range(slave_num):
+ print("slave:",i+1)
+ self.save_item(i+1,d[i*ret_num:i*ret_num+ret_num])
+
+ # 保存一个条目
+ def save_item(self,slave_addr:int,d:bytearray):
# print("save_item",d.hex(" "))
errnum=self.calc_parerrnum()
- s='=\"'+d[0:8].hex()+'\"'+','
+ s=str(slave_addr)+','
+ s+='=\"'+d[0:8].hex()+'\"'+','
s+='=\"'+self.hex2bit(d[8:8+errnum])+'\"'+','
s+=self.hex2int(d[8+errnum:])
# print(d[8:8+errnum].hex(' '))
+ a,b=lua_test(self.script,self.scheme,d)
+ s=s+a+','+str(b)
print(s)
- lua_test("file/judge-xt.lua",self.scheme,d)
- with open("./file/save.csv","+a") as f:
+ with open(self.save_file,"+a") as f:
f.write(s+'\n')
+
+ # 把两个字节拼为一个int
def hex2int(self,d:bytearray):
s=""
for i in range(len(d)//2):
s+=str(d[i*2]|(d[i*2+1]<<8))+','
return s
+
+ # 把数据转换为二进制字符串
def hex2bit(self,d:bytearray):
s=""
for i in range(len(d)*8):
diff --git a/python/checker_test.py b/python/checker_test.py
index 42167d2..48775ed 100644
--- a/python/checker_test.py
+++ b/python/checker_test.py
@@ -58,7 +58,7 @@ class port:
self.ser = serial.Serial(port=name, baudrate=bsp,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,timeout=None)
else:
- self.ser=utcp(9527)
+ self.ser=utcp(bsp)
def start_recv(self):
self.thread_ = threading.Thread(target=self.recv, args=())
self.thread_.start()
@@ -123,7 +123,7 @@ class port:
length=data[8]|(data[9]<<8)|(data[10]<<16)|(data[11]<<24)
self.num_to_recv=5+length+2
if(self.num_to_recv>0 and self.num_to_recv==len(data)):
- # print("recv:",data.hex(" "))
+ print("recv:",data.hex(" "))
return self.decode(data)
def encode(self,data:bytearray):
t=bytearray()
@@ -148,10 +148,10 @@ class port:
# print("send:",d.hex(","))
self.ser.write(d)
# 测试批检仪
- def checker_test(self,times:int,scheme:str):
+ def checker_test(self,times:int,scheme:str,script:str):
print("批检仪测试:")
tick=0
- save=checker_save.save(scheme)
+ save=checker_save.save(scheme,script)
data=bytearray()
while(tickrange[i]["Max"]) then
-- print("task=",task["TaskBrief"],"out of range:")
-- print("err code=",task["ResultErrCode"][i])
@@ -481,12 +480,15 @@ function judge_list()
local ack=find_ack(i,acks)
local task_p=json_table["TaskArray"][i]
local ret_value=find_return(i)
+ -- print("taskindex:",task_p["TaskIndex"])
local err_code=judge_task(task_p,ret_value)
+ -- print("err_code:")
+ -- prints:print_a(err_code)
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:")
+ -- print("task:",task_p["TaskBrief"],"err_code:")
prints:print_a(err_code)
return get_err_code(err_code)
end
@@ -519,6 +521,14 @@ end
function main()
+ -- 读取方案配置信息
+ -- print(cfg_name)
+ if(check_cfg_str==nil)then
+ check_cfg_file=io.open(cfg_name,"r")
+ check_cfg_str=check_cfg_file:read("*a")
+ check_cfg_file:close()
+ end
+ json_table = json:decode(check_cfg_str)
check_erryternum=clac_cfg_errbytenum()
local err_str_table={"检测器异常","主电容异常","接触异常","桥丝阻值异常","芯片异常"}
local ch_err,ch_code=check_env()
@@ -554,7 +564,7 @@ end
-- 先返回错误描述,再返回错误码
-return main()
+-- return main()
diff --git a/python/prottcp.py b/python/prottcp.py
index ca03f77..a041b7c 100644
--- a/python/prottcp.py
+++ b/python/prottcp.py
@@ -147,6 +147,8 @@ def arr_from_int(num:int):
def scheme_get_task_range(j:json):
t=bytearray()
return_count=j["ReturnCount"]
+ t+=j["TaskID"]
+ t+=j["TaskIndex"]
t+=arr_from_int(return_count)
t+=arr_from_int(j["ExecuteErrCode"])
index=0
diff --git a/source/ReadMe.txt b/source/ReadMe.txt
index e37a5cd..4aa4ab6 100644
--- a/source/ReadMe.txt
+++ b/source/ReadMe.txt
@@ -132,4 +132,8 @@
2023.7.3
检测错误码
解决tcp下升级方案死机的问题,原因是内存没有回收导致的内存不足
+2023.7.6
+ UID转存储码特征码从*10000改为*100000
+ 赋码仪接收上位机的0x81,0x82回复
+ 添加错误判断,未完成
\ No newline at end of file
diff --git a/source/coder/coder_judge.c b/source/coder/coder_judge.c
new file mode 100644
index 0000000..f18701c
--- /dev/null
+++ b/source/coder/coder_judge.c
@@ -0,0 +1,215 @@
+#include "coder_judge.h"
+#include "dev_flash.h"
+#include "string.h"
+
+
+// d aУظ
+static void c_insert(uint8_t *a,uint8_t d)
+{
+ int len=sizeof(uint8_t [6]);
+ for(int i=0;itask_num;i++)
+ {
+ t=&s->task[i];
+ if(t->taskid==taskid)
+ return t;
+ }
+ return 0;
+}
+
+// ȡindexIJ
+
+
+// ȡindexΧ
+static int get_range(int index,int *min,int *max)
+{
+ const scheme_def *s=check_scheme();
+ const scheme_task_def *t;
+ int index_p=0;
+ for(int i=0;itask_num;i++)
+ {
+ t=&s->task[i];
+ for(int j=0;jitem_num;j++)
+ {
+ if(index_p==index)
+ {
+ if(min) *min=t->range[j].min;
+ if(max) *max=t->range[j].max;
+ return index_p;
+ }
+ index_p++;
+ }
+ }
+ return index_p;
+}
+
+
+// ȡindex
+static int get_data(const uint8_t *data,int index)
+{
+ data+=16;
+ return data[index*2]|(data[index*2+1]<<8);
+}
+
+// ȡindexǷɹ1ʧܣ0ɹ
+static int get_ack(const uint8_t *data,int index)
+{
+ if(data[index/8]&(1<<(index%8)))
+ return 1;
+ else
+ return 0;
+}
+
+
+//-- 쳣,1
+//-- 쳣,2
+//-- Ӵ쳣,3
+//-- ˿ֵ쳣,4
+//-- оƬ쳣,5
+//-- 7
+//-- ·8
+
+#define TASK_RETURN(task) {\
+ if(task==0) return 6; \
+ else index+=1;\
+}// Ҳ
+
+uint8_t coder_judge(const uint8_t *data)
+{
+ int temp,temp2;
+ int index=0;
+ const scheme_task_def *task=0;
+
+ //
+ task=find_task_next(index,0);
+ TASK_RETURN(task);
+ {
+ if(get_ack(data,0))
+ {
+ // ϵ쳣
+ return 1;
+ }
+ }
+
+ // ϵ
+ task=find_task_next(index,1);
+ TASK_RETURN(task);
+ {
+ temp=get_data(data,0);
+ if(temprange[0].min)
+ {
+ // ѹ쳣
+ return 1;
+ }
+ temp=get_data(data,1);
+ if((temp>39000)||(temp<1)){
+ // ʧܣ
+ }
+ }
+
+ //
+ task=find_task_next(index,4);
+ TASK_RETURN(task);
+ temp=get_data(data,5);
+ temp2=get_data(data,6);
+ if((temp<10)&&(temp2<20))
+ {
+ // Ӵ쳣
+ return 3;
+ }
+ else if(((temp>task->range[0].max)&&(temp<1500))||
+ ((temp2>task->range[0].max)&&(temp2<1500)))
+ {
+ //
+ return 7;
+ }else if((temp>1500)&&(temp2>1500))
+ {
+ // ·
+ return 8;
+ }
+
+
+ // uid
+ task=find_task_next(index,5);
+ TASK_RETURN(task);
+ if(get_ack(data,task->taskindex))
+ {
+ // оƬ
+ return 5;
+ }
+
+ // ˿
+ task=find_task_next(index,6);
+ TASK_RETURN(task);
+ temp=get_data(data,7);
+ if((temprange[0].min)||(temp>task->range[0].max))
+ {
+ // ˿
+ return 4;
+ }
+
+ //
+
+
+ return 0;
+}
+
+
+
diff --git a/source/coder/coder_judge.h b/source/coder/coder_judge.h
new file mode 100644
index 0000000..c2504c2
--- /dev/null
+++ b/source/coder/coder_judge.h
@@ -0,0 +1,16 @@
+#ifndef coder_judge_h__
+#define coder_judge_h__
+
+#include "stdint.h"
+
+
+
+uint8_t coder_judge(const uint8_t *data);
+
+
+
+
+
+
+#endif
+
diff --git a/source/coder/coder_lib.c b/source/coder/coder_lib.c
index 393b691..b4d1f1f 100644
--- a/source/coder/coder_lib.c
+++ b/source/coder/coder_lib.c
@@ -129,7 +129,8 @@ int coder_uid_to_save(const char *uid_code,uint8_t *save_code)
ymd|=coder_strint_to_byte(&uid_code[8],2);
save_code[2]=ymd>>8;
save_code[3]=ymd&0xff;
- feature=uid_code[10]*10000;
+ // 文档 YM-UID设计V1.2 - 2023.xlsx 规定*10000,实际是*100000
+ feature=uid_code[10]*100000;
feature+=coder_strint_to_byte(&uid_code[11],3)*100;
feature+=coder_strint_to_byte(&uid_code[14],2);
save_code[4]=feature>>16;
@@ -174,8 +175,8 @@ int coder_save_to_uid(const uint8_t *save_code,char *uid_code)
ret|=coder_int_to_strint(ymd>>9,&uid_code[2],2);
ret|=coder_int_to_strint((ymd>>5)&0x0f,&uid_code[6],2);
ret|=coder_int_to_strint((ymd)&0x1f,&uid_code[8],2);
- uid_code[10]=feature/10000;
- ret|=coder_int_to_strint(feature%10000/100,&uid_code[11],3);
+ uid_code[10]=feature/100000;
+ ret|=coder_int_to_strint(feature%100000/100,&uid_code[11],3);
ret|=coder_int_to_strint(feature%100,&uid_code[14],2);
return ret;
}
diff --git a/source/dev/dev_flash.h b/source/dev/dev_flash.h
index 3867314..511940f 100644
--- a/source/dev/dev_flash.h
+++ b/source/dev/dev_flash.h
@@ -85,9 +85,9 @@ const sys_param_def *sys_param(void);
__packed
typedef struct{
- uint32_t max;
- uint32_t min;
- uint32_t err;
+ uint32_t max;
+ uint32_t min;
+ uint32_t err;
}scheme_range_def;
@@ -95,9 +95,11 @@ typedef struct{
__packed
typedef struct
{
- uint32_t item_num;
- uint32_t err;
- scheme_range_def range[16];
+ uint32_t taskid;
+ uint32_t taskindex;
+ uint32_t item_num;
+ uint32_t err;
+ scheme_range_def range[16];
}scheme_task_def;
// 方案参数
diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h
index c53d27a..aa788c4 100644
--- a/source/main/compiler_info.h
+++ b/source/main/compiler_info.h
@@ -6,7 +6,7 @@
-#define BUILD_DATE "2023-07-04 09:17:01"
+#define BUILD_DATE "2023-07-06 19:01:21"
#define SOFT_VERSION "0.10"
diff --git a/source/task/tran_for_coder2.c b/source/task/tran_for_coder2.c
index 8dcd71c..c6de619 100644
--- a/source/task/tran_for_coder2.c
+++ b/source/task/tran_for_coder2.c
@@ -11,6 +11,7 @@
#include "coder_lib.h"
#include "PSDGenerate.h"
#include "mystring.h"
+#include "coder_judge.h"
// 这个文件解析跟赋码仪相关的命令
@@ -93,6 +94,8 @@ static void write_uid_end(ucport_def *u,port_mcu *src,void *data,int ack,char *e
emit tran_send_signal(w->u.p,0x82,arr_temp(a));
tran_set_busy(w->u.p,0);
g_self.step=0;
+ // 把命令字改为0x82用于接收主机应答
+ w->u.cmd=0x82;
}
}
@@ -123,6 +126,14 @@ static void write_del(ucport_def *u)
}
+static int write_uid_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
+{
+ DBG_LOG("recv write_uid end signal.");
+ return 0;
+}
+
+
+
static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
{
if(arr_length(data)<140+4+1){
@@ -134,6 +145,7 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
u->u.p=t;
u->u.del=write_del;
u->u.doend=write_uid_end;
+ u->u.dolater=write_uid_dolater;
u->addrs_num=arr_get(data,0);
memcpy(u->year,arr_data(data)+1,4);
DBG_LOG("coder, year=%s",u->year);
@@ -329,7 +341,13 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
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];
+ if(ack_d[1]==0){
+ // 先判断主要错误,如果没有主要错误,则填充为子错误
+ ack_d[1]=coder_judge(arr_data(data));
+ if(ack_d[1]==0){
+ ack_d[1]=ack_d[2];
+ }
+ }
}else{
}
@@ -342,6 +360,8 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
arr_appends(a,w->ack,(6)*10);
emit tran_send_signal(w->u.p,0x81,arr_temp(a));
tran_set_busy(w->u.p,0);
+ // 把命令字改为0x81用于接收主机应答
+ w->u.cmd=0x81;
g_self.step=1;
}
}
@@ -372,6 +392,11 @@ static void check_del(ucport_def *u)
free(u);
}
+static int check_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
+{
+ DBG_LOG("recv check end signal.");
+ return 0;
+}
static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
@@ -384,6 +409,7 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
u->u.p=t;
u->u.del=check_del;
u->u.doend=check_end;
+ u->u.dolater=check_dolater;
u->addrs_num=arr_get(data,0);
u->type=arr_get(data,0);
// 默认失败