电机下压

This commit is contained in:
ranchuan
2023-06-25 18:04:09 +08:00
parent 7619a0804a
commit cfda1c461b
11 changed files with 497 additions and 14 deletions

View File

@@ -120,7 +120,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key> <Key>DLGUARM</Key>
<Name>5</Name> <Name>d</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>

125
python/checker_test.py Normal file
View File

@@ -0,0 +1,125 @@
import serial
import serial.tools.list_ports
import threading
import time
import socket
# 把tcp封装为串口
class utcp:
is_open=False
def __init__(self,port:int)->None:
self.ser = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.ser.bind(("",port))
self.ser.settimeout(10)
self.ser.listen(128)
print("wait for mcu connect.")
self.client,self.client_addr=self.ser.accept()
print("client:",self.client_addr)
self.is_open=True
def read(self,len:int):
return self.client.recv(len)
def write(self,data:bytearray):
return self.client.send(data)
def close(self):
self.client.close()
self.ser.close()
self.is_open=False
class port:
def __init__(self) -> None:
pass
def open(self,name:str,bsp:int):
if(name!="utcp"):
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)
def start_recv(self):
self.thread_ = threading.Thread(target=self.recv, args=())
self.thread_.start()
def recv(self,num:int):
d=bytes()
try:
d=self.ser.read(num)
except Exception as a:
print("port closed")
return
# print("recv:",d.hex(" "))
def send(self,data:bytearray):
self.ser.write(data)
# 测试上位机
def ecode_test(self,times:int):
print("检测赋码系统耗时测试:")
tick=0
while(tick<times):
tick+=1
print("当前={d1},总共={d2}".format(d1=tick,d2=times))
# 等待数据库写入
time.sleep(3)
start = time.perf_counter()
# 开始检测
self.send(bytearray([0xB0, 0x00, 0x02, 0x00, 0x60]))
# 接收指令应答
self.recv(5)
# 接收检测结果
self.recv(24)
end = time.perf_counter()
print("检测耗时:",end-start)
start2=time.perf_counter()
# 开始注码
self.send(bytearray([0xF0, 0x00, 0x02, 0xE0, 0x41, 0xB1, 0x00, 0x02, 0x00, 0xFB]))
# 接收指令应答
self.recv(5)
# 接收注码 结果
self.recv(305)
end = time.perf_counter()
print("注码耗时:",end-start2)
# 打标结束,保存数据库
self.send(bytearray([0xF0, 0x00, 0x02, 0xE2, 0x23, 0xB2, 0x00, 0x02, 0x00, 0x67]))
# 接收指令应答
self.recv(5)
end = time.perf_counter()
print("总耗时:",end-start)
# 测试注码仪
def coder_test(self,times:int):
print("赋码仪耗时测试:")
tick=0
while(tick<times):
tick+=1
start = time.perf_counter()
print("当前={d1},总共={d2}".format(d1=tick,d2=times))
# 开始检测
self.send(bytearray([0x59, 0x6D, 0x05, 0x00, 0x01, 0x66, 0x04, 0x05, 0x00, 0x2F, 0xD9]))
# 接收指令应答
self.recv(13)
# 接收检测结果
self.recv(72)
end = time.perf_counter()
print("检测耗时:",end-start)
start2=time.perf_counter()
# 开始注码
self.send(bytearray([0x59,0x6D,0x94,0x00,0x02,0xBE,0x01,0x0A,0x32,0x30,0x32,0x33,0x00,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x39,0x01,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x38,0x02,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x37,0x03,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x36,0x04,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x35,0x05,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x34,0x06,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x33,0x07,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x32,0x08,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x31,0x09,0x35,0x38,0x33,0x30,0x36,0x31,0x39,0x41,0x30,0x34,0x30,0x30,0x30,0x44,0xC1]))
# 接收指令应答
self.recv(12)
# 接收注码 结果
self.recv(401)
end = time.perf_counter()
print("注码耗时:",end-start2)
end = time.perf_counter()
print("总耗时:",end-start)
if __name__ == "__main__":
p=port()
# 检测赋码仪系统测试
p.open("com8",115200)
p.ecode_test(5)
# 赋码仪设备串口测试
# p.open("com5",9600)
# p.coder_test(5)
# p.open("com5",115200)
# p.coder_test(5)
# 赋码仪设备网口测试
# p.open("utcp",0)
# p.coder_test(5)

View File

