解决赋码未结束时打开急停会导致一直忙的bug

This commit is contained in:
ranchuan
2023-09-14 18:01:54 +08:00
parent 9f7ac06880
commit 9f9f6db125
5 changed files with 46 additions and 10 deletions

View File

@@ -165,5 +165,13 @@
控制逻辑完成60% 控制逻辑完成60%
2023.9.9 2023.9.9
完成赋码控制,验证通过 完成赋码控制,验证通过
2023.9.12
发现开启心跳注码会死机
2023.9.14
启动注码输出通道改到9
设置异常报警翻转次数在次数不为0是只刷新次数不再设置回调
急停时管壳挡板设为0挡住管壳
解除急停时解除忙状态

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2023-09-11 10:28:07" #define BUILD_DATE "2023-09-14 17:45:04"
#define SOFT_VERSION "0.01" #define SOFT_VERSION "0.01"

View File

@@ -164,9 +164,9 @@ def main():
with open(boot_dst,"wb") as f: with open(boot_dst,"wb") as f:
f.write(d) f.write(d)
print(boot_dst+" create boot file success.") print(boot_dst+" create boot file success.")
sql=mysql.sql() #sql=mysql.sql()
if(sql.init(SQL_BOOT_PATH)==True): #if(sql.init(SQL_BOOT_PATH)==True):
sql.insert(boot_dst) # sql.insert(boot_dst)
else: else:
print("please build bootloader to create boot file") print("please build bootloader to create boot file")
if __name__=="__main__": if __name__=="__main__":

View File

@@ -41,7 +41,7 @@
#define OUTPUT_CLAMP_CYLINDER 2 #define OUTPUT_CLAMP_CYLINDER 2
#define OUTPUT_LED_OK 3 #define OUTPUT_LED_OK 3
#define OUTPUT_LED_ERR 4 #define OUTPUT_LED_ERR 4
#define OUTPUT_MARK 7 #define OUTPUT_MARK 9
// 定义总线选择 // 定义总线选择
#define BUS_SELECT_LEFT 0 #define BUS_SELECT_LEFT 0
@@ -104,6 +104,15 @@
output_set(&s->output[OUTPUT_CLAMP_CYLINDER],0);\ output_set(&s->output[OUTPUT_CLAMP_CYLINDER],0);\
output_set(&s->output[OUTPUT_MARK],0);} output_set(&s->output[OUTPUT_MARK],0);}
// 设置异常报警次数
#define SET_ERR_TIMES(t)\
{if(s->lederr_times>0){\
s->lederr_times=t;\
}else{\
s->lederr_times=t;\
later_execute(process_err,s,500);}\
}
typedef struct{ typedef struct{
@@ -141,6 +150,7 @@ typedef struct{
void *tran; void *tran;
array_def *code_data;// 赋码数据 array_def *code_data;// 赋码数据
rt_timer_t timer; rt_timer_t timer;
int lederr_times;// 异常闪烁次数
int busy;// 忙,此时不再响应启动按键 int busy;// 忙,此时不再响应启动按键
process_step step;// 流程步数0为空闲 process_step step;// 流程步数0为空闲
int stop_state;// 急停标志值1时不运行 int stop_state;// 急停标志值1时不运行
@@ -182,20 +192,38 @@ static const char *g_errinfo_table[]={
// 异常报警
static void process_err(void *arg)
{
self_def *s=arg;
if(s->lederr_times%2==1)
{
SET_LED_ERR();
}else{
SET_LED_OFF();
}
if(s->lederr_times>0){
s->lederr_times--;
later_execute(process_err,s,500);
}
}
// 急停按钮响应函数 // 急停按钮响应函数
static void process_stop(void *arg) static void process_stop(void *arg)
{ {
self_def *s=arg; self_def *s=arg;
s->stop_state=1; s->stop_state=1;
SET_OUTPUT(OUTPUT_SHELL_BAFFLE,1); // 管壳挡板0是挡住
SET_LED_ERR(); SET_OUTPUT(OUTPUT_SHELL_BAFFLE,0);
SET_ERR_TIMES(3);
DBG_LOG("stop key pressed."); DBG_LOG("stop key pressed.");
} }
static void process_run(void *arg) static void process_run(void *arg)
{ {
self_def *s=arg; self_def *s=arg;
s->stop_state=0; s->stop_state=0;
s->busy=0;
SET_LED_OFF(); SET_LED_OFF();
DBG_LOG("stop key unpressed."); DBG_LOG("stop key unpressed.");
} }
@@ -236,7 +264,7 @@ static void process_timeout(void *arg)
RESET_OUTPUT(); RESET_OUTPUT();
s->busy=0; s->busy=0;
SET_LED_ERR(); SET_ERR_TIMES(3);
} }
// 重置定时器 // 重置定时器
static void process_timer_start(void *arg) static void process_timer_start(void *arg)
@@ -333,7 +361,7 @@ static void process_end_slot(void *obj,int ack,array_def *data)
self_def *s=obj; self_def *s=obj;
SAFE_CHECK(s); SAFE_CHECK(s);
if(ack){ if(ack){
SET_LED_ERR(); SET_ERR_TIMES(3);
// 发送异常信息 // 发送异常信息
process_send_errinfo(s); process_send_errinfo(s);
// 发送赋码结果 // 发送赋码结果
@@ -387,7 +415,7 @@ static void process_mark_end(void *arg)
SAFE_CHECK(s); SAFE_CHECK(s);
// 关闭挡板 // 关闭挡板
SET_OUTPUT(OUTPUT_SHELL_BAFFLE,1); SET_OUTPUT(OUTPUT_SHELL_BAFFLE,0);
SET_OUTPUT(OUTPUT_MARK,0); SET_OUTPUT(OUTPUT_MARK,0);