From c7fcd93f517b23bcbb0575e6a4f279d56808d8c4 Mon Sep 17 00:00:00 2001 From: Shai Frieder Date: Mon, 10 Feb 2020 17:49:50 +0200 Subject: add WHS_Set_Blower_Control_Closed_Loop() add stub to set the rehostat(gass sensor) add detect newWHS card by I2C command to EEPROM --- Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 5 ++++- 1 file changed, 4 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 195cc65f3..b24970ea0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -58,6 +58,7 @@ #include #include +#include Task_Handle Millisecond_Task_Handle; /******************** Definitions ********************************************/ @@ -719,7 +720,9 @@ uint32_t MillisecLowLoop(uint32_t tick) } Trigger_WHS_PT100_Read_All(); Trigger_WHS_MAX11614_Read_allADC(); - Trigger_WHSReadAllFanTacho (); + WHS_Blower_Avarege_ORF1(); + WHS_Blower_Avarege_ORF3(); + Trigger_WHSReadAllFanTacho (); } if (OneMinute_Tick) { -- cgit v1.3.1 From f00b1c08c2d9a05ada6b9adc9e25906e25ff80d9 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 11 Feb 2020 17:40:15 +0200 Subject: bug fixes, init handling --- .../Embedded_SW/Embedded/Common/report/report.h | 2 +- .../Embedded/Common/report/reportInit.c | 4 +- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 6 ++- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 15 ------- .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 2 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 12 ++++-- .../Embedded/Modules/Control/MillisecTask.c | 4 +- .../Embedded/Modules/General/GeneralHardware.c | 19 -------- .../Embedded/Modules/Heaters/Heaters_print.c | 2 + .../Embedded/Modules/Stubs_Handler/Progress.c | 6 +-- .../Embedded/Modules/Thread/ThreadLoad.c | 1 + .../StateMachines/Initialization/InitSequence.c | 50 +++++++++++++++++++--- .../StateMachines/Initialization/PowerIdle.c | 1 + .../Initialization/PowerOffSequence.c | 5 +++ 14 files changed, 77 insertions(+), 52 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/report/report.h b/Software/Embedded_SW/Embedded/Common/report/report.h index 2d7e93ca5..a267bfc6b 100644 --- a/Software/Embedded_SW/Embedded/Common/report/report.h +++ b/Software/Embedded_SW/Embedded/Common/report/report.h @@ -126,7 +126,7 @@ extern uint32_t StopReportInitMessage(MessageContainer* requestContainer); uint32_t SetDebugLogCategoryFunc(MessageContainer* requestContainer); void SetupDebugDisributorsRequestFunc(MessageContainer* requestContainer); -void ReportResetReason(void); +uint32_t ReportResetReason(void); uint32_t OpenLogFile(void); uint32_t CloseLogFile(void); bool isReportActive(void); diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 6ed149039..8f3cde15f 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -255,7 +255,7 @@ void SetupDebugDisributorsRequestFunc(MessageContainer* requestContainer) } -void ReportResetReason(void) +uint32_t ReportResetReason(void) { /* #define SYSCTL_CAUSE_HSRVREQ 0x00001000 // Hardware System Service Request @@ -300,6 +300,8 @@ void ReportResetReason(void) if ((RESC & SYSCTL_CAUSE_WDOG1)||(RESC & SYSCTL_CAUSE_WDOG0)||(RESC & SYSCTL_CAUSE_BOR)) AlarmHandlingSetAlarm (EVENT_TYPE__UNINTENDED_RESET,ON); //handle alarm detection and operation + return RESC; + } uint32_t ReportInitMessage(MessageContainer* requestContainer) 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 c620cebdb..f182ec09c 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 @@ -525,10 +525,11 @@ uint32_t MagnetCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) Report("MagnetCallBackFunction",__FILE__,__LINE__,(int)MagnetControlId,RpWarning,(int)MagnetCallBackFunction,0); return OK; } - +//double BlowerSetPoint; uint32_t ActivateHeadMagnet() { Report("ActivateHeadMagnet - Close the lid magnet",__FILE__,__LINE__,(int)HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,RpWarning,(int)DH_LID_OPEN,0); + //WHS_Start_Blower_Control_Closed_Loop(BlowerSetPoint); //Task_sleep(500); if(Head_Type == HEAD_TYPE_SYLKO) HeadCard_ActivateHeadMagnet(); @@ -551,6 +552,9 @@ uint32_t HeadCard_HeadMagnet_Disable(); */ uint32_t DeActivateHeadMagnet() { + //BlowerSetPoint = WHS_Get_Blower_Control_Closed_Loop_SetPoint(); + + //WHS_Start_Blower_Control_Closed_Loop(0.0); if(Head_Type == HEAD_TYPE_SYLKO) { 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 4308a7913..cc876a45a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -41,7 +41,6 @@ typedef enum Actuators_Control, /* enum for WHS :*/ - DetectNewWHS, WHS_start, WHS_init_I2C_IO, WHS_init_fan, @@ -161,16 +160,6 @@ void Trigger_InputsReading(void) } -void Trigger_Check_WHS_Type_Via_EEPROM() -{ - I2C_ReadingMessageStruc I2C_ReadingMessage; - - I2C_ReadingMessage.messageId = DetectNewWHS; - if (I2C_ReadingMsgQ != NULL) - Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); - return; -} - void Trigger_WHS_init_IO(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; @@ -461,10 +450,6 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) } break; - case DetectNewWHS: - Check_WHS_Type_Via_EEPROM(); - break; - case WHS_init_I2C_IO: WHS_IO_Init(); break; 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 4f5712442..bc58e2450 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -10,7 +10,7 @@ #define DRIVERS_I2C_COMMUNICATION_I2C_TASK_H_ -void Trigger_Check_WHS_Type_Via_EEPROM(void); + void Trigger_WHS_init_IO(void); void Trigger_WHS_init_fan(void); void Trigger_WHS_init_PT100(void); diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 03135c0d5..d1fd48b32 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -636,7 +636,8 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { if (AlarmItem == NULL) return ERROR; - //DebugLogCategory reprocessedSeverity = Severity; + + DebugLogCategory reprocessedSeverity = Severity; //ProcessParameters ProcessParameterZero; switch (AlarmItem[AlarmId].AlarmSource) { @@ -691,14 +692,19 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever Valve_Set(IDS_Id_to_AirValve[AlarmItem[AlarmId].DeviceId], AlarmItem[AlarmId].DeviceId ); //AlarmItem[AlarmId].DeviceId/ON Valve_Set(IDS_Id_to_CartrideValve[AlarmItem[AlarmId].DeviceId], AlarmItem[AlarmId].DeviceId ); //Atm_MidTank_OFF/ON } + if ((JobIsActive())&&(DispenserUsedInJob[AlarmItem[AlarmId].DeviceId] == false)) + { + reprocessedSeverity = DEBUG_LOG_CATEGORY__Warning; + } + } break; default: break; } - /*switch (reprocessedSeverity)*/ - switch (Severity) + switch (reprocessedSeverity) + /*switch (Severity)*/ { case DEBUG_LOG_CATEGORY__Warning: //raise flag fr next job diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index b24970ea0..48c7c3f5e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -720,8 +720,8 @@ uint32_t MillisecLowLoop(uint32_t tick) } Trigger_WHS_PT100_Read_All(); Trigger_WHS_MAX11614_Read_allADC(); - WHS_Blower_Avarege_ORF1(); - WHS_Blower_Avarege_ORF3(); +// WHS_Blower_Avarege_ORF1(); //drier + WHS_Blower_Avarege_ORF3(); //head Trigger_WHSReadAllFanTacho (); } if (OneMinute_Tick) diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index ec7650f3d..2c6040bab 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -518,25 +518,6 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) } } } - //from now on starting blower on INIT, so that the chiller does not freeze - /*if (BlowerCfg.enabled == true) - { - Turn_the_Blower_On();//Turn on with the Default_Voltage - if (BlowerCfg.heatingvoltage) - Control_Voltage_To_Blower(BlowerCfg.heatingvoltage); - else - Control_Voltage_To_Blower(BlowerCfg.voltage-500); - - }*/ - -/* - for (Dispenser_i = 0;Dispenser_i < MAX_SYSTEM_DISPENSERS;Dispenser_i++) - { - Enable_MidTank_Pressure_Reading(Dispenser_i); - Valve_Set(IDS_Id_to_AirValve[Dispenser_i], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON - } - GenHWControlId = AddControlCallback(NULL, GenHWInitCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); -*/ ControlStart(); AlarmHandlingStart(); //ThreadInitialTestStub(request); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index d84098469..079903a1c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -694,6 +694,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) HeaterAtTemp[HeaterId] = false; if (BlowerCfg.enabled == true) { + //WHS_Start_Blower_Control_Closed_Loop(2.5); Turn_the_Blower_On();//Turn on with the Default_Voltage if (BlowerCfg.heatingvoltage) Control_Voltage_To_Blower(BlowerCfg.heatingvoltage); @@ -1161,6 +1162,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) AlarmHandlingSetAlarm(HeaterUnderEventType[index], false); if (BlowerCfg.enabled == true) { + //WHS_Start_Blower_Control_Closed_Loop(5.0); Turn_the_Blower_On();//Turn on with the Default_Voltage if (BlowerCfg.voltage) //Gradual_Increase_Blower(BlowerCfg.heatingvoltage,BlowerCfg.voltage); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 56e314967..f87aa2eda 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -506,7 +506,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) } else - if(request->amount == 0x0CC) //Cùøàøïâò÷ Vùêïâùàïíî ø÷ãôíîã÷ + if(request->amount == 0x0CC) //Cartridge Validation Response Demo { LOG_ERROR(request->delay,"ResponseDemo"); ResponseDemo(request->delay); @@ -550,7 +550,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = true; } else - if(request->amount == 0xB2) //fast refresh for pressure + if(request->amount == 0xB2) //Set loading arm cycles { LOG_ERROR(request->delay,"Set loading arm cycles"); @@ -567,7 +567,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) } else - if(request->amount == 0xB4) //fast refresh for pressure + if(request->amount == 0xB4) //IDS_Dispenser_Content_Init { LOG_ERROR(request->amount,"IDS_Dispenser_Content_Init"); IDS_Dispenser_Content_Init(); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 2a83f8425..aa090625c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -191,6 +191,7 @@ } else { + //WHS_Start_Blower_Control_Closed_Loop(2.5); Turn_the_Blower_On();//Turn on with the Default_Voltage if (BlowerCfg.heatingvoltage) Control_Voltage_To_Blower(BlowerCfg.heatingvoltage); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 937e348b0..d1f667405 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -39,6 +39,7 @@ INIT_SEQUENCE_BUILT_IN_TEST, INIT_SEQUENCE_INITIAL_BLOWER_ACTIVATION, //INIT_SEQUENCE_DISPENSER_PRESSURE_BUILDUP_TEST, + INIT_SEQUENCE_WAIT_FOR_COOLER, INIT_SEQUENCE_THREAD_DETECTION, INIT_SEQUENCE_START_HEATING, INIT_SEQUENCE_MACHINE_READY_TO_DYE, @@ -120,9 +121,10 @@ uint32_t Start_InitSequence(void) InitSchedulerControlId = AddControlCallback("InitScheduler", InitScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; } +uint32_t ResetReason = 0; void InitSequenceResetReason(void) { - ReportResetReason(); + ResetReason = ReportResetReason(); InitStages++; //InitSequenceStateMachine(InitStages); @@ -198,7 +200,7 @@ uint32_t InitSequenceBlowerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) Control_Voltage_To_Blower(BlowerCfg.heatingvoltage); else Control_Voltage_To_Blower(3000); - + //WHS_Start_Blower_Control_Closed_Loop(2.5); AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_INITIAL_BLOWER_FAILED,OFF); //handle alarm detection and operation Safety_Init(); @@ -209,11 +211,12 @@ uint32_t InitSequenceBlowerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) uint32_t InitSequenceInitialBlowerActivation(void) { MachineStateDetail = MACHINE_STATE_INITIAL_BLOWER_ACTIVATION; + //WHS_Start_Blower_Control_Closed_Loop(0.0); Turn_the_Blower_On();//Turn on with the Default_Voltage - if (BlowerCfg.voltage) - Control_Voltage_To_Blower(BlowerCfg.voltage); - else - Control_Voltage_To_Blower(3000); +// if (BlowerCfg.voltage) +// Control_Voltage_To_Blower(BlowerCfg.voltage); +// else + Control_Voltage_To_Blower(4200); HWControlId = AddControlCallback("Init Blower", InitSequenceBlowerCallBackFunction, 10* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); /*if (RdInkCartridgeSensor()) //if there is a cartridge in the ink slot skip the valves procedure { @@ -255,6 +258,39 @@ uint32_t InitSequenceDispenserPressureBuildUpTest(void) return OK; } +uint32_t InitSequenceWaitForCoolerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + InitStages++; + MachineStateDetail = INIT_SEQUENCE_WAIT_FOR_COOLER; + + if (SafeRemoveControlCallback(HWControlId, InitSequenceWaitForCoolerCallBackFunction )==OK) + HWControlId = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitSequenceWaitForCoolerCallBackFunction,0); + return OK; +} +uint32_t InitSequenceWaitForCooler(void) +{ + if (WHS_Type == WHS_TYPE_UNKNOWN) + { + InitStages++; + MachineStateDetail = INIT_SEQUENCE_WAIT_FOR_COOLER; + return OK; + } + if ((ResetReason & SYSCTL_CAUSE_SW)||(ResetReason & SYSCTL_CAUSE_WDOG1)||(ResetReason & SYSCTL_CAUSE_WDOG0)) + { + //soft-warm reset + InitStages++; + MachineStateDetail = INIT_SEQUENCE_WAIT_FOR_COOLER; + } + else + { + //cold reset, wait 2 minutes for cooler start + HWControlId = AddControlCallback("Init Cooler", InitSequenceWaitForCoolerCallBackFunction, 2*eOneMinute, TemplateDataReadCBFunction,0,0, 0 ); + } + //InitSequenceStateMachine(InitStages); + return OK; +} uint32_t InitSequenceThreadDetection(void) { InitStages++; @@ -352,6 +388,8 @@ uint32_t InitSequenceStateMachine( INIT_SEQUENCE_STAGES_ENUM ReadValue) /*case INIT_SEQUENCE_DISPENSER_PRESSURE_BUILDUP_TEST: InitSequenceDispenserPressureBuildUpTest(); break;*/ + case INIT_SEQUENCE_WAIT_FOR_COOLER: + InitSequenceWaitForCooler(); case INIT_SEQUENCE_THREAD_DETECTION: InitSequenceThreadDetection(); break; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c index 051d6c9cd..70e713420 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c @@ -100,6 +100,7 @@ void PowerIdleSetIdle(void) } if (BlowerCfg.enabled == true) { + //WHS_Start_Blower_Control_Closed_Loop(2.5); Turn_the_Blower_On();//Turn on with the Default_Voltage if (BlowerCfg.heatingvoltage) Control_Voltage_To_Blower(BlowerCfg.heatingvoltage); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 4218c64a1..0d45b8477 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -442,6 +442,7 @@ uint32_t PowerOffTurnOffCooler(void) /*******************************************************************************************************/ uint32_t PowerOffTurnOffBlower(void) { + //WHS_Start_Blower_Control_Closed_Loop(0.0); Turn_the_Blower_Off();//Turn off PowerOffMachineState++; return OK; @@ -455,6 +456,10 @@ uint32_t PowerOffPowerOff(void) REPORT_MSG (10-i, "Power off in x seconds"); Task_sleep (1000); } + ControlStop(); + MillisecStop(); + HeatersEnd(); + ROM_IntMasterDisable(); Power_Off(); return OK; } -- cgit v1.3.1 From 3deccf0347b1aaaf9f8d2f25e592b6cefe32451b Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 12 Feb 2020 15:21:06 +0200 Subject: Veraion 1.4.6.10 improve current reading, fir I2C interface, improve (?) task priorities --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c | 10 +-- .../I2C_Communication/Head_Card/IO_Ports/Head_IO.c | 2 +- .../Embedded/Drivers/I2C_Communication/I2C.h | 1 + .../Embedded/Drivers/I2C_Communication/I2C_Comm.c | 73 +++++++++++--------- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 26 +++----- .../Embedded/Drivers/Motors/MotorActions.c | 5 ++ .../Embedded/Drivers/flash_ram/FlashProgram.c | 2 +- Software/Embedded_SW/Embedded/Embedded.cfg | 78 +++++++++++----------- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 43 +++++++----- .../Embedded/Modules/Control/MillisecTask.c | 16 ++--- .../Embedded_SW/Embedded/Modules/Control/control.c | 4 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 13 +++- .../Embedded/Modules/Heaters/Heaters_print.c | 4 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 6 +- .../Embedded/Modules/Stubs_Handler/Progress.c | 18 +++++ .../Embedded/Modules/Thread/ThreadLoad.c | 8 +++ .../Initialization/PowerOffSequence.c | 2 + 18 files changed, 183 insertions(+), 130 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 20dc627e8..e0dc92e1b 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,9}; +TangoVersion_t _gTangoVersion = {1,4,6,10}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d 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 123f3f1e9..e39d690aa 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 @@ -404,7 +404,7 @@ int Get_MidTank_Int1000_Sensor(MidTank_t MidTank_ID) //0-7 ///////////////////////// Head_MixChip_Heaters_Current ////////////////////////////// -bool Heaters_Current_Read_Enable[9] = {false,false,false,false,false,false,false,false,false}; +bool Heaters_Current_Read_Enable[9] = {false,false,false,false,false,false,true,true,false}; double Heaters_Current[9] = {1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}; @@ -412,21 +412,21 @@ uint32_t Heaters_Current_Bits[9];//just for debug void Enable_Reading_Heaters_Current(HEATERS_CURRENT Heater_ID) //0-8 { - if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) + if((Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)&&(Heater_ID>=HEATER_DRYER_CURRENT_3)) return; assert (Heater_ID HEAD_TYPE_SYLKO_WITHOUT_CARD) + if((Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)&&(Heater_ID>=HEATER_DRYER_CURRENT_3)) return; assert (Heater_ID HEAD_TYPE_SYLKO_WITHOUT_CARD) + if((Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)&&(Heater_ID>=HEATER_DRYER_CURRENT_3)) return false; assert (Heater_ID HEAD_TYPE_SYLKO_WITHOUT_CARD) + if((Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)&&(Heater_ID>=HEATER_DRYER_CURRENT_3)) return 0; assert (Heater_ID 10) - { - Arb_Loss_Count= 0; - Init_All_I2C(); - ReportWithPackageFilter(CommFilter,"Reinitializing I2C master", __FILE__,__LINE__,status, RpMessage, Task_self(), 0); - } - } - else - { - if (Arb_Loss_Count) - ReportWithPackageFilter(CommFilter,"Resetting count", __FILE__, Arb_Loss_Count, status, RpMessage, Task_self(), 0); - - // Arb_Loss_Count = 0; - } return status; } @@ -190,23 +174,6 @@ uint32_t I2C_ReadBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data //return I2CMasterErr(I2C_BASE) == I2C_MASTER_ERR_NONE; status |= I2CMasterErr(I2C_BASE); } - if (status == I2C_MASTER_ERR_ARB_LOST) - { - if (Arb_Loss_Count++ > 10) - { - Arb_Loss_Count= 0; - Init_All_I2C(); - ReportWithPackageFilter(CommFilter,"Reinitializing I2C master", __FILE__,__LINE__, status, RpMessage, Task_self(), 0); - - } - } - else - { - if (Arb_Loss_Count) - ReportWithPackageFilter(CommFilter,"Resetting count", __FILE__, Arb_Loss_Count, status, RpMessage, Task_self(), 0); - - //Arb_Loss_Count = 0; - } return status; } @@ -228,6 +195,10 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf, else return ERROR; + /* if (Task_self()!=I2C_Task_Handle) + { + ReportWithPackageFilter(CommFilter,"I2C_Write called from different task", __FILE__,__LINE__, I2C_Task_Handle, RpMessage, Task_self(), 0); + }*/ /* if ( (Slave_Add != 0xE0) && (Slave_Add != 0xE4) && (Slave_Add != 0xE3) & (Slave_Add != 0x40) && (Slave_Add != 0x44) && (Slave_Add != 0x46) & (Slave_Add != 0x98) && (Slave_Add != 0xA0) ) @@ -254,6 +225,22 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf, // } status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite); + if (status) + { + if (Arb_Loss_Count++ > 10) + { + Arb_Loss_Count= 0; + Init_All_I2C(); + ReportWithPackageFilter(CommFilter,"Reinitializing I2C master", __FILE__,__LINE__, status, RpMessage, Task_self(), 0); + + } + } + /*else + { + if (Arb_Loss_Count) + ReportWithPackageFilter(CommFilter,"Resetting count", __FILE__, Arb_Loss_Count, status, RpMessage, Task_self(), 0); + //Arb_Loss_Count = 0; + }*/ return status; } @@ -280,6 +267,10 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u (Slave_Add != 0x40) && (Slave_Add != 0x44) && (Slave_Add != 0x46) & (Slave_Add != 0x98) && (Slave_Add != 0xA0) ) return ERROR;*/ + /*if (Task_self()!=I2C_Task_Handle) + { + ReportWithPackageFilter(CommFilter,"I2C_Write called from different task", __FILE__,__LINE__, I2C_Task_Handle, RpMessage, Task_self(), 0); + }*/ Slave_Add = Slave_Add>>1; @@ -303,6 +294,22 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u //status = I2C_WriteBuff(I2C_BASE, Slave_Add, Bytes2Write, No_BytesTWrite); status = I2C_ReadBuff(I2C_BASE, Slave_Add, I2C_Read_buf, No_BytesToRead); + if (status) + { + if (Arb_Loss_Count++ > 10) + { + Arb_Loss_Count= 0; + Init_All_I2C(); + ReportWithPackageFilter(CommFilter,"Reinitializing I2C master", __FILE__,__LINE__, status, RpMessage, Task_self(), 0); + + } + } + /*else + { + if (Arb_Loss_Count) + ReportWithPackageFilter(CommFilter,"Resetting count", __FILE__, Arb_Loss_Count, status, RpMessage, Task_self(), 0); + //Arb_Loss_Count = 0; + }*/ return status; } 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 4308a7913..c2097dbef 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -28,6 +28,7 @@ #include "modules/ids/ids_ex.h" extern Semaphore_Handle I2C_Sem; +Task_Handle I2C_Task_Handle; Mailbox_Handle I2C_ReadingMsgQ = NULL; typedef enum { @@ -41,7 +42,6 @@ typedef enum Actuators_Control, /* enum for WHS :*/ - DetectNewWHS, WHS_start, WHS_init_I2C_IO, WHS_init_fan, @@ -78,7 +78,10 @@ void Trigger_Heater_Current_Read(void) uint8_t Heater_i=0; I2C_ReadingMessage.messageId = Heater_Current_Reading; - I2C_ReadingMessage.parameter = Heater_i; + I2C_ReadingMessage.parameter = HEATER_DRYER_CURRENT_1; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + I2C_ReadingMessage.parameter = HEATER_DRYER_CURRENT_2; if (I2C_ReadingMsgQ != NULL) Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); @@ -161,16 +164,6 @@ void Trigger_InputsReading(void) } -void Trigger_Check_WHS_Type_Via_EEPROM() -{ - I2C_ReadingMessageStruc I2C_ReadingMessage; - - I2C_ReadingMessage.messageId = DetectNewWHS; - if (I2C_ReadingMsgQ != NULL) - Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); - return; -} - void Trigger_WHS_init_IO(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; @@ -398,6 +391,7 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) I2C_ReadingMessageStruc I2C_ReadingMessage; Semaphore_post(I2C_Sem); TEMPERATURE_SENSOR_ID_ENUM Sensor_i; + I2C_Task_Handle = Task_self(); while(1) { @@ -425,7 +419,7 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) break; case Heater_Current_Reading: //Report("Read_Heaters_Current",__FILE__,__LINE__,255,RpWarning,0,0); - if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) + if((Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)&&(I2C_ReadingMessage.parameter>=HEATER_DRYER_CURRENT_3)) Read_Head_ADC(I2C_ReadingMessage.parameter); else Read_Heaters_Current(I2C_ReadingMessage.parameter); @@ -440,7 +434,7 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) HeadADCPT100_SensorInitConfig(); break; case Actuators_Control: - HeadCard_Actuators_Control(I2C_ReadingMessage.parameter, (bool)I2C_ReadingMessage.parameter2,(bool)I2C_ReadingMessage.parameter2); + HeadCard_Actuators_Control(I2C_ReadingMessage.parameter, (bool)I2C_ReadingMessage.parameter2,(bool)I2C_ReadingMessage.parameter3); break; case Inputs_Reading: Head_Read_IO_Reg(0x46, HIGH);//READ HEAD CARD LS @@ -461,10 +455,6 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) } break; - case DetectNewWHS: - Check_WHS_Type_Via_EEPROM(); - break; - case WHS_init_I2C_IO: WHS_IO_Init(); break; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index ddd0d293c..9fe7a67cc 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -839,6 +839,11 @@ void MotorActionsInit(void) MotorDriverResponse[i].Status = 0xFFFFFFFF; StoredMotorPosition[i] = 0; } + if (Head_Type == HEAD_TYPE_SYLKO)//adjust the limit switches + { + Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID] = HEADCARD_COVER_LS_REAR; + Motor_Id_to_LS_IdUp [HARDWARE_MOTOR_TYPE__MOTO_DH_LID] = HEADCARD_COVER_LS_FRONT; + } } diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index bef2b1727..240585e43 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -106,7 +106,7 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b status = FlashProgram((uint32_t *)ui32BufferAddr, ui32ProgAddr,(ui32DataSize + 3) & ~3); if (status) - Report("FlashProgram Error", __FILE__,status,ui32FlashStart , RpMessage, (ui32DataSize + 3) & ~3, 0); + Report("FlashProgram Error", __FILE__,status,ui32ProgAddr , RpMessage, (ui32DataSize + 3) & ~3, 0); // // If there is more image to program, then update the programming diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index 26fd2a980..734902ce7 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -99,66 +99,60 @@ Program.global.ReconnectSem = Semaphore.create(null, semaphore7Params); var MillisecTaskParams = new Task.Params(); MillisecTaskParams.instance.name = "MilliSecond"; MillisecTaskParams.stackSize = 4096; -MillisecTaskParams.priority = 12; +MillisecTaskParams.priority = 14; Program.global.millisec = Task.create("&MillisecTask", MillisecTaskParams); -var FPGALoad = new Task.Params(); -FPGALoad.instance.name = "FPGALoad"; -FPGALoad.stackSize = 4096; -FPGALoad.priority = 4; -Program.global.FPGALoad = Task.create("&FPGALoadTask", FPGALoad); - -var I2C_Reading = new Task.Params(); -I2C_Reading.instance.name = "I2C_Reading"; -I2C_Reading.stackSize = 2048; -I2C_Reading.priority = 8; -Program.global.I2C_Reading = Task.create("&I2C_ReadingTask", I2C_Reading); - var ControlTaskParams = new Task.Params(); ControlTaskParams.instance.name = "control"; ControlTaskParams.stackSize = 2048; -ControlTaskParams.priority = 11; +ControlTaskParams.priority = 13; Program.global.control = Task.create("&controlTask", ControlTaskParams); -var AlarmHandlingTaskParams = new Task.Params(); -AlarmHandlingTaskParams.instance.name = "AlarmHandling"; -AlarmHandlingTaskParams.stackSize = 4096; -AlarmHandlingTaskParams.priority = 9; -Program.global.AlarmHandling = Task.create("&AlarmHandlingTask", AlarmHandlingTaskParams); - var CommTxTaskParams = new Task.Params(); CommTxTaskParams.instance.name = "communicationTx"; -CommTxTaskParams.priority = 10; +CommTxTaskParams.priority = 12; CommTxTaskParams.stackSize = 4096; Program.global.communicationTx = Task.create("&communicationTxTask", CommTxTaskParams); +var CommRxTaskParams = new Task.Params(); +CommRxTaskParams.instance.name = "communicationRx"; +CommRxTaskParams.priority = 11; +CommRxTaskParams.stackSize = 8192; +Program.global.communication = Task.create("&communicationTask", CommRxTaskParams); + +var AlarmHandlingTaskParams = new Task.Params(); +AlarmHandlingTaskParams.instance.name = "AlarmHandling"; +AlarmHandlingTaskParams.stackSize = 4096; +AlarmHandlingTaskParams.priority = 10; +Program.global.AlarmHandling = Task.create("&AlarmHandlingTask", AlarmHandlingTaskParams); + var ProcessTaskParams = new Task.Params(); ProcessTaskParams.instance.name = "process"; ProcessTaskParams.stackSize = 4096; -ProcessTaskParams.priority = 8; +ProcessTaskParams.priority = 9; Program.global.process = Task.create("&jobTask", ProcessTaskParams); +var I2C_Reading = new Task.Params(); +I2C_Reading.instance.name = "I2C_Reading"; +I2C_Reading.stackSize = 2048; +I2C_Reading.priority = 8; +Program.global.I2C_Reading = Task.create("&I2C_ReadingTask", I2C_Reading); + var HeaterControlTaskParams = new Task.Params(); HeaterControlTaskParams.instance.name = "HeatersControl"; HeaterControlTaskParams.priority = 7; Program.global.HeatersControl = Task.create("&HeatersControlTask", HeaterControlTaskParams); -var CommRxTaskParams = new Task.Params(); -CommRxTaskParams.instance.name = "communicationRx"; -CommRxTaskParams.priority = 9; -CommRxTaskParams.stackSize = 8192; -Program.global.communication = Task.create("&communicationTask", CommRxTaskParams); - -var MillisecLowTaskParams = new Task.Params(); -MillisecLowTaskParams.instance.name = "MilliSecondLow"; -MillisecLowTaskParams.stackSize = 2048; -MillisecLowTaskParams.priority = 5; -Program.global.millisecLow = Task.create("&MillisecLowTask", MillisecLowTaskParams); +var ReportTaskParams = new Task.Params(); +ReportTaskParams.instance.name = "report"; +ReportTaskParams.stackSize = 4096; +ReportTaskParams.priority = 6; +Program.global.report = Task.create("&reportService", ReportTaskParams); var ControlLowTaskParams = new Task.Params(); ControlLowTaskParams.instance.name = "controlLow"; ControlLowTaskParams.stackSize = 4096; -ControlLowTaskParams.priority = 6; +ControlLowTaskParams.priority = 5; Program.global.controlLow = Task.create("&controlLowTask", ControlLowTaskParams); var DiagnosticsTaskParams = new Task.Params(); @@ -167,17 +161,23 @@ DiagnosticsTaskParams.priority = 4; DiagnosticsTaskParams.stackSize = 8192; Program.global.Diagnostics = Task.create("&DiagnosticsTask", DiagnosticsTaskParams); +var MillisecLowTaskParams = new Task.Params(); +MillisecLowTaskParams.instance.name = "MilliSecondLow"; +MillisecLowTaskParams.stackSize = 2048; +MillisecLowTaskParams.priority = 3; +Program.global.millisecLow = Task.create("&MillisecLowTask", MillisecLowTaskParams); + var ADCProcessTaskParams = new Task.Params(); ADCProcessTaskParams.instance.name = "adcProcess"; ADCProcessTaskParams.stackSize = 512; ADCProcessTaskParams.priority = 2; Program.global.adcProcess = Task.create("&ADCProcessTask", ADCProcessTaskParams); -var ReportTaskParams = new Task.Params(); -ReportTaskParams.instance.name = "report"; -ReportTaskParams.stackSize = 4096; -ReportTaskParams.priority = 7; -Program.global.report = Task.create("&reportService", ReportTaskParams); +var FPGALoad = new Task.Params(); +FPGALoad.instance.name = "FPGALoad"; +FPGALoad.stackSize = 4096; +FPGALoad.priority = 2; +Program.global.FPGALoad = Task.create("&FPGALoadTask", FPGALoad); var updateTaskParams = new Task.Params(); updateTaskParams.instance.name = "update"; diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index d1fd48b32..caa3e8df4 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -66,7 +66,6 @@ uint32_t AlarmHandlingControlId = 0xFF; uint32_t AlarmHandlingTick = 0; double CurrentAlarmHighLimit ,CurrentAlarmLowLimit; - bool CheckHardLimitAlarms = false,CheckCurrentAlarms = false,CheckTamperAlarms = false,CheckMotorAlarms = false; uint8_t alarm_response_buffer[500]; @@ -837,6 +836,13 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) } for (Alarm_i = 0;Alarm_i= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit)) || (doubleValue <= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmLowLimit))) + if (AlarmItem[Alarm_i].AlarmDirection == true) { - Status = true; - if (AlarmState[Alarm_i].Status == false) - ReportWithPackageFilter(AlarmFilter,"OverCurrent Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + if ((doubleValue >= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit)) || (doubleValue <= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmLowLimit))) + { + Status = true; + if (AlarmState[Alarm_i].Status == false) + ReportWithPackageFilter(AlarmFilter,"OverCurrent Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + } } - } - else - { - if (doubleValue <= 0.1) + else { - Status = true; - if (AlarmState[Alarm_i].Status == false) - ReportWithPackageFilter(AlarmFilter,"loop break Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + if (doubleValue <= 0.1) + { + Status = true; + if (AlarmState[Alarm_i].Status == false) + ReportWithPackageFilter(AlarmFilter,"loop break Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + } } } } @@ -1266,7 +1279,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) case ALARM_SOURCE_TYPE__TachoAlarm: // add by shai Status = false; - if (CheckCurrentAlarms) + if (CheckTamperAlarms) { // ReportWithPackageFilter(AlarmFilter,"------------FANS_RPM[Alarm_i]----------------", __FILE__,__LINE__,Alarm_i, RpMessage, value, 0); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 48c7c3f5e..e5064ef70 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -579,7 +579,7 @@ uint32_t MillisecLowLoop(uint32_t tick) //test dancers and speed encoders //check all callback units (state machine waiting for completion of a change) bool Ten_msTick, Fifty_msTick, Hundred_msTick , m20msecTick,m70msecTick,m90msecTick, Onesecond_Tick,OneMinute_Tick,OneHourTick,Gradient_Tick; - bool O100Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick; + bool O700Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick; //bool O100Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick,O800Millisecond_Tick,O900Millisecond_Tick; Ten_msTick = (tick%eTenMillisecond == 0) ?true:false; Fifty_msTick = (tick%eHundredMillisecond == 40) ?true:false; //eFiftyMillisecond @@ -587,7 +587,7 @@ uint32_t MillisecLowLoop(uint32_t tick) m20msecTick = (tick%eHundredMillisecond == 20) ?true:false; m70msecTick = (tick%eHundredMillisecond == 70) ?true:false; m90msecTick = (tick%eHundredMillisecond == 90) ?true:false; - O100Millisecond_Tick = (tick%eOneSecond == 100) ?true:false; + O700Millisecond_Tick = (tick%eOneSecond == 700) ?true:false; O200Millisecond_Tick = (tick%eOneSecond == 200) ?true:false; O400Millisecond_Tick = (tick%eOneSecond == 400) ?true:false; O500Millisecond_Tick = (tick%eOneSecond == 500) ?true:false; @@ -663,7 +663,7 @@ uint32_t MillisecLowLoop(uint32_t tick) } if (Gradient_Tick) DispensersCollectionCall(); - if (O100Millisecond_Tick) + if (O700Millisecond_Tick) { Trigger_Heater_Current_Read(); } @@ -705,8 +705,8 @@ uint32_t MillisecLowLoop(uint32_t tick) MachineUpdateResponseFunc(); //KeepAliveOneSecondCall(); - TemperatureListString(Lenstr); - ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0); + //TemperatureListString(Lenstr); + //ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0); for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++) { TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i); @@ -718,10 +718,10 @@ uint32_t MillisecLowLoop(uint32_t tick) PressureCalc[Disp_i] = MillisecCalculatePressures(Disp_i); } } - Trigger_WHS_PT100_Read_All(); - Trigger_WHS_MAX11614_Read_allADC(); + Trigger_WHS_PT100_Read_All(); + Trigger_WHS_MAX11614_Read_allADC(); // WHS_Blower_Avarege_ORF1(); //drier - WHS_Blower_Avarege_ORF3(); //head + WHS_Blower_Avarege_ORF3(); //head Trigger_WHSReadAllFanTacho (); } if (OneMinute_Tick) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index 5adf6f83d..a6540bc81 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -576,8 +576,8 @@ uint32_t ControlLowLoop(uint32_t tick) if (tick-prevtick>1) { skipped_ticks = tick-prevtick-1; - if (tick-prevtick>10) - Report("ControlLowLoop skipped",__FILE__,tick,(int)prevtick,RpWarning,(int)skipped_ticks,0); + //if (tick-prevtick>10) + // Report("ControlLowLoop skipped",__FILE__,tick,(int)prevtick,RpWarning,(int)skipped_ticks,0); } prevtick = tick; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index bb8f5d994..f1538197b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -461,7 +461,7 @@ void DiagnosticOneMinuteCollection(void) for (i=0;i DispenserPreparePressure) + if (GetDispenserPressure(i) > DispenserPreparePressure*1.02) { NumofReadyDispensers++; CurrentDispenserSpeed[i] = 0; @@ -528,7 +528,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) //Report("IDS stopped ready",__FILE__,i,(int)(DispenserPreparePressure*100),RpWarning,(int)NumofReadyDispensers,0); #else tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*0.985>100)?tempSpeed*0.985:100; + updatedSpeed = (tempSpeed*0.992>100)?tempSpeed*0.992:100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -543,7 +543,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) #else tempSpeed = CurrentDispenserSpeed[i]; #endif - updatedSpeed = (tempSpeed*1.02amount == 0xC3) //suspend I2C task + { + if (request->delay == 0) + { + LOG_ERROR(request->delay,"Suspend I2C"); + PowerOffHeatersOff(); + Task_sleep(1000); + Task_setPri (I2C_Task_Handle,-1); + } + else + { + LOG_ERROR(request->delay,"Resume"); + Task_setPri (I2C_Task_Handle,8); + } + response.progress = request->delay; + response.has_progress = true; + } else if((request->amount == 0xDF) && (request->delay == 0xDF)) //Power off { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index aa090625c..4ab59ec19 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -180,6 +180,14 @@ ProcessParametersClear.headzone4temp = 0; ProcessParametersClear.headzone5temp = 0; ProcessParametersClear.headzone6temp = 0; + ProcessParametersClear.headzone7temp = 0; + ProcessParametersClear.headzone8temp = 0; + ProcessParametersClear.headzone9temp = 0; + ProcessParametersClear.headzone10temp = 0; + ProcessParametersClear.headzone11temp = 0; + ProcessParametersClear.headzone12temp = 0; + ProcessParametersClear.stspzone1temp = 0; + ProcessParametersClear.stspzone2temp = 0; ProcessParametersClear.dyeingspeed = 40; ProcessParametersClear.dryerbufferlength = ProcessParametersKeep.dryerbufferlength; if (HandleProcessParameters(&ProcessParametersClear,false)!= OK) diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 0d45b8477..5cc94a909 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -250,6 +250,8 @@ uint32_t PowerOffHeatersOff(void) ProcessParametersClear.headzone10temp = 0; ProcessParametersClear.headzone11temp = 0; ProcessParametersClear.headzone12temp = 0; + ProcessParametersClear.stspzone1temp = 0; + ProcessParametersClear.stspzone2temp = 0; ProcessParametersClear.dyeingspeed = 40; if (HandleProcessParameters(&ProcessParametersClear,false)!= OK) { -- cgit v1.3.1 From 3bad6430679e06468fce5c90771fdf6270d62748 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 13 Feb 2020 14:28:02 +0200 Subject: update diagnostics blower on change. fix process parameters handling, add new head current readings to diagnostics --- .../Drivers/I2C_Communication/DAC/Blower.c | 5 +- .../I2C_Communication/Head_Card/ADC/Head_ADC.c | 5 + .../I2C_Communication/Head_Card/ADC/Head_ADC.h | 3 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 2 +- .../Modules/Diagnostics/DiagnosticActions.c | 5 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 249 +++++++++++++++++---- .../Embedded/Modules/Diagnostics/Diagnostics.h | 3 +- .../Embedded_SW/Embedded/Modules/General/process.c | 213 ++++++++---------- .../Embedded/StateMachines/Printing/JobSTM.c | 1 + 9 files changed, 314 insertions(+), 172 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c index 443ae6aa7..ec86475f7 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c @@ -24,6 +24,7 @@ #include "Drivers/I2C_Communication/I2C_Task.h" #include "Blower.h" #include "modules/control/control.h" +#include "modules/diagnostics/diagnostics.h" #include "drivers/FPGA/FPGA.h" DAC_Union DAC; @@ -161,7 +162,7 @@ uint32_t Turn_the_Blower_On() { Trigger_SetWHSBlowerVoltage(Default_Voltage); } - + DiaglosticChangeBlowerData(); return status; } @@ -177,6 +178,7 @@ uint32_t Control_Voltage_To_Blower(uint32_t mV) Trigger_SetWHSBlowerVoltage(mV); } voltage = mV; + DiaglosticChangeBlowerData(); return status; } @@ -195,6 +197,7 @@ uint32_t Turn_the_Blower_Off() } blowerStatus = false; + DiaglosticChangeBlowerData(); return status; } /* diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c index 6e7205756..3549ef75e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c @@ -153,6 +153,11 @@ uint32_t Head_I2C_ADC_Calc() return Status; } bool Head_Current_Read_Enable[HEAD_NUM_OF_ADC] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +bool Get_Head_Heater_Current_Reading_State(HEAD_ADC_t Heater_ID) //0-8 +{ + assert (Heater_IDvalue; - if (voltage == 0.0) + intvoltage = (int)request->value; + if (intvoltage < 10.0) Turn_the_Blower_Off(); else { Turn_the_Blower_On(); - intvoltage = voltage; Control_Voltage_To_Blower(intvoltage); } break; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index f1538197b..3f15e399f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -21,6 +21,7 @@ #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/FPGA.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h" #include "drivers/I2C_Communication/DAC/Blower.h" #include "drivers/valves/valve.h" @@ -114,6 +115,7 @@ double HeadFlowMeter; double DrierFlowMeter; double AcVoltage; double HeatersCurrent[NUM_OF_CURRENT_HEATERS][1]; +double HeadCurrent[MAX_FLAT_HEAD_HEATERS][1]; double VOC_Sensor; double OverallTemperature; @@ -410,6 +412,7 @@ void DiagnosticTenMsecCollection(void) void DiagnosticOneMinuteCollection(void) { int i; + bool status = OK; DiagnosticsMonitor.n_dispensersinklevel = 0; DiagnosticsMonitor.n_midtanksinklevel = 0; @@ -458,48 +461,205 @@ void DiagnosticOneMinuteCollection(void) DiagnosticsMonitor.midtank7level = MidTankpressure[6]; DiagnosticsMonitor.n_midtank8level = 1; DiagnosticsMonitor.midtank8level = MidTankpressure[7]; - - for (i=0;i HEAD_TYPE_SYLKO_WITHOUT_CARD) //rapid/pp machines { - if (Get_Heater_Current_Reading_State(i) == true) + /*DiagnosticsMonitor.n_drierzone1heatercurrent = 1; + DiagnosticsMonitor.drierzone1heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_1]; + DiagnosticsMonitor.n_drierzone2heatercurrent = 1; + DiagnosticsMonitor.drierzone2heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_2];*/ + Get_Head_Current(HEAD_CURRENT_MIXER,&HeadCurrent[HEAD_CURRENT_ZONE_12+1][0]); + DiagnosticsMonitor.n_mixer1heatercurrent = 1; + DiagnosticsMonitor.mixer1heatercurrent = HeadCurrent[HEAD_CURRENT_ZONE_12+1]; + if (Head_Type == HEAD_TYPE_SYLKO) { - HeatersCurrent[i][0] = Get_Heaters_Current(i); - switch(i) + for (i=0;iheadzone1temp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, true,ProcessParams->headzone1temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, true,ProcessParams->headzone1temp); - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->headzone1temp); -#endif } else { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, false,ProcessParams->headzone1temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone1temp); - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->headzone1temp); -#endif } if (ProcessParams->headzone2temp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, true,ProcessParams->headzone2temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone2temp); - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->headzone2temp); -#endif } else { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, false,ProcessParams->headzone2temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, false,ProcessParams->headzone2temp); - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->headzone2temp); -#endif } if (ProcessParams->headzone3temp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, true,ProcessParams->headzone3temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, true,ProcessParams->headzone3temp); -#endif } else { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, false,ProcessParams->headzone3temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, false,ProcessParams->headzone3temp); -#endif } - if (ProcessParams->headzone4temp>1) + if(Head_Type != HEAD_TYPE_STAPLE_SPUN) { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true,ProcessParams->headzone4temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, true,ProcessParams->headzone4temp); -#endif - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, false,ProcessParams->headzone4temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone4temp); -#endif - } - if (ProcessParams->headzone5temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, true,ProcessParams->headzone5temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone5temp); -#endif - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, false,ProcessParams->headzone5temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, false,ProcessParams->headzone5temp); -#endif - } - if (ProcessParams->headzone6temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, true,ProcessParams->headzone6temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, true,ProcessParams->headzone6temp); -#endif - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, false,ProcessParams->headzone6temp); -#ifdef rUse_Head_Card - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, false,ProcessParams->headzone6temp); -#endif + if (ProcessParams->headzone4temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true,ProcessParams->headzone4temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, false,ProcessParams->headzone4temp); + } + if (ProcessParams->headzone5temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, true,ProcessParams->headzone5temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, false,ProcessParams->headzone5temp); + } + if (ProcessParams->headzone6temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, true,ProcessParams->headzone6temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, false,ProcessParams->headzone6temp); + } } if (ProcessParams->dryerzone1temp>1) status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, true,ProcessParams->dryerzone1temp); else status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, false,ProcessParams->dryerzone1temp); - if (ProcessParams->headzone7temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, true,ProcessParams->headzone7temp); - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone7temp); - } - if (ProcessParams->headzone8temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone8temp); - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, false,ProcessParams->headzone8temp); - } - if (ProcessParams->headzone9temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, true,ProcessParams->headzone9temp); - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, false,ProcessParams->headzone9temp); - } - if (ProcessParams->headzone10temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, true,ProcessParams->headzone10temp); - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone10temp); - } - if (ProcessParams->headzone11temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone11temp); - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, false,ProcessParams->headzone11temp); - } - if (ProcessParams->headzone12temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, true,ProcessParams->headzone12temp); - } - else + if(Head_Type == HEAD_TYPE_SYLKO) { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, false,ProcessParams->headzone12temp); - } - if (ProcessParams->stspzone1temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->stspzone1temp); - } - else - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->stspzone1temp); - } - if (ProcessParams->stspzone2temp>1) - { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->stspzone2temp); + if (ProcessParams->headzone7temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, true,ProcessParams->headzone7temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone7temp); + } + if (ProcessParams->headzone8temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone8temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, false,ProcessParams->headzone8temp); + } + if (ProcessParams->headzone9temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, true,ProcessParams->headzone9temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, false,ProcessParams->headzone9temp); + } + if (ProcessParams->headzone10temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, true,ProcessParams->headzone10temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone10temp); + } + if (ProcessParams->headzone11temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone11temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, false,ProcessParams->headzone11temp); + } + if (ProcessParams->headzone12temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, true,ProcessParams->headzone12temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, false,ProcessParams->headzone12temp); + } } - else + if(Head_Type == HEAD_TYPE_STAPLE_SPUN) { - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->stspzone2temp); + if (ProcessParams->stspzone1temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->stspzone1temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->stspzone1temp); + } + if (ProcessParams->stspzone2temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->stspzone2temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->stspzone2temp); + } } HeatersStopControlOnHeatersOff(ProcessParams); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index a62d1b4b7..7eb621c81 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -389,6 +389,7 @@ uint32_t ThreadJoggingFunc(int speed) ProcessParametersCopy.dyeingspeed = 40; if (HandleProcessParameters(&ProcessParametersCopy,false)!= OK) { + Report("Process parameters handling failed", __FILE__, __LINE__, 0, RpWarning, 0, 0); status = FAILED; } else -- cgit v1.3.1 From b14dc1bc35994c4da27bd64e7de65ff66ae7ee0d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 18 Feb 2020 10:19:36 +0200 Subject: preparing rapid release --- .../Embedded/Common/SWUpdate/FileSystem.c | 28 +++-- Software/Embedded_SW/Embedded/DataDef.h | 4 +- .../Head_Card/EEPROM/Head_EEPROM.c | 4 +- .../Head_Card/PT100/Head_PT100_ADC.c | 88 +++++++------- Software/Embedded_SW/Embedded/Main.c | 6 +- .../Embedded/Modules/Control/MillisecTask.c | 2 +- .../Embedded/Modules/IDS/IDS_dispenser.c | 6 +- .../StateMachines/Initialization/InitSequence.c | 131 +++++++++++++++++++++ .../StateMachines/Initialization/InitSequence.h | 1 + 9 files changed, 200 insertions(+), 70 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 873c89b7e..e8d7f6f58 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -280,16 +280,22 @@ uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer) Fresult = FR_DENIED; else { - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); - Fresult = f_open(DownloadFileHandle,request->filename,FA_READ ); - if (Fresult == FR_OK) + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) { - response.has_maxchunklength = true; - response.maxchunklength = MAX_CHUNK_LENGTH; - strcpy(FileHandleChar, "1234"); - response.downloadid = FileHandleChar; //supporting only single file at each time. + Fresult = f_open(DownloadFileHandle,request->filename,FA_READ ); + if (Fresult == FR_OK) + { + response.has_maxchunklength = true; + response.maxchunklength = MAX_CHUNK_LENGTH; + strcpy(FileHandleChar, "1234"); + response.downloadid = FileHandleChar; //supporting only single file at each time. + Report("data request", __FILE__, 1234, MAX_CHUNK_LENGTH, RpWarning, (int)fno->fsize, 0); + } + else + { + Semaphore_post(FFS_Sem); + } } - } } @@ -323,10 +329,11 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer) Buffer = my_malloc (MAX_CHUNK_LENGTH); if (Buffer != NULL) { - Fresult = f_read(SentFileHandle,Buffer,2000,&ReadBytes ); + Fresult = f_read(SentFileHandle,Buffer,MAX_CHUNK_LENGTH,&ReadBytes ); if(Fresult != FR_OK) { - LOG_ERROR (Fresult,"f_write error"); + LOG_ERROR (Fresult,"f_read error"); + Semaphore_post(FFS_Sem); } else { @@ -334,6 +341,7 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer) response.buffer.len = ReadBytes; response.buffer.data = Buffer; FileSentLength += ReadBytes; + Report("sending data to MS", __FILE__, ReadBytes, FileSentLength, RpWarning, (int)FileLength, 0); if (FileSentLength == FileLength) { REPORT_MSG (FileSentLength,"file download ended successfully"); diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 32e149968..4f7a5d2dc 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -26,8 +26,8 @@ #define USE_POWERSTEP01 //#define SPECIAL_DISPENSERS -#define Use_Head_Card //for real card only -#define Use_WHS_Card //for real card only +//#define Use_Head_Card //for real card only +//#define Use_WHS_Card //for real card only //#define Test_headCard_With_DispCard_I2C4_Add0xE2_DispID_0 #define I2C_2_Data_Transfer_Rate_400kbps diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c index a2f003840..25c264755 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c @@ -128,12 +128,12 @@ uint32_t Check_Head_Type_Via_EEPROM() } //temporary - #ifdef Use_Head_Card +/* #ifdef Use_Head_Card Head_Type = HEAD_TYPE_SYLKO; #else Head_Type = HEAD_TYPE_SYLKO_WITHOUT_CARD; #endif - +*/ //TODO to test and replace #ifdef Use_Head_Card with if(Head_Type != HEAD_TYPE_SYLKO_WITHOUT_CARD) return status; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c index 47bbb7b60..4d8965de8 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c @@ -238,66 +238,60 @@ uint32_t HeadADCPT100_WriteReg(TEMPERATURE_SENSOR_ID_ENUM SensorId, uint8_t reg, return Status; } - - -#ifdef Use_Head_Card - uint8_t HeadADCPT100_InitConfigReg() { uint8_t i; - - for(i=HEAD_PT100_ZONE_1_0X80_0;i < MAX_HEAD_CARD_TEMP_SENS_ID;i++) // for now we are using the same configuration to all of them + if (Head_Type >= HEAD_TYPE_SYLKO)//adjust the limit switches { - // - - - - - - - - - - Reg0 - - - - - - - - - - - HeadTempSensConfig[i].Reg0.bits.PGA_BYPASS = ADS122X_USE_PGA ;//Bit 0 - HeadTempSensConfig[i].Reg0.bits.GAIN = ADS122X_GAIN_8 ;//Bits 1-3 - //HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 + for(i=HEAD_PT100_ZONE_1_0X80_0;i < MAX_HEAD_CARD_TEMP_SENS_ID;i++) // for now we are using the same configuration to all of them + { + // - - - - - - - - - - Reg0 - - - - - - - - - - + HeadTempSensConfig[i].Reg0.bits.PGA_BYPASS = ADS122X_USE_PGA ;//Bit 0 + HeadTempSensConfig[i].Reg0.bits.GAIN = ADS122X_GAIN_8 ;//Bits 1-3 + //HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 - // - - - - - - - - - - Reg1 - - - - - - - - - - + // - - - - - - - - - - Reg1 - - - - - - - - - - - HeadTempSensConfig[i].Reg1.bits.TS = ADS122X_TEMP_SENSOR_OFF ;//Bit 0 - HeadTempSensConfig[i].Reg1.bits.VREF = ADS122X_VREF_EXT_REF0_PINS ;//Bits 1-2 - HeadTempSensConfig[i].Reg1.bits.CM = ADS122X_CONVERSION_CONTINUOUS ;//Bit 3 - HeadTempSensConfig[i].Reg1.bits.MODE = ADS122X_OP_MODE_NORMAL ;//Bit 4 - HeadTempSensConfig[i].Reg1.bits.DR = ADS122X_DATA_RATE_20SPS ;//Bits 5-7 + HeadTempSensConfig[i].Reg1.bits.TS = ADS122X_TEMP_SENSOR_OFF ;//Bit 0 + HeadTempSensConfig[i].Reg1.bits.VREF = ADS122X_VREF_EXT_REF0_PINS ;//Bits 1-2 + HeadTempSensConfig[i].Reg1.bits.CM = ADS122X_CONVERSION_CONTINUOUS ;//Bit 3 + HeadTempSensConfig[i].Reg1.bits.MODE = ADS122X_OP_MODE_NORMAL ;//Bit 4 + HeadTempSensConfig[i].Reg1.bits.DR = ADS122X_DATA_RATE_20SPS ;//Bits 5-7 - // - - - - - - - - - - Reg2 - - - - - - - - - - + // - - - - - - - - - - Reg2 - - - - - - - - - - - HeadTempSensConfig[i].Reg2.bits.IDAC = ADS122X_IDAC_CURRENT_1000_UA ;//Bits 0-2 - HeadTempSensConfig[i].Reg2.bits.BCS = ADS122X_BCS_CURRENT_SOURCES_OFF ;//Bit 3 - HeadTempSensConfig[i].Reg2.bits.CRC = ADS122X_CRC_DISABLED ;//BitS 4-5 - HeadTempSensConfig[i].Reg2.bits.DCNT = ADS122X_DCNT_CONVERSION_COUNTER_DISABLED ;//Bit 6 - HeadTempSensConfig[i].Reg2.bits.DRDY = ADS122X_DRDY_NO_NEW_CONVERSION ;//Bit 7 + HeadTempSensConfig[i].Reg2.bits.IDAC = ADS122X_IDAC_CURRENT_1000_UA ;//Bits 0-2 + HeadTempSensConfig[i].Reg2.bits.BCS = ADS122X_BCS_CURRENT_SOURCES_OFF ;//Bit 3 + HeadTempSensConfig[i].Reg2.bits.CRC = ADS122X_CRC_DISABLED ;//BitS 4-5 + HeadTempSensConfig[i].Reg2.bits.DCNT = ADS122X_DCNT_CONVERSION_COUNTER_DISABLED ;//Bit 6 + HeadTempSensConfig[i].Reg2.bits.DRDY = ADS122X_DRDY_NO_NEW_CONVERSION ;//Bit 7 - // - - - - - - - - - - Reg3 - - - - - - - - - - - HeadTempSensConfig[i].Reg3.bits.Always_write_0 = ADS122X_RESERVED_WRITE_0 ;//BitS 0-1 Always write 0 - HeadTempSensConfig[i].Reg3.bits.I2MUX = ADS122X_IDAC2_AIN3 ;//Bits 2-4 - HeadTempSensConfig[i].Reg3.bits.I1MUX = ADS122X_IDAC1_AIN0 ;//Bits 5-7 + // - - - - - - - - - - Reg3 - - - - - - - - - - + HeadTempSensConfig[i].Reg3.bits.Always_write_0 = ADS122X_RESERVED_WRITE_0 ;//BitS 0-1 Always write 0 + HeadTempSensConfig[i].Reg3.bits.I2MUX = ADS122X_IDAC2_AIN3 ;//Bits 2-4 + HeadTempSensConfig[i].Reg3.bits.I1MUX = ADS122X_IDAC1_AIN0 ;//Bits 5-7 - } + } - for(i=HEAD_PT100_ZONE_1_0X80_0;i < HEAD_PT100_ZONE_2_0X80_1;i++) - { - HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 - HeadTempSensConfig[i].SEL = HEAD_CONFIG_ODD_PT100_PT_SEL; - } + for(i=HEAD_PT100_ZONE_1_0X80_0;i < HEAD_PT100_ZONE_2_0X80_1;i++) + { + HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 + HeadTempSensConfig[i].SEL = HEAD_CONFIG_ODD_PT100_PT_SEL; + } - for(i=HEAD_PT100_ZONE_2_0X80_1;i < HEAD_PT100_RESERVE_0X8E_1;i++) - { - HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_EVEN_PT100_MUX ;//Bits 4-7 - HeadTempSensConfig[i].SEL = HEAD_CONFIG_EVEN_PT100_PT_SEL; - } + for(i=HEAD_PT100_ZONE_2_0X80_1;i < HEAD_PT100_RESERVE_0X8E_1;i++) + { + HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_EVEN_PT100_MUX ;//Bits 4-7 + HeadTempSensConfig[i].SEL = HEAD_CONFIG_EVEN_PT100_PT_SEL; + } - HeadTempSensConfig[i].Config = 0; + HeadTempSensConfig[i].Config = 0; - HeadTempSensConfig[i].MUX_Status = UNKNOWN; + HeadTempSensConfig[i].MUX_Status = UNKNOWN; - return OK; -} -#else - uint8_t HeadADCPT100_InitConfigReg() + } + else { - uint8_t i; for(i=HEAD_PT100_ZONE_1_0X80_0;i= MAX_MAIN_CARD_TEMPERATURE_SENSOR_ID) Sensor_Read = 0; if(Machine_Idle_Mode == true) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index f43cf8c56..6e4eed580 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -27,9 +27,9 @@ uint32_t CloseValveTimeout = 10; uint32_t OpenValveTimeout = 10; -#define DISPENSER_BUILD_PRESSURE_SPEED 900 -#define DISPENSER_BUILD_PRESSURE_LIMIT 1.5 -#define DISPENSER_BUILD_PRESSURE_TIMEOUT 60000 +#define DISPENSER_BUILD_PRESSURE_SPEED 940 +#define DISPENSER_BUILD_PRESSURE_LIMIT 1.0 +#define DISPENSER_BUILD_PRESSURE_TIMEOUT 120000 #define DISPENSER_BUILD_PRESSURE_LAG 50 #define DEFAULT_NANOLITER_PER_PULSE 2.34 uint32_t DispenserPrepareSpeed = DISPENSER_BUILD_PRESSURE_SPEED; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index d1f667405..ba3a3e1a7 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -28,6 +28,7 @@ #include "drivers/I2C_Communication/DAC/Blower.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "drivers/adc_sampling/adc.h" #include "drivers/Valves/Valve.h" #include "heaters/heaters_ex.h" @@ -39,6 +40,7 @@ INIT_SEQUENCE_BUILT_IN_TEST, INIT_SEQUENCE_INITIAL_BLOWER_ACTIVATION, //INIT_SEQUENCE_DISPENSER_PRESSURE_BUILDUP_TEST, + INIT_SEQUENCE_POWER_MANAGEMENT_INIT, INIT_SEQUENCE_WAIT_FOR_COOLER, INIT_SEQUENCE_THREAD_DETECTION, INIT_SEQUENCE_START_HEATING, @@ -208,6 +210,132 @@ uint32_t InitSequenceBlowerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //InitSequenceStateMachine(InitStages); return OK; } +/////////////////////////////////////////////////////////////////////////////////////////////////////// +#define MAX_CURRENT_READING 5 +#define CURRENT_READING_ERROR_UNSTABLE 100 +int Heater_Current[MAX_CURRENT_READING] ; +bool initial_wait = false; +int count_Heater_Current = 0; +int Maxcount_Heater_Current = 0; +bool MainHeaterStable = false,SecondaryHeaterStable = false; +double MainCurrent,SecondaryCurrent,StableCurrent; +double InitDrierAcVoltage = 0.0; +int InitDrierAcVoltageCount = 0; +double Zone2Resistance = 0.0; +void InitCurrentReadingStable(void) +{ + memset(Heater_Current,0,sizeof(Heater_Current)); + initial_wait = false; + count_Heater_Current = 0; + Maxcount_Heater_Current = 0; + StableCurrent = 0.0; +} + +bool DetectIfCurrentReadingStable(double HeaterCurrent) +{ + bool ret = false; + int i=0; + int sum = 0; + int average = 0; + + Maxcount_Heater_Current++; + Heater_Current[count_Heater_Current++] = HeaterCurrent; + if ( count_Heater_Current >= 5) + { + count_Heater_Current = 0; + initial_wait = true; + } + if (initial_wait == false) + return false; + for (i=0;i=CURRENT_READING_ERROR_UNSTABLE) + { + ReportWithPackageFilter(InitFilter,"drier heaters current not stable", __FILE__,__LINE__,(int)(StableCurrent*100), RpMessage, Maxcount_Heater_Current, 0); + if (SafeRemoveControlCallback(HWControlId, PowerManagementCallBack )==OK) + HWControlId = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)PowerManagementCallBack,0); + AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE,ON); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); + InitStages++; + } + else //go to secondary + { + if ((SecondaryHeaterStable == false)&&(Maxcount_Heater_Current=CURRENT_READING_ERROR_UNSTABLE) + AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE,ON); + InitStages++; + } + } + } +return OK; +} +uint32_t InitSequencePowerManagementInit(void) +{ + InitCurrentReadingStable(); + ActivateHeater(HEATER_TYPE__DryerMainHeater); + HWControlId = AddControlCallback("Init Power", PowerManagementCallBack, eHundredMillisecond, TemplateDataReadCBFunction,0,0, 0 ); + ReportWithPackageFilter(InitFilter,"starting main heater ", __FILE__,__LINE__,(int)(StableCurrent*100), RpMessage, Maxcount_Heater_Current, 0); + return OK; +} uint32_t InitSequenceInitialBlowerActivation(void) { MachineStateDetail = MACHINE_STATE_INITIAL_BLOWER_ACTIVATION; @@ -385,6 +513,9 @@ uint32_t InitSequenceStateMachine( INIT_SEQUENCE_STAGES_ENUM ReadValue) case INIT_SEQUENCE_INITIAL_BLOWER_ACTIVATION: InitSequenceInitialBlowerActivation(); break; + case INIT_SEQUENCE_POWER_MANAGEMENT_INIT: + InitSequencePowerManagementInit(); + break; /*case INIT_SEQUENCE_DISPENSER_PRESSURE_BUILDUP_TEST: InitSequenceDispenserPressureBuildUpTest(); break;*/ diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h index 105537721..f65329c4b 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h @@ -33,6 +33,7 @@ void StopInitSequence(void); MACHINE_STATE_STAGES_ENUM GetMachineState(void); void SetMachineState(MACHINE_STATE_STAGES_ENUM); void InitSequenceSetStartHeating(bool StartHeating); +double GetZone2RMSCurrent(double VAC); #endif /* STATEMACHINES_INITIALIZATION_INITSEQUENCE_H_ */ -- cgit v1.3.1 From 22b961e296ebfeaf75d55987af8a4937d3d11217 Mon Sep 17 00:00:00 2001 From: Shai Frieder Date: Tue, 18 Feb 2020 10:57:08 +0200 Subject: remove WHS_FAN prints add print to tachboard avarage flow --- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 31 ++++--- .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 2 +- .../WHS_Card/D_EMC2302_Fan/WHS_Fan.c | 4 +- .../WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c | 14 +-- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 89 +++++++++++++------ .../WHS_Card/D_TCA9546_ADC_MUX/TCA9546_Driver.c | 2 +- .../Embedded/Modules/Control/MillisecTask.c | 2 +- .../Embedded/Modules/Stubs_Handler/Progress.c | 99 +++++++++++----------- 8 files changed, 144 insertions(+), 99 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') 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 27ae72084..a606a475d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -302,17 +302,17 @@ void Trigger_SetWHSBlowerVoltage (uint16_t voltage) return; } -void Trigger_WHS_Set_Blower_Control_Closed_Loop (uint32_t setpoint_Q) -{ - I2C_ReadingMessageStruc I2C_ReadingMessage; - - I2C_ReadingMessage.messageId = WHS_SETPOINT_Q_BLOWER; - I2C_ReadingMessage.parameter = setpoint_Q; - - if (I2C_ReadingMsgQ != NULL) - Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); - return; -} +//void Trigger_WHS_Set_Blower_Control_Closed_Loop (uint32_t setpoint_Q) +//{ +// I2C_ReadingMessageStruc I2C_ReadingMessage; +// +// I2C_ReadingMessage.messageId = WHS_SETPOINT_Q_BLOWER; +// I2C_ReadingMessage.parameter = setpoint_Q; +// +// if (I2C_ReadingMsgQ != NULL) +// Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); +// return; +//} //void Trigger_WHS_Set_Valve(uint8_t valve_number, bool status) @@ -514,11 +514,10 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) WHS_Set_Volt_Blower_Control(I2C_ReadingMessage.parameter); //(fan_number, 0x20) break; - case WHS_SETPOINT_Q_BLOWER: - - dbl_setpoint_Q = (double)(I2C_ReadingMessage.parameter / 100) ; - WHS_Set_Blower_Control_Closed_Loop(dbl_setpoint_Q); - break; +// case WHS_SETPOINT_Q_BLOWER: +// dbl_setpoint_Q = (double)(I2C_ReadingMessage.parameter / 100) ; +// WHS_Set_Blower_Control_Closed_Loop(dbl_setpoint_Q); +// break; case WHS_SET_VAlVE_CARTRIDGE: // Set_WHS_valve(VALVE_0, I2C_ReadingMessage.parameter, 0); 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 b16e87766..c34191c0a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -27,7 +27,7 @@ void Trigger_WHS_PT100_Read_All(void); void Trigger_ReadWHSPT100(uint8_t PT100_Id); //void Trigger_WHS_Set_Volt_Blower_Control(uint16_t volt); void Trigger_SetWHSBlowerVoltage (uint16_t voltage); -void Trigger_WHS_Set_Blower_Control_Closed_Loop (uint32_t setpoint_Q); +//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_SetWHSValveWatseCartridge(uint8_t Cart_Id); //void Trigger_WHS_Set_Pump(bool status); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c index ab7ea8303..b3d967ad3 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c @@ -72,7 +72,7 @@ bool Select_WHS_Fan_Mux_Channel(WHS_fan_num fan_number) // { // return status; // } - ReportWithPackageFilter(WasteFilter,"------------ select fan MUX (fan_number)-----------------", __FILE__,__LINE__,fan_number, RpMessage, 0, 0); + //ReportWithPackageFilter(WasteFilter,"------------ select fan MUX (fan_number)-----------------", __FILE__,__LINE__,fan_number, RpMessage, 0, 0); switch (fan_number) { case FAN1: @@ -122,7 +122,7 @@ bool WHS_Read_fan_tach(WHS_fan_num fan_number) bool status = OK; uint8_t fan_driver = 0; - fan_driver = Select_Fan_Driver(fan_number); + fan_driver = Select_Fan_Driver(fan_number); status = Select_Main_WHS_Mux_Channel(); Select_WHS_Fan_Mux_Channel(fan_number); 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 58f2878ef..bf95c8444 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 @@ -181,16 +181,17 @@ 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 Sqrt = 0; double calc = 0; - int16_t tmp = num; + int16_t tmp = num-V0; if (tmp<0) tmp = 0; Sqrt = sqrt((double)tmp); - calc = Aorf_ofset + Corf_flow*Sqrt; + calc = Corf_flow*Sqrt; ReportWithPackageFilter(WasteFilter,"------------ calc Q value (calc)-----------------", __FILE__,__LINE__, calc, RpMessage, num, 0); return calc; } @@ -273,16 +274,19 @@ uint16_t Orf_zero_value[HEAD_FLOW_METER+1] = {1112,0,1040}; double GetWHSAirFlow(uint8_t OR_Id) { uint16_t value = 0; + double Q_value = 0 ; switch (OR_Id) { case DRIER_FLOW_METER: - get_orf_1(&value); + //get_orf_1(&value); + Q_value = get_average_ORF1_Q(); break; case NU_FLOW_METER: get_orf_2(&value); break; case HEAD_FLOW_METER: - get_orf_3(&value); + //get_orf_3(&value); + Q_value = get_average_ORF3_Q(); break; default: break; @@ -290,7 +294,7 @@ double GetWHSAirFlow(uint8_t OR_Id) ReportWithPackageFilter(WasteFilter,"------------ GetWHSAirFlow -----------------",__FILE__, OR_Id, (int)value, RpWarning, (int) Orf_zero_value[OR_Id], 0); - return get_Q((int16_t)value-Orf_zero_value[OR_Id]); + return Q_value ;//get_Q((int16_t)value-Orf_zero_value[OR_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 28b4f8598..384e3cd59 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 @@ -26,6 +26,8 @@ double average_orf3_Q_buff[ORF_BUFF_SIZE] = {0}; double average_Q_orifice1; double average_Q_orifice3; +bool ORF1_flageNewBlowerValue; +bool ORF3_flageNewBlowerValue; int32_t i2c_smbus_write_word_data(int i2cFileDescriptor, uint8_t command_regAddress, uint16_t regValue) { @@ -115,6 +117,8 @@ 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); } @@ -190,21 +194,38 @@ double WHS_Blower_Avarege_ORF1() static uint8_t i = 0 ; static double sum_orifice_Q = 0; uint16_t orifice_hex_value = 0; + double Q_temp = 0 ; - if (i == ORF_BUFF_SIZE) + get_orf_1( &orifice_hex_value ); + if (ORF1_flageNewBlowerValue) { - i = 0; + 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); } else { - i += 1; + if (i == ORF_BUFF_SIZE) + { + i = 0; + } + else + { + i += 1; + } + sum_orifice_Q -= average_orf1_Q_buff[i]; + get_orf_1(&orifice_hex_value ); + 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_orifice3 hex head -----------------", __FILE__,__LINE__,(int)orifice_hex_value, RpMessage, (average_Q_orifice3*1000), 0); } - sum_orifice_Q -= average_orf1_Q_buff[i]; - get_orf_1(&orifice_hex_value ); - 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; return average_Q_orifice1; } @@ -213,23 +234,39 @@ 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 ; - if (i == ORF_BUFF_SIZE) + get_orf_3( &orifice_hex_value ); + if (ORF3_flageNewBlowerValue) { - i = 0; + 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); + } else { - i += 1; + 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; } - sum_orifice_Q -= average_orf3_Q_buff[i]; - get_orf_3( &orifice_hex_value ); //average_orf1_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; ReportWithPackageFilter(WasteFilter,"------------ average_Q_orifice3 hex head -----------------", __FILE__,__LINE__,(int)orifice_hex_value, RpMessage, (average_Q_orifice3*1000), 0); - return OK; + return average_Q_orifice3; } double get_average_ORF1_Q() @@ -274,7 +311,7 @@ bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint_Q) current_dying_head_flow_Q = get_average_ORF3_Q(); 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); - if (abs(current_dying_head_flow_Q - SetPoint_Q) > 0.2) + while (abs(current_dying_head_flow_Q - SetPoint_Q) > 0.2) { volt = getBlowerState(); if (current_dying_head_flow_Q < SetPoint_Q) @@ -283,13 +320,15 @@ bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint_Q) { /* 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 ); + //WHS_Set_Volt_Blower_Control( volt + LARGE_STEP );//call func :Control_Voltage_To_Blower + Control_Voltage_To_Blower(volt + LARGE_STEP); } 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 ); + //WHS_Set_Volt_Blower_Control( volt + SMALL_STEP ); + Control_Voltage_To_Blower(volt + SMALL_STEP); } } else @@ -298,13 +337,15 @@ bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint_Q) { /* 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); + //WHS_Set_Volt_Blower_Control(volt - LARGE_STEP); + Control_Voltage_To_Blower(volt - LARGE_STEP); } 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 ); + //WHS_Set_Volt_Blower_Control( volt - SMALL_STEP ); + Control_Voltage_To_Blower(volt - SMALL_STEP); } } } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_TCA9546_ADC_MUX/TCA9546_Driver.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_TCA9546_ADC_MUX/TCA9546_Driver.c index a472fb9eb..f7fe99aed 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_TCA9546_ADC_MUX/TCA9546_Driver.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_TCA9546_ADC_MUX/TCA9546_Driver.c @@ -37,7 +37,7 @@ bool D_TCA9546_Select_Channel(uint8_t TCA9546A_I2C_bus_number, uint8_t TCA9546A_ } Write_Buf[0]=chnl_number; status |= I2C_Write(TCA9546A_I2C_bus_number, TCA9546A_I2C_addr, Write_Buf, 1); - ReportWithPackageFilter(WasteFilter,"------------ Select I2C Channel (chnl_number)-----------------", __FILE__,__LINE__, chnl_number, RpMessage, status, 0); + // ReportWithPackageFilter(WasteFilter,"------------ Select I2C Channel (chnl_number)-----------------", __FILE__,__LINE__, chnl_number, RpMessage, status, 0); return status; } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index e5064ef70..a36a19928 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -720,7 +720,7 @@ uint32_t MillisecLowLoop(uint32_t tick) } Trigger_WHS_PT100_Read_All(); Trigger_WHS_MAX11614_Read_allADC(); -// WHS_Blower_Avarege_ORF1(); //drier + WHS_Blower_Avarege_ORF1(); //drier WHS_Blower_Avarege_ORF3(); //head Trigger_WHSReadAllFanTacho (); } diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 677d3fa5f..c84566659 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -107,64 +107,65 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) } } else - if((request->amount == 0x3E8) && (request->delay <= 0x0fff))// set WHS Blower speed 0x00-0xfff - { - if (WHS_Type == WHS_TYPE_NEW) + if((request->amount == 0x3E8) && (request->delay <= 0x0fff))// set WHS Blower speed 0x00-0xfff { - Trigger_SetWHSBlowerVoltage (request->delay); - response.progress = 0; - response.has_progress = true; - } //Trigger_WHS_Set_Volt_Blower_Control(request->delay); - } + if (WHS_Type == WHS_TYPE_NEW) + { + Trigger_SetWHSBlowerVoltage (request->delay); + response.progress = 0; + response.has_progress = false; + } + } else if (request->amount == 0x3E7) // set WHS Blower speed by Q value { if (WHS_Type == WHS_TYPE_NEW) { - Trigger_WHS_Set_Blower_Control_Closed_Loop (request->delay); + WHS_Set_Blower_Control_Closed_Loop (request->delay); response.progress = 0; - response.has_progress = true; - } //Trigger_WHS_Set_Volt_Blower_Control(request->delay); + response.has_progress = false; + } } - else if(request->amount == 0x3EA) - { - uint16_t tempu16 = 0; - if (WHS_Type == WHS_TYPE_NEW) - { - switch(request->delay )// set WHS Blower speed 0x00-0xfff - { - case 0: - get_orf_1(&tempu16); - break; - case 1: - get_orf_2(&tempu16); - break; - case 2: - get_orf_3(&tempu16); - break; - case 3: - get_vlev1(&tempu16); - break; - case 4: - get_vlev2(&tempu16); - break; - case 5: - get_gas_out(&tempu16); - break; - case 6: - get_cur_fan(&tempu16); - break; - case 7: - get_cur_vlv1(&tempu16); - break; - case 8: - tempu16 = 0; //get_cur_vlv2(&tempu16); - break; - default : - tempu16 = 0x500; //get_cur_vlv2(&tempu16); - break; + else + if(request->amount == 0x3EA) + { + uint16_t tempu16 = 0; + if (WHS_Type == WHS_TYPE_NEW) + { + switch(request->delay )// set WHS Blower speed 0x00-0xfff + { + case 0: + get_orf_1(&tempu16); + break; + case 1: + get_orf_2(&tempu16); + break; + case 2: + get_orf_3(&tempu16); + break; + case 3: + get_vlev1(&tempu16); + break; + case 4: + get_vlev2(&tempu16); + break; + case 5: + get_gas_out(&tempu16); + break; + case 6: + get_cur_fan(&tempu16); + break; + case 7: + get_cur_vlv1(&tempu16); + break; + case 8: + tempu16 = 0; //get_cur_vlv2(&tempu16); + break; + default : + tempu16 = 0x500; //get_cur_vlv2(&tempu16); + break; + } } - } response.progress = (double)tempu16; response.has_progress = true; } -- cgit v1.3.1 From 94fccc66fd2b8b6aed1371546dfd8cef68d5e60d Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Wed, 19 Feb 2020 10:29:19 +0200 Subject: Update Actuator + ControlLowLoop Stub: stubManager.Run("ProgressRequest" ,0xFEAD, 0xCAF101); //Actuators: ID, power, Direction (01 = UP) --- .../I2C_Communication/Head_Card/IO_Ports/Head_IO.c | 26 +++++++++++++--------- .../Embedded_SW/Embedded/Modules/Control/control.c | 2 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 5 +++-- .../Embedded/Modules/Stubs_Handler/Progress.c | 4 ++-- 4 files changed, 21 insertions(+), 16 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index d31d0479a..cc4b34857 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -324,28 +324,33 @@ uint32_t HeadCard_Valve_Control(bool Direction) } */ uint32_t ActControlId = 0xFF; -ACTUATORS Global_Act_ID; -uint32_t HeadCard_ActuatorsCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +char Global_Act_Cmd_flag = 0; //Sync - prevent reset from previous command + + +uint32_t HeadCard_ActuatorsCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID { uint32_t status = OK; static uint8_t Counter = 0; + static char Act_Cmd_flag = 0; + + Act_Cmd_flag++;//prevent reset from previous command + uint32_t Motion_Status = STOPPED; - ACTUATORS Act_ID = Global_Act_ID; + ACTUATORS Act_ID = (ACTUATORS) IfIndex; if (SafeRemoveControlCallback(ActControlId, HeadCard_ActuatorsCallBackFunction )==OK) ActControlId = 0xFF; else Report("Remove control callback failed",__FILE__,__LINE__,(int)ActControlId,RpWarning,(int)HeadCard_ActuatorsCallBackFunction,0); - ///************** do your stuff //Read movement status Motion_Status = HeadCard_Actuators_Status(Act_ID); - if(Motion_Status == MOVING) + if((Motion_Status == MOVING) && (Global_Act_Cmd_flag == Act_Cmd_flag)) { //RST Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x00;//Disable movement @@ -374,8 +379,6 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) { uint32_t status = OK; - Global_Act_ID = Act_ID; - if(Act_ID == ACTIN)//0 { Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = LOW; @@ -389,8 +392,7 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) status |= Head_Write_IO_Reg(0x46,LOW_AND_HIGH); - //Task_sleep(500); - delayms(750); + Task_sleep(500); if(Act_ID == ACTIN)//0 { @@ -402,8 +404,10 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) } status |= Head_Write_IO_Reg(0x46,HIGH); - //5sec delay - Timeout - ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (2* eOneSecond), TemplateDataReadCBFunction,0,0, 0 ); + Global_Act_Cmd_flag++;//Sync the callback to the command + + //3sec delay - Timeout + ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); return status; } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index ba11ff58c..bea68e314 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -585,7 +585,7 @@ uint32_t ControlLowLoop(uint32_t tick) { if (ControlArray[ControlLowDevice_i].ControlActive) { - if (tick == ControlArray[ControlLowDevice_i].StartTick) + if (tick - ControlArray[ControlLowDevice_i].StartTick<=skipped_ticks) continue; if (ControlArray[ControlLowDevice_i].ControlTiming == eOneMillisecond) continue; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 4f5bec4f0..36d4505d0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -315,10 +315,11 @@ uint32_t DiagnosticsLoadDigitalValues(void) DigitalOutputState[index++].value = ReadHeadMagnetBit(); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_LED3; - DigitalOutputState[index++].value = HeadCard_Actuators_Status(ACTIN); + //DigitalOutputState[index++].value = HeadCard_Actuators_Status(ACTIN); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_LED4; - DigitalOutputState[index++].value = HeadCard_Actuators_Status(ACTOT); + // indication of movement cause the switch in the tech board to change, also doesn't go through the task + //DigitalOutputState[index++].value = HeadCard_Actuators_Status(ACTOT); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPI_WCONTAINER_FULL; DigitalOutputState[index++].value = WHS_IsContainerFull(); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 677d3fa5f..51fe807d8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -391,8 +391,8 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if((request -> delay & 0xFFF000) == 0xCAF000)//Actuator { - //HeadCard_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), /*(bool)((request -> delay & 0x10)>>4), */(bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction - Trigger_Head_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), (bool)((request -> delay & 0x10)>>4), (bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction + HeadCard_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), /*(bool)((request -> delay & 0x10)>>4), */(bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction + //Trigger_Head_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), (bool)((request -> delay & 0x10)>>4), (bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction //response.progress = HeadCard_Actuators_Status((ACTUATORS)((request -> delay) & 0x100)>>8); response.has_progress = true; } -- cgit v1.3.1 From 096bd938ce5a1c3643695bc8f6818e8e1fd3c064 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 19 Feb 2020 11:30:46 +0200 Subject: bug fixes before version 1.4.6.12 --- .../Embedded/Common/SWUpdate/FileSystem.c | 4 +- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 2 + .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 8 +++ Software/Embedded_SW/Embedded/Embedded.cfg | 4 +- Software/Embedded_SW/Embedded/Main.c | 3 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 29 ++++++++-- .../Embedded/Modules/Control/MillisecTask.c | 6 ++- .../Embedded/Modules/Diagnostics/Diagnostics.c | 2 +- .../Embedded/Modules/General/GeneralHardware.c | 15 ++++++ .../Embedded/Modules/General/GeneralHardware.h | 2 + .../Embedded/Modules/Stubs_Handler/Progress.c | 63 ++++++++++++++++++++-- 11 files changed, 121 insertions(+), 17 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 e8d7f6f58..15e845527 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -49,7 +49,7 @@ FIL *UploadFileHandle = 0; //the system supports a single active file FIL *DownloadFileHandle = 0; //the system supports a single active file char FileHandleChar[5]; char ErrorMsg[100]; -#define MAX_CHUNK_LENGTH 5500 +#define MAX_CHUNK_LENGTH 4000 int32_t FileLength = 0; int32_t FileReceivedLength = 0; int32_t FileSentLength = 0; @@ -100,7 +100,7 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) { CommRxTaskHandle = Task_self(); - Task_setPri(CommRxTaskHandle, 3); + Task_setPri(CommRxTaskHandle, 2); // Report("Task_setPri", __FILE__, __LINE__, 4, RpWarning, (int)CommRxTaskHandle, 0); //Report("FileUploadRequestFunc 2", __FILE__, __LINE__, msec_millisecondCounter, RpWarning, (int)0, 0); Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS); diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 24f02f60c..4bbe44aea 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -165,6 +165,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename); Fresult = f_unlink("//SYSINFO//PROCESSP.CFG"); Fresult |= f_rename (FullPath, "//SYSINFO//PROCESSP.CFG"); + LoadProcessParamsFromFile(); CurrentRunningFile++; break; case VERSION_FILE_DESTINATION__AlarmParams: @@ -180,6 +181,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename); Fresult = f_unlink("//SYSINFO//GENHWCFG.CFG"); Fresult |= f_rename (FullPath, "//SYSINFO//GENHWCFG.CFG"); + HWConfigurationLoadFile(); CurrentRunningFile++; break; default: 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 c6b8dbf39..40f6fce5e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -396,9 +396,17 @@ void Trigger_WHS_I2C_EEprom_Read(uint32_t address, uint16_t size, uint8_t *p_dat Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); return; } +void I2C_ReadingTask(UArg arg0, UArg arg1); void I2C_ReadingTask_Init(void) { + Task_Params taskParams; + I2C_ReadingMsgQ = Mailbox_create(sizeof(I2C_ReadingMessageStruc), 40, NULL,NULL); + Task_Params_init(&taskParams); + taskParams.instance->name = "I2C_Reading"; + taskParams.priority = 8; + taskParams.stackSize = 2048; + I2C_Task_Handle = Task_create((Task_FuncPtr)I2C_ReadingTask, &taskParams, NULL); } void I2C_ReadingTask(UArg arg0, UArg arg1) diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index 734902ce7..a9a958a55 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -132,12 +132,12 @@ ProcessTaskParams.stackSize = 4096; ProcessTaskParams.priority = 9; Program.global.process = Task.create("&jobTask", ProcessTaskParams); -var I2C_Reading = new Task.Params(); +/*var I2C_Reading = new Task.Params(); I2C_Reading.instance.name = "I2C_Reading"; I2C_Reading.stackSize = 2048; I2C_Reading.priority = 8; Program.global.I2C_Reading = Task.create("&I2C_ReadingTask", I2C_Reading); - +*/ var HeaterControlTaskParams = new Task.Params(); HeaterControlTaskParams.instance.name = "HeatersControl"; HeaterControlTaskParams.priority = 7; diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 803a22cc4..604fc73fb 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -300,7 +300,8 @@ int main(void) //ActivateHeadMagnet(); Set_Speed_Sensor_TypeII_Registers(10,5);//set default values #endif - I2C_ReadingTask_Init(); + if ((Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)||(WHS_Type == WHS_TYPE_NEW)) + I2C_ReadingTask_Init(); //EMAC_initEMAC(); ControlInit(); diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index e06e908bd..22cc33822 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -1566,7 +1566,7 @@ void SendEventNotifications(void) } EventsResponse.n_events = 0; - UInt Key = Task_disable(); + //UInt Key = Task_disable(); for (i = 0;i EventsResponse.n_events) + { + ReportWithPackageFilter(AlarmFilter,"Error in alarm numbers - large ", __FILE__,__LINE__,EventsResponse.n_events, RpFatalError, e, 0); + break; + } } } } + if (e!=EventsResponse.n_events) + { + ReportWithPackageFilter(AlarmFilter,"Error in alarm numbers - small ", __FILE__,__LINE__,EventsResponse.n_events, RpFatalError, e, 0); + EventsResponse.n_events = e; + } } else { LOG_ERROR(EventsResponse.n_events,"events malloc error"); - Task_restore(Key); + //Task_restore(Key); return; } } @@ -1609,7 +1619,7 @@ void SendEventNotifications(void) { EventsResponse.events = NULL; } - Task_restore(Key); + //Task_restore(Key); responseContainer = createAllocatedContainer(MESSAGE_TYPE__StartEventsNotificationResponse, AlarmHandlingToken, false, &EventsResponse, &start_events_notification_response__pack, &start_events_notification_response__get_packed_size,&alarm_response_buffer); responseContainer.has_continuous = true; responseContainer.continuous = true; @@ -1670,11 +1680,22 @@ uint32_t StartEventsNotificationRequestFunc(MessageContainer* requestContainer) // ReportInitParams InitParams; //ControlStart(); EventsNotificationRequestAccepted = true; - //AlarmHandlingStart(); + AlarmHandlingStart(); + MessageContainer responseContainer; + + StartEventsNotificationResponse response = START_EVENTS_NOTIFICATION_RESPONSE__INIT; StartEventsNotificationRequest* request = start_events_notification_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ustrncpy (AlarmHandlingToken, requestContainer->token,36); start_events_notification_request__free_unpacked(request,NULL); + + responseContainer = createContainer(MESSAGE_TYPE__StartEventsNotificationResponse, AlarmHandlingToken, false, &response, &start_events_notification_response__pack, &start_events_notification_response__get_packed_size); + responseContainer.has_continuous = true; + responseContainer.continuous = true; + uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + SendChars(container_buffer, container_size); return status; } uint32_t StopEventsNotificationRequestFunc(MessageContainer* requestContainer) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 2c7512129..dec526668 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -569,6 +569,7 @@ void setRapidPressureRead(bool value) } uint16_t PumpCounter = 0; +uint16_t realtimetest[101]; uint32_t MillisecLowLoop(uint32_t tick) { uint8_t Motor_i,Disp_i,temp; @@ -598,6 +599,7 @@ uint32_t MillisecLowLoop(uint32_t tick) Onesecond_Tick = (tick%eOneSecond == 0) ?true:false; OneMinute_Tick = (tick%eOneMinute == 0) ?true:false; OneHourTick = (tick%eOneHour == 0) ?true:false; + realtimetest[(tick%1000)/10]++; //gather Motor data from FPGA //ROM_IntMasterDisable(); int StartPT100 = 0; @@ -720,8 +722,8 @@ uint32_t MillisecLowLoop(uint32_t tick) } Trigger_WHS_PT100_Read_All(); Trigger_WHS_MAX11614_Read_allADC(); - WHS_Blower_Avarege_ORF1(); //drier - WHS_Blower_Avarege_ORF3(); //head + //WHS_Blower_Avarege_ORF1(); //drier + //WHS_Blower_Avarege_ORF3(); //head Trigger_WHSReadAllFanTacho (); } if (OneMinute_Tick) diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 63fe510c4..0764b2028 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -446,7 +446,7 @@ void DiagnosticOneMinuteCollection(void) } DiagnosticsMonitor.n_overalltemperature = 1; OverallTemperature = max(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1),MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)); - OverallTemperature = ((int)(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1))*10 + (int)(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)/100)); + OverallTemperature = ((int)(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1)/100)*1000 + (int)(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)/100)); DiagnosticsMonitor.overalltemperature = &OverallTemperature; DiagnosticsMonitor.n_midtank1level = 1; diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 4f6a40c90..e4667a95f 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -717,6 +717,21 @@ uint32_t LoadConfigurationParamsFromFile(bool Initialize) } return Fresult; } +void HWConfigurationLoadFile(void) +{ + FRESULT Fresult = FR_OK; + uint8_t* buffer = NULL; + uint32_t Bytes = 0; + buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config + if (buffer) + { + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); + free (buffer); + FlashInitResults[0] = true; + } + Report("Hardware Initialized", __FILE__,__LINE__,Bytes, RpMessage, GENHWCFG_MAP_IN_FLASH, 0); +} void FlashInitAndLoad(void) { FRESULT Fresult = FR_OK; diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h index 76e4d4414..55490a140 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h @@ -17,6 +17,8 @@ extern void HWSystemResetRequest(MessageContainer* requestContainer); uint32_t HWConfigurationInit(void); void FlashInitAndLoad(void); uint32_t LoadConfigurationParamsFromFile(bool); +void HWConfigurationLoadFile(void); + extern HardwareBlower BlowerCfg; extern bool DataUpdated; diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index d3a97bf3a..98fb74ea7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -126,13 +126,25 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = false; } } + else + if (request->amount == 0x3E6) // get WHS Blower speed by Q value + { + if (WHS_Type == WHS_TYPE_NEW) + { + response.progress = WHS_Get_Volt_Blower_Control(); + //response.progress = 0; + response.has_progress = true; + } + } + // WHS_Get_Volt_Blower_Control else if(request->amount == 0x3EA) { uint16_t tempu16 = 0; + double temp_double = 0.0; if (WHS_Type == WHS_TYPE_NEW) { - switch(request->delay )// set WHS Blower speed 0x00-0xfff + switch(request->delay )// get A2D { case 0: get_orf_1(&tempu16); @@ -161,12 +173,53 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) case 8: tempu16 = 0; //get_cur_vlv2(&tempu16); break; + case 10: + temp_double = get_ORF1_Q(); + break; + case 12: + temp_double = get_ORF3_Q(); + break; + case 20: + temp_double = get_average_ORF1_Q(); + break; + case 22: + temp_double = get_average_ORF3_Q(); + break; + + case 11: + //get_orf_2(&tempu16); + break; + case 13: + //get_vlev1(&tempu16); + break; + case 14: + //get_vlev2(&tempu16); + break; + case 15: + //get_gas_out(&tempu16); + break; + case 16: + //get_cur_fan(&tempu16); + break; + case 17: + //get_cur_vlv1(&tempu16); + break; + case 18: + //tempu16 = 0; //get_cur_vlv2(&tempu16); + break; default : tempu16 = 0x500; //get_cur_vlv2(&tempu16); break; } } - response.progress = (double)tempu16; + if ((request->delay)<10) + { + response.progress = (double)tempu16; + } + else + { + response.progress = temp_double; + } response.has_progress = true; } else // @@ -392,8 +445,8 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if((request -> delay & 0xFFF000) == 0xCAF000)//Actuator { - HeadCard_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), /*(bool)((request -> delay & 0x10)>>4), */(bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction - //Trigger_Head_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), (bool)((request -> delay & 0x10)>>4), (bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction + //HeadCard_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), /*(bool)((request -> delay & 0x10)>>4), */(bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction + Trigger_Head_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), (bool)((request -> delay & 0x10)>>4), (bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction //response.progress = HeadCard_Actuators_Status((ACTUATORS)((request -> delay) & 0x100)>>8); response.has_progress = true; } @@ -511,7 +564,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if((request->amount == 0x0CE) && (request->delay == 0x0CE)) //Get Gas Sensor { - LOG_ERROR(request->delay,"FlashInitAndLoad"); + LOG_ERROR(request->delay,"FlashInit"); FlashInit(); response.progress = (double)OK; response.has_progress = true; -- cgit v1.3.1 From 55953df8a7753da1477dcf1db5484db342b3c906 Mon Sep 17 00:00:00 2001 From: Shai Frieder Date: Wed, 19 Feb 2020 16:45:35 +0200 Subject: control the blower acording to Q value --- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 50 ++++++++++++++++------ .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h | 7 ++- .../Embedded/Modules/Control/MillisecTask.c | 5 ++- .../Embedded/Modules/Stubs_Handler/Progress.c | 2 +- 4 files changed, 46 insertions(+), 18 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') 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 384e3cd59..c68073238 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 @@ -28,6 +28,8 @@ double average_Q_orifice1; double average_Q_orifice3; bool ORF1_flageNewBlowerValue; bool ORF3_flageNewBlowerValue; +double SetPoint_Q = 0.0; +bool CofigurationFlow = 1; int32_t i2c_smbus_write_word_data(int i2cFileDescriptor, uint8_t command_regAddress, uint16_t regValue) { @@ -220,7 +222,7 @@ double WHS_Blower_Avarege_ORF1() i += 1; } sum_orifice_Q -= average_orf1_Q_buff[i]; - get_orf_1(&orifice_hex_value ); + //get_orf_1(&orifice_hex_value ); 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; @@ -269,6 +271,20 @@ double WHS_Blower_Avarege_ORF3() return average_Q_orifice3; } +double get_ORF1_Q() +{ + uint16_t tempu16 = 0; + get_orf_1(&tempu16); + return get_Q(tempu16); +} + +double get_ORF3_Q() +{ + uint16_t tempu16 = 0; + get_orf_3(&tempu16); + return get_Q(tempu16); +} + double get_average_ORF1_Q() { return average_Q_orifice1; @@ -298,8 +314,8 @@ bool Test_WHS_blower() return status; } #define SET_DYEING_HEAD_ORRIFFICE_SENSOR headairflow //todo -#define LARGE_STEP 10 //todo define the correct number -#define SMALL_STEP 1 //todo define the correct number +#define LARGE_STEP 100 //todo define the correct number +#define SMALL_STEP 10 //todo define the correct number bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint_Q) { @@ -307,13 +323,15 @@ bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint_Q) double current_dying_head_flow_Q = 0; uint16_t volt; - +double tmp = 0.0; current_dying_head_flow_Q = get_average_ORF3_Q(); 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); - while (abs(current_dying_head_flow_Q - SetPoint_Q) > 0.2) + tmp = abs((current_dying_head_flow_Q*10) - (SetPoint_Q*10)); + + if (tmp > (0.2 * 10)) { - volt = getBlowerState(); + volt = g_MAX5805_device.CODE;//getBlowerState(); if (current_dying_head_flow_Q < SetPoint_Q) { if (( SetPoint_Q - current_dying_head_flow_Q) > 0.5) @@ -352,18 +370,21 @@ bool WHS_Set_Blower_Control_Closed_Loop(double SetPoint_Q) return OK; } -void WHS_Start_Blower_Control_Closed_Loop (double SetPoint_Q) +void WHS_Set_SetPoint_Q_value(double value) { - // use 0 to STOP -// uint16_t mVSetpoint = 0; + SetPoint_Q = value; + CofigurationFlow = 0; +} - if(SetPoint_Q) +void WHS_Start_Blower_Control_Closed_Loop () +{ + if(CofigurationFlow) { - WHS_Set_Blower_Control_Closed_Loop(SetPoint_Q); + WHS_Set_Blower_Control_Closed_Loop(headairflow); } else { - // blower off? + WHS_Set_Blower_Control_Closed_Loop(SetPoint_Q); } @@ -383,5 +404,8 @@ return value; } */ - +uint16_t WHS_Get_Volt_Blower_Control() +{ + return g_MAX5805_device.CODE; +} 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 9f79034bb..344932033 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 @@ -16,16 +16,19 @@ int16_t Write_Max5805_LDACn(bool value); bool WHS_init_Blower(void); 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 SetPoint); +void WHS_Start_Blower_Control_Closed_Loop (); double WHS_Get_Blower_Control_Closed_Loop_SetPoint(void); - +void WHS_Set_SetPoint_Q_value(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 dec526668..fe350d78d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -722,9 +722,10 @@ uint32_t MillisecLowLoop(uint32_t tick) } Trigger_WHS_PT100_Read_All(); Trigger_WHS_MAX11614_Read_allADC(); - //WHS_Blower_Avarege_ORF1(); //drier - //WHS_Blower_Avarege_ORF3(); //head + WHS_Blower_Avarege_ORF1(); //drier + WHS_Blower_Avarege_ORF3(); //head Trigger_WHSReadAllFanTacho (); + WHS_Start_Blower_Control_Closed_Loop (); } if (OneMinute_Tick) { diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 98fb74ea7..68df2aa17 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -121,7 +121,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) { if (WHS_Type == WHS_TYPE_NEW) { - WHS_Set_Blower_Control_Closed_Loop (request->delay); + WHS_Set_SetPoint_Q_value((double) request->delay); response.progress = 0; response.has_progress = false; } -- cgit v1.3.1 From a391142a20ab2c47a4ac6c1f6a7f3b77f04b4a92 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 20 Feb 2020 11:40:51 +0200 Subject: fix init heating and midtank reading (semaphore and task) --- .../Embedded/Common/report/reportInit.c | 2 +- .../Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c | 31 +++++++++------------- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 4 +-- .../Embedded/Modules/Control/MillisecTask.c | 10 +++---- .../Embedded_SW/Embedded/Modules/General/process.c | 6 ++--- 5 files changed, 24 insertions(+), 29 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 8f3cde15f..ef9f2fffb 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -481,6 +481,6 @@ STATUS ReportInit(ReportInitParams InitParams) InitFilter = ReportAddFilterPackage("Init"); MaintFilter = ReportAddFilterPackage("Maint"); // Filter = ReportAddFilterPackage(""); - ReportSwitchPackageFilter(WasteFilter,REPORT_OFF); + //ReportSwitchPackageFilter(WasteFilter,REPORT_OFF); return status; } 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 008e24681..283249dd1 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 @@ -363,29 +363,24 @@ double Read_MidTank_Pressure_Sensor(MidTank_t MidTank_ID) //0-7 break; } - if (Semaphore_pend(I2C_Sem, BIOS_NO_WAIT)) - { - Status = I2C_ADC_Config(I2C_Slave_Add, Channel); - SysCtlDelay(1); - Status |= I2C_ADC_Set_For_Read_Ch(I2C_Slave_Add); - SysCtlDelay(1); - VsampleInBits = I2C_ADC_Read_Ch(I2C_Slave_Add); - if (Status) - LOG_ERROR(Status, "I2C actions failed"); - MidTank_Pressure_Bits[MidTank_ID] = VsampleInBits;//just for debug + Status = I2C_ADC_Config(I2C_Slave_Add, Channel); + SysCtlDelay(1); + Status |= I2C_ADC_Set_For_Read_Ch(I2C_Slave_Add); + SysCtlDelay(1); + VsampleInBits = I2C_ADC_Read_Ch(I2C_Slave_Add); + + if (Status) + LOG_ERROR(Status, "I2C actions failed"); + MidTank_Pressure_Bits[MidTank_ID] = VsampleInBits;//just for debug - //MidTank_Pressure[MidTank_ID] = Calculate_Pressure(VsampleInBits) - MidThankReadingOffset; + //MidTank_Pressure[MidTank_ID] = Calculate_Pressure(VsampleInBits) - MidThankReadingOffset; - //MidTank_Pressure[MidTank_ID] = Calculate_correction_MidTank_Pressure(VsampleInBits);//use the Calibration correction equation + //MidTank_Pressure[MidTank_ID] = Calculate_correction_MidTank_Pressure(VsampleInBits);//use the Calibration correction equation - //MidTank_Pressure[MidTank_ID] = Calculate_MidTank_Liquid(VsampleInBits , Factor);//According to Gal (email 28-Aug-19) + //MidTank_Pressure[MidTank_ID] = Calculate_MidTank_Liquid(VsampleInBits , Factor);//According to Gal (email 28-Aug-19) - MidTank_Pressure[MidTank_ID] = Calc_Calibration_MidTank_Liquid(VsampleInBits, MidTank_ID ); - Semaphore_post(I2C_Sem); - } - else - Report("Read_MidTank_Pressure_Sensor",__FILE__,__LINE__,255,RpWarning,0,0); + MidTank_Pressure[MidTank_ID] = Calc_Calibration_MidTank_Liquid(VsampleInBits, MidTank_ID ); return MidTank_Pressure[MidTank_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 728b7d3d1..5c8cf5cfb 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 @@ -30,7 +30,7 @@ double average_Q_orifice1; double average_Q_orifice3; bool ORF1_flageNewBlowerValue; bool ORF3_flageNewBlowerValue; -double SetPoint_Q = 0.0; +double SetPoint_Q = 5.0; bool CofigurationFlow = 1; int32_t i2c_smbus_write_word_data(int i2cFileDescriptor, uint8_t command_regAddress, uint16_t regValue) @@ -380,7 +380,7 @@ void WHS_Set_SetPoint_Q_value(double value) void WHS_Start_Blower_Control_Closed_Loop () { - if (GetMachineState()headzone6temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (status != 0) return status; - if (GetMachineState() Date: Thu, 20 Feb 2020 14:05:26 +0200 Subject: bugs fix - job abort --- Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 11 +++++++---- Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) (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 ff0353b23..1cc8e766b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -722,10 +722,13 @@ uint32_t MillisecLowLoop(uint32_t tick) PressureCalc[Disp_i] = MillisecCalculatePressures(Disp_i); } } - Trigger_WHS_PT100_Read_All(); - WHS_Blower_Avarege_ORF1(); //drier - WHS_Blower_Avarege_ORF3(); //head - WHS_Start_Blower_Control_Closed_Loop (); + if (WHS_Type == WHS_TYPE_NEW) + { + Trigger_WHS_PT100_Read_All(); + WHS_Blower_Avarege_ORF1(); //drier + WHS_Blower_Avarege_ORF3(); //head + WHS_Start_Blower_Control_Closed_Loop (); + } } if (OneMinute_Tick) { diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 7eb621c81..f295f2475 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -930,7 +930,6 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes responseContainer.has_continuous = true; responseContainer.continuous = true; - container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); if (done == true) { if(JobEndReason != JOB_OK) @@ -945,6 +944,7 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes responseContainer.error = ERROR_CODE__CONTINUOUS_RESPONSE_ABORTED; } } + container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); if (container_buffer) { size_t container_size = message_container__pack(&responseContainer, container_buffer); -- cgit v1.3.1 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 --- .../Embedded/Common/report/reportInit.c | 4 +-- Software/Embedded_SW/Embedded/DataDef.h | 2 ++ .../Embedded/Drivers/ADC_Sampling/ADC.h | 4 +++ .../Embedded/Drivers/ADC_Sampling/ADC_VAC.c | 8 +++++- .../Embedded/Modules/Control/MillisecTask.c | 3 ++- .../Embedded/Modules/Heaters/Heaters_ex.h | 1 + .../Embedded/Modules/Heaters/Heaters_print.c | 23 +++++++++++++---- .../Embedded/Modules/Stubs_Handler/Progress.c | 12 +++++++++ .../StateMachines/Initialization/InitSequence.c | 30 ++++++++++++++-------- 9 files changed, 68 insertions(+), 19 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 8f3cde15f..818e0d938 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -86,7 +86,7 @@ uint32_t OpenLogFile(void) { if (LogFileHandle->fsize < 100000) f_lseek(LogFileHandle, LogFileHandle->fsize); - len = usnprintf(message, 80, "\r\n Log File %s %s",__DATE__, __TIME__); + len = usnprintf(message, 80, "Log File %s %s",__DATE__, __TIME__); LogFresult = f_write(LogFileHandle,message,len,&Bytes ); }*/ return LogFresult; @@ -110,7 +110,7 @@ uint32_t LogToFile(char *message, /* The formatted message /* uint32_t Bytes = 0; int len; - len = usnprintf(message, 300, "\r\n %s, file %s line %d code %d sev %d,param %d",message,FileName, LineNumber,errorCode, Severity, parameter); + len = usnprintf(message, 300, "%s, file %s line %d code %d sev %d,param %d",message,FileName, LineNumber,errorCode, Severity, parameter); LogFresult = f_write(LogFileHandle,message,len,&Bytes );*/ return LogFresult; diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 716ae7fe4..3aaa38c2e 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -25,6 +25,8 @@ #define USE_POWERSTEP01 +//#define VAC_TEST + //#define SPECIAL_DISPENSERS //#define Use_Head_Card //for real card only //#define Use_WHS_Card //for real card only diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h index 2d5a95c2a..03d333e04 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h @@ -66,6 +66,10 @@ uint8_t Calculate_Gas_Power_Consumption(); uint32_t Read_Dryer_Heaters_Current(HEATERS_CURRENT Heater_ID); void CheckAcInputVoltage(); +#ifdef VAC_TEST +extern double VAC_Test; +#endif + double ReadVAC(); extern PowerControlFlag Power_Control_Flag; diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VAC.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VAC.c index d5f7b6a0e..9ca987e66 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VAC.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VAC.c @@ -16,6 +16,10 @@ #define AcTable_MaxLine 9 #define AcTable_MaxColumn 2 +#ifdef VAC_TEST +double VAC_Test = 230.0; +#endif + double AcLookUpTable[AcTable_MaxLine][AcTable_MaxColumn] = //VAC = 29.5522 * VDC + 3.981;//linear line according to the lookup table { @@ -95,6 +99,8 @@ double ReadVAC() VSensor = (1.96- (VADC/1000)) * 4.64 + 1.96; VAC = VDC2VAC(VSensor); - +#ifdef VAC_TEST + VAC = VAC_Test; +#endif return VAC; //Volts } 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; diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index 0c6ee94ee..1b5bd3518 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -33,6 +33,7 @@ uint32_t LoadHeaterSetPoint(HeaterType HeaterType); void Heaters_SetOverHeatTimeOutValues(uint32_t OverHeatTimeout, uint32_t UnderHeatTimeout); void Heaters_SetOperationLimits(int acheatersloweroperationlimit,int acheatersupperoperationlimit,int dcheatersloweroperationlimit,int dcheatersupperoperationlimit); +uint32_t DrierHeaterVoltageSetup(void); uint32_t HeatersEnd(void); void HeatersControlStop(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index bc0d1002b..55b8e31c3 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -1503,13 +1503,16 @@ double TotalCurrentLimit(double VAC) } } -uint32_t DrierHeaterVoltageSetup(double voltage) +uint32_t DrierHeaterVoltageSetup(void) { double DrierAcVoltage = 0.0; char str[100]; bool tempDrier2 = UseSecondaryDrierHeater; + double Z1Current,Z2AssumedCurrent,LimitCurrent; +#ifndef VAC_TEST if (Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) //rapid/pp machines +#endif { DrierAcVoltage = ReadVAC(); if (DrierAcVoltage<=180) @@ -1536,7 +1539,10 @@ uint32_t DrierHeaterVoltageSetup(double voltage) } else { - if ((GetZone2RMSCurrent(DrierAcVoltage)+Get_Heaters_Current(HEATER_DRYER_CURRENT_1))>TotalCurrentLimit(DrierAcVoltage)) + Z1Current = Get_Heaters_Current(HEATER_DRYER_CURRENT_1); + Z2AssumedCurrent = GetZone2RMSCurrent(DrierAcVoltage); + LimitCurrent = TotalCurrentLimit(DrierAcVoltage); + if ((Z2AssumedCurrent+Z1Current)>LimitCurrent) { UseSecondaryDrierHeater = false; } @@ -1546,15 +1552,22 @@ uint32_t DrierHeaterVoltageSetup(double voltage) } } } +#ifndef VAC_TEST else { UseSecondaryDrierHeater = true; } +#endif if (tempDrier2 != UseSecondaryDrierHeater) { - usnprintf(str, 100, "\r\n Changing Drier 2 setting VAC %d D1 Current %d D2 assumed current %d limit %d" - ,DrierAcVoltage,(int)(GetZone2RMSCurrent(DrierAcVoltage)*100),(int)(Get_Heaters_Current(HEATER_DRYER_CURRENT_1)*100),(int)(TotalCurrentLimit(DrierAcVoltage)*100)); + usnprintf(str, 100, "Changing Drier 2 from %d to %d VAC %d D1 Current %d D2 assumed current %d limit %d" ,tempDrier2,UseSecondaryDrierHeater + ,(int)DrierAcVoltage,(int)(Z1Current*100),(int)(Z2AssumedCurrent*100),(int)(LimitCurrent*100)); ReportWithPackageFilter(HeatersFilter,str, __FILE__,__LINE__,DrierAcVoltage, RpMessage, UseSecondaryDrierHeater, 0); + if (UseSecondaryDrierHeater == false) + { + DeActivateHeater (HEATER_TYPE__DryerSecondaryHeater); + } + } return OK; } @@ -1565,7 +1578,7 @@ uint32_t HeatersControlLoop(uint32_t tick) int DcHeaterId; bool AcHeaterDisaster = false; - /*len = usnprintf(str, 100, "\r\n EightMilliSecondHeatersInterrupt SliceCounter %d Owner %d H1000 %d H2000 %d" + /*len = usnprintf(str, 100, " EightMilliSecondHeatersInterrupt SliceCounter %d Owner %d H1000 %d H2000 %d" ,SliceCounter,TimeSliceAllocation[SliceCounter],HeatersRestart,NumberOFSlicesInUse); ReportWithPackageFilter(HeatersFilter,str, __FILE__,__LINE__,0, RpMessage, SliceCounter, TimeSliceAllocation[SliceCounter]); */ diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index c907f7cb8..12e344b79 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -664,6 +664,18 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = true; } +#ifdef VAC_TEST + else + if(request->amount == 0xB6) //fast refresh for pressure + { + LOG_ERROR(request->delay,"set vac read test"); + VAC_Test = (double)request->delay; + response.progress = request->delay; + response.has_progress = true; + + } +#endif + else if(request->amount == 0xC3) //suspend I2C task { diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index af2178348..0d4dba468 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -120,6 +120,7 @@ uint32_t Start_InitSequence(void) MachineStateDetail = MACHINE_STATE_HW_CONFIG; SetMachineStatus(MACHINE_STATE__PowerUp); HWControlId = AddControlCallback("Init HW Init", InitSequenceCallBackFunction, 4* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + Report("AddControlCallback INIT",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitStages,0); InitSchedulerControlId = AddControlCallback("InitScheduler", InitScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; } @@ -268,10 +269,10 @@ double GetZone2RMSCurrent(double VAC) } uint32_t PowerManagementCallBack(uint32_t IfIndex, uint32_t BusyFlag) { - ReportWithPackageFilter(InitFilter,"PowerManagementCallBack", __FILE__,MainHeaterStable,(int)(SecondaryHeaterStable), RpMessage, Maxcount_Heater_Current, 0); - ReportWithPackageFilter(InitFilter,"PowerManagementCallBack", __FILE__,GetHeaterState(HEATER_TYPE__DryerMainHeater),(int)(GetHeaterState(HEATER_TYPE__DryerSecondaryHeater)), RpMessage, Maxcount_Heater_Current, 0); if (WaitForCurrentRaise++ < MaxStabilization) return OK; + ReportWithPackageFilter(InitFilter,"PowerManagementCallBack 1", __FILE__,MainHeaterStable,(int)(SecondaryHeaterStable), RpMessage, Maxcount_Heater_Current, 0); + ReportWithPackageFilter(InitFilter,"PowerManagementCallBack 2", __FILE__,GetHeaterState(HEATER_TYPE__DryerMainHeater),(int)(GetHeaterState(HEATER_TYPE__DryerSecondaryHeater)), RpMessage, Maxcount_Heater_Current, 0); if ((MainHeaterStable == false)&&(Maxcount_Heater_Current= HEAD_TYPE_SYLKO)&&(WHS_Type == WHS_TYPE_NEW)) + //if ((Head_Type >= HEAD_TYPE_SYLKO)&&(WHS_Type == WHS_TYPE_NEW)) { - InitCurrentReadingStable(); - ActivateHeater(HEATER_TYPE__DryerMainHeater); - HWControlId = AddControlCallback("Init Power", PowerManagementCallBack, eHundredMillisecond, TemplateDataReadCBFunction,0,0, 0 ); - ReportWithPackageFilter(InitFilter,"starting main heater ", __FILE__,__LINE__,(int)(StableCurrent*100), RpMessage, Maxcount_Heater_Current, 0); + if (HWControlId == 0xFF) + { + InitCurrentReadingStable(); + ActivateHeater(HEATER_TYPE__DryerMainHeater); + HWControlId = AddControlCallback("Init Power", PowerManagementCallBack, eHundredMillisecond, TemplateDataReadCBFunction,0,0, 0 ); + Report("AddControlCallback INIT",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitStages,0); + ReportWithPackageFilter(InitFilter,"starting main heater ", __FILE__,__LINE__,(int)(StableCurrent*100), RpMessage, Maxcount_Heater_Current, 0); + } + else + ReportWithPackageFilter(InitFilter,"cannot start InitSequencePowerManagementInit", __FILE__,__LINE__,(int)(StableCurrent*100), RpMessage, Maxcount_Heater_Current, 0); } - else - InitStages++; + // else + // InitStages++; return OK; } uint32_t InitSequenceInitialBlowerActivation(void) @@ -362,6 +369,7 @@ uint32_t InitSequenceInitialBlowerActivation(void) Control_Voltage_To_Blower(4200); Set_All_WHS_Fans(200); HWControlId = AddControlCallback("Init Blower", InitSequenceBlowerCallBackFunction, 10* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + Report("AddControlCallback INIT",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitStages,0); /*if (RdInkCartridgeSensor()) //if there is a cartridge in the ink slot skip the valves procedure { MidTankOperationCounter = 32; @@ -432,6 +440,7 @@ uint32_t InitSequenceWaitForCooler(void) //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 ); + Report("AddControlCallback INIT",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitStages,0); } //InitSequenceStateMachine(InitStages); return OK; @@ -472,13 +481,14 @@ uint32_t InitSequenceStartHeating(void) { MachineStateDetail = MACHINE_STATE_HEATING_STARTED; HWControlId = AddControlCallback("Init Heating", InitSequenceStartHeatingCallBackFunction, 2*eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + Report("AddControlCallback INIT",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitStages,0); //start heaters with predefined / store process parameters } else { MachineStateDetail = MACHINE_STATE_NO_PROCESS_PARAMS; SetMachineStatus(MACHINE_STATE__Ready); - REPORT_MSG(MachineStateDetail,"InitSequenceStateMachine no processparameters file"); + REPORT_MSG(MachineStateDetail,"InitSequenceStateMachine no process parameters file"); } } else -- cgit v1.3.1