添加错误代码

This commit is contained in:
ranchuan
2023-06-28 18:08:38 +08:00
parent c2b79fe523
commit 28889fa479
21 changed files with 2299 additions and 99 deletions

View File

@@ -120,7 +120,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key> <Key>DLGUARM</Key>
<Name>7</Name> <Name>d</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@@ -157,16 +157,16 @@
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<SubType>1</SubType> <SubType>0</SubType>
<ItemText>0x100004D8</ItemText> <ItemText>errbit</ItemText>
<AccSizeX>0</AccSizeX> <AccSizeX>0</AccSizeX>
</Mm> </Mm>
</MemoryWindow1> </MemoryWindow1>
<MemoryWindow2> <MemoryWindow2>
<Mm> <Mm>
<WinNumber>2</WinNumber> <WinNumber>2</WinNumber>
<SubType>1</SubType> <SubType>0</SubType>
<ItemText>m</ItemText> <ItemText>src_data</ItemText>
<AccSizeX>0</AccSizeX> <AccSizeX>0</AccSizeX>
</Mm> </Mm>
</MemoryWindow2> </MemoryWindow2>
@@ -1428,7 +1428,7 @@
<Group> <Group>
<GroupName>lwip</GroupName> <GroupName>lwip</GroupName>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>

View File

@@ -1,5 +1,6 @@
import lupa
from lupa import LuaRuntime
class save: class save:
@@ -40,5 +41,17 @@ class save:
if __name__ == "__main__": if __name__ == "__main__":
sa=save() sa=save()
print(sa.hex2bit(bytes([0xab,0xcd]))) print(sa.hex2bit(bytes([0xab,0xcd])))
lua = LuaRuntime(unpack_returned_tuples=True)
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()))
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()))
lua.execute("cfg_name=\"file/checker_ye_cfg.json\"\n")
lua.execute("check_data={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}\n")
with open("file/judge.lua",encoding="utf-8") as f:
lua.execute(f.read())
# lua_func = lua.eval('function(a, b) return a+b end')
# print(lua_func(1,2))

View File

@@ -173,5 +173,5 @@ class port:
if __name__ == "__main__": if __name__ == "__main__":
p=port() p=port()
# 批检仪测试 # 批检仪测试
p.open("utcp",0) p.open("com5",115200)
p.checker_test(5) p.checker_test(5)

