From 6b0d1f644233b2984d2a87553de598879cf05caf Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Tue, 28 May 2024 17:24:59 +0800
Subject: [PATCH] 继续完善

---
 Function/VALVE/valve_control.c |  271 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 258 insertions(+), 13 deletions(-)

diff --git a/Function/VALVE/valve_control.c b/Function/VALVE/valve_control.c
index 1b7553e..3970320 100644
--- a/Function/VALVE/valve_control.c
+++ b/Function/VALVE/valve_control.c
@@ -1,8 +1,10 @@
 #include "valve_control.h"
 #include "gpio.h"
 #include "system_mem_para.h"
+#include "power_manage.h"
+#include "linked_list.h"
 
-
+__IO VALVE_CTRL_PARA_T	valve_ctrl_para_g;
 
 
 void Motor_AB_GPIO_Init(void)
@@ -23,28 +25,71 @@
 	CloseIO(Motor_OP_PORT,Motor_OP_PIN);
 	CloseIO(Motor_CL_PORT,Motor_CL_PIN);
 }
+void Force_Open_GPIO_Init(void)
+{
+	InputtIO(VALVE_FORCE_OPEN_PORT,VALVE_FORCE_OPEN_PIN,IN_NORMAL);
+}
+
+void Force_Open_GPIO_Init_sleep_mode(void)
+{
+	CloseIO(VALVE_FORCE_OPEN_PORT,VALVE_FORCE_OPEN_PIN);
+}
+
+void Valve_CTRL_GPIO_Init(void)
+{
+	Motor_AB_GPIO_Init();
+	Motor_A_LOW;
+	Motor_B_LOW;
+	Motor_OP_CL_GPIO_Init_sleep_mode();
+	
+}
+
+
 
 
 
 void ValveMotorOpenRun(void)
 {
 	Motor_AB_GPIO_Init();
+	Motor_OP_CL_GPIO_Init();
 	Motor_A_HIGH;
-	Motor_B_HIGH;
+	Motor_B_LOW;
+	GPIO_EXTI_Init( Motor_OP_PORT, Motor_OP_PIN, EXTI_FALLING, ENABLE);
+	GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, ENABLE);
 }
 
 void ValveMotorCloseRun(void)
 {
+	
+	//�ж��Ƿ���Ҫ���ط�,����磬����������Ƴ�״̬�½��
+	if(__SYS_STATUS_BYTES_GET(alka_remove) == SET && __SYS_STATUS_BYTES_GET(alka_down) == SET){
+		if(__SYS_STATUS_BYTES_GET(power_state) == RESET){
+			borrow_Pwr_GPIO_Clk_Init();
+			BORROW_PWR_ON;
+			delay_ms(1);
+		}
+	}
+	
 	Motor_AB_GPIO_Init();
+	Motor_OP_CL_GPIO_Init();
 	Motor_A_LOW;
-	Motor_B_LOW;
+	Motor_B_HIGH;
+	GPIO_EXTI_Init( Motor_OP_PORT, Motor_OP_PIN, EXTI_FALLING, ENABLE);
+	GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, ENABLE);
 }
 
 void ValveMotorStop(void)
 {
 	Motor_AB_GPIO_Init();
+	Motor_OP_CL_GPIO_Init_sleep_mode();
+	GPIO_EXTI_Init( Motor_OP_PORT, Motor_OP_PIN, EXTI_FALLING, DISABLE);
+	GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, DISABLE);
 	Motor_A_LOW;
-	Motor_B_HIGH;
+	Motor_B_LOW;
+	
+	//���ر�
+	borrow_Pwr_GPIO_Clk_Init();
+	BORROW_PWR_OFF;
 }
 
 
