From adebfb6bccfc75ae2057a538f5b028b45ac2d8b4 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 29 Jun 2020 21:50:42 +0300 Subject: Embedded SW Release note - Version 1.4.6.34 - Pack 2+ ============================================================= Validate IFS and cartridge location on manual waste handling - bug #3033 better handling of powerstep01 configuration and motors clocks waste level: logs, fixed reading during waste filling, fix PT100 reading in WHS //important, OK improve diespensers reading in I2C timing //important OK alarm handling: fix report (mid tank empty) diagnostics - waste level in liters Heating and process - avoid activating all heaters at once. tested for flat head. Heating - remove alarms when colling dwn due to change of RML or idle mode Thread - improve feeder tension handling system: hold initalization process after 3 failures to enable code / parameters change and debugging --- Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 965ea30da..2b65ca806 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -863,7 +863,7 @@ uint32_t Thread_Load_Dryer_UnLoading(void) { uint32_t temp; - REPORT_MSG(LoadStages, "Thread UnLoad State Machine step"); + REPORT_MSG(LoadStages, "Thread Load State Machine step Dryer Unloading"); //LoadArmRounds = 0; //uint32_t numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 @@ -1258,7 +1258,7 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } bool ThreadLoaded(void) { - uint32_t ReadValue; + /* uint32_t ReadValue; int32_t PoolerValue,WinderValue,FeederValue; //this function tests if there is a thread in the machine. all dancers are in lowermost position then there is no thread. @@ -1280,7 +1280,7 @@ bool ThreadLoaded(void) Report("Thread is out",__FILE__,(-1*PoolerValue),(-1*WinderValue),RpWarning,(-1*FeederValue),0); return true; } - else + else*/ return false; } void ThreadLoadRequest(MessageContainer* requestContainer) -- cgit v1.3.1 From a52e0e1b4f0b981af32427cb7b2044f5cedd9829 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 6 Jul 2020 16:52:05 +0300 Subject: Version 1.4.6.35 - Pack Mid alpha ============================ Arc head - activate arc heaters gradually stop FPGA Reinit after 20 trials Head cleaning - move actuators (with stub - 0xAD7) fix RML PID support head open prevent job - (with stub - 0xAD6) add stub to overrule cone missing - 0xAD8 --- Software/Embedded_SW/Embedded/.cproject | 2 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Head_Card/IO_Ports/Heaters/Head_Heaters.c | 88 ++++- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 4 +- .../Embedded/Modules/Control/MillisecTask.c | 1 - .../Embedded_SW/Embedded/Modules/Control/control.c | 12 +- .../Embedded/Modules/General/GeneralHardware.c | 1 - .../Embedded_SW/Embedded/Modules/General/buttons.c | 28 -- Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 4 + .../Embedded/Modules/IDS/IDS_Cleaning.c | 81 ++++- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 2 + .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 11 +- .../Embedded/Modules/Stubs_Handler/Progress.c | 24 ++ .../Embedded_SW/Embedded/Modules/Thread/Thread.h | 1 - .../Embedded/Modules/Thread/ThreadLoad.c | 9 +- .../Embedded/Modules/Thread/Thread_Winder.c | 13 +- .../Embedded/Modules/Thread/Thread_ex.h | 2 +- .../Embedded/Modules/Thread/Thread_init.c | 2 - .../Embedded/Modules/Thread/Thread_print.c | 170 +++++----- .../Embedded/Software Release Notes.txt | 9 + .../stubs/technician view files/new head.tpf | 360 +++++++++++---------- 21 files changed, 505 insertions(+), 321 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c') diff --git a/Software/Embedded_SW/Embedded/.cproject b/Software/Embedded_SW/Embedded/.cproject index 26bee6013..388976f56 100644 --- a/Software/Embedded_SW/Embedded/.cproject +++ b/Software/Embedded_SW/Embedded/.cproject @@ -441,7 +441,7 @@ - + diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 4b1fec423..beeb86c92 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,34}; +TangoVersion_t _gTangoVersion = {1,4,6,35}; #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/Head_Card/IO_Ports/Heaters/Head_Heaters.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c index a5c9376d2..d73fbcdba 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c @@ -13,6 +13,7 @@ bool HeaterMap[HEADCARD_HIT_MIXER+1] = {0}; +uint8_t OT_Heater_Index = 0;IN_Heater_Index = 0; uint32_t Activate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID) { uint32_t status= OK; @@ -40,15 +41,15 @@ uint32_t Deactivate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID) HeaterMap[Head_Heater_ID] &= ~(1 << Head_Heater_ID); if(Head_Heater_ID <= HEADCARD_UPPER_HIT_IN4) - { - Head_I2C_EXP1_0x40.ushort &= ~(1 << Head_Heater_ID); - } - else if(Head_Heater_ID <= HEADCARD_HIT_MIXER) - { - Head_I2C_EXP2_0x42.ushort &= ~(1 << (Head_Heater_ID - 16)); - } - else - status = ERROR; + { + Head_I2C_EXP1_0x40.ushort &= ~(1 << Head_Heater_ID); + } + else if(Head_Heater_ID <= HEADCARD_HIT_MIXER) + { + Head_I2C_EXP2_0x42.ushort &= ~(1 << (Head_Heater_ID - 16)); + } + else + status = ERROR; return status; } @@ -66,6 +67,38 @@ uint32_t Write_Head_Card_Heaters_Commands() Report(" Write_Head_Card_Heaters",__FILE__,__LINE__,255,RpWarning,0,0); if (status) ReadFailures++; + if ((IN_Heater_Index)&&(IN_Heater_Index<=4)) + { + switch (IN_Heater_Index) + { + case 2: + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = true; + break; + case 3: + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = true; + break; + case 4: + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = true; + break; + } + IN_Heater_Index++; + } + if ((OT_Heater_Index)&&(OT_Heater_Index<=4)) + { + switch (OT_Heater_Index) + { + case 2: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = true; + break; + case 3: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = true; + break; + case 4: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = true; + break; + } + OT_Heater_Index++; + } return status; } @@ -137,34 +170,65 @@ uint32_t HeadCard_Control_Heaters(HEADCARD_HEATERS_ENUM Heater_ID, bool Pwr_Cmd) break; case HEADCARD_UPPER_HIT_IN1: Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN1 = Pwr_Cmd; + IN_Heater_Index = (Pwr_Cmd)?1:0; //status |= Head_Write_IO_Reg(0x40,HIGH); // break; // case HEADCARD_UPPER_HIT_IN2: + if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 == Pwr_Cmd) Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = Pwr_Cmd; + else + if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 == true) + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = false; //status |= Head_Write_IO_Reg(0x40,HIGH); // break; // case HEADCARD_UPPER_HIT_IN3: + if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 == Pwr_Cmd) Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = Pwr_Cmd; + else + if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 == true) + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = false; + //Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = false; //status |= Head_Write_IO_Reg(0x40,HIGH); // break; // case HEADCARD_UPPER_HIT_IN4: + if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 == Pwr_Cmd) Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = Pwr_Cmd; + else + if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 == true) + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = false; + //Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = false; //status |= Head_Write_IO_Reg(0x40,HIGH); break; case HEADCARD_UPPER_HIT_OUT1: Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT1 = Pwr_Cmd; + OT_Heater_Index = (Pwr_Cmd)?1:0; //status |= Head_Write_IO_Reg(0x42,LOW); // break; // case HEADCARD_UPPER_HIT_OUT2: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd; + if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 == Pwr_Cmd) + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd; + else + if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 == true) + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = false; + //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = false; //status |= Head_Write_IO_Reg(0x42,LOW); // break; // case HEADCARD_UPPER_HIT_OUT3: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd; + if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 == Pwr_Cmd) + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd; + else + if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 == true) + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = false; + //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = false; //status |= Head_Write_IO_Reg(0x42,LOW); // break; // case HEADCARD_UPPER_HIT_OUT4: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd; + if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 == Pwr_Cmd) + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd; + else + if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 == true) + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = false; + //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = false; //status |= Head_Write_IO_Reg(0x42,LOW); break; case HEADCARD_HIT_MIXER: 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 8618524d9..211d7cbef 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 @@ -635,9 +635,9 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam) calculated_speed = volt + 100; if (calculated_speed < (volt - 100)) calculated_speed = volt - 100;*/ - /*usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d avg %d set %d error %d integral %d blower %d", + usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d avg %d set %d error %d integral %d blower %d", (int)(measuredParam*100),(int)(avreageSampleValue*100),(int)(setParam*100),(int)(WHS_ControlData.m_calculatedError*100),(int)(WHS_ControlData.m_integral*100),(int)(calculated_speed)); - Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0);*/ + Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0); /*if (fabs(WHS_ControlData.m_calculatedError)>(WHS_ControlData.m_params.MAX/2)) { close_loop_time = 1; diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 5f9c3130b..dc15202a6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -658,7 +658,6 @@ uint32_t MillisecLowLoop(uint32_t tick) #ifndef EVALUATION_BOARD Read_Buttons_Reg(); #endif - //Ink_Cart_Led(); /////////////////////////////////////////////////////////////////// diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index 0f9848ba1..26fba0194 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -170,6 +170,7 @@ void ControlStop(void) ControlRestart = false; ADCAcquireStop(); } +int FPGA_ReInit_Count = 0; ///avoid too many reinitializations of motors as happens when FPGA is corrupted uint32_t ControlActivityLed( uint32_t Parameter1) { static bool flag = false; @@ -192,11 +193,14 @@ uint32_t ControlActivityLed( uint32_t Parameter1) SendJobProgress(0.0,0,false, "Hardware Failure Error"); AbortJob("FPGA Watchdog Error"); } - ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0); + if (FPGA_ReInit_Count++<20) + { + ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0); - ACTIVITY_GREEN_LED_ON; - FPGA_SetMotorsInit(); - Motor_ReconfigAllMotors(); + ACTIVITY_GREEN_LED_ON; + FPGA_SetMotorsInit(); + Motor_ReconfigAllMotors(); + } } } else diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 6d4d1c668..e2ade95c3 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -554,7 +554,6 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) } ControlStart(); AlarmHandlingStart(); - //ThreadInitialTestStub(request); GeneralHwReady = true; STATUS_RED_LED_OFF; return OK; diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index f81cfb88f..328ff3203 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -691,34 +691,6 @@ return OK; return OK; }*/ -void Ink_Cart_Led()//temporary for ITMA -{ - if(Is_Cartridge_Present(CART_1) == true) - { - Pannel_Leds( CART_1, MODE_ON); - } - else - { - Pannel_Leds( CART_1, MODE_OFF); - } - if(Is_Cartridge_Present(CART_2) == true) - { - Pannel_Leds( CART_2, MODE_ON); - } - else - { - Pannel_Leds( CART_2, MODE_OFF); - } - if(Is_Cartridge_Present(CART_3) == true) - { - Pannel_Leds( CART_3, MODE_ON); - } - else - { - Pannel_Leds( CART_3, MODE_OFF); - } -} - void test_avi() { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index 41e729b9b..647797b69 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -28,6 +28,9 @@ extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS]; extern bool HomingActive[MAX_SYSTEM_DISPENSERS]; extern bool PrimingActive[MAX_SYSTEM_DISPENSERS]; +extern uint32_t LeftRockerSpeed; +extern uint32_t RightRockerSpeed; + uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue); /*typedef struct @@ -45,6 +48,7 @@ void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps); //uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback); +uint32_t IDS_Cleaning_Move_Actuators(void); uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c index bdde05b43..8f10a0e5d 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c @@ -13,11 +13,73 @@ #include "PMR/Hardware/Hardwaremotor.pb-c.h" #include "PMR/Hardware/HardwareDispenser.pb-c.h" #include "StateMachines/Printing/printingSTM.h" +#include + #include "drivers/motors/motor.h" #include "drivers/valves/valve.h" +#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" int SaveLeftRockerSpeed = 50, SaveRightRockerSpeed = 50; +typedef enum +{ + CleaningStageIdle, + CleaningStageActuatorUp = 1, + CleaningStageDelay1, + CleaningStageActuatorDown, + CleaningStageDelay2, +}CleaningStageEnum; + +/* + *Cleaning sequence: + + +t up – time actuator goes up +t delay1 – time actuator stays in position (up position – not limit switch) +Down to limit - actuator goes to lower limit switch +t delay2 – time actuator stays in lower limit switch position + +Values for start: +t up – 300 msec +t delay1 – 500 msec +t delay2 – 2 sec + + */ + +CleaningStageEnum CleaningStage = CleaningStageIdle; +int CleaningStageCounter = 0; +int Tup = 4,Tdelay1 = 9,Tdelay2 = 29; + +uint32_t IDS_Cleaning_Move_Actuators() +{ + if(Head_Type != HEAD_TYPE_SYLKO) + return OK; + if (CleaningStageCounter == 1) + { + Trigger_Head_Actuators_Control(ACTIN, LOW,true); + Report("IDS_Cleaning_Move_ActuatorUp", __FILE__, __LINE__, 1, RpWarning, CleaningStageCounter, 0); + } + else if (CleaningStageCounter == Tup) + { + Trigger_Head_Actuators_Disable(); + Report("IDS_Cleaning_Stop_Actuator", __FILE__, __LINE__, Tup, RpWarning, CleaningStageCounter, 0); + } + else if (CleaningStageCounter == Tdelay1) + { + Trigger_Head_Actuators_Control(ACTIN, LOW,false); + Report("IDS_Cleaning_MoveDown", __FILE__, __LINE__, Tdelay1, RpWarning, CleaningStageCounter, 0); + } + else if (CleaningStageCounter == Tdelay2) + { + CleaningStageCounter = 0; + Report("IDS_Cleaning_Stop_delay", __FILE__, __LINE__, Tdelay2, RpWarning, CleaningStageCounter, 0); + } + + + CleaningStageCounter++; + + return OK; +} uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed) { uint32_t status = OK; @@ -34,17 +96,25 @@ uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed) uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback) { uint32_t status = OK; - status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD].directionthreadwize, SaveRightRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD], callback,timeout); - status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH].directionthreadwize, SaveLeftRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH], callback,timeout); - Report("IDS_Cleaning_Center_And_Stop_Rockers", __FILE__, __LINE__, timeout, RpWarning, 123456, 0); + //status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD].directionthreadwize, SaveRightRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD], callback,timeout); + //status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH].directionthreadwize, SaveLeftRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH], callback,timeout); + Trigger_Head_Actuators_Disable(); + Trigger_Head_Actuators_Control(ACTIN, LOW,false); + CleaningStageCounter = 0; + CleaningStage = CleaningStageIdle; + Report("IDS_Cleaning_Center_And_Stop_Rockers actuator down", __FILE__, __LINE__, timeout, RpWarning, 123456, 0); return status; } uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback) { uint32_t status = OK; + Tup = LeftRockerSpeed/100; + Tdelay1 = LeftRockerSpeed%100; + Tdelay2 = RightRockerSpeed; status = IDS_Dispenser_Start_Motor_and_Open_Valve(CLEANER_DISPENSER, dispenserSpeed, callback); Report("IDS_Cleaning_Spray_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, dispenserSpeed, 0); + Report("IDS_Cleaning parameters", __FILE__, Tup*100, Tdelay1*100, RpWarning, Tdelay2*100, 0); return status; @@ -54,6 +124,11 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback) uint32_t status = OK; status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANER_DISPENSER,callback); Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, status, 0); + if(Head_Type == HEAD_TYPE_SYLKO) + { + Trigger_Head_Actuators_Control(ACTIN, LOW,false); + Report("IDS_Cleaning_MoveDown cleaning stop", __FILE__, __LINE__, Tdelay1, RpWarning, CleaningStageCounter, 0); + } return status; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index b3f21e187..831fa18cd 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -45,6 +45,8 @@ extern DispenserRunningData IDS_Dispenser_Data[MAX_SYSTEM_DISPENSERS]; //extern DispenserData IDSDispenserData; extern DispenserRunningData **dispenserdata; +extern bool ActuatorsCleaningSequence; + extern bool DispenserUsedInJob[MAX_SYSTEM_DISPENSERS]; extern int32_t CurrentDispenserSpeed[MAX_SYSTEM_DISPENSERS]; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index a76453f95..b4442c996 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -51,6 +51,7 @@ HardwarePidControlType ThreadDispenserIdToControlId[MAX_SYSTEM_DISPENSERS] = { JobUploadStrategy uploadstrategy = JOB_UPLOAD_STRATEGY__Default; bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {true}; bool IDS_Active = false; +bool ActuatorsCleaningSequence = true; bool Special_Dispensers = false; /******************** STRUCTURES AND ENUMs ********************************************/ @@ -78,7 +79,7 @@ int lInterSegmentLength = 0; uint32_t InterSegmentStartRocking = 0; uint32_t InterSegmentCenterRockers = 0; uint32_t LeftRockerSpeed = 20; - uint32_t RighttRockerSpeed = 20; + uint32_t RightRockerSpeed = 20; uint32_t CleaningDispenserSpeed = 40; uint32_t InterSegmentStartWFCFDispensers; uint32_t WFCF = 80; @@ -115,7 +116,7 @@ void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, doubl if ( ids_leftcleaningmotorspeed) LeftRockerSpeed = ids_leftcleaningmotorspeed; if ( ids_rightcleaningmotorspeed) - RighttRockerSpeed = ids_rightcleaningmotorspeed; + RightRockerSpeed = ids_rightcleaningmotorspeed; Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,CleaningDispenserSpeed,RpWarning,(int)LeftRockerSpeed,0); Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,InterSegmentStartSprayCleaner,RpWarning,(int)InterSegmentCenterRockers,0); @@ -1089,6 +1090,12 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); Report("Start cleaning rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); //IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); }*/ + if (( InterSegmentStartSprayCleaner )&& + ((InterSegmentStepsCount>InterSegmentStartSprayCleaner)&&(InterSegmentStepsCount<(lInterSegmentLength-InterSegmentCenterRockers) ))) + { + if (ActuatorsCleaningSequence) + IDS_Cleaning_Move_Actuators(); + } if (( InterSegmentCenterRockers)&&(InterSegmentCenterRockers == (lInterSegmentLength-InterSegmentStepsCount))) { Report("Stop spray and center rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index cbdab01d1..fd9c5b404 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -500,6 +500,30 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = true; } else + if(request->amount == 0xAD6) //Set skip open lids + { + LOG_ERROR(request->delay,"Set SkipOpenLids"); + SkipOpenLids = request->delay; + response.progress = SkipOpenLids; + response.has_progress = true; + } + else + if(request->amount == 0xAD7) //Set actuators cleaning sequence + { + LOG_ERROR(request->delay,"Set actuators cleaning sequence"); + ActuatorsCleaningSequence = request->delay; + response.progress = ActuatorsCleaningSequence; + response.has_progress = true; + } + else + if(request->amount == 0xAD8) //Set ignore cone missing + { + LOG_ERROR(request->delay,"Set ignore cone missing"); + IgnoreConeMissing = request->delay; + response.progress = IgnoreConeMissing; + response.has_progress = true; + } + else if((request->amount == 0x01) && ((request->delay &0x010000) == 0x010000)) //change mode powerset01 { response.progress = Power_Step_01_Mode(((request->delay &0x00FF00)>>8), request->delay &0x0000FF); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index d1d23598f..3a7045a6e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -76,7 +76,6 @@ extern int MotorSpeedSamplePointer[MAX_THREAD_MOTORS_NUM]; uint32_t InternalWinderConfigMessage(HardwareWinder* request); uint32_t MotorsConfigMessage( HardwareConfiguration* HW_request); uint32_t InternalWindingConfigMessage(JobSpool* request); -uint32_t ThreadInitialTestStub(HardwareMotor * request); uint32_t MotorPidRequestMessage(HardwarePidControl* request); void SetKeepWindingCone(bool value); void SetWinderBackToBaseTime(uint32_t value); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 2b65ca806..f5bc45d85 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -204,6 +204,7 @@ strcpy(LoadErrorMsg,"Thread_Load_Reduce_Heat failed"); LoadStatus = ERROR; TryAgain = true; + //ThreadLoadButton(LoadStages); } else { @@ -300,6 +301,7 @@ LoadStatus = ERROR; ThreadLoadingReport(); TryAgain = true; + //ThreadLoadButton(LoadStages); } else { @@ -544,6 +546,7 @@ LoadStatus = ERROR; ThreadLoadingReport(); TryAgain = true; + //ThreadLoadButton(LoadStages); } } @@ -647,6 +650,7 @@ Report("Total Feeder load",__FILE__,__LINE__,dryerbufferCentimeters,RpMessage,TotalLoadedLen,0); ThreadLoadingReport(); + //ThreadLoadButton(LoadStages); } return OK; } @@ -857,6 +861,7 @@ LoadStatus = ERROR; TryAgain = true; ThreadLoadingReport(); + //ThreadLoadButton(LoadStages); } return OK; } @@ -971,7 +976,7 @@ uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM ReadValue) { REPORT_MSG(ReadValue,"ThreadLoadStateMachine"); - ThreadLoaded(); + //ThreadLoaded(); ThreadLoadingReport(); if (LoadStages!=ReadValue) @@ -1089,7 +1094,7 @@ uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue) Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0); ThreadLoadStateMachine(LoadStages); } - else + else if (SecondTry == true) { SecondTry = false; Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 80ca05cb7..92b953db5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -54,7 +54,7 @@ double ScrewRunningTime = 0; uint32_t ScrewNumberOfSteps = 0; //holds the current number of steps for the next screw run - will be used to build the cone bool SCREW_TimerActivated = false; uint32_t ScrewControlId = 0xFF; - +bool IgnoreConeMissing = false; static bool KeepWindingCone = false; @@ -156,10 +156,13 @@ uint32_t Winder_Prepare(void *JobDetails) REPORT_MSG(LIMIT, "No cone in winder"); if (Is_PP_Machine()) { - JobEndReason = JOB_THREAD_BREAK; - PrepareReady(Module_Winder,ModuleFail); - AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true); - return ERROR; + if (IgnoreConeMissing == false) + { + JobEndReason = JOB_THREAD_BREAK; + PrepareReady(Module_Winder,ModuleFail); + AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true); + return ERROR; + } } } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 4081b53f2..4339c5312 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -24,6 +24,7 @@ typedef enum threadMotorsEnum extern double TotalProcessedLength; extern double PoolerTotalProcessedLength; extern int SecondFeederCorrection; +extern bool SkipOpenLids,IgnoreConeMissing; void ThreadSetBreakSensorLimit(int limit); @@ -37,7 +38,6 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId); uint32_t ThreadSegmentState(void *SegmentDetails, int SegmentId); uint32_t ThreadDistanceToSpoolState(void); uint32_t ThreadEndState(); -uint32_t ThreadInitialTestStub(); bool Set_Thread_Rockers_Bypass (int value); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 760a0726b..e1f887303 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -112,8 +112,6 @@ uint32_t MotorsConfigMessage(HardwareConfiguration * HWrequest) { IDS_Dispenser_Init(Motor_i-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); } -// if (Motor_i == MOTOR_RDRIVING) -// ThreadInitialTestStub(request); } return status; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index d762e507f..42a56ae8a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -423,7 +423,67 @@ uint32_t ThreadControlSpeedReadFunction(uint32_t IfIndex, uint32_t ReadValue) } return OK; } +uint16_t BreakSensorCounter = 0; +uint16_t BreakSensorLatchCounter = 0; +char TMessage[150]; +uint32_t checkBreakSensor(uint32_t index) +{ + if (BreakSensorenabled == true) + { + if (JobCounter > eOneSecond) + { + if (ReadBreakSensor()==ERROR) + { + BreakSensorCounter++; + BreakSensorLatchCounter++; + if (BreakSensorCounter>=BreakSensordebouncetimemilli) + { + //consider applying the debouce parameters later + usnprintf(TMessage, 60, "ReadBreakSensor Error"); + //BreakSensordebouncetimemilli + JobEndReason = JOB_THREAD_BREAK; + ThreadControlActive = false; + SendJobProgress(0.0,0,false, TMessage); + SendSegmentFail(); + //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); + //EndState(CurrentJob,"ReadBreakSensor Error" ); + ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); + return ERROR; + } //passed limit + }//ReadBreakSensor()==ERROR + else //reset counter - we are looking for consequent calls + { + if (BreakSensorCounter) + { + ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Spike",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); + } + BreakSensorCounter = 0; + } + if (CurrentControlledSpeed[index] < (OriginalMotorSpd_2PPS[index]/3)) + { + BreakSensorCounter++; + BreakSensorLatchCounter++; + if (BreakSensorCounter>=BreakSensordebouncetimemilli) + { + //consider applying the debouce parameters later + usnprintf(TMessage, 60, "thread speed too low"); + JobEndReason = JOB_THREAD_BREAK; + ThreadControlActive = false; + SendJobProgress(0.0,0,false, TMessage); + SendSegmentFail(); + //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); + //EndState(CurrentJob,"ReadBreakSensor Error" ); + ReportWithPackageFilter(ThreadFilter,"thread speed too low Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); + return ERROR; + } + } + + } + } + return OK; + +} int controlIndex = 0; bool keepdata = true; int32_t KeepReadValue = 0; @@ -477,10 +537,7 @@ void testDancersControl() } #endif int MotorFailedSample[MAX_THREAD_MOTORS_NUM] = {0,0,0,0,0}; -char TMessage[150]; //char time[150]; -uint16_t BreakSensorCounter = 0; -uint16_t BreakSensorLatchCounter = 0; bool FirstCalcInJob = true; uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { @@ -510,6 +567,11 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } index = IfIndex&0xFF; + if (index == POOLER_MOTOR) //move break sensor handling up to ensure handling even if tiing control is > 1 msec + { + if (checkBreakSensor(index) == ERROR) + return OK; + } if (MotorTiming[index]>1) { MotorTimer[index]++; @@ -571,61 +633,6 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) avreageSampleValue += MotorSamples[index][i]; avreageSampleValue = avreageSampleValue / (int)MotorsControl[index].pvinputfilterfactormode; - if (BreakSensorenabled == true) - { - if (index == POOLER_MOTOR) - { - if (JobCounter > eOneSecond) - { - if (ReadBreakSensor()==ERROR) - { - BreakSensorCounter++; - BreakSensorLatchCounter++; - if (BreakSensorCounter>=BreakSensordebouncetimemilli) - { - //consider applying the debouce parameters later - usnprintf(TMessage, 60, "ReadBreakSensor Error"); - //BreakSensordebouncetimemilli - JobEndReason = JOB_THREAD_BREAK; - ThreadControlActive = false; - SendJobProgress(0.0,0,false, TMessage); - SendSegmentFail(); - //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); - //EndState(CurrentJob,"ReadBreakSensor Error" ); - ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); - return OK; - } //passed limit - }//ReadBreakSensor()==ERROR - else //reset counter - we are looking for consequent calls - { - if (BreakSensorCounter) - { - ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Spike",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); - } - BreakSensorCounter = 0; - } - if (CurrentControlledSpeed[index] < (OriginalMotorSpd_2PPS[index]/3)) - { - BreakSensorCounter++; - BreakSensorLatchCounter++; - if (BreakSensorCounter>=BreakSensordebouncetimemilli) - { - //consider applying the debouce parameters later - usnprintf(TMessage, 60, "thread speed too low"); - JobEndReason = JOB_THREAD_BREAK; - ThreadControlActive = false; - SendJobProgress(0.0,0,false, TMessage); - SendSegmentFail(); - //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); - //EndState(CurrentJob,"ReadBreakSensor Error" ); - ReportWithPackageFilter(ThreadFilter,"thread speed too low Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); - return OK; - } - } - - } - } - } //Stop Execution if the dancer moves too much if ((abs(avreageSampleValue)> DancerStopActivityLimit[index])&&(JobCounter > eOneSecond)) @@ -783,15 +790,6 @@ double ThreadGetMotorCalculatedError(int DancerId) } //******************************************************************************************************************** -uint32_t ThreadInitialTestStub(HardwareMotor * request) -{ - - - //MotorsConfigMessage(request); - ThreadPrepareState(request); - ThreadPreSegmentState(request,0); - return OK; -} uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams) { if (ThreadParams == NULL) @@ -799,21 +797,21 @@ uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams) return OK; } if(ThreadParams->feederp) - MotorControlConfig[FEEDER_MOTOR].m_params.Kd = ThreadParams->feederp; + MotorControlConfig[FEEDER_MOTOR].m_params.Kp = ThreadParams->feederp; if(ThreadParams->feederi) MotorControlConfig[FEEDER_MOTOR].m_params.Ki = ThreadParams->feederi; if(ThreadParams->feederd) MotorControlConfig[FEEDER_MOTOR].m_params.Kd = ThreadParams->feederd; if(ThreadParams->pullerp) - MotorControlConfig[POOLER_MOTOR].m_params.Kd = ThreadParams->pullerp; + MotorControlConfig[POOLER_MOTOR].m_params.Kp = ThreadParams->pullerp; if(ThreadParams->pulleri) MotorControlConfig[POOLER_MOTOR].m_params.Ki = ThreadParams->pulleri; if(ThreadParams->pullerd) MotorControlConfig[POOLER_MOTOR].m_params.Kd = ThreadParams->pullerd; if(ThreadParams->winderp) - MotorControlConfig[WINDER_MOTOR].m_params.Kd = ThreadParams->winderp; + MotorControlConfig[WINDER_MOTOR].m_params.Kp = ThreadParams->winderp; if(ThreadParams->winderi) MotorControlConfig[WINDER_MOTOR].m_params.Ki = ThreadParams->winderi; if(ThreadParams->winderd) @@ -951,7 +949,8 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) return status; } //******************************************************************************************************************** - uint32_t ThreadPrepareState(void *JobDetails) +bool SkipOpenLids = true; +uint32_t ThreadPrepareState(void *JobDetails) { int Motor_i,i, HW_Motor_Id, Pid_Id; JobTicket* JobTicket = JobDetails; @@ -1016,22 +1015,30 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) //return ERROR; }*/ - if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) == LIMIT)&&(JoggingJobActive == false)) +// if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) == LIMIT)&&(JoggingJobActive == false)) + if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) != LIMIT)&&(JoggingJobActive == false)) { if(Head_Type != HEAD_TYPE_STAPLE_SPUN) { ReportWithPackageFilter(ThreadFilter,"Dyeing head is wide open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DH_LID,RpError,LIMIT,0); - JobEndReason = JOB_LIDS_OPEN; - PrepareReady(Module_Thread,ModuleFail); - return ERROR; + if (SkipOpenLids == false) + { + JobEndReason = JOB_LIDS_OPEN; + PrepareReady(Module_Thread,ModuleFail); + return ERROR; + } } } - if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) == LIMIT)&&(JoggingJobActive == false)) +// if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) == LIMIT)&&(JoggingJobActive == false)) + if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) != LIMIT)&&(JoggingJobActive == false)) { ReportWithPackageFilter(ThreadFilter,"Dryer lid is wide open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,RpError,LIMIT,0); - JobEndReason = JOB_LIDS_OPEN; - PrepareReady(Module_Thread,ModuleFail); - return ERROR; + if (SkipOpenLids == false) + { + JobEndReason = JOB_LIDS_OPEN; + PrepareReady(Module_Thread,ModuleFail); + return ERROR; + } } //start thread control for all motors @@ -1057,6 +1064,8 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) MotorControlConfig[Motor_i].m_preError = 0; MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage + HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!! + temp_dt = MotorControlConfig[Motor_i].m_params.dt/0.001; MotorTiming[Motor_i] = (int)temp_dt; if (MotorTiming[Motor_i]) @@ -1068,7 +1077,7 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) for (i = 0;i < (int)MotorsControl[Motor_i].pvinputfilterfactormode; i++) { //if (Motor_i == DRYER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled - MotorSamples[Motor_i][i] = Control_Read_Dancer_Position(ThreadMotorIdToDancerId[Motor_i],0); //reset the samples value for control beginning + MotorSamples[Motor_i][i] = 0; // else if ((Motor_i == POOLER_MOTOR)||(Motor_i == FEEDER_MOTOR)) // MotorSamples[Motor_i][i] = DancersCfg[ThreadMotorIdToDancerId[Motor_i]].zeropoint; //MotorSpeedSamples[Motor_i][i] = 0; @@ -1148,7 +1157,6 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) if (Motor_i == ThreadMotorIdToMotorId[DRYER_MOTOR]) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled continue; } - HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!! #ifdef TEST_PID_THREAD testDancersControl(); diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index a090a9612..8857b69eb 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,12 @@ +Embedded SW Release note - Version 1.4.6.35 - Pack Mid alpha +============================================================= +Arc head - activate arc heaters gradually +stop FPGA Reinit after 20 trials +Head cleaning - move actuators (with stub - 0xAD7) +fix RML PID support +head open prevent job - (with stub - 0xAD6) +add stub to overrule cone missing - 0xAD8 + Embedded SW Release note - Version 1.4.6.34 - Pack 2+ ============================================================= Validate IFS and cartridge location on manual waste handling - bug #3033 diff --git a/Software/Stubs Collection/stubs/technician view files/new head.tpf b/Software/Stubs Collection/stubs/technician view files/new head.tpf index 25215919f..2ae59d2ed 100644 --- a/Software/Stubs Collection/stubs/technician view files/new head.tpf +++ b/Software/Stubs Collection/stubs/technician view files/new head.tpf @@ -27,7 +27,7 @@ DryerAirHeater 0 - 69.85 + 176.1 false false true @@ -46,8 +46,8 @@ DryerMainHeater 0 - 92.97 - false + 208.58999999999998 + true false true @@ -65,8 +65,8 @@ DryerSecondaryHeater 0 - 92.94 - true + 209.10999999999999 + false false true @@ -84,7 +84,7 @@ HeaterZone3 0 - 39.55 + 96.71 false false true @@ -103,7 +103,7 @@ HeaterZone2 0 - 37.29 + 88.699999999999989 false false true @@ -122,7 +122,7 @@ HeaterZone1 0 - 34.27 + 76.08 false false true @@ -141,7 +141,7 @@ MixerHeater 0 - 54.669999999999995 + 78.37 false false true @@ -179,7 +179,7 @@ HeaterZone5 0 - 43.389999999999993 + 0 false false true @@ -289,7 +289,7 @@ HeaterZone7 0 - 50.449999999999996 + 6.59 false false true @@ -559,7 +559,7 @@ HeadCoverHeater1 0 - 283.75 + 174.69 false false true @@ -578,7 +578,7 @@ HeadCoverHeater2 0 - 283.75 + 174.95999999999998 false false true @@ -654,44 +654,44 @@ -1 - 38e5d1ac-40a5-4c5f-822c-51813cb15b7b - 31 - 144.3584070796461 - 310 - 315.12831858407088 + d2e09fbf-2ac8-4c32-a4f5-45e50e305098 + 1016 + 821.96460176991263 + 361 + 233.95575221238948 0 -14774017 0 - ce709f03-59be-410d-a928-e942c0c46ce3 - 2020-02-09T12:45:24.1272815Z - Process parameters 6 - 50 + 9b265a7c-cc48-4c5a-abed-dfa8c8e3099f + 2020-02-09T13:11:03.3185652Z + Process parameters 2 + 0 0 0 0 - 5000 - 5000 - 80 - 80 - 90 - 110 - 120 - 120 - 135 - 7 - 190 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 0 0 0 - 12 + 0 0 - 135 - 125 - 135 - 135 - 140 - 140 + 0 + 0 + 0 + 0 + 0 + 0 0 0 0 @@ -700,159 +700,166 @@ - Process Parameters Tables Group Guid + Name 0 - Name + Dyeing Speed 1 - Table Index + Min Ink Uptake 2 - Dyeing Speed + Max Ink Uptake 3 - Min Ink Uptake + Feeder Tension 4 - Max Ink Uptake + Puller Tension 5 - Feeder Tension + Winder Tension 6 - Puller Tension + Mixer Temp 7 - Winder Tension + Head Zone 1 Temp 8 - Mixer Temp + Head Zone 2 Temp 9 - Head Zone 1 Temp + Head Zone 3 Temp 10 - Head Zone 2 Temp + Head Zone 4 Temp 11 - Head Zone 3 Temp + Head Zone 5 Temp 12 - Head Zone 4 Temp + Head Zone 6 Temp 13 - Head Zone 5 Temp + Dryer Air Flow 14 - Head Zone 6 Temp + Dryer Zone 1 Temp 15 - Head Zone 7 Temp + Dryer Zone 2 Temp 16 - Head Zone 8 Temp + Dryer Zone 3 Temp 17 - Head Zone 9 Temp + Dryer Buffer Length 18 - Head Zone 10 Temp + Head Air Flow 19 - Head Zone 11 Temp + Process Parameters Tables Group Guid 20 - Head Zone 12 Temp + Table Index 21 - - St Sp Zone 1 Temp - 22 - - - St Sp Zone 2 Temp - 23 - - - Dryer Zone 1 Temp - 24 - - - Dryer Zone 2 Temp - 25 - - - Dryer Zone 3 Temp - 26 - - - Dryer Air Flow - 27 - - - Head Air Flow - 28 - - - Dryer Buffer Length - 29 - + + 11f4748e-ed30-48d6-a08a-afeaa0277e2e + 330 + 12.154867256637203 + 205 + 90.181415929203524 + 0 + 1778C1A7-AFB5-42F9-9E00-E80D30D9FC02 + -1 + 10 + 2 + + + dcf78507-ea09-4529-b635-ec1eeed31141 + 145 + 842.58849557522137 + 357 + 215.82743362831855 + 0 + FE0D0A56-5795-4C5A-8E09-939FBB35C441 + -14774017 + 1275 + 0 + 100 + true + 2 + + + 85762a06-25d4-457a-9974-7eab916d65c5 + 540 + 4.0486725663717493 + 205 + 90.181415929203524 + 0 + 055D0A38-09BD-490D-9852-12B06A4B22F2 + -1 + 10 + 0 + - d2e09fbf-2ac8-4c32-a4f5-45e50e305098 - 1016 - 821.96460176991263 - 361 - 233.95575221238948 + 36f69103-89b6-4076-b8f3-bf4a0806ba05 + 18.250000000000007 + 132.59405940594058 + 317.70833333333337 + 392.24752475247521 0 -14774017 0 - 9b265a7c-cc48-4c5a-abed-dfa8c8e3099f - 2020-02-09T13:11:03.3185652Z - Process parameters 2 - 0 + 0025b28d-1475-4af2-b50e-ecc344c3e43a + 2020-07-05T08:17:42.9870702Z + Process parameters 4 + 50 0 0 0 0 0 - 0 - 0 - 0 - 0 + 80 + 80 + 90 + 100 0 0 0 0 - 100 + 180 0 0 0 - 0 + 3 0 0 0 @@ -860,142 +867,147 @@ 0 0 0 - 0 - 0 - 0 - 0 + 180 + 180 + 180 + 180 0 - Name + Process Parameters Tables Group Guid 0 - Dyeing Speed + Name 1 - Min Ink Uptake + Table Index 2 - Max Ink Uptake + Dyeing Speed 3 - Feeder Tension + Min Ink Uptake 4 - Puller Tension + Max Ink Uptake 5 - Winder Tension + Feeder Tension 6 - Mixer Temp + Puller Tension 7 - Head Zone 1 Temp + Winder Tension 8 - Head Zone 2 Temp + Mixer Temp 9 - Head Zone 3 Temp + Head Zone 1 Temp 10 - Head Zone 4 Temp + Head Zone 2 Temp 11 - Head Zone 5 Temp + Head Zone 3 Temp 12 - Head Zone 6 Temp + Head Zone 4 Temp 13 - Dryer Air Flow + Head Zone 5 Temp 14 - Dryer Zone 1 Temp + Head Zone 6 Temp 15 - Dryer Zone 2 Temp + Head Zone 7 Temp 16 - Dryer Zone 3 Temp + Head Zone 8 Temp 17 - Dryer Buffer Length + Head Zone 9 Temp 18 - Head Air Flow + Head Zone 10 Temp 19 - Process Parameters Tables Group Guid + Head Zone 11 Temp 20 - Table Index + Head Zone 12 Temp 21 + + R Blower Flow + 22 + + + R Blower Temp + 23 + + + L Blower Flow + 24 + + + L Blower Temp + 25 + + + Dryer Zone 1 Temp + 26 + + + Dryer Zone 2 Temp + 27 + + + Dryer Zone 3 Temp + 28 + + + Dryer Air Flow + 29 + + + Head Air Flow + 30 + + + Dryer Buffer Length + 31 + + + Pressure Build Up + 32 + - - 11f4748e-ed30-48d6-a08a-afeaa0277e2e - 330 - 12.154867256637203 - 205 - 90.181415929203524 - 0 - 1778C1A7-AFB5-42F9-9E00-E80D30D9FC02 - -1 - 10 - 2 - - - dcf78507-ea09-4529-b635-ec1eeed31141 - 145 - 842.58849557522137 - 357 - 215.82743362831855 - 0 - FE0D0A56-5795-4C5A-8E09-939FBB35C441 - -14774017 - 1275 - 0 - 100 - true - 2 - - - 85762a06-25d4-457a-9974-7eab916d65c5 - 540 - 4.0486725663717493 - 205 - 90.181415929203524 - 0 - 055D0A38-09BD-490D-9852-12B06A4B22F2 - -1 - 10 - 0 - -- cgit v1.3.1