1869
python/file/json.lua Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -23,8 +23,13 @@ PLAN_ID=15
-- "方案ID不符",211 -- "方案ID不符",211
-- "检测项目不足,无法判定",212 -- "检测项目不足,无法判定",212
-- "数据不合规",213 -- "数据不合规",213
-- 2023.5.11
-- 修改脚本适配 雷管厂电解电容来料检测
-- 2023.5.12
-- 大于启停的时间从检测器异常改为芯片异常
-- 2023.5.19
-- 扫描uid超出最大返回时间范围则显示芯片异常
-- 添加起爆充能失败的判断,此时返回芯片异常
@@ -262,7 +267,7 @@ function JQ_Test_PowerPrapare(task,err_code)
return nil return nil
else else
-- 上电正常,排除检测器异常 -- 上电正常,排除检测器异常
del(err_code,1) -- del(err_code,1)
print("检测上电充能") print("检测上电充能")
-- 下一步是上电充能 -- 下一步是上电充能
return find_index(task["TaskIndex"]+2,1) return find_index(task["TaskIndex"]+2,1)
@@ -300,8 +305,8 @@ function JQ_Test_PowerOn(task,err_code)
print("检测电流") print("检测电流")
return find_index(task["TaskIndex"]+2,3) return find_index(task["TaskIndex"]+2,3)
end end
---- 排除接触异常 ---- 排除检测板异常
--del(err_code,3) del(err_code,1)
print("检测芯片UID") print("检测芯片UID")
-- 下一步检测芯片 -- 下一步检测芯片
return find_index(task["TaskIndex"]+2,4) return find_index(task["TaskIndex"]+2,4)
@@ -319,6 +324,13 @@ function JQ_Test_ScanUID(task,err_code)
only(err_code,5) only(err_code,5)
return nil return nil
else else
ret_value=find_return(task["TaskIndex"]+1)
-- 最大反馈时间在范围之外,芯片异常
if(ret_value[2]<task["TestStandard"][2]["Min"]) or (ret_value[2]>task["TestStandard"][2]["Max"]) then
only(err_code,5)
return nil
end
print("检测电流") print("检测电流")
return find_index(task["TaskIndex"]+2,3) return find_index(task["TaskIndex"]+2,3)
--print("读取芯片代码") --print("读取芯片代码")
@@ -416,12 +428,36 @@ function JQ_Test_BaseCurHigh(task,err_code)
del(err_code,3) del(err_code,3)
print("检测桥丝和电容") print("检测桥丝和电容")
-- 下一步检测桥丝和电容 -- 下一步检测桥丝和电容
return find_index(task["TaskIndex"]+2,12) return find_index(task["TaskIndex"]+2,11)
end end
end end
-- 检测充能,失败则电容异常
function JQ_Test_ChgEnergy(task,err_code)
if(find_ack(task["TaskIndex"]+1,mid(check_data,1,8))==false)then
only(err_code,2)
return nil
else
ret_value=find_return(task["TaskIndex"]+1)
if((ret_value[1]>task["TestStandard"][1]["Max"]) or (ret_value[1]<task["TestStandard"][1]["Min"])) then
only(err_code,2)
return nil
end
if((ret_value[2]>task["TestStandard"][2]["Max"]) or (ret_value[2]<task["TestStandard"][2]["Min"])) then
only(err_code,2)
return nil
end
-- 排除电容异常
del(err_code,2)
print("检测桥丝")
-- 下一步检测桥丝
return find_index(task["TaskIndex"]+2,12)
end
end
-- 检测电容电压,返回下一个检测任务,nil停止检测 -- 检测电容电压,返回下一个检测任务,nil停止检测
function JQ_Test_CheckDAC(task,err_code) function JQ_Test_CheckDAC(task,err_code)
@@ -442,24 +478,39 @@ function JQ_Test_CheckDAC(task,err_code)
only(err_code,4) only(err_code,4)
return nil return nil
else else
-- 排除桥丝异常 ret_value=find_return(task["TaskIndex"]+1)
if((ret_value[1]>task["TestStandard"][1]["Max"]) or (ret_value[1]<task["TestStandard"][1]["Min"])) then
only(err_code,4)
return nil
end
-- 排除电容异常
del(err_code,4) del(err_code,4)
print("检测电容") -- 下一步检测起爆
return find_index(task["TaskIndex"]+2,12) return find_index(task["TaskIndex"]+2,20)
end end
end end
-- 检测电容电压,返回下一个检测任务,nil停止检测 -- 起爆充能
function JQ_Test_CheckDAC2(task,err_code) function JQ_Test_BoomEnergy(task,err_code)
if(find_ack(task["TaskIndex"]+1,mid(check_data,1,8))==false)then if(find_ack(task["TaskIndex"]+1,mid(check_data,1,8))==false)then
-- 检测电压失败则主电容异常 -- 检测电压失败则桥丝或主电容异常
print("task failed.task_index=",task["TaskIndex"]) print("task failed.task_index=",task["TaskIndex"])
only(err_code,2) -- 这里判断上电充能值,如果偏大则桥丝异常,偏小则电容异常
-- 充能流程正常,返回第一个值是电压,第二个值是充能时间
-- local task_p=find_index(1,1)
-- ret_value=find_return(task_p["TaskIndex"]+1)
-- if(ret_value[2]>39999) then
-- only(err_code,4)
-- return nil
-- else
-- only(err_code,2)
-- return nil
-- end
only(err_code,5)
return nil return nil
else else
-- 排除电容异常 -- 排除芯片异常,密码错误会导致起爆失败
del(err_code,2)
del(err_code,5) del(err_code,5)
print("检测完毕") print("检测完毕")
return nil return nil
@@ -469,6 +520,8 @@ end
-- 定义占位函数,不应该调用 -- 定义占位函数,不应该调用
function JQ_Test_Empty(task,err_code) function JQ_Test_Empty(task,err_code)
print("err function call,task index=",task["TaskIndex"]) print("err function call,task index=",task["TaskIndex"])
@@ -479,18 +532,29 @@ end
-- 这个数组根据方案检测顺序确定 -- 这个数组根据方案检测顺序确定
tasks_judge_fun={ tasks_judge_fun={
JQ_Test_PowerPrapare, JQ_Test_PowerPrapare,--0
JQ_Test_PowerOn, JQ_Test_PowerOn,--1
JQ_Test_ScanUID, JQ_Test_ScanUID,--2
JQ_Test_BaseCurLow, JQ_Test_BaseCurLow,--3
JQ_Test_ReadChipID, JQ_Test_ReadChipID,--4
JQ_Test_Empty, JQ_Test_Empty,--5
JQ_Test_BaseCurHigh, JQ_Test_Empty,--6
JQ_Test_Empty, JQ_Test_Empty,--7
JQ_Test_CheckDAC, JQ_Test_BaseCurHigh,--8
JQ_Test_Empty, JQ_Test_Empty,--9
JQ_Test_Empty, JQ_Test_Empty,--10
JQ_Test_CheckDAC2 JQ_Test_Empty,--11
JQ_Test_Empty,--12
JQ_Test_Empty,--13
JQ_Test_Empty,--14
JQ_Test_Empty,--15
JQ_Test_Empty,--16
JQ_Test_ChgEnergy,--17 充能统计
JQ_Test_Empty,--18
JQ_Test_CheckDAC,--19
JQ_Test_Empty,--20
JQ_Test_Empty,--21
JQ_Test_BoomEnergy,--22
} }

