From 2f0962db91caa293c9eb43f511c18f25acf9a603 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 25 Feb 2020 11:39:27 +0200 Subject: Current handling supported --- Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 1cc8e766b..00ce306cf 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -694,6 +694,7 @@ uint32_t MillisecLowLoop(uint32_t tick) if (O600Millisecond_Tick) { Trigger_WHSReadAllFanTacho (); + DrierHeaterVoltageSetup(); if (RapidPressureRead == false) { for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) @@ -928,7 +929,7 @@ void HundredMicroTimerInterrupt(int ARG0) StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer2; StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer3; /*-----------------------*/ - //len = usprintf(&StoreBuffer[StoreBufferId][StoreBufferCounter], "\r\n%d %d %d", dancer1[dancer_count],dancer2[dancer_count],dancer3[dancer_count]); + //len = usprintf(&StoreBuffer[StoreBufferId][StoreBufferCounter], "%d %d %d", dancer1[dancer_count],dancer2[dancer_count],dancer3[dancer_count]); //StoreBufferCounter+=(len+1); /*-----------------------*/ dancer1sum+=dancer1; -- cgit v1.3.1 From 124de0fe327a87aca0de1f38b7481cba51a01276 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 27 Feb 2020 17:05:48 +0200 Subject: Improvements to the WHS blower control (feature #1561) --- .../WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c | 84 ++++-- .../WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h | 48 ++-- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 293 +++++++++++++-------- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h | 15 +- .../Embedded/Modules/Control/MillisecTask.c | 4 +- .../Embedded/Modules/Stubs_Handler/Progress.c | 48 +++- 6 files changed, 319 insertions(+), 173 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c index 1e611f65c..d90908b93 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c @@ -26,7 +26,10 @@ uint16_t Orf_zero_value[DRIER_FLOW_METER+1] = {1112,0,1040}; MAX11614 U20_MAX11614 ; -static WHS_Display_View display_view = AVERAGE; +static WHS_Display_View display_view = /*CURRENT*/ AVERAGE; +static WHS_Left_Display_View left_display_view = HeadAVERAGE; +static WHS_Write_Display_View write_display_view = DrierAVERAGE; + //static uint16_t orf1V0Value = 0; //static uint16_t orf3V0Value = 0; @@ -51,10 +54,12 @@ uint32_t WHS_MAX11614_Init () status |= Select_Main_WHS_Mux_Channel(); status |= MAX11614_Init(); + WHS_MAX11614_Read_allADC(); return status; } + uint32_t WHS_MAX11614_Load_OrificeZeroValue (uint16_t O1, uint16_t O3) { @@ -196,18 +201,52 @@ bool Test_WHS_max11614() #define Aorf_ofset 0.0425 //#define Corf_flow 0.2485 #define Corf_flow 0.239 //email from Sergey 3.2.2020 -#define V0 1000 -double get_Q(int16_t num) +//double get_Q(int16_t num) +//{ +// double Sqrt = 0; +// double calc = 0; +// // int16_t tmp = num-orf3V0Value; +// // if (tmp<0) tmp = 0; +// +// Sqrt = sqrt((double)num); +// calc = Corf_flow*Sqrt; +// ReportWithPackageFilter(WasteFilter,"------------ calc Q value (calc)-----------------", __FILE__,__LINE__, calc, RpMessage, num, 0); +// return calc; +//} + +double get_Q(WHS_Flow_Meter num) { double Sqrt = 0; double calc = 0; - int16_t tmp = num-V0; - if (tmp<0) tmp = 0; + uint16_t Vm = 0; + uint16_t V0 = 0; + + switch (num) + { + case DRIER_FLOW_METER: + get_orf_3(&Vm); + V0 = Orf_zero_value[DRIER_FLOW_METER]; + break; - Sqrt = sqrt((double)tmp); - calc = Corf_flow*Sqrt; - ReportWithPackageFilter(WasteFilter,"------------ calc Q value (calc)-----------------", __FILE__,__LINE__, calc, RpMessage, num, 0); + case HEAD_FLOW_METER: + get_orf_1(&Vm); + V0 = Orf_zero_value[HEAD_FLOW_METER]; + break; + default: + break; + } + + if (Vm > V0) + { + Sqrt = sqrt((double)(Vm - V0)); + calc = Corf_flow*Sqrt; + } + else + { + calc = 0; + } + ReportWithPackageFilter(WasteFilter,"------------ calc Q value (calc) (flow num)-----------------", __FILE__,__LINE__, calc, RpMessage, num, 0); return calc; } @@ -246,7 +285,7 @@ bool get_vlev2(uint16_t *value) return status; } -bool get_vlev1(uint16_t *value) // U35 connected to AIN1 +bool get_vlev1(uint16_t *value) // U36 connected to AIN3 { bool status = OK; @@ -287,6 +326,17 @@ bool SetDisplayView(WHS_Display_View view ) return display_view; } +bool SetLeftDisplayView(WHS_Left_Display_View view ) +{ + left_display_view = view; + return left_display_view; +} + +bool SetWriteDisplayView(WHS_Left_Display_View view ) +{ + write_display_view = view; + return write_display_view; +} double GetWHSAirFlow(uint8_t OR_Id) { @@ -295,14 +345,16 @@ double GetWHSAirFlow(uint8_t OR_Id) switch (OR_Id) { case DRIER_FLOW_METER: + if (display_view == AVERAGE) { - Q_value = get_average_ORF3_Q(); + Q_value = get_average_Q(DRIER_FLOW_METER); } else // CURRENT { - get_orf_3(&value); - Q_value = get_Q(value-Orf_zero_value[DRIER_FLOW_METER]); + //get_orf_3(&value); + //Q_value = get_Q(value-orf3V0Value); + Q_value = get_Q(DRIER_FLOW_METER); } break; case NU_FLOW_METER: @@ -311,21 +363,19 @@ double GetWHSAirFlow(uint8_t OR_Id) case HEAD_FLOW_METER: if (display_view == AVERAGE) { - Q_value = get_average_ORF1_Q(); + Q_value = get_average_Q(HEAD_FLOW_METER); } else //CURRENT { get_orf_1(&value); - Q_value = get_Q(value-Orf_zero_value[HEAD_FLOW_METER]); + Q_value = get_Q(HEAD_FLOW_METER); } break; default: break; } - ReportWithPackageFilter(WasteFilter,"------------ GetWHSAirFlow -----------------",__FILE__, OR_Id, (int)value, RpWarning, (int) Orf_zero_value[OR_Id], 0); - - return Q_value ;//get_Q((int16_t)value-Orf_zero_value[OR_Id]); + return Q_value ; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h index 5826b26eb..0a4f73508 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h @@ -6,12 +6,36 @@ #include +typedef enum +{ + HEAD_FLOW_METER = 0, + NU_FLOW_METER, + DRIER_FLOW_METER +}WHS_Flow_Meter; + +typedef enum +{ + CURRENT = 0, + AVERAGE +}WHS_Display_View; +typedef enum +{ + HeadAVERAGE = 0, + DrierAVERAGE +}WHS_Left_Display_View; + +typedef enum +{ + HeadCURRENT = 0, + DrierCURRENT +}WHS_Write_Display_View; uint32_t WHS_MAX11614_Init(void); bool Test_WHS_max11614(void); -double get_Q(int16_t num); +//double get_Q(int16_t num); +double get_Q(WHS_Flow_Meter num); uint32_t WHS_MAX11614_Read_allADC(void); bool get_orf_1(uint16_t *value); @@ -23,25 +47,19 @@ bool get_gas_out(uint16_t *value); bool get_cur_fan(uint16_t *value); bool get_cur_vlv1(uint16_t *value); -typedef enum -{ - HEAD_FLOW_METER = 0, - NU_FLOW_METER, - DRIER_FLOW_METER -}WHS_Flow_Meter; -typedef enum -{ - CURRENT = 0, - AVERAGE -}WHS_Display_View; -uint32_t WHS_MAX11614_Load_OrificeZeroValue (uint16_t O1, uint16_t O3); + + + double GetWHSAirFlow(uint8_t OR_Id); uint16_t GetWHSGasSensor(void); uint16_t GetWHSWasteTankLevel(void); bool SetDisplayView(WHS_Display_View view ); -//uint16_t Get_orf1_V0(void); -//uint16_t Get_orf3_V0(void); +bool SetLeftDisplayView(WHS_Left_Display_View view ); +bool SetWriteDisplayView(WHS_Left_Display_View view ); + +uint16_t Get_orf1_V0(void); +uint16_t Get_orf3_V0(void); #endif /* WHS_MAX11614_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c index ddf2ca9ea..70c6cb157 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c @@ -20,6 +20,8 @@ #include "StateMachines/Initialization/InitSequence.h" bool Read_Max5805_device_ID(); +double calc_Q_average(WHS_Flow_Meter ORF_id,double Q_temp); +void set_new_Q_average(WHS_Flow_Meter ORF_id,double Q_temp); uint8_t Read_Buf[2] = {0}; #define ORF_BUFF_SIZE 60 @@ -28,10 +30,11 @@ double average_orf3_Q_buff[ORF_BUFF_SIZE] = {0}; double average_Q_orifice1; double average_Q_orifice3; -bool ORF1_flageNewBlowerValue; -bool ORF3_flageNewBlowerValue; -double SetPoint_Q = 7.0; +bool EnableControlLoop = 1; + +double SetPoint_Q = 5.0; bool CofigurationFlow = 1; +uint8_t close_loop_time = 15; int32_t i2c_smbus_write_word_data(int i2cFileDescriptor, uint8_t command_regAddress, uint16_t regValue) { @@ -121,8 +124,6 @@ bool WHS_Set_Volt_Blower_Control(uint16_t volt) } else { - ORF1_flageNewBlowerValue = 1; - ORF3_flageNewBlowerValue = 1; MAX5805_CODE_LOAD( volt); ReportWithPackageFilter(WasteFilter,"------------ WHS_Set_Volt_Blower_Control (volt)-----------------", __FILE__,__LINE__, volt, RpMessage, 0, 0); } @@ -193,113 +194,133 @@ bool WHS_init_Blower() return status; } -double WHS_Blower_Avarege_ORF1() +double WHS_Blower_Avarege(WHS_Flow_Meter ORF_id) { - static uint8_t i = 0 ; - static double sum_orifice_Q = 0; uint16_t orifice_hex_value = 0; + uint16_t V0_value = 0; double Q_temp = 0 ; + double average_Q = 0.0; - get_orf_1( &orifice_hex_value ); - if (ORF1_flageNewBlowerValue) + switch (ORF_id) { - ORF1_flageNewBlowerValue = 0; - Q_temp = get_Q(orifice_hex_value); - sum_orifice_Q = Q_temp*ORF_BUFF_SIZE; - average_Q_orifice1 = Q_temp; - for (i = 0; i < ORF_BUFF_SIZE; i+=1) - { - average_orf1_Q_buff[i] = Q_temp; - } - ReportWithPackageFilter(WasteFilter,"------------ average_Q_orifice1 hex drier new value-----------------", __FILE__,__LINE__,(int)orifice_hex_value, RpMessage, (average_Q_orifice1*1000), 0); + case HEAD_FLOW_METER: + // get_orf_1( &orifice_hex_value ); + // V0_value = Get_orf1_V0(); + average_Q = average_Q_orifice1; + break; + case DRIER_FLOW_METER: + // get_orf_3( &orifice_hex_value ); + // V0_value = Get_orf3_V0(); + average_Q = average_Q_orifice3; + break; + default: + break; } - else - { - if (i == ORF_BUFF_SIZE) - { - i = 0; - } - else - { - i += 1; - } - sum_orifice_Q -= average_orf1_Q_buff[i]; - average_orf1_Q_buff[i] = get_Q(orifice_hex_value); - sum_orifice_Q += average_orf1_Q_buff[i]; - average_Q_orifice1 = sum_orifice_Q / ORF_BUFF_SIZE; - ReportWithPackageFilter(WasteFilter,"------------ average_Q_orifice1 hex head -----------------", __FILE__,__LINE__,(int)orifice_hex_value, RpMessage, (average_Q_orifice1*1000), 0); - } - return average_Q_orifice1; -} -double WHS_Blower_Avarege_ORF3() -{ - static uint8_t i = 0 ; - static double sum_orifice_Q = 0; - uint16_t orifice_hex_value = 0; - double Q_temp = 0 ; - - get_orf_3( &orifice_hex_value ); - if (ORF3_flageNewBlowerValue) + Q_temp = get_Q(ORF_id); + if (fabs(Q_temp - average_Q) > 1.75) { - ORF3_flageNewBlowerValue = 0; - Q_temp = get_Q(orifice_hex_value); - sum_orifice_Q = Q_temp*60; - average_Q_orifice3= Q_temp; - for (i = 0; i < ORF_BUFF_SIZE; i+=1) - { - average_orf3_Q_buff[i] = Q_temp; - } - ReportWithPackageFilter(WasteFilter,"------------ average_Q_orifice3 hex head new value-----------------", __FILE__,__LINE__,(int)orifice_hex_value, RpMessage, (average_Q_orifice3 * 1000), 0); + set_new_Q_average(ORF_id, Q_temp); + average_Q = Q_temp; } else { - if (i == ORF_BUFF_SIZE) - { - i = 0; - } - else - { - i += 1; - } - sum_orifice_Q -= average_orf3_Q_buff[i]; - average_orf3_Q_buff[i] = get_Q(orifice_hex_value); - sum_orifice_Q += average_orf3_Q_buff[i]; - average_Q_orifice3 = sum_orifice_Q /ORF_BUFF_SIZE; + average_Q = calc_Q_average(ORF_id, Q_temp); } - ReportWithPackageFilter(WasteFilter,"------------ average_Q_orifice3 hex head -----------------", __FILE__,__LINE__,(int)orifice_hex_value, RpMessage, (average_Q_orifice3 * 1000), 0); - return average_Q_orifice3; + return average_Q; } -double get_ORF1_Q() +void set_new_Q_average(WHS_Flow_Meter ORF_id,double Q_temp) { - uint16_t tempu16 = 0; - get_orf_1(&tempu16); - return get_Q(tempu16); -} + uint8_t i = 0; -double get_ORF3_Q() -{ - uint16_t tempu16 = 0; - get_orf_3(&tempu16); - return get_Q(tempu16); + switch (ORF_id) + { + case HEAD_FLOW_METER: + average_Q_orifice1 = Q_temp; + for (i = 0; i < ORF_BUFF_SIZE; i+=1) + { + average_orf1_Q_buff[i] = Q_temp; + } + break; + case DRIER_FLOW_METER: + average_Q_orifice3 = Q_temp; + for (i = 0; i < ORF_BUFF_SIZE; i+=1) + { + average_orf3_Q_buff[i] = Q_temp; + } + break; + default: + break; + } } -double get_average_ORF1_Q() +double calc_Q_average(WHS_Flow_Meter ORF_id,double Q_temp) { - return average_Q_orifice1; + static uint8_t i_head = 0 ; + static uint8_t i_drier = 0 ; + double sum_orifice_Q = 0.0; + double Q_average = 0.0; + + switch (ORF_id) + { + case HEAD_FLOW_METER: + if (i_head == ORF_BUFF_SIZE) + { + i_head = 0; + } + else + { + i_head += 1; + } + sum_orifice_Q = (average_Q_orifice1 * ORF_BUFF_SIZE) - average_orf1_Q_buff[i_head]; + average_orf1_Q_buff[i_head] = Q_temp; + sum_orifice_Q += average_orf1_Q_buff[i_head]; + average_Q_orifice1 = sum_orifice_Q /ORF_BUFF_SIZE; + Q_average = average_Q_orifice1; + break; + case DRIER_FLOW_METER: + if (i_drier == ORF_BUFF_SIZE) + { + i_drier = 0; + } + else + { + i_drier += 1; + } + sum_orifice_Q = (average_Q_orifice3 * ORF_BUFF_SIZE) - average_orf3_Q_buff[i_drier]; + average_orf3_Q_buff[i_drier] = Q_temp; + sum_orifice_Q += average_orf3_Q_buff[i_drier]; + average_Q_orifice3 = sum_orifice_Q /ORF_BUFF_SIZE; + Q_average = average_Q_orifice3; + break; + default: + break; + } + return Q_average; } -double get_average_ORF3_Q() +double get_average_Q(WHS_Flow_Meter ORF_id) { - return average_Q_orifice3; + double average_Q = 0.0; + switch (ORF_id) + { + case HEAD_FLOW_METER: + average_Q = average_Q_orifice1; + break; + case DRIER_FLOW_METER: + average_Q = average_Q_orifice3; + break; + default: + break; + } + return average_Q; } bool Test_WHS_blower() { bool status = OK; - //WHS_init_Blower(); WHS_Set_Volt_Blower_Control(0x0fff); //12 bit 5.0v delayms(4000); WHS_Set_Volt_Blower_Control(0x0c00); //12 bit 3.77v @@ -313,57 +334,76 @@ bool Test_WHS_blower() return status; } -#define SET_DYEING_HEAD_ORRIFFICE_SENSOR headairflow //todo -#define LARGE_STEP 100 //todo define the correct number -#define SMALL_STEP 10 //todo define the correct number +#define STEP_100 100 //todo define the correct number +#define STEP_10 10 //todo define the correct number +#define STEP_1 1 //todo define the correct number -bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint_Q) +bool WHS_Set_Blower_Control_Closed_Loop(double Q_value) { - //double average_ORF1_Q = 0; double current_dying_head_flow_Q = 0.0; - uint16_t volt; -double tmp = 0.0; - current_dying_head_flow_Q = get_average_ORF1_Q(); + double tmp = 0.0; + + current_dying_head_flow_Q = get_average_Q(HEAD_FLOW_METER); ReportWithPackageFilter(WasteFilter,"------------ current_dying_head_flow_Q =-----------------", __FILE__,__LINE__, current_dying_head_flow_Q, RpMessage, 0, 0); - ReportWithPackageFilter(WasteFilter,"------------ SET_DYEING_HEAD_ORRIFFICE_SENSOR =-----------------", __FILE__,__LINE__, SET_DYEING_HEAD_ORRIFFICE_SENSOR, RpMessage, current_dying_head_flow_Q, 0); - tmp = fabs((current_dying_head_flow_Q*10) - (SetPoint_Q*10)); + ReportWithPackageFilter(WasteFilter,"------------ SET_DYEING_HEAD_ORRIFFICE_SENSOR =-----------------", __FILE__,__LINE__, (int)(Q_value * 1000), RpMessage, (int)(current_dying_head_flow_Q * 1000), 0); + tmp = fabs((current_dying_head_flow_Q) - (Q_value)); - if (tmp > (0.2 * 10)) + if (tmp > 0.05) { - volt = g_MAX5805_device.CODE;//getBlowerState(); - if (current_dying_head_flow_Q < SetPoint_Q) + volt = g_MAX5805_device.CODE; + if (current_dying_head_flow_Q < Q_value) { - if (( SetPoint_Q - current_dying_head_flow_Q) > 0.5) + if (( Q_value - current_dying_head_flow_Q) > 1) { /* increase blower voltage by large step: */ - ReportWithPackageFilter(WasteFilter,"------------ increase blower voltage by large step:-----------------", __FILE__,__LINE__, volt, RpMessage, LARGE_STEP, 0); - //WHS_Set_Volt_Blower_Control( volt + LARGE_STEP );//call func :Control_Voltage_To_Blower - Control_Voltage_To_Blower(volt + LARGE_STEP); + ReportWithPackageFilter(WasteFilter,"------------ increase blower voltage by 100:-----------------", __FILE__,__LINE__, volt, RpMessage, STEP_100, 0); + Control_Voltage_To_Blower(volt + STEP_100); + close_loop_time = 15; } else { - /* increase blower voltage by small step: */ - ReportWithPackageFilter(WasteFilter,"------------ increase blower voltage by large step:-----------------", __FILE__,__LINE__, volt, RpMessage, SMALL_STEP, 0); - //WHS_Set_Volt_Blower_Control( volt + SMALL_STEP ); - Control_Voltage_To_Blower(volt + SMALL_STEP); + if (( Q_value - current_dying_head_flow_Q) > 0.20) + { + /* increase blower voltage by small step: */ + ReportWithPackageFilter(WasteFilter,"------------ increase blower voltage by 10:-----------------", __FILE__,__LINE__, volt, RpMessage, STEP_10, 0); + Control_Voltage_To_Blower(volt + STEP_10); + close_loop_time = 10; + } + else + { + /* increase blower voltage by small step: */ + ReportWithPackageFilter(WasteFilter,"------------ increase blower voltage by 1:-----------------", __FILE__,__LINE__, volt, RpMessage, STEP_1, 0); + Control_Voltage_To_Blower(volt + STEP_1); + close_loop_time = 5; + } } } else { - if (( current_dying_head_flow_Q - SetPoint_Q) > 0.5) + if (( current_dying_head_flow_Q - Q_value) > 1) { /* decrease blower voltage by large step: */ - ReportWithPackageFilter(WasteFilter,"------------ decrease blower voltage by large step:-----------------", __FILE__,__LINE__, volt, RpMessage, LARGE_STEP, 0); - //WHS_Set_Volt_Blower_Control(volt - LARGE_STEP); - Control_Voltage_To_Blower(volt - LARGE_STEP); + ReportWithPackageFilter(WasteFilter,"------------ decrease blower voltage by 100:-----------------", __FILE__,__LINE__, volt, RpMessage, STEP_100, 0); + Control_Voltage_To_Blower(volt - STEP_100); + close_loop_time = 15; } else { - /* decrease blower voltage by small step: */ - ReportWithPackageFilter(WasteFilter,"------------ decrease blower voltage by small step:-----------------", __FILE__,__LINE__, volt, RpMessage, SMALL_STEP, 0); - //WHS_Set_Volt_Blower_Control( volt - SMALL_STEP ); - Control_Voltage_To_Blower(volt - SMALL_STEP); + if (( current_dying_head_flow_Q - Q_value) > 0.20) + { + /* decrease blower voltage by small step: */ + ReportWithPackageFilter(WasteFilter,"------------ decrease blower voltage by 10:-----------------", __FILE__,__LINE__, volt, RpMessage, STEP_10, 0); + Control_Voltage_To_Blower(volt - STEP_10); + close_loop_time = 10; + } + else + { + /* decrease blower voltage by small step: */ + ReportWithPackageFilter(WasteFilter,"------------ decrease blower voltage by 1:-----------------", __FILE__,__LINE__, volt, RpMessage, STEP_1, 0); + Control_Voltage_To_Blower(volt - STEP_1); + close_loop_time = 5; + } } } } @@ -376,21 +416,40 @@ void WHS_Set_SetPoint_Q_value(double value) CofigurationFlow = 0; } +void WHS_enable_control_loop(double value) // 0=disable 1= enable +{ + EnableControlLoop = value; +} + void WHS_Start_Blower_Control_Closed_Loop () { + + static uint8_t count = 0; + if (GetMachineState() int32_t Write_Max5805_AUXn(bool value); int16_t Write_Max5805_LDACn(bool value); @@ -19,16 +20,14 @@ bool WHS_Set_Volt_Blower_Control(uint16_t volt); uint16_t WHS_Get_Volt_Blower_Control(void); bool Write_MAX5805_REF(void); bool Test_WHS_blower(void); -double WHS_Blower_Avarege_ORF1(void); -double WHS_Blower_Avarege_ORF3(void); -double get_average_ORF1_Q(void); -double get_average_ORF3_Q(void); -double get_ORF1_Q(); -double get_ORF3_Q(); -bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint); -void WHS_Start_Blower_Control_Closed_Loop (); +double WHS_Blower_Avarege(WHS_Flow_Meter ORF_id); +double get_average_Q(WHS_Flow_Meter ORF_id); + +bool WHS_Set_Blower_Control_Closed_Loop(double Q_value); +void WHS_Start_Blower_Control_Closed_Loop (void); double WHS_Get_Blower_Control_Closed_Loop_SetPoint(void); void WHS_Set_SetPoint_Q_value(double value); +void WHS_enable_control_loop(double value); extern double headairflow; /* from Blower.h diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 00ce306cf..5170b7cef 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -726,8 +726,8 @@ uint32_t MillisecLowLoop(uint32_t tick) if (WHS_Type == WHS_TYPE_NEW) { Trigger_WHS_PT100_Read_All(); - WHS_Blower_Avarege_ORF1(); //drier - WHS_Blower_Avarege_ORF3(); //head + WHS_Blower_Avarege(HEAD_FLOW_METER); + WHS_Blower_Avarege(DRIER_FLOW_METER); WHS_Start_Blower_Control_Closed_Loop (); } } diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index cbe70b444..35a9aef5b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -109,11 +109,12 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) } } else - if((request->amount == 0x3E8) && (request->delay <= 0x0fff))// set WHS Blower speed 0x00-0xfff + if(request->amount == 0x3E8) //&& (request->delay <= 0x0fff))// set WHS Blower speed 0x00-0xfff { if (WHS_Type == WHS_TYPE_NEW) { - Trigger_SetWHSBlowerVoltage (request->delay); + WHS_enable_control_loop( request->delay & 0x1000);//disable control loop: 0=disable 1= enable + Trigger_SetWHSBlowerVoltage (request->delay & 0x0FFF); response.progress = 0; response.has_progress = false; } @@ -144,19 +145,38 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) { uint16_t tempu16 = 0; double temp_double = 0.0; + uint8_t display_byte = 0; + uint16_t A2D_data = 0; + if (WHS_Type == WHS_TYPE_NEW) { - - if (request->delay & 0x8000) // bit15 select the chip address - { - SetDisplayView( CURRENT ); - } - else + display_byte = ((request->delay & 0x3000)>>12); + switch (display_byte) { - SetDisplayView( AVERAGE ); + case 0: + //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x0000); // + SetLeftDisplayView (HeadAVERAGE); + SetWriteDisplayView(DrierAVERAGE); + break; + case 1: + //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x1000); // + SetLeftDisplayView (HeadAVERAGE); + SetWriteDisplayView(HeadCURRENT); + break; + case 2: + //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x2000); // + SetLeftDisplayView (DrierAVERAGE); + SetWriteDisplayView(DrierCURRENT); + break; + case 3: + //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x3000); // + SetLeftDisplayView (HeadCURRENT); + SetWriteDisplayView(DrierCURRENT); + break; } - switch(request->delay )// get A2D + A2D_data = (request->delay & 0x0FFF); + switch(A2D_data )// get A2D { case 0: get_orf_1(&tempu16); @@ -186,16 +206,16 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) tempu16 = 0; //get_cur_vlv2(&tempu16); break; case 10: - temp_double = get_ORF1_Q(); + temp_double = get_Q(HEAD_FLOW_METER); break; case 12: - temp_double = get_ORF3_Q(); + temp_double = get_Q(DRIER_FLOW_METER); break; case 20: - temp_double = get_average_ORF1_Q(); //HEAD + temp_double = get_average_Q(HEAD_FLOW_METER); //HEAD break; case 22: - temp_double = get_average_ORF3_Q(); //Drier + temp_double = get_average_Q(DRIER_FLOW_METER); //Drier break; case 11: -- cgit v1.3.1 From 95aae68e89693fb394d59d19b383571099b6d3d4 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 1 Mar 2020 09:15:06 +0200 Subject: fix file handling. set the machine state to error while waiting to the cooler --- Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c | 2 +- Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 2 +- .../Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 1ba656657..3b5ba176d 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -717,7 +717,7 @@ FRESULT FileWrite(void * buffer, uint16_t size,char *path, uint32_t timeout) return FR_TIMEOUT; } - Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS); + Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS|FA_CREATE_ALWAYS); if (Fresult == FR_OK) { Fresult = f_write(FileHandle,buffer,size,&Bytes ); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 5170b7cef..da4f04f3b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -978,7 +978,7 @@ void MillisecLogInit(void) if (FileHandle == 0) Fresult = FR_DENIED; else - Fresult = f_open(FileHandle,MillisecPath,FA_WRITE | FA_OPEN_ALWAYS); + Fresult = f_open(FileHandle,MillisecPath,FA_WRITE | FA_OPEN_ALWAYS|FA_CREATE_ALWAYS); ROM_IntMasterEnable(); return ; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 9f864c2dc..05559ffae 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -453,6 +453,7 @@ uint32_t InitSequenceDispenserPressureBuildUpTest(void) uint32_t InitSequenceWaitForCoolerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { MachineStateDetail = INIT_SEQUENCE_WAIT_FOR_COOLER; + SetMachineStatus(MACHINE_STATE__Ready); //prevent job while waiting for the cooler if (SafeRemoveControlCallback(HWControlId, InitSequenceWaitForCoolerCallBackFunction )==OK) HWControlId = 0xFF; @@ -477,6 +478,8 @@ uint32_t InitSequenceWaitForCooler(void) } else { + SetMachineStatus(MACHINE_STATE__Error); //prevent job while waiting for the cooler + //cold reset, wait 2 minutes for cooler start // HWControlId = AddControlCallback("Init Cooler", InitSequenceWaitForCoolerCallBackFunction, 2*eOneMinute, TemplateDataReadCBFunction,0,0, 0 ); HWControlId = AddControlCallback("Init Cooler", InitSequenceWaitForCoolerCallBackFunction, 2*eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); -- cgit v1.3.1 From c95669fee0ae81693079c7c35330ae5174d471b9 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 3 Mar 2020 14:05:37 +0200 Subject: Version 1.4.6.15 head (magnet) improved, rockers bypass, --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Common/Utilities/idle_task.c | 3 -- .../PMR/Printing/ThreadParameters.pb-c.c | 19 ++++++++-- .../PMR/Printing/ThreadParameters.pb-c.h | 4 +- Software/Embedded_SW/Embedded/DataDef.h | 8 +++- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 44 +++++++++++----------- .../Embedded/Drivers/I2C_Communication/I2C.h | 8 ---- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 22 ++++++++++- .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 9 ++++- .../Embedded/Drivers/Motors/MotorActions.c | 4 +- .../Embedded/Modules/Control/MillisecTask.c | 2 +- .../Embedded/Modules/General/GeneralHardware.c | 1 - .../Embedded/Modules/Stubs_Handler/Progress.c | 3 +- .../Embedded/Modules/Thread/Thread_print.c | 5 ++- 14 files changed, 87 insertions(+), 47 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 51540cf50..28ab799a1 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,4,6,14}; +TangoVersion_t _gTangoVersion = {1,4,6,15}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c index 9a1de790e..86c030dc0 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c @@ -201,9 +201,6 @@ uint32_t unload_max_count=0; } void IdleTaskGetLoadTable (uint32_t *aBuffer) { - int i; - //for (i=0;i<100;i++) - // aBuffer[i] = idle_load_table[i]; memcpy (aBuffer,idle_load_table,sizeof(idle_load_table)); } uint32_t MillisecCounter = 0; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.c index 1c8a5ffef..4c653de78 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.c @@ -52,7 +52,7 @@ void thread_parameters__free_unpacked assert(message->base.descriptor == &thread_parameters__descriptor); protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); } -static const ProtobufCFieldDescriptor thread_parameters__field_descriptors[9] = +static const ProtobufCFieldDescriptor thread_parameters__field_descriptors[10] = { { "FeederP", @@ -162,8 +162,21 @@ static const ProtobufCFieldDescriptor thread_parameters__field_descriptors[9] = 0, /* flags */ 0,NULL,NULL /* reserved1,reserved2, etc */ }, + { + "BypassRockers", + 10, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(ThreadParameters, has_bypassrockers), + offsetof(ThreadParameters, bypassrockers), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, }; static const unsigned thread_parameters__field_indices_by_name[] = { + 9, /* field[9] = BypassRockers */ 2, /* field[2] = FeederD */ 1, /* field[1] = FeederI */ 0, /* field[0] = FeederP */ @@ -177,7 +190,7 @@ static const unsigned thread_parameters__field_indices_by_name[] = { static const ProtobufCIntRange thread_parameters__number_ranges[1 + 1] = { { 1, 0 }, - { 0, 9 } + { 0, 10 } }; const ProtobufCMessageDescriptor thread_parameters__descriptor = { @@ -187,7 +200,7 @@ const ProtobufCMessageDescriptor thread_parameters__descriptor = "ThreadParameters", "", sizeof(ThreadParameters), - 9, + 10, thread_parameters__field_descriptors, thread_parameters__field_indices_by_name, 1, thread_parameters__number_ranges, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.h index 1acfd6686..a8ac6f78f 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/ThreadParameters.pb-c.h @@ -44,10 +44,12 @@ struct _ThreadParameters int32_t winderi; protobuf_c_boolean has_winderd; int32_t winderd; + protobuf_c_boolean has_bypassrockers; + protobuf_c_boolean bypassrockers; }; #define THREAD_PARAMETERS__INIT \ { PROTOBUF_C_MESSAGE_INIT (&thread_parameters__descriptor) \ - , 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 } /* ThreadParameters methods */ diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index bdfbab720..0ada1e7ec 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -374,7 +374,6 @@ typedef enum HEAD_TYPE_UNKNOWN_WITH_CARD, HEAD_TYPE_SYLKO, HEAD_TYPE_STAPLE_SPUN, - }HEAD_TYPE; extern uint8_t Head_Type; @@ -416,6 +415,13 @@ typedef enum MAX_HEAD_FAN, }HEAD_FAN_ENUM; +typedef enum +{ + OPEN_MAGNET, + CLOSE_MAGNET, + DISABLE_MAGNET +}MAGNET_COMMAND_ENUM; + /* typedef union { diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index a6b8723a8..3cd60123a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -433,7 +433,6 @@ bool FPGA_Read_limit_Switches(FPGA_GPI_ENUM Limit_Switch) if(Head_Type == HEAD_TYPE_SYLKO) LM_Status = !(Head_I2C_EXP4_0x46.bits.INPUT_LS_UP); break; - default : LM_Status = NO_LIMIT; break; @@ -515,7 +514,8 @@ uint32_t MagnetCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { if(Head_Type == HEAD_TYPE_SYLKO) - HeadCard_HeadMagnet_Disable(); + Trigger_Head_Magnet(DISABLE_MAGNET); + //HeadCard_HeadMagnet_Disable(); else MotorStop(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,Hard_Hiz ); @@ -533,18 +533,19 @@ uint32_t ActivateHeadMagnet() //WHS_Start_Blower_Control_Closed_Loop(BlowerSetPoint); //Task_sleep(500); if(Head_Type == HEAD_TYPE_SYLKO) - HeadCard_ActivateHeadMagnet(); + //HeadCard_ActivateHeadMagnet(); + Trigger_Head_Magnet(CLOSE_MAGNET); else { F2_CTRL_Reg.ushort &= ~SPARE_SSR13_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; - if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) - { - if (MotorDriverResponse[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM].DriverType == CombinrdMotDriver) - MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_OPEN ); - else - MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_CLOSE ); - } + } + if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) + { + if (MotorDriverResponse[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM].DriverType == CombinrdMotDriver) + MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_OPEN ); + else + MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_CLOSE ); } MagnetControlId = AddControlCallback(NULL, MagnetCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; @@ -562,23 +563,24 @@ uint32_t DeActivateHeadMagnet() if(Head_Type == HEAD_TYPE_SYLKO) { - HeadCard_DeActivateHeadMagnet(); - MagnetControlId = AddControlCallback(NULL, MagnetCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + Trigger_Head_Magnet(OPEN_MAGNET); + //HeadCard_DeActivateHeadMagnet(); } else { - Report("DeActivateHeadMagnet - open the lid magnet",__FILE__,__LINE__,(int)HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,RpWarning,(int)DH_LID_CLOSE,0); - if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) - { - if (MotorDriverResponse[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM].DriverType == CombinrdMotDriver) - MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_CLOSE ); - else - MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_OPEN ); - //MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM, DH_LID_OPEN, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM], NULL,1000); - } F2_CTRL_Reg.ushort |= SPARE_SSR13_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; } + Report("DeActivateHeadMagnet - open the lid magnet",__FILE__,__LINE__,(int)HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,RpWarning,(int)DH_LID_CLOSE,0); + if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) + { + if (MotorDriverResponse[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM].DriverType == CombinrdMotDriver) + MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_CLOSE ); + else + MotorGoTo(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,DH_LID_OPEN ); + //MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM, DH_LID_OPEN, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM], NULL,1000); + } + MagnetControlId = AddControlCallback(NULL, MagnetCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); Task_sleep(500); return OK; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h index d1cc5f580..d8b2d1286 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h @@ -27,14 +27,6 @@ uint32_t I2C_ReadBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf, uint32_t No_BytesToWrite ); uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, uint32_t No_BytesToRead ); -void Trigger_Heater_Current_Read(void); -void Trigger_MidTank_Pressure_Read(void); -void Trigger_PT100_Read(void); -void Trigger_HeaterWriting(void); -void Trigger_Head_Init_PT100(void); -void Trigger_Head_Actuators_Control(uint32_t Act_ID, bool Active_Low_Pwr, bool Direction); -void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM); -void Trigger_InputsReading(void); uint32_t Block_Main_MUX_TCA9548A_0xE4(); ////unused I2C MUX extern uint8_t Main_Mux_Flag ; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c index 803b66b63..b81674d68 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -18,6 +18,8 @@ #include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h" #include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h" #include "Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.h" +#include "Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h" +#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" #include #include #include @@ -26,7 +28,6 @@ #include #include "ADC_MUX/ADC_MUX.h" #include "modules/ids/ids_ex.h" -#include "Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h" extern Semaphore_Handle I2C_Sem; Task_Handle I2C_Task_Handle; @@ -42,6 +43,7 @@ typedef enum Head_Init_PT100, Actuators_Control, HeadFanControl, + HeadMagnetAction, /* enum for WHS :*/ WHS_start, @@ -159,7 +161,17 @@ void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM) Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); return; } +void Trigger_Head_Magnet(int direction) +{ + I2C_ReadingMessageStruc I2C_ReadingMessage; + //uint8_t Midtank_i; + I2C_ReadingMessage.messageId = HeadMagnetAction; + I2C_ReadingMessage.parameter = direction; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; +} void Trigger_HeaterWriting(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; @@ -492,6 +504,14 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) case HeadFanControl: Head_Fan_PWM_Control(I2C_ReadingMessage.parameter, I2C_ReadingMessage.parameter2); break; + case HeadMagnetAction: + if (I2C_ReadingMessage.parameter == OPEN_MAGNET) + HeadCard_ActivateHeadMagnet(); + else if (I2C_ReadingMessage.parameter == CLOSE_MAGNET) + HeadCard_DeActivateHeadMagnet(); + else //DISABLE_MAGNET + HeadCard_HeadMagnet_Disable(); + break; case Head_Inputs_Reading: Head_Read_IO_Reg(0x44, LOW_AND_HIGH);//BREAK__ZN1-12 + BREAK_HTIN Head_Read_IO_Reg(0x46, LOW_AND_HIGH);//READ HEAD CARD LS + ACT status + BREAK_HTOT diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h index 71a46bcec..e95ada01f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -32,12 +32,19 @@ void Trigger_WHS_MAX11614_Read_allADC(); void Trigger_WHS_Set_RDAC(uint16_t value); void Trigger_WHS_set_Rheostat_to_CLEAN_AIR(void); - //void Trigger_WHS_set_fan_speed( fan_num, uint16_t fan_speed); //void Trigger_WHS_Set_Volt_Blower_Control(uint16_t volt); //void Trigger_WHS_Set_Blower_Control_Closed_Loop (uint32_t setpoint_Q); //void Trigger_WHS_Set_Valve(uint8_t valve_number, bool status); //void Trigger_WHS_Set_Pump(bool status); +void Trigger_Heater_Current_Read(void); +void Trigger_MidTank_Pressure_Read(void); +void Trigger_PT100_Read(void); +void Trigger_HeaterWriting(void); +void Trigger_Head_Init_PT100(void); +void Trigger_Head_Actuators_Control(uint32_t Act_ID, bool Active_Low_Pwr, bool Direction); +void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM); +void Trigger_InputsReading(void); #endif /* DRIVERS_I2C_COMMUNICATION_I2C_TASK_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 67fb707f5..d679cbb01 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -845,8 +845,8 @@ void MotorActionsInit(void) } if (Head_Type == HEAD_TYPE_SYLKO)//adjust the limit switches { - Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID] = I2C_HEADCARD_COVER_LS_FRONT; - Motor_Id_to_LS_IdUp [HARDWARE_MOTOR_TYPE__MOTO_DH_LID] = I2C_HEADCARD_COVER_LS_REAR; + Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID] = I2C_HEADCARD_COVER_LS_REAR; + Motor_Id_to_LS_IdUp [HARDWARE_MOTOR_TYPE__MOTO_DH_LID] = I2C_HEADCARD_COVER_LS_FRONT; } } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index da4f04f3b..99036a073 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -706,7 +706,7 @@ uint32_t MillisecLowLoop(uint32_t tick) if (Onesecond_Tick) { char Lenstr[160]; - static int Counter = 0; + //static int Counter = 0; MachineUpdateResponseFunc(); //KeepAliveOneSecondCall(); diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 0e52832ca..5a920bc25 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -726,7 +726,6 @@ uint32_t LoadConfigurationParamsFromFile(bool Initialize) } void HWConfigurationLoadFile(void) { - FRESULT Fresult = FR_OK; uint8_t* buffer = NULL; uint32_t Bytes = 0; buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 9a6099215..57b596931 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -33,7 +33,7 @@ #include "modules/heaters/heaters_ex.h" #include #include -#include +#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" #include "drivers/adc_sampling/adc.h" #include #include @@ -43,7 +43,6 @@ #include #include -#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" extern float NumberOfRotationPerPassage; // how many rotations per spool passage diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 60cd994dd..8cd917a8d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -72,10 +72,12 @@ double TempTotalProcessedLength = 0.0; bool InitialProcess = false; bool PrepareState = false; + // job parameters bool EnableLubrication = false; bool EnableIntersegment = false; double IntersegmentLength = 0; +bool Thread_Rockers_Bypass = false; int CurrentSegmentId = 0; @@ -781,6 +783,8 @@ uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams) MotorControlConfig[WINDER_MOTOR].m_params.Ki = ThreadParams->winderi; if(ThreadParams->winderd) MotorControlConfig[WINDER_MOTOR].m_params.Kd = ThreadParams->winderd; + if(ThreadParams->bypassrockers) + Thread_Rockers_Bypass = true; } //******************************************************************************************************************** @@ -1003,7 +1007,6 @@ uint32_t ThreadDryerRampUp(uint32_t IfIndex, uint32_t BusyFlag) return OK; } -bool Thread_Rockers_Bypass = false; bool Set_Thread_Rockers_Bypass (int value) { if (value == 0) -- cgit v1.3.1 From 08776fb8dbe74edb50fb79a55c1613165385e5d7 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Tue, 3 Mar 2020 14:50:33 +0200 Subject: removw warninigs --- Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index da4f04f3b..b1efcba9a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -59,6 +59,8 @@ #include #include #include +#include "Modules/Heaters/Heaters_ex.h" +#include Task_Handle Millisecond_Task_Handle; /******************** Definitions ********************************************/ -- cgit v1.3.1 From 99f7f5459baabb7651ab4a111e677e6aab167686 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 4 Mar 2020 12:29:48 +0200 Subject: compilation warnings removed --- Software/Embedded_SW/Embedded/Communication/CommunicationTask.c | 2 +- .../Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c | 2 +- Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c | 3 +-- .../I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 4 ++-- Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 2 +- Software/Embedded_SW/Embedded/Modules/General/process.h | 1 + Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h | 1 + Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c | 3 ++- .../Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c | 1 + .../Embedded/StateMachines/Initialization/PowerOffSequence.h | 1 + 10 files changed, 12 insertions(+), 8 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c index 5369878f8..f1264b3d5 100644 --- a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c +++ b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c @@ -126,7 +126,7 @@ void freeArray(uint32_t buffer) uint32_t CommunicationTaskInit(void) { USBCDCD_init(); - Init_U0(); + //Init_U0(); return OK; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c index 283249dd1..457a8b895 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c @@ -426,7 +426,7 @@ bool Get_Heater_Current_Reading_State(HEATERS_CURRENT Heater_ID) //0-8 if((Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)&&(Heater_ID>=HEATER_DRYER_CURRENT_3)) return false; if (Heater_ID>=NUM_OF_CURRENT_HEATERS) - return; + return false; return Heaters_Current_Read_Enable[Heater_ID]; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c index b81674d68..a4debd4b9 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -81,7 +81,6 @@ typedef struct I2C_ReadingMessage{ void Trigger_Heater_Current_Read(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; - uint8_t Heater_i=0; I2C_ReadingMessage.messageId = Heater_Current_Reading; I2C_ReadingMessage.parameter = NUM_OF_CURRENT_HEATERS; @@ -152,7 +151,7 @@ void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM) //uint8_t Midtank_i; if ((Fan_ID>=MAX_HEAD_FAN)||(PWM>0xFF)) - return ERROR; + return; I2C_ReadingMessage.messageId = HeadFanControl; I2C_ReadingMessage.parameter = Fan_ID; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c index eaad047e1..1a0021694 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c @@ -196,8 +196,8 @@ bool WHS_init_Blower() double WHS_Blower_Avarege(WHS_Flow_Meter ORF_id) { - uint16_t orifice_hex_value = 0; - uint16_t V0_value = 0; + //uint16_t orifice_hex_value = 0; + //uint16_t V0_value = 0; double Q_temp = 0 ; double average_Q = 0.0; diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 1f69387a6..0e95f4053 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -707,7 +707,7 @@ uint32_t MillisecLowLoop(uint32_t tick) } if (Onesecond_Tick) { - char Lenstr[160]; + //char Lenstr[160]; //static int Counter = 0; MachineUpdateResponseFunc(); //KeepAliveOneSecondCall(); diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.h b/Software/Embedded_SW/Embedded/Modules/General/process.h index 97d28f1ef..a546ffdbe 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.h +++ b/Software/Embedded_SW/Embedded/Modules/General/process.h @@ -26,6 +26,7 @@ extern ProcessParameters ProcessParametersKeep; extern void ProcessRequestFunc(MessageContainer* requestContainer); extern uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData); +uint32_t LoadProcessParamsFromFile(void); uint32_t ProcessParamsInit(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index f29dd186b..aeec7d696 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -37,5 +37,6 @@ void Heaters_SetOperationLimits(int acheatersloweroperationlimit,int acheatersu uint32_t DrierHeaterVoltageSetup(void); uint32_t HeatersEnd(void); +void HeatersControlStart(void); void HeatersControlStop(void); uint32_t Heaters_Init(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index bc6662aac..229b86cac 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -458,7 +458,8 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) //extern int MotorSamplePointer[MAX_THREAD_MOTORS_NUM]; //read value is the dancer angle - int i,index=MAX_THREAD_MOTORS_NUM,len; + int i,index=MAX_THREAD_MOTORS_NUM; + //int len; int DancerId; int32_t TranslatedReadValue, avreageSampleValue = 0;//,avreageMotorSampleValue = 0; //double tempcalcspeed = 0; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 6b75c410d..08136c846 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -33,6 +33,7 @@ #include "drivers/Valves/Valve.h" #include "drivers/Flash_ram/MCU_E2Prom.h" #include +#include #include "heaters/heaters_ex.h" diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h index cf743c1a6..5f347c5ba 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h @@ -34,6 +34,7 @@ uint32_t PowerOffCancel(void);//POWER_OFF_CANCELLED void PowerOffSetTemperatureThreshold (int32_t temperature); //celsius temperature bool PowerOffInProcessGetState(void); +uint32_t PowerOffHeatersOff(void); uint32_t PowerDownUpdateFunc(MessageContainer* requestContainer); uint32_t AbortPowerDownFunc(MessageContainer* requestContainer); -- cgit v1.3.1 From 4a82ab8485eebc548fef4fd48d44ae7447aa047e Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 12 Mar 2020 12:59:38 +0200 Subject: Version 1.4.6.17 - PACK 1. (support for new TFU and bug fixes) --- Software/Embedded_SW/Embedded/.cproject | 2 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c | 4 +++- .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h | 1 + .../Embedded/Drivers/Heater/TemperatureSensor.c | 8 +++++++ .../Embedded/Drivers/Motors/MotorActions.c | 4 ++-- .../Embedded_SW/Embedded/Modules/Control/control.c | 26 +++++++++++++--------- .../Modules/Diagnostics/DiagnosticsHoming.c | 10 +++++++++ .../Embedded/Software Release Notes.txt | 12 ++++++++++ 9 files changed, 53 insertions(+), 16 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/.cproject b/Software/Embedded_SW/Embedded/.cproject index e2a02d701..43a3b15aa 100644 --- a/Software/Embedded_SW/Embedded/.cproject +++ b/Software/Embedded_SW/Embedded/.cproject @@ -441,7 +441,7 @@ - + diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 6c2e35f76..5b970a5bc 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,4,6,16}; +TangoVersion_t _gTangoVersion = {1,4,6,17}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c index 04a52a6af..aa645baa6 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c @@ -23,6 +23,7 @@ extern short int main_vme(); +bool FPGABurningActive = false; FPGA_JTAG_GPIO FPGA_JTAG; FIL *FileHandlevme = 0; @@ -96,13 +97,14 @@ FRESULT FPGA_Programming_Up(FPGA_ID FPGA_Id, char * FullPath, bool IncludeReboot { return(fresult); } + FPGABurningActive = true; Report(FullPath,__FILE__,__LINE__,CurrentFileSize,RpWarning,0,0); StopInitSequence(); HeatersEnd(); fresult = main_vme(); CurrentRunningFile++; Report(FullPath,__FILE__,__LINE__,CurrentRunningFile,RpWarning,1,0); - + FPGABurningActive = false; } diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h index b752f24b3..75e712497 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h @@ -36,6 +36,7 @@ typedef struct FRESULT FPGA_Programming_Request(FPGA_ID FPGA_Id, char * FullPath, bool IncludeReboot); //direct blocking call FRESULT FPGA_Programming_Up(FPGA_ID FPGA_Id, char * FullPath, bool IncludeReboot); +extern bool FPGABurningActive; #endif /* DRIVERS_FPGA_FULL_VME_FPGA_PROGRAMMING_UP_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c b/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c index 9d7cdbe4c..0b5d8ebc2 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c @@ -202,6 +202,14 @@ int TemperatureListString(char* str) ,TempSensorResponse[MIXER_PT100].Temperature_C_mult_by_100/100); //Prepare H1: 78 H2: 111 H3: 137 H4: 135 H5: 144 H6: 75 D1: 120 D2: 167 D3: 158 M: 129 } + if(Head_Type == HEAD_TYPE_STAPLE_SPUN) + { + len = usnprintf(str, 160, "Prepare H1: ,%d, H2: ,%d, H3: ,%d, AL1: AR1: M: ,%d, D: ,%d,", + TempSensorResponse[HEAD_PT100_ZONE_1_0X80_0].Temperature_C_mult_by_100/100, TempSensorResponse[HEAD_PT100_ZONE_2_0X80_1].Temperature_C_mult_by_100/100, + TempSensorResponse[HEAD_PT100_ZONE_3_0X82_0].Temperature_C_mult_by_100/100, + TempSensorResponse[HEAD_PT100_AIR_HEATER_1_0X8C_0].Temperature_C_mult_by_100/100, TempSensorResponse[HEAD_PT100_AIR_HEATER_2_0X8C_1].Temperature_C_mult_by_100/100, + TempSensorResponse[HEAD_PT100_MIXER_0X8E_0].Temperature_C_mult_by_100/100, TempSensorResponse[TEMP_SENSE_ANALOG_DRYER_TEMP1].Temperature_C_mult_by_100/100); + } else { len = usnprintf(str, 150, "Unknown head type"); diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index d679cbb01..fc8d29b56 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -70,7 +70,7 @@ FPGA_GPI_ENUM Motor_Id_to_LS_IdDown[NUM_OF_MOTORS] = { // limit switch for n GPI_LS_SCREW_RIGHT, //MOTO_SCREW = 14, MAX_GPI, //MOTO_WINDER = 15, GPI_LS_LDANCER1_DOWN, //MOTO_LDANCER1 = 16, - GPI_LS_LDANCER2_DOWN, //MOTO_LDANCER2 = 17, + GPI_LS_LSPARE2, //MOTO_LDANCER2 = 17, MAX_GPI, //MOTO_LDRIVING = 18, GPI_LS_LLOADMOTOR_DOWN, //MOTO_LLOADING = 19, GPI_LS_LPIVOT_DOWN, //MOTO_LPIVOT1 = 20, @@ -97,7 +97,7 @@ FPGA_GPI_ENUM Motor_Id_to_LS_IdUp[NUM_OF_MOTORS] = { // limit switch for nor GPI_LS_SCREW_LEFT, //MOTO_SCREW = 14, MAX_GPI, //MOTO_WINDER = 15, GPI_LS_LDANCER1_UP, //MOTO_LDANCER1 = 16, - GPI_LS_LDANCER2_UP, //MOTO_LDANCER2 = 17, + GPI_LS_LSPARE1, //MOTO_LDANCER2 = 17, MAX_GPI, //MOTO_LDRIVING = 18, GPI_LS_LLOADMOTOR_UP, //MOTO_LLOADING = 19, GPI_LS_LPIVOT_UP, //MOTO_LPIVOT1 = 20, diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index bea68e314..0f9848ba1 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -51,6 +51,7 @@ #include +#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h" #include "drivers/adc_sampling/adc.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/FPGA_SPI_Comm.h" @@ -181,19 +182,22 @@ uint32_t ControlActivityLed( uint32_t Parameter1) ACTIVITY_RED_LED_OFF; // Heaters indication - all the Heaters OFF if(FPGA_WD_Occurred == true) { - FPGA_WD_Occurred = false; - AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,true); - if (JobIsActive()) + if (FPGABurningActive == false) { - JobEndReason = JOB_MOTOR_ALARM; - SendJobProgress(0.0,0,false, "Hardware Failure Error"); - AbortJob("FPGA Watchdog Error"); - } - ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0); + FPGA_WD_Occurred = false; + AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,true); + if (JobIsActive()) + { + JobEndReason = JOB_MOTOR_ALARM; + SendJobProgress(0.0,0,false, "Hardware Failure Error"); + AbortJob("FPGA Watchdog Error"); + } + ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0); - ACTIVITY_GREEN_LED_ON; - FPGA_SetMotorsInit(); - Motor_ReconfigAllMotors(); + ACTIVITY_GREEN_LED_ON; + FPGA_SetMotorsInit(); + Motor_ReconfigAllMotors(); + } } else ACTIVITY_GREEN_LED_OFF; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c index 685542722..acecf4c7c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c @@ -166,6 +166,16 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) } if ( Motor_Id_to_LS_IdUp[MotorId] != MAX_GPI) { + if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_RLOADING) + { + keepkvalright = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun; + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); + } + if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_LLOADING) + { + keepkvalleft = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].kvalrun; + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); + } MotorMovetoLimitSwitch (MotorId,MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_IdDown[MotorId], MotorHomingRequestCallback,10000); return OK; } diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index 4ce158426..7640e88de 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,15 @@ +Embedded SW Release note - Version 1.4.6.17 - Pack 1 +============================================================= +fixed file system bug that caused disconnection. +fixed error messages bug +RML - thread PID parameters added +RML - arc head support +RML - blower head flow control. +Power control. +preparation for waste tank calibration. +basic support for new LTFU (not for loading, yet) + + Embedded SW Release note - Version 1.4.6.12 - Pack 1 Urgent ============================================================= Main features: support new head and new WHS, support Powerstep01 motor drivers -- cgit v1.3.1