diff --git a/checker_gen1.uvoptx b/checker_gen1.uvoptx
index cb09555..c139aca 100644
--- a/checker_gen1.uvoptx
+++ b/checker_gen1.uvoptx
@@ -120,7 +120,7 @@
0
DLGUARM
- 5
+ d
0
diff --git a/python/checker_test.py b/python/checker_test.py
new file mode 100644
index 0000000..4d25709
--- /dev/null
+++ b/python/checker_test.py
@@ -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(tickrun=1;
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);
rt_thread_t rt_t=rt_thread_create(name,slot_run,run,2048,pro,20);
rt_thread_startup(rt_t);
diff --git a/source/task/moter.c b/source/task/moter.c
index 4e9dae9..7f98d1a 100644
--- a/source/task/moter.c
+++ b/source/task/moter.c
@@ -24,6 +24,8 @@ typedef struct{
int count;
int max_count;
moter_stat stat;
+ void (*fun_in_end)(void *t);
+ void *t;
}self_def;
@@ -73,12 +75,42 @@ static void moter_run(void *t)
s->stat=STOP;
DBG_LOG("moter stoped.");
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;
}
}
+
+
+// ½ʱص
+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);
+}
+
+// ʱص
+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)
{
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)
{
DBG_WARN("steps count exceeded limit!,max=%d",s->max_count);
+ end_irq(s);
return ;
}
else{
diff --git a/source/task/moter.h b/source/task/moter.h
index ca2ae45..42c5613 100644
--- a/source/task/moter.h
+++ b/source/task/moter.h
@@ -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_down(void (*fun)(void *t),void *t);
+
+void moter_up(void (*fun)(void *t),void *t);
diff --git a/source/task/tran_for_checker.c b/source/task/tran_for_checker.c
index 1e98c1a..56313ae 100644
--- a/source/task/tran_for_checker.c
+++ b/source/task/tran_for_checker.c
@@ -9,6 +9,7 @@
#include "handle_for_checker.h"
#include "compiler_info.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_appends(a,w->ack,w->ack_size);
emit tran_send_signal(w->u.p,0x31,arr_temp(a));
+ // 把命令字改为0x31用于接收主机应答
+ w->u.cmd=0x31;
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)
{
@@ -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)
{
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->u.p=t;
u->u.del=check_del;
+ u->u.dolater=check_dolater;
u->u.doend=check_end;
DBG_LOG("check: skip=%d",u->ret_skip);
tran_set_busy(t,1);
- for(int i=0;i<20;i++)
- {
- port_mcu *mcu=tran_get_portm(u->u.p,i);
- // 这里打开检测
- if(mcu){
- port_start(mcu,check_creat(check_scheme()));
- }
- }
-
+ moter_down(check_when_moter_down,u);
array_def *a=arr_creat();
arr_append(a,0);
emit tran_reply_signal(u->u.p,arr_temp(a));