84
python/file/prints.lua Normal file
View File

@@ -0,0 +1,84 @@
module = {}
function module:print_t ( t )
local print_r_cache={}
local function sub_print_r(t,indent)
if (print_r_cache[tostring(t)]) then
print(indent.."*"..tostring(t))
else
print_r_cache[tostring(t)]=true
if (type(t)=="table") then
for pos,val in pairs(t) do
if (type(val)=="table") then
print(indent.."["..pos.."] => "..tostring(t).." {")
sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
print(indent..string.rep(" ",string.len(pos)+6).."}")
elseif (type(val)=="string") then
print(indent.."["..pos..'] => "'..val..'"')
else
print(indent.."["..pos.."] => "..tostring(val))
end
end
else
print(indent..tostring(t))
end
end
end
if (type(t)=="table") then
print(tostring(t).." {")
sub_print_r(t," ")
print("}")
else
sub_print_r(t," ")
end
print()
end
function byte_to_hex(byte,size)
local str_table="0123456789ABCDEF"
local str_ret=""
if(size==2) then
str_ret=string.char(
string.byte( str_table,((byte>>12)&0xf)+1),
string.byte( str_table,((byte>>8)&0xf)+1),
string.byte( str_table,((byte>>4)&0xf)+1),
string.byte(str_table,(byte&0xf)+1))
else
str_ret=string.char(string.byte(str_table,(byte%256)//16+1),string.byte(str_table,(byte%256)%16+1))
end
return str_ret
end
-- function byte_to_num(byte)
-- local str_ret=""
-- while true do
-- 打印数组
function module:print_a ( a,size ,fmt)
local str=""
if(a==nil) then return end
if(size==nil) then size=1 end
for pos,val in pairs(a) do
str=str..byte_to_hex(val,size)..", "
end
print(str)
end
function module:__tostring()
return "print table package"
end
return module

View File

@@ -147,13 +147,23 @@ def arr_from_int(num:int):
def scheme_get_task_range(j:json): def scheme_get_task_range(j:json):
t=bytearray() t=bytearray()
return_count=j["ReturnCount"] return_count=j["ReturnCount"]
t+=arr_from_int(return_count)
t+=arr_from_int(j["ExecuteErrCode"])
index=0
for i in j["TestStandard"]: for i in j["TestStandard"]:
t+=arr_from_int(i["Max"]) t+=arr_from_int(i["Max"])
t+=arr_from_int(i["Min"]) t+=arr_from_int(i["Min"])
n=return_count-len(j["TestStandard"]) if (index<len(j["ResultErrCode"])):
t+=arr_from_int(j["ResultErrCode"][index])
else:
t+=arr_from_int(0)
index+=1
# 不足16的部分填充为16
n=16-len(j["TestStandard"])
for i in range(n): for i in range(n):
t+=arr_from_int(65535) t+=arr_from_int(65535)
t+=arr_from_int(0) t+=arr_from_int(0)
t+=arr_from_int(0)
return t return t
# 根据方案生成主板用的字节数据 # 根据方案生成主板用的字节数据
@@ -161,11 +171,9 @@ def scheme_to_host(j:json):
t=bytearray() t=bytearray()
t+=arr_from_int(j["PlanID"]) t+=arr_from_int(j["PlanID"])
t+=arr_from_int(j["TimeOutM"]) t+=arr_from_int(j["TimeOutM"])
b=bytearray() t+=arr_from_int(len(j["TaskArray"]))
for i in j["TaskArray"]: for i in j["TaskArray"]:
b+=scheme_get_task_range(i) t+=scheme_get_task_range(i)
t+=arr_from_int(len(b)//8)
t+=b
return t return t
@@ -433,8 +441,13 @@ if __name__ == "__main__":
# u.init("utcp:7777") # u.init("utcp:7777")
# u.send_file(0xee,"file/JQ_JCXB_V54.bin") # u.send_file(0xee,"file/JQ_JCXB_V54.bin")
# u.send_file(0xed,"../Objects/checker_gen1_app_20230602.bin") # u.send_file(0xed,"../Objects/checker_gen1_app_20230602.bin")
u.cmd=0x31 u.cmd=0x01
print(u.encode(bytearray()).hex(' ')) print(u.encode(bytearray([0x0a,0x00])).hex(' '))
# with open("file/EX三码绑定测试2023-06-26.json","rb") as f:
# json_obj=json.loads(f.read())
# d=scheme_to_byte(json_obj)
# # print("len=",len(d),d.hex(","))
# d+=scheme_to_host(json_obj)
# 开始检测 # 开始检测

View File

@@ -5,6 +5,7 @@
typedef struct{ typedef struct{
uint32_t max; uint32_t max;
uint32_t min; uint32_t min;
uint32_t err;
}item_def; }item_def;
@@ -12,7 +13,8 @@ typedef struct{
typedef struct typedef struct
{ {
uint32_t item_num; uint32_t item_num;
item_def data[0]; uint32_t err;
item_def data[16];
}task_def; }task_def;

View File

@@ -121,4 +121,9 @@
第一次出现下载程序到一半,参数错误重启的情况 第一次出现下载程序到一半,参数错误重启的情况
2023.6.26 2023.6.26
批检仪完成整个检测流程测试编写测试脚本把检测结果保存到csv文件 批检仪完成整个检测流程测试编写测试脚本把检测结果保存到csv文件
2023.6.28
修改方案结构体,可以进行错误判断
必须按下按键才响应开始检测命令,
设备忙时按下按键不会发送请求检测命令
电机步数可以配置默认22000步
解决不插网线会导致程序重启的bug

View File

@@ -74,6 +74,7 @@ typedef struct{
int uartbsp;// 串口4的波特率 int uartbsp;// 串口4的波特率
int coder_ret_mode;// 注码指令返回格式 int coder_ret_mode;// 注码指令返回格式
int slave_addr_start;// 小板起始地址 int slave_addr_start;// 小板起始地址
int moter_max_count;// 电机最大步数
}sys_param_def; }sys_param_def;
@@ -82,6 +83,22 @@ int flash_save_param(sys_param_def *par);
const sys_param_def *sys_param(void); const sys_param_def *sys_param(void);
__packed
typedef struct{
uint32_t max;
uint32_t min;
uint32_t err;
}scheme_range_def;
__packed
typedef struct
{
uint32_t item_num;
uint32_t err;
scheme_range_def range[16];
}scheme_task_def;
// 方案参数 // 方案参数
__packed __packed
@@ -89,12 +106,8 @@ typedef struct{
uint8_t slave_data[2048]; uint8_t slave_data[2048];
uint32_t plan_id; uint32_t plan_id;
uint32_t timeout_m; uint32_t timeout_m;
uint32_t range_num; uint32_t task_num;
__packed scheme_task_def task[0];
struct{
uint32_t max;
uint32_t min;
}range[0];
}scheme_def; }scheme_def;

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2023-06-26 10:46:21" #define BUILD_DATE "2023-06-28 18:04:06"
#define SOFT_VERSION "0.01" #define SOFT_VERSION "0.01"

View File

@@ -102,17 +102,24 @@ commend_export(test,test,"cmd test")
static int scheme_info(list_def *argv) static int scheme_info(list_def *argv)
{ {
const scheme_def *s=check_scheme(); const scheme_def *s=check_scheme();
const scheme_task_def *t;
if(s->plan_id==0xffffffff){ if(s->plan_id==0xffffffff){
cmd_print("scheme is empty."); cmd_print("scheme is empty.");
return -1; return -1;
} }
cmd_print("plan id: %d",s->plan_id); cmd_print("plan id: %d",s->plan_id);
cmd_print("timeout_m: %d",s->timeout_m); cmd_print("timeout_m: %d",s->timeout_m);
cmd_print("range num: %d",s->range_num); cmd_print("task num: %d",s->task_num);
for(int i=0;i<s->range_num;i++) for(int i=0;i<s->task_num;i++)
{ {
cmd_print(" max:%5d, min:%5d %s",s->range[i].max,s->range[i].min, t=&s->task[i];
s->range[i].max<s->range[i].min?"err":"ok"); cmd_print(" task:%02d err:%02x",i,t->err);
for(int j=0;j<t->item_num;j++)
{
cmd_print(" max:%5d, min:%5d err:%02x %s",t->range[j].max,t->range[j].min,
t->err,
t->range[j].max<t->range[j].min?"err":"ok");
}
} }
return 0; return 0;
} }
@@ -228,6 +235,7 @@ static void print_sys_param(const sys_param_def *par)
cmd_print("uart bsp: %d",par->uartbsp); cmd_print("uart bsp: %d",par->uartbsp);
cmd_print("coder ret mode: %d",par->coder_ret_mode); cmd_print("coder ret mode: %d",par->coder_ret_mode);
cmd_print("slave_addr_start: %d",par->slave_addr_start); cmd_print("slave_addr_start: %d",par->slave_addr_start);
cmd_print("moter_max_count: %d",par->moter_max_count);
} }
@@ -265,6 +273,7 @@ static void print_sys_help(void)
cmd_print("set uartbsp 115200"); cmd_print("set uartbsp 115200");
cmd_print("set codermode 1/0"); cmd_print("set codermode 1/0");
cmd_print("set slave_addr_start 1/0"); cmd_print("set slave_addr_start 1/0");
cmd_print("set moter_max_count 0~30000");
cmd_print("set save"); cmd_print("set save");
} }
@@ -387,6 +396,12 @@ static int sys_set(list_def *argv)
spar->slave_addr_start=str_atoi(str); spar->slave_addr_start=str_atoi(str);
cmd_print("slave addr start: %d",spar->slave_addr_start); cmd_print("slave addr start: %d",spar->slave_addr_start);
} }
else if(strcmp(list_get_str(argv,1),"moter_max_count")==0)
{
char *str=list_get_str(argv,2);
spar->moter_max_count=str_atoi(str);
cmd_print("moter_max_count: %d",spar->moter_max_count);
}
else{ else{
cmd_print("unknown cmd for sysset."); cmd_print("unknown cmd for sysset.");
print_sys_help(); print_sys_help();

View File

@@ -188,7 +188,7 @@ void *realloc(void *p,size_t size)
#define MEM_TEMP_PTR_NUM 400 #define MEM_TEMP_PTR_NUM 800
typedef void (*del_fun_def)(void *t); typedef void (*del_fun_def)(void *t);
typedef struct{ typedef struct{

View File

@@ -7,6 +7,7 @@
#include "prot_uc.h" #include "prot_uc.h"
#include "key.h" #include "key.h"
#include "mystdlib.h" #include "mystdlib.h"
#include "transmit.h"
@@ -16,6 +17,9 @@
typedef struct{ typedef struct{
int inited; int inited;
int run; int run;
int input;
int input_lock;
void *tran;
}self_def; }self_def;
@@ -26,36 +30,37 @@ static void request_check(void *p);
static void key_thread(void *arg) static void key_thread(void *arg)
{ {
self_def *s=arg; self_def *s=arg;
gpioin_def *in1,*in2,*in3,*in4; gpioin_def *in1;
int input=0,input_lock=1;
in1=dev_get("gpioin1"); in1=dev_get("gpioin1");
in2=dev_get("gpioin2");
in3=dev_get("gpioin3");
in4=dev_get("gpioin4");
in1->init(in1); in1->init(in1);
in2->init(in2); s->input=0;
in3->init(in3); s->input_lock=1;
in4->init(in4);
while (s->run) while (s->run)
{ {
rt_thread_mdelay(20); rt_thread_mdelay(20);
//input=(in1->state(in1))|(in2->state(in2)<<1)|(in3->state(in3)<<2)|(in4->state(in4)<<3); s->input=(in1->state(in1));
input=(in1->state(in1)); if(s->input!=s->input_lock)
if(input!=input_lock)
{ {
DBG_LOG("key=%08X",input); DBG_LOG("key=%08X",s->input);
input_lock=input; s->input_lock=s->input;
if((input&1)==0) if((s->input&1)==0)
{ {
request_check(s); // 主机交互存在且非忙的时候才发送请求
if(s->tran&&(tran_get_busy(s->tran)==0))
request_check(s);
} }
} }
} }
} }
// 获取实时按键状态,1按下
int key_pressed(void)
{
self_def *s=&g_self;
return !s->input;
}
// cmd=0x37 // cmd=0x37
@@ -81,7 +86,11 @@ static void init_later(void *t)
DBG_WARN("can not fond variable \"protu\""); DBG_WARN("can not fond variable \"protu\"");
} }
} }
static void init_tran(void *t)
{
self_def *s=t;
s->tran=app_variable("tran",0,0);
}
@@ -95,6 +104,7 @@ static int init_thread(void)
rt_thread_t rt_t=rt_thread_create("key_t",key_thread,s,1024,15,20); rt_thread_t rt_t=rt_thread_create("key_t",key_thread,s,1024,15,20);
rt_thread_startup(rt_t); rt_thread_startup(rt_t);
app_valid_call("protu",init_later,s); app_valid_call("protu",init_later,s);
app_valid_call("tran",init_tran,s);
} }
return 0; return 0;
} }