@@ -0,0 +1,283 @@
{
"PlanID": 46534786,
"CheckSoftVersion": [
1
],
"CheckHardVersion": [
1
],
"TimeOutS": 4,
"TimeOutM": 10,
"TimeOutUI": 12,
"TaskIDMax": 26,
"TaskArray": [
{
"TaskID": 0,
"TaskIndex": 0,
"ParamCount": 1,
"ParamVal": [
88
],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 1,
"TaskIndex": 1,
"ParamCount": 3,
"ParamVal": [
88,
5000,
400
],
"TestStandard": [
{
"Max": 95,
"Min": 80
},
{
"Max": 600,
"Min": 100
}
],
"ReturnCount": 2,
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [
23,
22
],
"RetryCount": 0
},
{
"TaskID": 5,
"TaskIndex": 2,
"ParamCount": 4,
"ParamVal": [
8,
4,
0,
1
],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 32,
"TaskIndex": 3,
"ParamCount": 0,
"ParamInfo": [],
"ParamVal": [],
"TestStandard": [
{
"Max": 8,
"Min": 8
},
{
"Max": 4,
"Min": 4
},
{
"Max": 1,
"Min": 1
}
],
"ReturnCount": 3,
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [
28,
28,
28,
255
],
"RetryCount": 0
},
{
"TaskID": 4,
"TaskIndex": 4,
"ParamCount": 2,
"ParamVal": [
0,
0
],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 24,
"TaskIndex": 5,
"ParamCount": 2,
"ParamVal": [
128,
0
],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 11,
"TaskIndex": 6,
"ParamCount": 0,
"ParamInfo": [],
"ParamVal": [],
"TestStandard": [
{
"Max": 240,
"Min": 0
}
],
"ReturnCount": 1,
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [
30
],
"RetryCount": 0
},
{
"TaskID": 8,
"TaskIndex": 7,
"ParamCount": 5,
"ParamVal": [
34,
5000,
100,
600,
5
],
"TestStandard": [
{
"Max": 3500,
"Min": 1000
},
{
"Max": 600,
"Min": 200
},
{
"Max": 80,
"Min": 10
}
],
"ReturnCount": 3,
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [
34,
35,
32,
255
],
"RetryCount": 0
},
{
"TaskID": 7,
"TaskIndex": 8,
"ParamCount": 0,
"ParamInfo": [],
"ParamVal": [],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 40,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 26,
"TaskIndex": 9,
"ParamCount": 0,
"ParamInfo": [],
"ParamVal": [],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 45,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 4,
"TaskIndex": 10,
"ParamCount": 2,
"ParamVal": [
0,
1
],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 31,
"TaskIndex": 11,
"ParamCount": 0,
"ParamInfo": [],
"ParamVal": [],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 24,
"TaskIndex": 12,
"ParamCount": 2,
"ParamVal": [
32,
32
],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
},
{
"TaskID": 29,
"TaskIndex": 13,
"ParamCount": 0,
"ParamInfo": [],
"ParamVal": [],
"TestStandard": [],
"ReturnCount": 0,
"ReturnInfo": [],
"ErrJumpTo": 255,
"ExecuteErrCode": 254,
"ResultErrCode": [],
"RetryCount": 0
}
]
}

Binary file not shown.

View File

@@ -433,5 +433,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=0x34 u.cmd=0x31
print(u.encode(bytearray()).hex(' ')) print(u.encode(bytearray()).hex(' '))
# 开始检测
# 59 6d 03 00 30 00 00 60 0f
# 结束应答
# 59 6D 03 00 31 00 00 31 CF

View File

@@ -115,6 +115,7 @@
赋码仪读写参数命令添加读写位,解决写参数时少偏移了一位导致的写参数失败的问题 赋码仪读写参数命令添加读写位,解决写参数时少偏移了一位导致的写参数失败的问题
2023.6.20 2023.6.20
赋码失败返回时返回小板的错误码 赋码失败返回时返回小板的错误码
2023.6.25
电机下压

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2023-06-20 17:40:53" #define BUILD_DATE "2023-06-25 17:31:20"
#define SOFT_VERSION "0.01" #define SOFT_VERSION "0.01"

View File

@@ -78,7 +78,7 @@ sig_thread thread_creat(int pro)
slot_run_def *run=calloc(1,sizeof(slot_run_def)); slot_run_def *run=calloc(1,sizeof(slot_run_def));
run->run=1; run->run=1;
sprintf(name,"sig_mq#%d",count); sprintf(name,"sig_mq#%d",count);
run->mb=rt_mq_create(name,(sizeof(slot_msg_def)+sizeof(uint32_t)*8),50,RT_IPC_FLAG_FIFO); run->mb=rt_mq_create(name,(sizeof(slot_msg_def)+sizeof(uint32_t)*8),100,RT_IPC_FLAG_FIFO);
sprintf(name,"sig_t#%d",count); sprintf(name,"sig_t#%d",count);
rt_thread_t rt_t=rt_thread_create(name,slot_run,run,2048,pro,20); rt_thread_t rt_t=rt_thread_create(name,slot_run,run,2048,pro,20);
rt_thread_startup(rt_t); rt_thread_startup(rt_t);