@@ -62,10 +107,10 @@
 
 	if((Open_status==(uint8_t)Bit_RESET)&&(Close_status==(uint8_t)Bit_SET))
 	{
-		return VALVE_OP;
+		return VALVE_OPEN;
 	}else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_RESET))
 	{
-		return VALVE_CL;
+		return VALVE_CLOSE;
 	}else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_SET))
 	{
 		return VALVE_ERROR;
@@ -78,25 +123,225 @@
 
 
 
-void  ValveRunParaInit(void)
+void  ValveRunParaInit(VALVE_TYPE valve_type_in)
 {
-	VALVE_STATUS	valve_status;	
-	
-	switch (save_valve_para_g.valve_status)
-	{		
+//	VALVE_STATUS	valve_status;	
+	switch (valve_type_in){		
+		case VM_PENGSHENG: ;
+		case VM_HADE:		
+			save_valve_para_g.valve_status = Read_OP_CL_VALVE_Status(0);
+
+		break;
 		
+		default:break;
+	}
+	
+	//������Ҫ��ʼ���IJ���
+	
+}
+
+
+uint16_t GetValveRunMaxTime(CALIBER_TYPE caliber_type_l)
+{
+	switch (caliber_type_l){			
+						case DN25_TYPE: return VALVE_HADE_RUN_TIME_DN25 ;
+						case DN32_TYPE: return VALVE_HADE_RUN_TIME_DN32 ;
+						case DN40_TYPE: return VALVE_HADE_RUN_TIME_DN40 ;
+						case DN50_TYPE:	return VALVE_HADE_RUN_TIME_DN50 ;
+						case DN80_TYPE:	return VALVE_HADE_RUN_TIME_DN80 ;
+						case DN100_TYPE:	return VALVE_HADE_RUN_TIME_DN100 ;
+						case DN150_TYPE:	return VALVE_HADE_RUN_TIME_DN150 ;							
+						case DN200_TYPE:	return VALVE_HADE_RUN_TIME_DN200 ;						
+						default:	return VALVE_HADE_RUN_TIME_DN200 ;
+				}
+}
+
+
+void ValveCtrlHade(CALIBER_TYPE caliber_type_l,FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p)
+{
+	if(valve_ctrl_para_g.valve_ctrl_order == VC_OPEN){
+		if(Read_OP_CL_VALVE_Status(0) == VALVE_OPEN){
+			ValveMotorStop();
+			save_valve_para_g.valve_status = VALVE_OPEN;
+			valve_ctrl_para_g.close_time_cnt = 0;
+			valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
+			
+		}else{
+			if(sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag==SET||sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag==SET){ //?Զ����485�ɼ���������ӳ�ִ�з��Ŷ���
+				;
+			}else{
+				valve_ctrl_para_g.open_time_cnt = GetValveRunMaxTime(caliber_type_l);
+		
+				ValveMotorOpenRun();
+
+				save_valve_para_g.valve_status = VALVE_OPENING;
+				valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
+			}
+		}
+	}else if(valve_ctrl_para_g.valve_ctrl_order == VC_CLOSE){
+		if(Read_OP_CL_VALVE_Status(0) == VALVE_CLOSE){
+			ValveMotorStop();
+			save_valve_para_g.valve_status = VALVE_CLOSE;
+			valve_ctrl_para_g.open_time_cnt = 0;
+			valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
+			
+		}else{
+			if(sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag==SET||sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag==SET){ //?Զ����485�ɼ���������ӳ�ִ�з��Ŷ���
+				;
+			}else{
+				
+				valve_ctrl_para_g.close_time_cnt = GetValveRunMaxTime(caliber_type_l);
+				ValveMotorCloseRun();
+
+				save_valve_para_g.valve_status = VALVE_CLOSING;
+				valve_ctrl_para_g.valve_ctrl_order = VC_NONE;	
+			}
+		}
+	}else if(valve_ctrl_para_g.valve_ctrl_order == VC_LOCK){
+		save_valve_para_g.valve_lock_state = VL_LOCK;	
+	}
+	
+	//?�жϿ��ط��Ƿ�λ
+	if(save_valve_para_g.valve_status==VALVE_OPENING){
+		if(valve_ctrl_para_g.open_time_cnt==0){
+			//?��ʱ����
+			ValveMotorStop();
+			save_valve_para_g.valve_status = VALVE_ERROR;
+			
+		}else{
+			valve_ctrl_para_g.open_time_cnt--;
+		}
+		
+		if(valve_ctrl_para_g.force_open_status ==SET){
+			//��������������ǿ�����ر�����
+			ValveMotorStop();
+		}
+	}else if(save_valve_para_g.valve_status==VALVE_CLOSING){
+		if(valve_ctrl_para_g.close_time_cnt==0){
+			//?��ʱ����
+			ValveMotorStop();
+			save_valve_para_g.valve_status = VALVE_ERROR;
+			
+		}else{
+			valve_ctrl_para_g.close_time_cnt--;
+		}
+		
+		if(valve_ctrl_para_g.force_open_status ==SET){
+			//�ط�����������ǿ�����ر�������״̬�ı�ɿ����У����ÿ�����ʱ
+			ValveMotorStop();
+			save_valve_para_g.valve_status = VALVE_OPENING;
+			valve_ctrl_para_g.open_time_cnt = GetValveRunMaxTime(caliber_type_l);
+		}
+	}
+	
+	
+	if((save_valve_para_g.valve_status==VALVE_OPENING)||(save_valve_para_g.valve_status==VALVE_CLOSING))
+		sys_fun_run_ctrl_p->valve_ctrl_flag.running_flag = SET;
+	else
+		sys_fun_run_ctrl_p->valve_ctrl_flag.running_flag = RESET;
+	
+	
+	//״̬�ִ���
+	if(save_valve_para_g.valve_lock_state == VL_UNLOCK)
+		system_status_word_g.status_word.valve_lock = RESET;
+	else
+		system_status_word_g.status_word.valve_lock = SET;
+	
+	if(save_valve_para_g.valve_status == VALVE_ERROR){
+		if(system_status_word_g.status_word.valve_state != VALVE_ERROR){
+			//���������쳣����
+			if(__SYS_ALARM_REPORT_CTL_BYTES_GET(valve_error) == SET)
+				__SYS_ALARM_BYTES_SET(valve_error, ALARM_ID_VALVE_ABNORMAL);	
+			
+			system_alarm_word_for_valve_g.alarm_word.valve_error = SET; //�ط�����״̬��λ
+		}
+	}else{
+		system_status_word_g.status_word.valve_state = save_valve_para_g.valve_status;
 	}
 	
 }
 
 
+//���Ų�������������������������У������ط�������Ҫֹͣ������ת�����йط�
+ErrorStatus ValveCtrlOrder(VALVE_CTRL_TYPE_T valve_ctrl_order_l) 
+{
+	switch(valve_ctrl_order_l){
+		case VC_NONE:break;
+		case VC_OPEN:
+			if((save_valve_para_g.valve_status == VALVE_CLOSE)&&(valve_ctrl_para_g.force_open_status==RESET)){
+				valve_ctrl_para_g.valve_ctrl_order = VC_OPEN;
+				pwr_vol_g.alka_flag = AMS_VALVE_CTRL_BEFORE;
+				return PASS;
+			}
+		break;
+		
+		case VC_CLOSE:
+			if((save_valve_para_g.valve_status != VALVE_CLOSE)&&(valve_ctrl_para_g.force_open_status==RESET)){
+				valve_ctrl_para_g.valve_ctrl_order = VC_CLOSE;
+				pwr_vol_g.alka_flag = AMS_VALVE_CTRL_BEFORE;
+				return PASS;
+			}
+		break;
+		
+		case VC_UNLOCK:
+			save_valve_para_g.valve_lock_state = VL_UNLOCK;
+			return PASS;
+		break;
+		
+		case VC_LOCK:
+			save_valve_para_g.valve_lock_state = VL_LOCK;
+			return PASS;
+		break;
+		
+		default: break;
+	}
+	
+	return FAIL;
+}
 
 
+void ValveForceOpenSignalCheck(void)
+{
+	uint8_t force_open_io_status=(uint8_t)Bit_RESET;
+	Force_Open_GPIO_Init();
+	if(VALVE_FORCE_OPEN_IO_READ==Bit_SET){
+		delay_ms(5);
+		if(VALVE_FORCE_OPEN_IO_READ==Bit_SET)
+			force_open_io_status=(uint8_t)Bit_SET;	
+	}
+	
+	if(force_open_io_status==(uint8_t)Bit_SET){
+		if(valve_ctrl_para_g.force_open_status !=SET){
+			valve_ctrl_para_g.force_open_status =SET;
+			//��ʼ����ǿ��
+			
+		}
+			
+		
+	}else{
+		if(valve_ctrl_para_g.force_open_status ==SET){
+			valve_ctrl_para_g.force_open_status =RESET;
+			//��ʼ�ر�ǿ��
+		}
+		
+	}
+	
+	
+	if((valve_ctrl_para_g.force_open_status ==SET)&&(Read_OP_CL_VALVE_Status(0)==VALVE_OPEN)){
+		//?��⵽ǿ�������Ƿ���״̬��ȡ�Ѿ�����λ����ʾ�Ƴ�ǿ����Դ��
+		//
+		
+		
+	}
+	
+}
 
-
-void	valveCtrlPro(void) //?
+void	valveCtrlPro(FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p) //?  ���Ҫ������������ú���ValveCtrlOrder��VC_OPEN��;��δ����������
 {
 	
+	ValveForceOpenSignalCheck();//?ǿ���жϴ���
+	
+	ValveCtrlHade(equipment_basic_inf_g.caliber_type,sys_fun_run_ctrl_p);//���·��Ų���������
 	
 	
 }

--
Gitblit v1.9.3