View File

@@ -16,6 +16,7 @@ signal key_send_signal(void *obj,uint8_t cmd,array_def *data);
int key_pressed(void);

View File

@@ -64,10 +64,11 @@ static void log_thread(void *arg)
else else
{ {
DBG_LOG("udp:err=%d",err); DBG_LOG("udp:err=%d",err);
//netconn_close(conn);
//netconn_delete(conn);
rt_thread_mdelay(1000);
} }
} }
netconn_close(conn);
netconn_delete(conn);
} }

View File

@@ -96,7 +96,7 @@ void moter_down(void (*fun)(void *t),void *t)
s->fun_in_end=fun; s->fun_in_end=fun;
s->t=t; s->t=t;
} }
moter_start(0,MOTER_MAX_COUNT-s->count); moter_start(0,s->max_count-s->count);
} }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ص<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ص<EFBFBD>
@@ -177,8 +177,13 @@ int init_moter(void)
pwm->set_irq_fun(pwm,end_irq,s); pwm->set_irq_fun(pwm,end_irq,s);
s->pwm=pwm; s->pwm=pwm;
s->stat=INITING; s->stat=INITING;
s->count=MOTER_MAX_COUNT; if((par->moter_max_count>25000)||(par->moter_max_count<1000))
s->max_count=MOTER_MAX_COUNT; {
s->max_count=MOTER_MAX_COUNT;
}else{
s->max_count=par->moter_max_count;
}
s->count=s->max_count;
s->event=rt_event_create("moter_e",RT_IPC_FLAG_FIFO); s->event=rt_event_create("moter_e",RT_IPC_FLAG_FIFO);
s->inited=1; s->inited=1;
s->run=1; s->run=1;