View File

@@ -24,6 +24,8 @@ typedef struct{
int count; int count;
int max_count; int max_count;
moter_stat stat; moter_stat stat;
void (*fun_in_end)(void *t);
void *t;
}self_def; }self_def;
@@ -73,12 +75,42 @@ static void moter_run(void *t)
s->stat=STOP; s->stat=STOP;
DBG_LOG("moter stoped."); DBG_LOG("moter stoped.");
emit moter_end_signal(s); emit moter_end_signal(s);
if(s->fun_in_end){
s->fun_in_end(s->t);
s->fun_in_end=0;
s->t=0;
}
} }
ev=0; ev=0;
} }
} }
// <20><><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ص<EFBFBD>
void moter_down(void (*fun)(void *t),void *t)
{
self_def *s=&g_self;
if(fun){
s->fun_in_end=fun;
s->t=t;
}
moter_start(0,MOTER_MAX_COUNT-s->count);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ص<EFBFBD>
void moter_up(void (*fun)(void *t),void *t)
{
self_def *s=&g_self;
if(fun){
s->fun_in_end=fun;
s->t=t;
}
moter_start(0,-s->count-100);
}
void moter_start(int fre,int step_count) void moter_start(int fre,int step_count)
{ {
self_def *s=&g_self; self_def *s=&g_self;
@@ -101,6 +133,7 @@ void moter_start_slot(void *t,int fre,int step_count)
if(s->count+step_count>s->max_count) if(s->count+step_count>s->max_count)
{ {
DBG_WARN("steps count exceeded limit!,max=%d",s->max_count); DBG_WARN("steps count exceeded limit!,max=%d",s->max_count);
end_irq(s);
return ; return ;
} }
else{ else{

View File

@@ -16,6 +16,9 @@ void moter_start_slot(void *t,int fre,int step_count);
void moter_start(int fre,int step_count); void moter_start(int fre,int step_count);
void moter_down(void (*fun)(void *t),void *t);
void moter_up(void (*fun)(void *t),void *t);

View File

@@ -9,6 +9,7 @@
#include "handle_for_checker.h" #include "handle_for_checker.h"
#include "compiler_info.h" #include "compiler_info.h"
#include "dev_backup.h" #include "dev_backup.h"
#include "moter.h"
@@ -81,10 +82,29 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
arr_append(a,0); arr_append(a,0);
arr_appends(a,w->ack,w->ack_size); arr_appends(a,w->ack,w->ack_size);
emit tran_send_signal(w->u.p,0x31,arr_temp(a)); emit tran_send_signal(w->u.p,0x31,arr_temp(a));
// 把命令字改为0x31用于接收主机应答
w->u.cmd=0x31;
tran_set_busy(w->u.p,0); tran_set_busy(w->u.p,0);
} }
} }
// 电机上升之后解除忙状态
static void check_when_moter_up(void *t)
{
ucport_def *u=t;
tran_set_busy(u->p,0);
}
static int check_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
if(cmd==0x31)
{
moter_up(check_when_moter_up,u);
}
return 0;
}
static void check_del(ucport_def *u) static void check_del(ucport_def *u)
{ {
@@ -92,6 +112,23 @@ static void check_del(ucport_def *u)
} }
// 电机下降之后开始检测
static void check_when_moter_down(void *t)
{
ucport_def *u=t;
for(int i=0;i<20;i++)
{
port_mcu *mcu=tran_get_portm(u->p,i);
// 这里打开检测
if(mcu){
port_start(mcu,check_creat(check_scheme()));
}
}
}
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=(check_scheme()->range_num*2+8+(check_scheme()->range_num+7)/8);
@@ -100,18 +137,11 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
u->ack_size=return_size*20; u->ack_size=return_size*20;
u->u.p=t; u->u.p=t;
u->u.del=check_del; u->u.del=check_del;
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); tran_set_busy(t,1);
for(int i=0;i<20;i++) moter_down(check_when_moter_down,u);
{
port_mcu *mcu=tran_get_portm(u->u.p,i);
// 这里打开检测
if(mcu){
port_start(mcu,check_creat(check_scheme()));
}
}
array_def *a=arr_creat(); array_def *a=arr_creat();
arr_append(a,0); arr_append(a,0);
emit tran_reply_signal(u->u.p,arr_temp(a)); emit tran_reply_signal(u->u.p,arr_temp(a));