From bfc8d0cc2055b7fa5171aeace011435e23f71359 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 9 Jun 2020 15:56:31 +0300 Subject: fixing some bugs in version 30 --- Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 349215d7d..50750a49e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -190,6 +190,9 @@ ProcessParametersClear.lblowerflow = 0; ProcessParametersClear.dyeingspeed = 40; ProcessParametersClear.dryerbufferlength = ProcessParametersKeep.dryerbufferlength; + ProcessParametersClear.pullertension = ProcessParametersKeep.pullertension; + ProcessParametersClear.windertension = ProcessParametersKeep.windertension; + if (HandleProcessParameters(&ProcessParametersClear,false)!= OK) { LOG_ERROR (LoadStages, "Thread_Load_Reduce_Heat failed"); @@ -286,7 +289,7 @@ { TimeoutsCounter = 0; load.color = fastBILNK; - usnprintf(LoadErrorMsg, 100, "Stage %s - motor %s timeout",LoadStagesStr[LoadStages], MotorStr[MotorId]); + usnprintf(LoadErrorMsg, 100, "Stage %s - %s timeout",LoadStagesStr[LoadStages], MotorStr[MotorId]); Report(LoadErrorMsg,__FILE__,__LINE__,LoadStages,RpWarning,TimeoutsCounter,0); LoadStatus = ERROR; -- cgit v1.3.1 From ceac18f1063d85c49db5d29c51f74e711b6405ab Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 10 Jun 2020 13:23:34 +0300 Subject: fix threadloading, enable dispenser pulling down, WHS blower PID control --- .../WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c | 10 +- .../WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h | 1 + .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 116 ++++++++++++++++----- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h | 2 + .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 2 +- .../Embedded/Modules/General/GeneralHardware.c | 11 +- .../Embedded_SW/Embedded/Modules/General/process.h | 2 + .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 2 +- .../Embedded/Modules/Stubs_Handler/Progress.c | 20 ++-- .../Embedded/Modules/Thread/ThreadLoad.c | 21 +++- .../StateMachines/Initialization/InitSequence.c | 4 +- .../Embedded/StateMachines/Printing/JobSTM.c | 2 +- 12 files changed, 142 insertions(+), 51 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c') 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 f50689d61..3671ff4e0 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 @@ -354,7 +354,7 @@ double GetWHSAirFlow(uint8_t OR_Id) { case DRIER_FLOW_METER: - if (display_view == AVERAGE) + /*if (display_view == AVERAGE) { Q_value = get_average_Q(DRIER_FLOW_METER); } @@ -363,14 +363,15 @@ double GetWHSAirFlow(uint8_t OR_Id) //get_orf_3(&value); //Q_value = get_Q(value-orf3V0Value); Q_value = get_CurrentQ(DRIER_FLOW_METER); - } + }*/ + Q_value = get_CurrentQ(DRIER_FLOW_METER); //Q_value = get_average_Q(HEAD_FLOW_METER); break; case NU_FLOW_METER: get_orf_2(&value); break; case HEAD_FLOW_METER: - if (display_view == AVERAGE) + /*if (display_view == AVERAGE) { Q_value = get_average_Q(HEAD_FLOW_METER); } @@ -378,7 +379,8 @@ double GetWHSAirFlow(uint8_t OR_Id) { //get_orf_1(&value); Q_value = get_CurrentQ(HEAD_FLOW_METER); - } + }*/ + Q_value = get_CurrentQ(HEAD_FLOW_METER); break; default: break; 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 1fdf91d11..5bf85fb6b 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 @@ -52,6 +52,7 @@ bool Test_WHS_max11614(void); //double get_Q(int16_t num); double get_Q(WHS_Flow_Meter num); uint32_t WHS_MAX11614_Read_allADC(void); +double get_CurrentQ(WHS_Flow_Meter num); bool get_orf_1(uint16_t *value); bool get_orf_2(uint16_t *value); 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 9a2ed52af..4a02d2127 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 @@ -16,9 +16,13 @@ #include #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "modules/control/pidalgo.h" + #include "drivers/valves/valve.h" #include +#include "PMR/Hardware/HardwarePidControl.pb-c.h" + #include "StateMachines/Initialization/InitSequence.h" bool Read_Max5805_device_ID(); @@ -203,7 +207,7 @@ double WHS_Blower_Avarege(WHS_Flow_Meter ORF_id) double Q_temp = 0 ; double average_Q = 0.0; - switch (ORF_id) + /*switch (ORF_id) { case HEAD_FLOW_METER: // get_orf_1( &orifice_hex_value ); @@ -217,10 +221,10 @@ double WHS_Blower_Avarege(WHS_Flow_Meter ORF_id) break; default: break; - } + }*/ Q_temp = get_Q(ORF_id); - if (fabs(Q_temp - average_Q) > 1.75) + /*if (fabs(Q_temp - average_Q) > 1.75) { Report("------------ set_new_Q_average :-----------------", __FILE__,__LINE__, (int)(Q_temp*100), RpMessage, (int)(average_Q*100), 0); set_new_Q_average(ORF_id, Q_temp); @@ -229,11 +233,11 @@ double WHS_Blower_Avarege(WHS_Flow_Meter ORF_id) else { average_Q = calc_Q_average(ORF_id, Q_temp); - } + }*/ return average_Q; } -void set_new_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 i = 0; @@ -283,17 +287,6 @@ double calc_Q_average(WHS_Flow_Meter ORF_id,double 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; - /*if (i_head == 0) - { - for (ii = 0; ii=MIN_ALLOWED_BLOWER_VOLTAGE)) Control_Voltage_To_Blower(mV); else Report("------------ Controlled voltage over the maximum - refused-----------------", __FILE__,__LINE__, (int)mV, RpMessage, MAX_ALLOWED_BLOWER_VOLTAGE, 0); @@ -381,14 +375,15 @@ void SendLimitedBlowerControl(int mV) #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 +uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam); +uint16_t volt; bool WHS_Set_Blower_Control_Closed_Loop(double Q_value) { double current_dying_head_flow_Q = 0.0; - uint16_t volt; double tmp = 0.0; - current_dying_head_flow_Q = get_average_Q(HEAD_FLOW_METER); + current_dying_head_flow_Q = get_CurrentQ(HEAD_FLOW_METER);//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__, (int)(Q_value * 1000), RpMessage, (int)(current_dying_head_flow_Q * 1000), 0); tmp = fabs((current_dying_head_flow_Q) - (Q_value)); @@ -417,9 +412,11 @@ bool WHS_Set_Blower_Control_Closed_Loop(double Q_value) } } - if (tmp > 0.02) + volt = getBlowerState(); + WHS_Pid_Testing_Func(Q_value,current_dying_head_flow_Q); + close_loop_time = 1; + if (0)//(tmp > 0.02) { - volt = getBlowerState(); //volt = g_MAX5805_device.CODE; if (current_dying_head_flow_Q < Q_value) { @@ -541,4 +538,75 @@ uint16_t WHS_Get_Volt_Blower_Control() { return g_MAX5805_device.CODE; } +HardwarePidControl WHS_ControlInfo; +typedef struct +{ + bool m_isEnabled; + float m_SetParam; + float m_mesuredParam; + float m_preError; + float m_integral; + float m_calculatedError; + bool m_isReady; + PID_Config_Params m_params; +}WhsControlConfig_t; +WhsControlConfig_t WHS_ControlData = {0}; +char whs_str[150]; +uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam) +{ + float calculated_speed; + WHS_ControlData.m_mesuredParam = measuredParam; + WHS_ControlData.m_SetParam = setParam; + WHS_ControlData.m_calculatedError = PIDAlgorithmCalculation((float)WHS_ControlData.m_SetParam , (float)WHS_ControlData.m_mesuredParam, + &WHS_ControlData.m_params, &WHS_ControlData.m_preError, &WHS_ControlData.m_integral); + calculated_speed = volt+WHS_ControlData.m_calculatedError; + /*if (calculated_speed > (volt + 100)) + calculated_speed = volt + 100; + if (calculated_speed < (volt - 100)) + calculated_speed = volt - 100;*/ + usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d set %d error %d integral %d blower %d", + (int)(measuredParam*100),(int)(setParam*100),(int)(WHS_ControlData.m_calculatedError*100),(int)(WHS_ControlData.m_integral*100),(int)(calculated_speed)); + Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0); + SendLimitedBlowerControl(calculated_speed); + + return OK; +} +/*void WHS_Start_Pid_Testing(int DispenserId) +{ + DispenserPidControlId[DispenserId] = AddControlCallback(NULL, WHS_Pid_Testing_Func,eOneSecond , TemplateDataReadCBFunction,DispenserId,DispenserId, DispenserId ); + Report("WHS_Start_Pid_Testing ",__FILE__,__LINE__,DispenserId,RpWarning,(int)DispenserPidControlId[DispenserId],0); +} +void WHS_Stop_Pid_Testing(int DispenserId) +{ + //stop this control loop + RemoveControlCallback(DispenserPidControlId[DispenserId], WHS_Pid_Testing_Func ); + DispenserPidControlId[DispenserId] = 0xFF; + Report("WHS_Stop_Pid_Testing ",__FILE__,__LINE__,DispenserId,RpWarning,(int)DispenserPidControlId[DispenserId],0); +}*/ + +uint32_t WHS_PidRequestMessage(void* request) +{ + HardwarePidControl * PID_Request = request; + + WHS_ControlData.m_params.MAX = 200; + WHS_ControlData.m_params.MIN = -200; + WHS_ControlData.m_params.Kd = PID_Request->derivativetime; + WHS_ControlData.m_params.Kp = PID_Request->proportionalgain; + WHS_ControlData.m_params.Ki = PID_Request->integraltime; + WHS_ControlData.m_params.IntegralErrorMultiplier = PID_Request->setpointramprateorsoftstartramp; + WHS_ControlData.m_params.ProportionalErrorMultiplier = PID_Request->outputonoffhysteresisvalue; + WHS_ControlData.m_params.epsilon = PID_Request->epsilon; + WHS_ControlData.m_params.dt = PID_Request->controloutputtype; + //WHS_ControlData.m_ingnoreValue = PID_Request->sensorcorrectionadjustment; // the minimal change required to change the motor speed in pulses + WHS_ControlData.m_calculatedError = 0; + WHS_ControlData.m_integral = 0; + WHS_ControlData.m_isEnabled = true; + WHS_ControlData.m_isReady = true; + WHS_ControlData.m_mesuredParam = 0; + WHS_ControlData.m_preError = 0; + WHS_ControlData.m_SetParam = PID_Request->outputproportionalcycletime;//need to update SetParams on presegment stage + + + return OK; +} diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h index 1bf096b90..f5bc52858 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h @@ -32,6 +32,8 @@ double WHS_Get_Blower_Control_Closed_Loop_SetPoint(void); void WHS_Set_SetPoint_Q_value(double value); void WHS_enable_control_loop(bool value); +uint32_t WHS_PidRequestMessage(void* request); + extern double headairflow; /* from Blower.h * diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index ee125c10b..2b08160a9 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -180,7 +180,7 @@ void MainCardEEpromReadRequestFunc(MessageContainer* requestContainer) StubMainCardEEpromReadRequest* request = stub_main_card_eeprom_read_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); - StubMainCardEEpromReadResponse response = STUB_MAIN_CARD_EEPROM_WRITE_RESPONSE__INIT; + StubMainCardEEpromReadResponse response = STUB_MAIN_CARD_EEPROM_READ_RESPONSE__INIT; if (request->has_address == true) { diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index d0470a11b..ae946ce1d 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -42,6 +42,7 @@ #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "Drivers/I2C_Communication/I2C.h" #include "drivers/Flash_ram/MCU_E2Prom.h" +#include #include "StateMachines/Printing/PrintingSTM.h" #include "StateMachines/Initialization/InitSequence.h" @@ -396,12 +397,12 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) LOG_ERROR (0, "Wrong Data Allocation"); return ERROR; } - if (InitFailures > 3) + /*if (InitFailures > 3) { Report("HWConfigurationInit repeated failure",__FILE__,__LINE__,(int)InitFailures,RpWarning,(int)EEPROM_INIT_FAILURE_COUNTER,0); AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED,ON); return ERROR; - } + }*/ HardwareConfiguration *request = UploadRequest->hardwareconfiguration; @@ -468,8 +469,12 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) else if ((request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__MotorDryer)&& (request->pidcontrols[PID_i]->hardwarepidcontroltype < HARDWARE_PID_CONTROL_TYPE__Dispenser1)) status += MotorPidRequestMessage(request->pidcontrols[PID_i]); - else if (request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__Dispenser1) + else if ((request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__Dispenser1)&& + (request->pidcontrols[PID_i]->hardwarepidcontroltype < HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7)) status += IDS_DispenserPidRequestMessage(request->pidcontrols[PID_i]); + else if (request->pidcontrols[PID_i]->hardwarepidcontroltype == HARDWARE_PID_CONTROL_TYPE__WasteControl) + status += WHS_PidRequestMessage(request->pidcontrols[PID_i]); + } } else diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.h b/Software/Embedded_SW/Embedded/Modules/General/process.h index 6318596f1..7cd592aad 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.h +++ b/Software/Embedded_SW/Embedded/Modules/General/process.h @@ -25,6 +25,8 @@ extern int32_t tableindex; extern double dryerbufferMeters; extern double dryerbufferCentimeters; +extern bool MachineReadyForHeating; + extern ProcessParameters ProcessParametersKeep; extern void ProcessRequestFunc(MessageContainer* requestContainer); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 2ffce8e46..81f4f9e7d 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -551,7 +551,7 @@ void IDS_Dispenser_Init(uint8_t DispenserId) PrimingActive[DispenserId]= false; Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer - if (Special_Dispensers == true) + //if (Special_Dispensers == true) { if (ControlIdtoInactiveDispenserId[DispenserId] == 0xFF) ControlIdtoInactiveDispenserId[DispenserId] = AddControlCallback("IDS_Check_Pressure", IDS_Check_Pressure_Callback, eOneMinute,TemplateDataReadCBFunction ,DispenserId, 0, 0 ); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 88c5d2d8c..d28ca4f21 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -243,32 +243,32 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if (WHS_Type == WHS_TYPE_NEW) { - display_byte = ((request->delay & 0x3000)>>12); + /*display_byte = ((request->delay & 0x3000)>>12); switch (display_byte) { case 0: - //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x0000); // + //stubManager.Run("ProgressRequest" ,0x3EA, 0x0000); // SetLeftDisplayView (HeadAVERAGE); SetWriteDisplayView(DrierAVERAGE); SetDisplayView (AVERAGE); break; case 1: - //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x1000); // + //stubManager.Run("ProgressRequest" ,0x3EA, 0x1000); // SetLeftDisplayView (HeadAVERAGE); SetWriteDisplayView(HeadCURRENT); break; case 2: - //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x2000); // + //stubManager.Run("ProgressRequest" ,0x3EA, 0x2000); // SetLeftDisplayView (DrierAVERAGE); SetWriteDisplayView(DrierCURRENT); break; case 3: - //stubManager.Run("ProgressRequest" ,0x3EA, /*DisplayView =*/0x3000); // + //stubManager.Run("ProgressRequest" ,0x3EA, 0x3000); // SetLeftDisplayView (HeadCURRENT); SetWriteDisplayView(DrierCURRENT); SetDisplayView (CURRENT); break; - } + }*/ A2D_data = (request->delay & 0x0FFF); switch(A2D_data )// get A2D @@ -306,11 +306,11 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) case 12: temp_double = get_Q(DRIER_FLOW_METER); break; - case 20: - temp_double = get_average_Q(HEAD_FLOW_METER); //HEAD + /*case 20: + //temp_double = get_average_Q(HEAD_FLOW_METER); //HEAD break; case 22: - temp_double = get_average_Q(DRIER_FLOW_METER); //Drier + //temp_double = get_average_Q(DRIER_FLOW_METER); //Drier break; case 11: @@ -333,7 +333,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) break; case 18: //tempu16 = 0; //get_cur_vlv2(&tempu16); - break; + break;*/ default : tempu16 = 0x500; //get_cur_vlv2(&tempu16); break; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 50750a49e..c1d547f59 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -650,6 +650,7 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Dryer_Loading"); + int CurrentlyLoaded = 0; if (dryerbufferlength) LoadArmRounds = (int)dryerbufferlength; if (LoadArmRounds <= 2) @@ -659,7 +660,12 @@ // OriginalMotorSpd_2PPS[FEEDER_MOTOR] = 1000; // CurrentControlledSpeed[FEEDER_MOTOR] = 1000; - //MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds); + MCU_E2PromRead(EEPROM_STORAGE_DRYER_CYCLES,&CurrentlyLoaded); + Report("Thread_Load_Dryer_Loading cycles",__FILE__,LoadArmRounds,CurrentlyLoaded,RpMessage,LoadArmRounds-CurrentlyLoaded,0); + if (CurrentlyLoaded) + { + LoadArmRounds -= CurrentlyLoaded; + } ThreadMotorIdToMotorId[FEEDER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_RDRIVING ; ThreadMotorIdToMotorId[DRYER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING; @@ -809,14 +815,14 @@ else //done enough cycles, go to the center point { MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Set_Load_Arm_To_Stopper_Callback,30000); - MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-numberOfCycles); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,0); Report("Store Number of cycles in drier",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0); } } else //timeout or no movement { Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0); - MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-(numberOfCycles-1)); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-numberOfCycles); TimeoutsCounter = 0; CallbackCounter = 0; /*if(PullerControlId != 0xFF) @@ -922,7 +928,12 @@ if (SecondTry == true) { - LoadArmRounds = 30; + MCU_E2PromRead(EEPROM_STORAGE_DRYER_CYCLES,&LoadArmRounds); + if (LoadArmRounds == 0) //prev trial stopped + { + LoadArmRounds = (int)dryerbufferlength; + } + //LoadArmRounds = 30; } else { @@ -1051,7 +1062,7 @@ } uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue) { - if (JobIsActive()) + if (JobIsActive()||(MachineReadyForHeating == false)) { Report("ThreadLoadButton called on job",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0); return ERROR; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 095f36d48..e9820d150 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -114,14 +114,14 @@ uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) InitFailures = 0; MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,0); } - if (InitFailures > 3) + /*if (InitFailures > 3) { Report("HWConfigurationInit repeated failure",__FILE__,__LINE__,(int)InitFailures,RpWarning,(int)EEPROM_INIT_FAILURE_COUNTER,0); SetMachineState(MACHINE_STATE_HW_CONFIG_FAILED); AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED,ON); SetMachineStatus(MACHINE_STATE__Error); return ERROR; - } + }*/ status = (MACHINE_STATE_STAGES_ENUM)HWConfigurationInit(); if (status == OK) { diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 97247f90b..71393cf48 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -371,7 +371,7 @@ uint32_t ThreadJoggingFunc(int speed) { ProcessParameters ProcessParametersCopy; uint32_t status = OK; - if ((JobIsActive() == true)||(JoggingJobActive == true)) + if ((JobIsActive() == true)||(JoggingJobActive == true)||(MachineReadyForHeating == false)) { status = ERROR; Report("Jog JobIsActive", __FILE__, __LINE__, JobIsActive(), RpWarning, JoggingJobActive, 0); -- cgit v1.3.1 From e5bd4aae30455510bdcdb492a34794c0747d7900 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 11 Jun 2020 15:06:31 +0300 Subject: Version 1.4.6.31: init failures - stop init until new version loaded / FSE arrives. read / write main CPU data (embedded parameters); VOC read to diagnostics; --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Common/report/reportInit.c | 7 +- .../Embedded_SW/Embedded/Communication/Container.c | 4 +- .../Communication/PMR/Common/MessageType.pb-c.h | 4 +- .../WHS_Card/D_AD5272_Rheostat/WHS_Rheostat.h | 1 + .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 10 +-- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 74 ++++++++++++++++++++++ .../Embedded/Drivers/flash_ram/MCU_E2Prom.h | 2 + Software/Embedded_SW/Embedded/Main.c | 6 +- .../Embedded/Modules/Control/MillisecTask.c | 2 + .../Embedded/Modules/Diagnostics/Diagnostics.c | 3 +- .../Embedded/Modules/General/GeneralHardware.c | 14 +--- .../Embedded/Modules/Thread/ThreadLoad.c | 2 +- .../StateMachines/Initialization/InitSequence.c | 13 ++-- Software/PMR/Messages/Common/MessageType.proto | 4 +- 16 files changed, 113 insertions(+), 37 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c') 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 0af8fb729..d1602c3cf 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,30}; +TangoVersion_t _gTangoVersion = {1,4,6,31}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 79bf3d9bd..5c8646bf1 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -43,6 +43,8 @@ #include "PMR/debugging/SetupDebugDisributorsRequest.pb-c.h" #include "PMR/debugging/SetupDebugDisributorsResponse.pb-c.h" +#include "Drivers/I2C_Communication/Main_Board_EEPROM/Main_EEPROM.h" + #include "modules/General/process.h" #include "AlarmHandling/AlarmHandling.h" @@ -254,7 +256,7 @@ void SetupDebugDisributorsRequestFunc(MessageContainer* requestContainer) setup_debug_disributors_request__free_unpacked(request,NULL); } - +char SerMessage[50]; uint32_t ReportResetReason(void) { /* @@ -332,6 +334,9 @@ uint32_t ReportInitMessage(MessageContainer* requestContainer) Task_sleep (100); ReportEmbeddedVersion(); + usnprintf(SerMessage, 50, "MCU serial %s",Main_EEPROM_Data.bytes.Main_card_SN); + Report(SerMessage, __FILE__, __LINE__, _gTangoVersion.m_patch, RpWarning, _gTangoVersion.m_build, 0); + /*SysCtlResetCauseClear(RESC);*/ #ifdef TEST_PID_THREAD Task_sleep(1000); diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index b5264cda0..ba64ddef9 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -463,10 +463,12 @@ void receive_callback(char* buffer, size_t length) case MESSAGE_TYPE__MidTankDataSetupRequest: MidTankDataSetupFunc(requestContainer); break; - case MESSAGE_TYPE__MachineCalibrationDataRequest: MachineCalibrationDataRequestFunc(requestContainer); break; + case MESSAGE_TYPE__MainCardStoredDataRequest: + MainCardStoredItemRequestFunc(requestContainer); + break; case MESSAGE_TYPE__StartMachineStatusUpdateRequest: MachineUpdateInitFunc(requestContainer); break; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h index 429fec3ed..dc3f94b0a 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h @@ -259,8 +259,8 @@ typedef enum _MessageType { MESSAGE_TYPE__MidTankDataSetupResponse = 8003, MESSAGE_TYPE__MachineCalibrationDataRequest = 8004, MESSAGE_TYPE__MachineCalibrationDataResponse = 8005, - MESSAGE_TYPE__MainCardStoredItemRequest = 8006, - MESSAGE_TYPE__MainCardStoredItemResponse = 8007, + MESSAGE_TYPE__MainCardStoredDataRequest = 8006, + MESSAGE_TYPE__MainCardStoredDataResponse = 8007, MESSAGE_TYPE__StartMachineStatusUpdateRequest = 9000, MESSAGE_TYPE__StartMachineStatusUpdateResponse = 9001, MESSAGE_TYPE__StopMachineStatusUpdateRequest = 9002, diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_AD5272_Rheostat/WHS_Rheostat.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_AD5272_Rheostat/WHS_Rheostat.h index d16c252dd..b46ce7d41 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_AD5272_Rheostat/WHS_Rheostat.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_AD5272_Rheostat/WHS_Rheostat.h @@ -15,6 +15,7 @@ bool Gas_Voc(void); bool WHS_WriteRdac(uint16_t value); uint32_t Read_Gas_Sensor(); //cyclic; +uint32_t Get_latest_Gas_Sensor_value(); void Voc_Sensor_Zero_Calibration(); 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 06c24d351..5675bf95c 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 @@ -212,7 +212,7 @@ bool WHS_init_Blower() WHS_ControlData.m_params.MAX = 200; WHS_ControlData.m_params.MIN = -200; WHS_ControlData.m_params.Kd = 0; - WHS_ControlData.m_params.Kp = 300; + WHS_ControlData.m_params.Kp = 350; WHS_ControlData.m_params.Ki = 600; WHS_ControlData.m_params.IntegralErrorMultiplier = 100; WHS_ControlData.m_params.ProportionalErrorMultiplier = 100; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index 355af95b4..3c099dd94 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -19,9 +19,9 @@ #define TimerMotors_t HardwareMotorType static char* MotorStr[30] = { - "Dh Clean Head", - "Dh Clean Mech", - "Dh Lid ", + "Dyeing Head Clean Head", + "Dyeing Head Clean Mech", + "Dyeing Head Lid ", "Dryer Driving", "Dryer Lid ", "Dryer Loadarm", @@ -38,12 +38,12 @@ "Left Dancer ", "Middle Dancer", "Left Driving ", - "Left Loading ", + "Left Rockers ", "Left pivot ", "Right Dancer ", "Right Driving", "Right Loadarm", - "Right Loading", + "Right Rockers", "Spare1 1", "Spare1 2", "Spare2 1", diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index 2b08160a9..e2d0443b4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -10,6 +10,7 @@ #include "MCU_E2Prom.h" #include "driverlib/eeprom.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "Drivers/I2C_Communication/Main_Board_EEPROM/Main_EEPROM.h" #include "Common/SW_Info/SW_Info.h" #include @@ -17,6 +18,11 @@ #include #include +#include "PMR/EmbeddedParameters/MainCardStoredData.pb-c.h" +#include "PMR/EmbeddedParameters/MainCardStoredDataResponse.pb-c.h" +#include "PMR/EmbeddedParameters/MainCardStoredDataRequest.pb-c.h" +#include "PMR/EmbeddedParameters/MainCardStoredItem.pb-c.h" + uint32_t E2Prom_Data[MAX_EEPROM_STORAGE] = {0,0,0,0,0,0}; uint32_t MCU_E2PromProgram(int Address,uint32_t Data) @@ -170,6 +176,69 @@ void MCU_E2PromInit(void) #ifndef EVALUATION_BOARD EEPROMInit(); #endif +} +void MainCardStoredItemRequestFunc(MessageContainer* requestContainer) +{ + uint32_t status = PASSED,i; + MessageContainer responseContainer; + + MainCardStoredItem StoredData[MAX_EEPROM_STORAGE]; + MainCardStoredDataRequest* request = main_card_stored_data_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + MainCardStoredData MainCardStoredDataInstance = MAIN_CARD_STORED_DATA__INIT; + + Report("MainCardStoredItemRequestFunc",__FILE__,__LINE__,1,RpWarning,(int)request->burnrequest,0); + MainCardStoredDataResponse response = MAIN_CARD_STORED_DATA_RESPONSE__INIT; + + if (request->burnrequest == true) + { + if (strcmp(request->maincardstoreddata->maincards_n,Serial)==0) + { + for (i = 0;imaincardstoreddata->n_storeditem;i++) + { + if ((request->maincardstoreddata->storeditem[i]->has_data)&&(request->maincardstoreddata->storeditem[i]->address == i)) + { + MCU_E2PromProgram(i,&request->maincardstoreddata->storeditem[i]->data); + } + } + } + else + { + status = ERROR_CODE__INVALID_PARAMETER; + } + } + else + { + response.maincardstoreddata = &MainCardStoredDataInstance; + MainCardStoredDataInstance.maincards_n = &Serial; + MainCardStoredDataInstance.n_storeditem = MAX_EEPROM_STORAGE; + for (i = 0;itoken, true, &response, &main_card_stored_data_response__pack, &main_card_stored_data_response__get_packed_size); + + if (status) + { + responseContainer.has_error = true; + responseContainer.error = status; + } + + + //------------------------------------------------------------------------------------------- + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + free(responseContainer.data.data); + SendChars((char*)container_buffer, container_size); + + main_card_stored_data_request__free_unpacked(request,NULL); + } void MainCardEEpromReadRequestFunc(MessageContainer* requestContainer) { @@ -231,6 +300,11 @@ void MainCardEEpromWriteRequestFunc(MessageContainer* requestContainer) { status = ERROR_CODE__INVALID_PARAMETER; } + response.has_address = true; + response.address = request->address; + response.has_data = true; + MCU_E2PromRead(request->address,&response.data); + responseContainer = createContainer(MESSAGE_TYPE__StubMainCardEEpromWriteResponse, requestContainer->token, true, &response, &stub_main_card_eeprom_write_response__pack, &stub_main_card_eeprom_write_response__get_packed_size); if (status) diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h index 381db2141..bbbc49c7d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -63,6 +63,8 @@ float MCU_E2PromReadMidtank_A(int MidtankId); float MCU_E2PromReadMidtank_B(int MidtankId); void MCU_E2PromInit(void); +void MainCardStoredItemRequestFunc(MessageContainer* requestContainer); + void MainCardEEpromWriteRequestFunc(MessageContainer* requestContainer); void MainCardEEpromReadRequestFunc(MessageContainer* requestContainer); //uint32_t MCU_E2PromSerialNumProgram(char *Data); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index ed4948a28..09e8b2731 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -135,9 +135,7 @@ Void errHook(Error_Block *eb) COMM_GREEN_LED_OFF; STATUS_RED_LED_ON; - //MCU_E2PromRead(EEPROM_INIT_FAILURE_COUNTER,&InitFailures); - InitFailures++; - MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,InitFailures); + MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,InitFailures+1); ACTIVITY_RED_LED_ON; COMM_RED_LED_ON; @@ -255,6 +253,7 @@ int main(void) MCU_E2PromEmbeddedVersionProgram(); MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,0); } + MCU_E2PromRead(EEPROM_INIT_FAILURE_COUNTER,&InitFailures); #endif #ifdef EVALUATION_BOARD @@ -366,7 +365,6 @@ int main(void) PowerIdleInit(); BIOS_start(); - return (0); //while(1){}; } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index a6380c188..c61f9e719 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -789,6 +789,7 @@ uint32_t MillisecLowLoop(uint32_t tick) Gas_PPM_Info = Calculate_Gas_Power_Consumption();*/ // ReportWithPackageFilter(ThreadFilter,"waste tank calculate level",__FILE__,__LINE__,(int)(GetWHSWasteTankLevelMiliLiter()*1000),RpWarning,(int) msec_millisecondCounter,0); //Trigger_WHS_MAX11614_Read_allADC(); + Trigger_WHS_MAX11614_Read_Gas_Sensor(); #ifdef CONTROL_DEBUG ResetControlTime(); #endif @@ -807,6 +808,7 @@ uint32_t MillisecLowLoop(uint32_t tick) { waste_seq_step1();// include 1Sec delay <- to open !!!! } + //Trigger_WHS_MAX11614_Read_Gas_Sensor(); } //ROM_IntMasterEnable(); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 2ff1588f2..79dd2899f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -53,6 +53,7 @@ #include "diagnostics.h" #include +#include extern F2_CTRL_REG F2_CTRL_Reg; @@ -676,7 +677,7 @@ void DiagnosticOneMinuteCollection(void) } } - VOC_Sensor = (double) getGasReading(); + VOC_Sensor = (double) Get_latest_Gas_Sensor_value(); DiagnosticsMonitor.n_filterdeltapressure = 1; DiagnosticsMonitor.filterdeltapressure = &VOC_Sensor; DiagnosticsMonitor.n_gassensor = 1; diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index ae946ce1d..915869c34 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -397,12 +397,12 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) LOG_ERROR (0, "Wrong Data Allocation"); return ERROR; } - /*if (InitFailures > 3) + if (InitFailures > 3) { Report("HWConfigurationInit repeated failure",__FILE__,__LINE__,(int)InitFailures,RpWarning,(int)EEPROM_INIT_FAILURE_COUNTER,0); - AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED,ON); + AlarmHandlingSetAlarm (EVENT_TYPE__POWER_UP_BIT_FAILURE,ON); return ERROR; - }*/ + } HardwareConfiguration *request = UploadRequest->hardwareconfiguration; @@ -628,14 +628,6 @@ uint32_t MidTankDataSetupFunc(MessageContainer* requestContainer) b = Slope_B[i]; Report("MidTankData Read", __FILE__,__LINE__,(int)(a*1000), RpMessage, (int)(b*1000), 0); } - //debug only - /* - Task_sleep(1000); - //MCU_E2PromSerialNumProgram ("Take me to the sky"); - memset (Serial,0,20); - MCU_E2PromSerialNumRead(&Serial); - Report(Serial, __FILE__,__LINE__,22, RpMessage, 21, 0); - */ MidTankDataSetupResponse response = MID_TANK_DATA_SETUP_RESPONSE__INIT; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index c1d547f59..aec2988a2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -53,7 +53,7 @@ //#include static char* LoadStagesStr[15] = { /*00*/ "Initialization", - /*01*/ "heating stop", + /*01*/ "Heating stop", /*02*/ "Rockers opening", /*03*/ "Drier unloading", /*04*/ "Lids opening", diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index e9820d150..ced5e2677 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -105,23 +105,22 @@ uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) HWControlId = 0xFF; else Report("Remove control callback failed",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitSequenceCallBackFunction,0); - MCU_E2PromRead(EEPROM_INIT_FAILURE_COUNTER,&InitFailures); - InitFailures++; - MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,InitFailures); - if (InitFailures > 100) + MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,InitFailures+1); + + if (InitFailures > 6) { InitFailures = 0; MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,0); } - /*if (InitFailures > 3) + if (InitFailures > 3) { Report("HWConfigurationInit repeated failure",__FILE__,__LINE__,(int)InitFailures,RpWarning,(int)EEPROM_INIT_FAILURE_COUNTER,0); SetMachineState(MACHINE_STATE_HW_CONFIG_FAILED); AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED,ON); SetMachineStatus(MACHINE_STATE__Error); return ERROR; - }*/ + } status = (MACHINE_STATE_STAGES_ENUM)HWConfigurationInit(); if (status == OK) { @@ -589,7 +588,6 @@ uint32_t InitSequenceStartHeating(void) { SetMachineReadyForHeating(true); //SetMachineStatus(MACHINE_STATE__Ready); //prevent job while waiting for the cooler - MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,0); if (InitialHeating) { @@ -625,6 +623,7 @@ uint32_t InitSequenceStartHeating(void) } //activate second pump for 10 minutes PumpActivation(600); + MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,0); return OK; } uint32_t InitSequenceMachineReadyToDye(void) diff --git a/Software/PMR/Messages/Common/MessageType.proto b/Software/PMR/Messages/Common/MessageType.proto index 08aafa038..e9146cc5f 100644 --- a/Software/PMR/Messages/Common/MessageType.proto +++ b/Software/PMR/Messages/Common/MessageType.proto @@ -274,8 +274,8 @@ enum MessageType MidTankDataSetupResponse = 8003; MachineCalibrationDataRequest = 8004; MachineCalibrationDataResponse = 8005; - MainCardStoredItemRequest = 8006; - MainCardStoredItemResponse = 8007; + MainCardStoredDataRequest = 8006; + MainCardStoredDataResponse = 8007; //Machine Status StartMachineStatusUpdateRequest = 9000; -- cgit v1.3.1 From 1b5906087017b5092dd51cc1a639a95e7f41701d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 11 Jun 2020 17:38:45 +0300 Subject: Merge with Avi's pressure sensor --- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 12 +++++++- .../Modules/Diagnostics/DiagnosticsHoming.c | 15 +++++++--- .../Embedded/Modules/Thread/ThreadLoad.c | 16 ++++++---- .../Embedded/StateMachines/Printing/JobSTM.c | 35 ++++++++++++++++++++++ .../Embedded/StateMachines/Printing/PrintingSTM.c | 1 + .../Embedded/StateMachines/Printing/PrintingSTM.h | 1 + 6 files changed, 69 insertions(+), 11 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c') 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 5675bf95c..2728b5cb2 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 @@ -444,7 +444,7 @@ bool WHS_Set_Blower_Control_Closed_Loop(double Q_value) } volt = getBlowerState(); WHS_Pid_Testing_Func(Q_value,current_dying_head_flow_Q); - close_loop_time = 1; + //close_loop_time = 1; if (0)//(tmp > 0.02) { //volt = g_MAX5805_device.CODE; @@ -585,6 +585,16 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam) usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d set %d error %d integral %d blower %d", (int)(measuredParam*100),(int)(setParam*100),(int)(WHS_ControlData.m_calculatedError*100),(int)(WHS_ControlData.m_integral*100),(int)(calculated_speed)); Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0); + if (fabs(WHS_ControlData.m_calculatedError)>(WHS_ControlData.m_params.MAX/2)) + { + close_loop_time = 1; + WHS_ControlData.m_params.dt = 1; + } + else + { + close_loop_time = 10; + WHS_ControlData.m_params.dt = 10; + } SendLimitedBlowerControl(calculated_speed); return OK; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c index 2d14f972e..8e875b6e7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c @@ -135,6 +135,13 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) LoadArmRounds = (int)dryerbufferlength; + int kval_upper_value; + if (Is_PP_Machine()) + kval_upper_value = 40; + else + kval_upper_value = 70; + + int direction; TimerMotors_t MotorId = (TimerMotors_t)request->motortype; if (LoadArmRounds <= 2) @@ -175,12 +182,12 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_RLOADING) { //keepkvalright = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun; - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, kval_upper_value); } if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_LLOADING) { //keepkvalleft = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].kvalrun; - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, kval_upper_value); } MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_IdUp[MotorId], MotorHomingRequestCallback,30000); status = OK; @@ -216,12 +223,12 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_RLOADING) { //keepkvalright = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun; - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, kval_upper_value); } if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_LLOADING) { //keepkvalleft = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].kvalrun; - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, kval_upper_value); } MotorMovetoLimitSwitch (MotorId,MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_IdDown[MotorId], MotorHomingRequestCallback,30000); status = OK; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index aec2988a2..31c9be4ff 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -93,7 +93,7 @@ uint32_t LoadStatus = OK; char LoadErrorMsg[100]; int32_t keepmicrostep; - int32_t keepkvalrun,keepkvalhold; + int32_t keepkvalrun,keepkvalhold,kval_upperValue; uint8_t CallbackCounter = 0; uint8_t TimeoutsCounter = 0; bool SecondTry = false,TryAgain = false; @@ -140,7 +140,6 @@ //EEPROM_STORAGE_DRYER_CYCLES MCU_E2PromRead(EEPROM_STORAGE_DRYER_CYCLES,&LoadArmRounds); - Report("Read_Dryer_ENC_Position()",__FILE__,__LINE__,0,RpWarning,Read_Dryer_ENC_Position(),0); Report("MotorMovetoEncoderPosition",__FILE__,__LINE__,LoadArmRounds,RpWarning,0,0); @@ -165,6 +164,11 @@ uint32_t Thread_Load_Reduce_Heat(void) { + if (Is_PP_Machine()) + kval_upperValue = 40; + else + kval_upperValue = 70; + //Heaters Off, Dryer Blower Off, Blower Low, REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Reduce_Heat"); memcpy (&ProcessParametersClear,&ProcessParametersKeep,sizeof(ProcessParameters)); @@ -392,8 +396,8 @@ REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Lift_Rockers"); MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 8); MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 8); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, kval_upperValue); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, kval_upperValue); Task_sleep(10); CallbackCounter++; MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,35000); @@ -427,8 +431,8 @@ MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 8); MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 8); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, kval_upperValue); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, kval_upperValue); REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Close_Rockers"); CallbackCounter++; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 71393cf48..f22d09d9d 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -101,6 +101,7 @@ JobSegment *TSegment; JobBrushStop *TbrushStop; JobDispenser *Tdispenser; JobSpool *Tspool; +HeadCleaningParameters *CleaningParameters; bool CopyConfigured[MAX_SYSTEM_MODULES]; bool CleaningJobActive = false, JoggingJobActive = false; char ErrorMsg[100]; @@ -570,6 +571,10 @@ uint32_t ThreadCleaningJob(int speed) TSegment = my_malloc(sizeof(JobSegment)); Tspool = my_malloc(sizeof(JobSpool)); TbrushStop = my_malloc(sizeof(JobBrushStop)); + CleaningParameters = my_malloc(sizeof(CleaningParameters)); + CleaningParameters->has_cleanerflow = true; + CleaningParameters->cleanerflow = 800; + Ticket.headcleaningparameters = CleaningParameters; TSegment->length = 10.0; Ticket.length += (TSegment->length*n_segments); TSegment->n_brushstops = 1; @@ -613,6 +618,36 @@ uint32_t ThreadCleaningJob(int speed) } return status; } +void FreeCleaningJobData(void *JobDetails) +{ + JobTicket* JobTicket = JobDetails; + + if (JobTicket->headcleaningparameters) + free (JobTicket->headcleaningparameters); + if (JobTicket->spool) + { + free (JobTicket->spool); + } + if (JobTicket->segments[0]->brushstops[0]->n_dispensers) + { + if (JobTicket->segments[0]->brushstops[0]->dispensers[0]); + free (JobTicket->segments[0]->brushstops[0]->dispensers[0]); + if (JobTicket->segments[0]->brushstops[0]->dispensers); + free (JobTicket->segments[0]->brushstops[0]->dispensers); + } + if (JobTicket->segments[0]->n_brushstops) + { + if (JobTicket->segments[0]->brushstops[0]); + free (JobTicket->segments[0]->brushstops[0]); + if (JobTicket->segments[0]->brushstops); + free (JobTicket->segments[0]->brushstops); + } + if (JobTicket->segments[0]) + free (JobTicket->segments[0]); + if (JobTicket->segments) + free (JobTicket->segments); + +} void ThreadJoggingRequestFunc(MessageContainer* requestContainer) { uint32_t status = OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 61561c6a9..a0828322e 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -650,6 +650,7 @@ uint32_t EndState(void *JobDetails, char *Message) } if (CleaningJobActive == true) { + //FreeCleaningJobData(JobDetails); CleaningJobActive = false; //memcpy(&Configured,&CopyConfigured,sizeof(CopyConfigured)); //usnprintf(ErMsg, 80,"Copy Configured T %d W %d I %d H %d W %d",CopyConfigured[Module_Thread],CopyConfigured[Module_Winder],CopyConfigured[Module_IDS],CopyConfigured[Module_Heaters],CopyConfigured[Module_Waste]); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index de3191a85..9c282d0f0 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -175,6 +175,7 @@ uint32_t ThreadJoggingFunc(int speed); uint32_t ThreadCleaningJobFunc(MessageContainer* requestContainer); uint32_t ThreadCleaningAbortJobFunc(MessageContainer* requestContainer); uint32_t ThreadCleaningJob(int speed); +void FreeCleaningJobData(void *JobDetails); uint32_t CurrentJobRequestFunc(MessageContainer* requestContainer); uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer); -- cgit v1.3.1 From 2a307f7c34e33a02fb605cd6bb4fa913cc17b805 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 14 Jun 2020 17:26:35 +0300 Subject: new powerstep parameters, better handling of FPGA loading and tension parameters --- .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 32 ++++++---------------- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 3 ++ .../Modules/Diagnostics/DiagnosticActions.c | 11 ++++++++ .../Embedded_SW/Embedded/Modules/General/process.c | 16 +++++++++-- .../Embedded/Modules/Thread/ThreadLoad.c | 3 +- .../Embedded/Software Release Notes.txt | 25 +++++++++-------- .../Embedded/StateMachines/Printing/JobSTM.c | 3 +- 7 files changed, 53 insertions(+), 40 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c') diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c index 8454415b5..84f078b9f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -936,19 +936,11 @@ uint32_t FPGA_MotorConfig_callback(TimerMotors_t _motorId, uint32_t ReadValue) } - if(input_value != 0) - { - temp |= input_value<<16;; - if( MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback) < 0 ) - return ERROR; + temp |= input_value<<16;; + if( MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback) < 0 ) + return ERROR; - break; - } - else - { - LOG_ERROR (_motorId,"fnslpacc / tonmin is Zero"); - AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED,ON); - } + break; case MOTOR_CONFIG_FN_SLP_DEC_TOFF_MIN: ConfigStages[_motorId]++; @@ -967,19 +959,11 @@ uint32_t FPGA_MotorConfig_callback(TimerMotors_t _motorId, uint32_t ReadValue) } - if(input_value != 0) - { - temp |= input_value<<16;; - if( MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback) < 0 ) - return ERROR; + temp |= input_value<<16;; + if( MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback) < 0 ) + return ERROR; - break; - } - else - { - LOG_ERROR (_motorId,"fnslpdec / toffmin is Zero"); - AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED,ON); - } + break; case MOTOR_CONFIG_OCD_TH: ConfigStages[_motorId]++; diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 0dc70efaa..f3ac52a7b 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -24,6 +24,7 @@ #include "drivers/FPGA/FPGA_SPI_Comm.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/FPGA.h" +#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "drivers/I2C_Communication/Dispenser_Card/IO_Ports/Dispenser_IO.h" #include @@ -1636,6 +1637,8 @@ void SendEventNotifications(void) LargeMessagesAH++; return; } + if (FPGABurningActive==true) + return; EventsResponse.n_events = 0; //UInt Key = Task_disable(); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c index 42739f20f..60b9cba9e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c @@ -28,6 +28,7 @@ #include "drivers/I2C_Communication/DAC/blower.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h" +#include #include "drivers/Valves/Valve.h" #include "drivers/Heater/Heater.h" #include "modules/waste/waste.h" @@ -390,6 +391,16 @@ uint32_t SetBlowerStateRequestFunc(MessageContainer* requestContainer) else status = NOT_SUPPORTED; break; + case HARDWARE_BLOWER_TYPE__WHSSmallFans: + Trigger_SetWHSFanSpeed(FAN1, request->voltage); + Trigger_SetWHSFanSpeed(FAN2, request->voltage); + Trigger_SetWHSFanSpeed(FAN3, request->voltage); + Trigger_SetWHSFanSpeed(FAN4, request->voltage); + break; + case HARDWARE_BLOWER_TYPE__WHSLargeFans: + Trigger_SetWHSFanSpeed(FAN5, request->voltage); + Trigger_SetWHSFanSpeed(FAN6, request->voltage); + break; default: status = NOT_SUPPORTED; break; diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index 7bf72ba8c..59264e1cf 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -31,8 +31,8 @@ double dyeingspeed = 0; double dryerbufferlength = 0; double mininkuptake = 0; double feedertension = 0; -double pullertension = 5000; -double windertension = 5000; +double pullertension = 0; +double windertension = 0; double headairflow = 5.0; double dryerairflow = 5.0; double pressurebuildup = 0; @@ -128,6 +128,9 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData) else { ProcessParams->headairflow = headairflow; + ProcessParams->feedertension = feedertension; + ProcessParams->windertension = windertension; + ProcessParams->pullertension = pullertension; ReportWithPackageFilter(InitFilter,"HandleProcessParameters temp off blower on",__FILE__,(int)__LINE__,(int)ProcessParams->headairflow,RpWarning,(int)ProcessParametersKeep.headairflow,0); } } @@ -381,7 +384,7 @@ uint32_t LoadProcessParamsFromFile(void) } uint32_t ProcessParamsInit(void) { - FRESULT Fresult = FR_OK; + FRESULT Fresult = FR_NOT_READY; uint32_t Bytes; memcpy(&Bytes,(void *)PROCESS_PARAMETERS_MAP_IN_FLASH,sizeof(Bytes)); @@ -406,6 +409,13 @@ uint32_t ProcessParamsInit(void) } } } + if (Fresult == FR_NOT_READY) //process params not ready + { + MCU_E2PromProgram(EEPROM_WINDER_TENSION_POSITION,&Bytes); + windertension = Bytes; + MCU_E2PromProgram(EEPROM_PULLER_TENSION_POSITION,&Bytes); + pullertension = Bytes; + } return Fresult; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 31c9be4ff..965ea30da 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -35,6 +35,7 @@ #include #include #include "drivers/FPGA/FPGA_SPI_Comm.h" +#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h" #include "PMR/Stubs/StubHeatingTestRequest.pb-c.h" #include "PMR/Stubs/StubHeatingTestResponse.pb-c.h" @@ -1066,7 +1067,7 @@ } uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue) { - if (JobIsActive()||(MachineReadyForHeating == false)) + if (JobIsActive()||(MachineReadyForHeating == false)||(FPGABurningActive==true)) { Report("ThreadLoadButton called on job",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0); return ERROR; diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index 9c45cad82..ac4f813eb 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,18 +1,19 @@ Embedded SW Release note - Version 1.4.6.31 - Pack 2+ ============================================================= -fix bug in SW update -fix firmware update when no files +fix bug in SW update - test many short jobs. +fix firmware update when no files remove ADC interrupt - polling only -fix head identification on head hw failure -improve WHS air flow control +fix head identification on head hw failure +improve WHS air flow control - test - change RML settings. check time of change until stable fix FlashInitAndLoad() (although not in use) -########### NOT FIXED ### dryer heating. lots of logs added, -VAC control - hysteresis added; use saved Z1 current and not on going current. -start blower increase a bit later to solve the temperature alarms preventing jobs +########### NOT FIXED ### dryer heating. lots of logs added, please report whenever temperature goes too high +VAC control - hysteresis added; +use saved Z1 current and not on going current. +start blower increase a bit later to solve the temperature alarms preventing jobs - test bugs #2611, #2613, #2902 -IDS pressure check reinstalled -maximal pressure buildup 2.5 -no cleaning if not on RML +IDS pressure check reinstalled +maximal pressure buildup 2.5 instead of 1.5 +no cleaning if not on RML allow midtank filling if less than 0.6 (PP machine) @@ -24,7 +25,7 @@ thread load: - support "try" message from PPC on problem - improve error handling - improve error messages -improve thec board load arm homing +improve the tech board loading arm homing allow dancer spring motors to move during a job drivers: @@ -32,8 +33,10 @@ drivers: new dispenser pressure sensors (based on EEPROM) EMC support - external clock / internal clock in motors read air flow in arc head + system: load/store MCU EEprom data using a special command +print MCU serial number INITIALIZATION Failure: if the SW crashes 4 times -initialization will stop. solution : retart 4 more times, update software, stub read serial number of main CPU to the logs diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index f22d09d9d..b5715ca0a 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -71,6 +71,7 @@ #include "drivers/Motors/Motor.h" #include +#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h" #include "./printingSTM.h" #include "modules/thread/thread_ex.h" @@ -372,7 +373,7 @@ uint32_t ThreadJoggingFunc(int speed) { ProcessParameters ProcessParametersCopy; uint32_t status = OK; - if ((JobIsActive() == true)||(JoggingJobActive == true)||(MachineReadyForHeating == false)) + if ((JobIsActive() == true)||(JoggingJobActive == true)||(MachineReadyForHeating == false)||(FPGABurningActive==true)) { status = ERROR; Report("Jog JobIsActive", __FILE__, __LINE__, JobIsActive(), RpWarning, JoggingJobActive, 0); -- cgit v1.3.1