View File

@@ -10,7 +10,7 @@
#include "compiler_info.h" #include "compiler_info.h"
#include "dev_backup.h" #include "dev_backup.h"
#include "moter.h" #include "moter.h"
#include "key.h"
@@ -25,24 +25,43 @@ typedef struct{
}check_def; }check_def;
// 计算方案有多少个范围参数
static int calc_range_num(void)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
int index=0;
for(int i=0;i<s->task_num;i++)
{
t=&s->task[i];
index+=t->item_num;
}
return index;
}
// 判断检测数据是否超限,返回填充的字节个数 // 判断检测数据是否超限,返回填充的字节个数
static int in_range(const uint8_t *src_data,uint8_t *range) static int in_range(const uint8_t *src_data,uint8_t *range)
{ {
const scheme_def *s=check_scheme(); const scheme_def *s=check_scheme();
const scheme_task_def *t;
int temp; int temp;
for(int i=0;i<s->range_num;i++) int index=0;
for(int i=0;i<s->task_num;i++)
{ {
temp=src_data[i*2]|(src_data[i*2+1]<<8); t=&s->task[i];
if(temp>=s->range[i].min&&temp<=s->range[i].max){ for(int j=0;j<t->item_num;j++)
range[i/8]&=~(1<<(i%8)); {
}else{ temp=src_data[index*2]|(src_data[index*2+1]<<8);
range[i/8]|=(1<<(i%8)); if(temp>=t->range[j].min&&temp<=t->range[j].max){
range[index/8]&=~(1<<(index%8));
}else{
range[index/8]|=(1<<(index%8));
}
index++;
} }
} }
DBG_LOG("range_num=%d, ",s->range_num); DBG_LOG("range_num=%d, ",index);
return (s->range_num+7)/8; return (index+7)/8;
} }
@@ -68,7 +87,7 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
// 返回参数校验,跳过8字节的流程执行位 // 返回参数校验,跳过8字节的流程执行位
ack_d+=in_range(arr_data(data)+8+8,ack_d); ack_d+=in_range(arr_data(data)+8+8,ack_d);
// 复制返回参数,跳过8字节的流程执行位 // 复制返回参数,跳过8字节的流程执行位
memcpy(ack_d,arr_data(data)+8+8,check_scheme()->range_num*2); memcpy(ack_d,arr_data(data)+8+8,calc_range_num()*2);
} }
else else
{ {
@@ -131,7 +150,7 @@ static void check_when_moter_down(void *t)
static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data) static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
{ {
int return_size=(check_scheme()->range_num*2+8+(check_scheme()->range_num+7)/8); int return_size=(calc_range_num()*2+8+(calc_range_num()+7)/8);
check_def *u=calloc(1,sizeof(check_def)+return_size*20); check_def *u=calloc(1,sizeof(check_def)+return_size*20);
u->ret_skip=return_size; u->ret_skip=return_size;
u->ack_size=return_size*20; u->ack_size=return_size*20;
@@ -140,10 +159,15 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
u->u.dolater=check_dolater; u->u.dolater=check_dolater;
u->u.doend=check_end; u->u.doend=check_end;
DBG_LOG("check: skip=%d",u->ret_skip); DBG_LOG("check: skip=%d",u->ret_skip);
tran_set_busy(t,1);
moter_down(check_when_moter_down,u);
array_def *a=arr_creat(); array_def *a=arr_creat();
arr_append(a,0); if(key_pressed())
{
tran_set_busy(t,1);
moter_down(check_when_moter_down,u);
arr_append(a,TRAN_ERR_NONE);
}else{
arr_append(a,TRAN_ERR_STEP);
}
emit tran_reply_signal(u->u.p,arr_temp(a)); emit tran_reply_signal(u->u.p,arr_temp(a));
return (ucport_def *)u; return (ucport_def *)u;

View File

@@ -17,6 +17,13 @@
typedef struct{
int step;// 检测注码顺序
}self_def;
static self_def g_self;
// 从机地址偏移 // 从机地址偏移
static inline int slave_addr_off(void) static inline int slave_addr_off(void)
{ {
@@ -85,6 +92,7 @@ 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)); emit tran_send_signal(w->u.p,0x82,arr_temp(a));
tran_set_busy(w->u.p,0); tran_set_busy(w->u.p,0);
g_self.step=0;
} }
} }
@@ -105,6 +113,7 @@ static void write_uid_return_ok(void *p)
} }
emit tran_send_signal(u->u.p,0x82,arr_temp(a)); emit tran_send_signal(u->u.p,0x82,arr_temp(a));
tran_set_busy(u->u.p,0); tran_set_busy(u->u.p,0);
g_self.step=0;
} }
@@ -120,6 +129,7 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
DBG_WARN("cmd format err."); DBG_WARN("cmd format err.");
return 0; return 0;
} }
int ret=0;
write_uid_def *u=calloc(1,sizeof(write_uid_def)); write_uid_def *u=calloc(1,sizeof(write_uid_def));
u->u.p=t; u->u.p=t;
u->u.del=write_del; u->u.del=write_del;
@@ -135,10 +145,10 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
memcpy(u->item[i].shell_code,d_off+i*14+1,13); memcpy(u->item[i].shell_code,d_off+i*14+1,13);
DBG_LOG("slave:%d, shell=%s",i,u->item[i].shell_code); DBG_LOG("slave:%d, shell=%s",i,u->item[i].shell_code);
// 生成uid码 // 生成uid码
coder_shell_to_uid(u->year,u->item[i].shell_code,u->item[i].uid_code); ret|=coder_shell_to_uid(u->year,u->item[i].shell_code,u->item[i].uid_code);
DBG_LOG("slave:%d, uid=%s",i,u->item[i].uid_code); DBG_LOG("slave:%d, uid=%s",i,u->item[i].uid_code);
// 生成存储码 // 生成存储码
coder_uid_to_save(u->item[i].uid_code,u->item[i].uid_pw_hex); ret|=coder_uid_to_save(u->item[i].uid_code,u->item[i].uid_pw_hex);
// 生成密码 // 生成密码
GetPasswordByUidCode((uint8_t *)u->item[i].uid_code,&u->item[i].uid_pw_hex[8]); GetPasswordByUidCode((uint8_t *)u->item[i].uid_code,&u->item[i].uid_pw_hex[8]);
d_=u->item[i].uid_pw_hex; d_=u->item[i].uid_pw_hex;
@@ -155,6 +165,8 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
u->ack[i*39+0]=i+slave_addr_off(); u->ack[i*39+0]=i+slave_addr_off();
u->ack[i*39+1]=1; u->ack[i*39+1]=1;
} }
tran_set_busy(t,1); tran_set_busy(t,1);
for(int i=0;i<10;i++) for(int i=0;i<10;i++)
{ {
@@ -169,7 +181,14 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
array_def *a=arr_creat(); array_def *a=arr_creat();
arr_append(a,u->addrs_num); arr_append(a,u->addrs_num);
arr_append(a,0); if(g_self.step==1){
if(ret==0)
arr_append(a,TRAN_ERR_NONE);
else
arr_append(a,TRAN_ERR_PARAM);
}else{
arr_append(a,TRAN_ERR_STEP);
}
emit tran_reply_signal(u->u.p,arr_temp(a)); emit tran_reply_signal(u->u.p,arr_temp(a));
// test:稍后返回成功 // test:稍后返回成功
@@ -236,6 +255,45 @@ transmit_export(ym_checker,0x03,write_uid2)
// 判断检测数据错误码
// 返回 errcode,1=param/0=execute,taskindex,paramindex
static uint32_t in_range_err(const uint8_t *src_data,const uint8_t *errbit)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
int temp;
int index=0;
uint32_t ret=0;
for(int i=0;i<s->task_num;i++)
{
t=&s->task[i];
if((errbit[i/8]&(1<<(i%8)))!=0)
{
ret=(t->err&0xff)|(i<<16);
return ret;
}
for(int j=0;j<t->item_num;j++)
{
temp=src_data[index*2]|(src_data[index*2+1]<<8);
if(temp>=t->range[j].min&&temp<=t->range[j].max){
// 正常
}else{
ret=(t->range[j].err&0xff)|(1<<8)|(i<<16)|(j<<24);
return ret;
}
index++;
}
}
return ret;
}
typedef struct{ typedef struct{
ucport_def u; ucport_def u;
uint8_t addrs_num; uint8_t addrs_num;
@@ -258,10 +316,16 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
} }
addr-=1; addr-=1;
uint32_t errcode=0;
uint8_t *ack_d=&w->ack[(addr)*6]; uint8_t *ack_d=&w->ack[(addr)*6];
ack_d[0]=addr+slave_addr_off(); ack_d[0]=addr+slave_addr_off();
ack_d[1]=ack; ack_d[1]=ack;
// TODO: 还有4字节数据 // 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;
w->ack_num++; w->ack_num++;
if(w->ack_num>=10) if(w->ack_num>=10)
@@ -272,6 +336,7 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
arr_appends(a,w->ack,(6)*10); arr_appends(a,w->ack,(6)*10);
emit tran_send_signal(w->u.p,0x81,arr_temp(a)); emit tran_send_signal(w->u.p,0x81,arr_temp(a));
tran_set_busy(w->u.p,0); tran_set_busy(w->u.p,0);
g_self.step=1;
} }
} }
@@ -292,6 +357,7 @@ static void check_return_ok(void *p)
} }
emit tran_send_signal(u->u.p,0x81,arr_temp(a)); emit tran_send_signal(u->u.p,0x81,arr_temp(a));
tran_set_busy(u->u.p,0); tran_set_busy(u->u.p,0);
g_self.step=1;
} }
@@ -335,7 +401,7 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
array_def *a=arr_creat(); array_def *a=arr_creat();
arr_append(a,u->addrs_num); arr_append(a,u->addrs_num);
arr_append(a,u->type); arr_append(a,u->type);
arr_append(a,0); arr_append(a,TRAN_ERR_NONE);
emit tran_reply_signal(u->u.p,arr_temp(a)); emit tran_reply_signal(u->u.p,arr_temp(a));
// test:稍后返回成功 // test:稍后返回成功

View File

@@ -116,6 +116,9 @@ void tran_recv_slot(tran_def *t,const char *codec_name,uint8_t cmd,array_def *da
DBG_LOG("tran init"); DBG_LOG("tran init");
if(tran_get_busy(tr)){ if(tran_get_busy(tr)){
DBG_WARN("ucport is busy."); DBG_WARN("ucport is busy.");
array_def *d=arr_creat();
arr_append(d,TRAN_ERR_BUSY);
emit tran_send_signal(tr,cmd,arr_temp(d));
return; return;
} }
CHECK_DO(tr->u,tr->u->del); CHECK_DO(tr->u,tr->u->del);

View File

@@ -5,6 +5,18 @@
#include "handle.h" #include "handle.h"
#include "signal.h" #include "signal.h"
// 错误码定义
#define TRAN_ERR_NONE 0x00
#define TRAN_ERR_BUSY 0x01
#define TRAN_ERR_PARAM 0x02
#define TRAN_ERR_STEP 0x03
struct _tran_def; struct _tran_def;
typedef struct _tran_def tran_def; typedef struct _tran_def tran_def;