From 9ff1fdb7a1149d5c8335f78d236d59838aaa45c0 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 22 Jun 2020 15:24:46 +0300 Subject: Embedded SW Release note - Version 1.4.6.33 - Pack 2+ ============================================================= remove logs from I2C errors - show only summary. stop job, prevent job on internal heating. remove current alarm on entering idle. motor go to switch - improve accuracy. handle machine specific spool offset. add additional 4 steps for the RTFU raising in RML feeder tension. fix midtank warning bug (these alarm went missing). fix safety handling. I2C FIFO in code (not active yet). --- .../Embedded/Modules/Thread/Thread_Winder.c | 9 +++++++-- .../Embedded/Modules/Thread/Thread_print.c | 19 ++++++++----------- 2 files changed, 15 insertions(+), 13 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index b796cae50..0e3bf95a4 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -106,6 +106,11 @@ uint32_t InternalWindingConfigMessage(JobSpool* request) InternalWinderCfg.segmentoffsetpulses = request->segmentoffsetpulses; InternalWinderCfg.spoolbackingrate = request->backingrate; InternalWinderCfg.startoffsetpulses = request->startoffsetpulses; + if (request->has_limitswitchstartpointoffset) + { + InternalWinderCfg.startoffsetpulses += request->limitswitchstartpointoffset; + Report("limit switch start point offset",__FILE__,__LINE__,(int)(request->startoffsetpulses),RpWarning,(int)(request->limitswitchstartpointoffset), 0); + } InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate; InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*3;//request->rotationsperpassage; if (request->rotationsperpassage > 6.1) @@ -543,7 +548,7 @@ uint32_t WinderDistanceToSpoolEnded(uint32_t deviceID, uint32_t ReadValue) } uint32_t ScrewDTSCallback(uint32_t deviceID, uint32_t BusyFlag) { - REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback called"); + Report("ScrewDTSCallback called", __FILE__,__LINE__,msec_millisecondCounter, RpMessage, ScrewSpeed, 0); SafeRemoveControlCallback(ScrewDTSControlId, ScrewDTSCallback); if (ScrewControlId != 0xFF) @@ -566,7 +571,7 @@ uint32_t WinderDistanceToSpoolState(void ) REPORT_MSG ((int)DTS_Time,"WinderDistanceToSpoolState"); ScrewDTSControlId = AddControlCallback("screw DTS",ScrewDTSCallback, DTS_Time-WinderBackToBaseTime,TemplateDataReadCBFunction,0,0,0); - REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback start"); + Report("ScrewDTSCallback start", __FILE__,DTS_Time,msec_millisecondCounter, RpMessage, WinderBackToBaseTime, 0); return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index e7a333cc2..21211481e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -794,16 +794,6 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) } uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams) { - /* - FEEDER_MOTOR, - DRYER_MOTOR, - POOLER_MOTOR, - WINDER_MOTOR, - MotorControlConfig[Motor_i].m_params.Kd = MotorsControl[Pid_Id].derivativetime; - MotorControlConfig[Motor_i].m_params.Kp = MotorsControl[Pid_Id].proportionalgain; - MotorControlConfig[Motor_i].m_params.Ki = MotorsControl[Pid_Id].integraltime; - - */ if (ThreadParams == NULL) { return OK; @@ -828,6 +818,7 @@ uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams) MotorControlConfig[WINDER_MOTOR].m_params.Ki = ThreadParams->winderi; if(ThreadParams->winderd) MotorControlConfig[WINDER_MOTOR].m_params.Kd = ThreadParams->winderd; + ReportWithPackageFilter(ThreadFilter,"Rockers activity",__FILE__,__LINE__,(int)Thread_Rockers_Bypass,RpWarning,(int)ThreadParams->bypassrockers,0); if(ThreadParams->bypassrockers) Thread_Rockers_Bypass = true; @@ -850,14 +841,20 @@ uint32_t Release_Right_TFU_Tension() { Report("Release_Right_TFU_Tension",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_RDANCER,RpMessage,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].pulseperround/4,0); RTFU_Up = false; - status = MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].pulseperround/2, Release_Right_TFU_TensionCallback,1000); + status = MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].pulseperround/4* MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].microstep, Release_Right_TFU_TensionCallback,1000); } return status; } +uint32_t Adjust_Right_TFU_Tension_2nd_Callback(uint32_t MotorId, uint32_t ReadValue) +{ + Report("Adjust_Right_TFU_Tension_2ndCallback 4 more steps",__FILE__,__LINE__,MotorId,RpMessage,0,0); + return OK; +} uint32_t Adjust_Right_TFU_Tension_Callback(uint32_t MotorId, uint32_t ReadValue) { Report("Adjust_Right_TFU_Tension_Callback",__FILE__,__LINE__,MotorId,RpMessage,0,0); + MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize,4* MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].microstep, Release_Right_TFU_TensionCallback,1000); RTFU_Up = true; return OK; } -- cgit v1.3.1 From 5c9feefa07d31b521beef374697fbda7111816aa Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Tue, 23 Jun 2020 16:24:47 +0300 Subject: Addd define and logic for emc testing with motors internal clock (EMC_FORCE_MOT_CLOCK_INTERNAL) --- Software/Embedded_SW/Embedded/DataDef.h | 2 ++ .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 22 +++++++++++++++++++--- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 16 ++++++++++++---- .../Embedded/Modules/Thread/Thread_Winder.c | 2 +- .../Embedded/StateMachines/Printing/JobSTM.c | 2 ++ 5 files changed, 36 insertions(+), 8 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 045bb2349..af252d9b5 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -26,6 +26,8 @@ #define USE_POWERSTEP01 +//#define EMC_FORCE_MOT_CLOCK_INTERNAL + //#define VAC_TEST //#define SPECIAL_DISPENSERS diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c index 9255a3c4f..a10c9fa1e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -692,7 +692,15 @@ uint32_t FPGA_MotorConfig_callback(TimerMotors_t _motorId, uint32_t ReadValue) if(MotorsCfg[_motorId].has_p01configword == true) { - temp |= MotorsCfg[_motorId].p01configword<<8; + if( (_motorId == HARDWARE_MOTOR_TYPE__MOTO_LDRIVING) || (_motorId == HARDWARE_MOTOR_TYPE__MOTO_RDRIVING) || + (_motorId == HARDWARE_MOTOR_TYPE__MOTO_SCREW) || (_motorId == HARDWARE_MOTOR_TYPE__MOTO_SCREW) ) + { + #ifdef EMC_FORCE_MOT_CLOCK_INTERNAL + temp |= (MotorsCfg[_motorId].p01configword & ~(0x000F))<<8; + #else + temp |= MotorsCfg[_motorId].p01configword<<8; + #endif + } MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback); } else//backward compatibility @@ -717,8 +725,16 @@ uint32_t FPGA_MotorConfig_callback(TimerMotors_t _motorId, uint32_t ReadValue) } else { - //temp |= 0x1C8F<<8;//need to change in current mode? - temp |= (0x1C80 | (MotorsCfg[_motorId].configword & 0x000F)) <<8;// + if( (_motorId == HARDWARE_MOTOR_TYPE__MOTO_LDRIVING) || (_motorId == HARDWARE_MOTOR_TYPE__MOTO_RDRIVING) || + (_motorId == HARDWARE_MOTOR_TYPE__MOTO_SCREW) || (_motorId == HARDWARE_MOTOR_TYPE__MOTO_SCREW) ) + { + #ifdef EMC_FORCE_MOT_CLOCK_INTERNAL + temp |= 0x1C80<<8; + #else + temp |= (0x1C80 | (MotorsCfg[_motorId].configword & 0x000F)) <<8; + #endif + + } MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback); } } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 190d564e0..8fb0fc573 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -73,10 +73,18 @@ uint32_t MotorsInit(void) } //option to change itafter initialization (to solve EMC issues) in the function Control_motors_clock_source - F3_Moto_Clk_Src_Sel.Motor.LDRIVING = EXTERNAL; - F3_Moto_Clk_Src_Sel.Motor.RDRIVING = EXTERNAL; - F3_Moto_Clk_Src_Sel.Motor.SCREW = EXTERNAL; - F3_Moto_Clk_Src_Sel.Motor.WINDER = EXTERNAL; + #ifdef EMC_FORCE_MOT_CLOCK_INTERNAL + F3_Moto_Clk_Src_Sel.Motor.LDRIVING = INTERNAL; + F3_Moto_Clk_Src_Sel.Motor.RDRIVING = INTERNAL; + F3_Moto_Clk_Src_Sel.Motor.SCREW = INTERNAL; + F3_Moto_Clk_Src_Sel.Motor.WINDER = INTERNAL; + #else + F3_Moto_Clk_Src_Sel.Motor.LDRIVING = EXTERNAL; + F3_Moto_Clk_Src_Sel.Motor.RDRIVING = EXTERNAL; + F3_Moto_Clk_Src_Sel.Motor.SCREW = EXTERNAL; + F3_Moto_Clk_Src_Sel.Motor.WINDER = EXTERNAL; + #endif + F3_MOTO_CLK_SRC_SEL = F3_Moto_Clk_Src_Sel.ushort; return OK; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 0e3bf95a4..80ca05cb7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -123,7 +123,7 @@ uint32_t InternalWindingConfigMessage(JobSpool* request) InternalWinderCfg.diameter = request->diameter; usnprintf(ScrewStr, 150, "WindingConfig start,offset,head,tail {, %d, %d, %d, %d, %d}",InternalWinderCfg.startoffsetpulses,(int)InternalWinderCfg.segmentoffsetpulses, (int)InternalWinderCfg.spoolbackingrate,(int)InternalWinderCfg.SpoolBottomBackingRate,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000)); - Report(ScrewStr,__FILE__,__LINE__,(int)InternalWinderCfg.diameter,RpWarning,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000), 0); + Report(ScrewStr,__FILE__,__LINE__,(int)InternalWinderCfg.startoffsetpulses,RpWarning,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000), 0); return status; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index b5715ca0a..48ade0798 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -417,6 +417,7 @@ uint32_t ThreadJoggingFunc(int speed) Tspool->segmentoffsetpulses = 1000; Tspool->startoffsetpulses = 220; Tspool->rotationsperpassage = 3.1415926*2; + Tspool->has_limitswitchstartpointoffset = false; Ticket.spool = Tspool; CurrentJob = &Ticket; InternalWindingConfigMessage(Tspool); @@ -599,6 +600,7 @@ uint32_t ThreadCleaningJob(int speed) Tspool->segmentoffsetpulses = 1000; Tspool->startoffsetpulses = 220; Tspool->rotationsperpassage = 3.1415926*2; + Tspool->has_limitswitchstartpointoffset = false; Ticket.spool = Tspool; CurrentJob = &Ticket; job_length = CurrentJob->length + dryerbufferMeters; -- cgit v1.3.1 From 3d6d6436378270961c571602d84bff870162b3af Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 25 Jun 2020 15:33:16 +0300 Subject: heaters activation problem in I2C - surge of power. cancel overheat alarm when changing RML, improve thread feeder tension, set tension parameter on stub, --- .../Head_Card/IO_Ports/Heaters/Head_Heaters.c | 2 +- .../Embedded/Drivers/I2C_Communication/I2C_Comm.c | 9 ++- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 17 +++++ .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 2 + .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 76 ++++++++++++++++++++++ .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 7 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 47 +++++++++---- .../Embedded/Modules/General/GeneralHardware.c | 2 +- .../Embedded/Modules/Heaters/Heaters_print.c | 33 ++++++---- .../Embedded/Modules/Stubs_Handler/Progress.c | 8 +++ .../Embedded/Modules/Thread/Thread_ex.h | 1 + .../Embedded/Modules/Thread/Thread_print.c | 11 +++- .../StateMachines/Initialization/InitSequence.c | 1 + 14 files changed, 188 insertions(+), 30 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') 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 e4f7f81ad..a5c9376d2 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 @@ -59,7 +59,7 @@ uint32_t Write_Head_Card_Heaters_Commands() if(Semaphore_pend(I2C_Sem, BIOS_NO_WAIT)) { status = Head_Write_IO_Reg(0x40,LOW_AND_HIGH); - status = Head_Write_IO_Reg(0x42,LOW); + status |= Head_Write_IO_Reg(0x42,LOW); Semaphore_post(I2C_Sem); } else diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c index ab05c92a9..8bd21b9b4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c @@ -123,6 +123,11 @@ uint32_t I2C_ReadBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data return 0xFF; } + /*if (Task_self()!= I2C_Task_Handle) + { + status = ERROR; + } + status = OK;*/ I2CMasterSlaveAddrSet(I2C_BASE, addr, true); if (len == 1) { @@ -223,7 +228,7 @@ 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) + if (Arb_Loss_Count++ >= 5) { Arb_Loss_Count= 0; Init_All_I2C(); @@ -276,7 +281,7 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u //status = I2C_ReadFifo(I2C_BASE, Slave_Add, buff, No_BytesToRead); if (status) { - if (Arb_Loss_Count++ > 10) + if (Arb_Loss_Count++ >= 5) { Arb_Loss_Count= 0; Init_All_I2C(); 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 13ecbd12c..44ab8d710 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -49,6 +49,8 @@ typedef enum HeadArcPressureAction, HeadValveAction, + DispenserReadData, + /* enum for WHS :*/ WHS_start, WHS_init_I2C_IO, @@ -225,6 +227,18 @@ void Trigger_Head_MixerValve(int direction) return; } +void Trigger_Dispenser_ReadData(int dispenserId) +{ + I2C_ReadingMessageStruc I2C_ReadingMessage; + //uint8_t Midtank_i; + + I2C_ReadingMessage.messageId = DispenserReadData; + I2C_ReadingMessage.parameter = dispenserId; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; +} + void Trigger_HeaterWriting(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; @@ -624,6 +638,9 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) break; case Head_Outputs_Writing: break; + case DispenserReadData: + Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter); + break; case WHS_PT100_Reading: for (Sensor_i = WHS_PT100_1_0X80_0; Sensor_i <= WHS_PT100_4_0X82_1; Sensor_i++) { 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 35440bca5..20fcb0074 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -55,4 +55,6 @@ void Trigger_Head_Magnet(int direction); void Trigger_Head_MixerValve(int direction); void Trigger_Head_PressureArc(bool Enable_Disable); +void Trigger_Dispenser_ReadData(int dispenserId); + #endif /* DRIVERS_I2C_COMMUNICATION_I2C_TASK_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c index f75e6c6e6..c5f8037aa 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 @@ -430,7 +430,7 @@ void SendLimitedBlowerControl(int mV) //SegmentReady(Module_Heaters,ModuleFail); ReportWithPackageFilter(HeatersFilter, "Waste airflow Error",__FILE__,__LINE__,mV,RpError, 0,0); HeatersEnd(); - return OK; + return; } } else diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 8fb0fc573..8f5bd0b1d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -286,6 +286,82 @@ bool MotorParseStatus(TimerMotors_t _motorId) } return OK; } +uint32_t MotorGetOverCurrentStatus(TimerMotors_t _motorId) +{ + if (MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) + { + return (PStep01Status[_motorId].bits.OCD_ActiveLow==0); + } + else + if (MotorDriverResponse[_motorId].DriverType == VoltageMotDriver) + { + return (VolMotDriverStatus[_motorId].bits.OCD_ActiveLow==0); + } + else + if (MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) + { + return (CurMotDriverStatus[_motorId].bits.OCD_ActiveLow==0); + } + + return ERROR; +} +uint32_t MotorGetUnderVoltageStatus(TimerMotors_t _motorId) +{ + if (MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) + { + return (PStep01Status[_motorId].bits.UVLO_ActiveLow==0); + } + else + if (MotorDriverResponse[_motorId].DriverType == VoltageMotDriver) + { + return (VolMotDriverStatus[_motorId].bits.UVLO_ActiveLow==0); + } + else + if (MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) + { + return (CurMotDriverStatus[_motorId].bits.UVLO_ActiveLow==0); + } + + return ERROR; +} +uint32_t MotorGetStallStatus(TimerMotors_t _motorId) +{ + if (MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) + { + return (PStep01Status[_motorId].bits.STALL_A_ActiveLow==0); + } + else + if (MotorDriverResponse[_motorId].DriverType == VoltageMotDriver) + { + return (VolMotDriverStatus[_motorId].bits.STEP_LOSS_A_ActiveLow && VolMotDriverStatus[_motorId].bits.STEP_LOSS_B_ActiveLow); + } + else + if (MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) + { + return false; + } + + return ERROR; +} +uint32_t MotorGetOverHeatStatus(TimerMotors_t _motorId) +{ + if (MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) + { + return (PStep01Status[_motorId].bits.TH_STATUS>1); + } + else + if (MotorDriverResponse[_motorId].DriverType == VoltageMotDriver) + { + return (VolMotDriverStatus[_motorId].bits.TH_SD_ActiveLow==0); + } + else + if (MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) + { + return (CurMotDriverStatus[_motorId].bits.TH_SD_ActiveLow==0); + } + + return ERROR; +} uint32_t MotorGetStatus(TimerMotors_t _motorId) { diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index 5e39b481a..aa5ffbb12 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -222,7 +222,7 @@ typedef union bool WRONG_CMD : 1; //8 bool UVLO_ActiveLow : 1; //9 bool TH_WRN : 1; //10 - bool TH_SD : 1; //11 + bool TH_SD_ActiveLow : 1; //11 bool OCD_ActiveLow : 1; //12 bool X_Bit_13 : 1; //13 bool X_Bit_14 : 1; //14 @@ -328,6 +328,11 @@ uint32_t MotorSetKvalDec(TimerMotors_t _motorId, uint8_t Value); void MotorActionsInit(void); +uint32_t MotorGetOverHeatStatus(TimerMotors_t _motorId); +uint32_t MotorGetStallStatus(TimerMotors_t _motorId); +uint32_t MotorGetUnderVoltageStatus(TimerMotors_t _motorId); +uint32_t MotorGetOverCurrentStatus(TimerMotors_t _motorId); + uint32_t MotorGetStatus(TimerMotors_t _motorId); uint32_t MotorGetStatusFromFPGA_Callback(TimerMotors_t _motorId,uint32_t Data); typedef enum { diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index f73c1c2c7..356f192a3 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -1240,14 +1240,14 @@ uint32_t AlarmHandlingLoop(uint32_t tick) if (doubleValue >= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit)) { 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 (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*CurrentAlarmLowLimit))&&(isHeaterReady(AlarmItem[Alarm_i].DeviceId)==false)&&(doubleValue>100)) { 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 (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 @@ -1255,8 +1255,8 @@ uint32_t AlarmHandlingLoop(uint32_t tick) 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); + //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); } } } @@ -1281,7 +1281,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) { //usnprintf(AlarmReasonStr, 100, "OverCurrent Alarm %d ON dev %d debounce %d/%d value %d",AlarmItem[Alarm_i].EventType,AlarmItem[Alarm_i].DeviceId,AlarmState[Alarm_i].DebounceCounter,AlarmItem[Alarm_i].DebounceValue,(int)(doubleValue*100)); //ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); - ReportWithPackageFilter(AlarmFilter,"OverCurrent Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + // ReportWithPackageFilter(AlarmFilter,"OverCurrent Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); } } } @@ -1294,7 +1294,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) { //usnprintf(AlarmReasonStr, 100, "LOOP BREAK Alarm %d ON dev %d debounce %d/%d value %d",AlarmItem[Alarm_i].EventType,AlarmItem[Alarm_i].DeviceId,AlarmState[Alarm_i].DebounceCounter,AlarmItem[Alarm_i].DebounceValue,(int)(doubleValue*100)); //ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); - ReportWithPackageFilter(AlarmFilter,"loop break Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + // ReportWithPackageFilter(AlarmFilter,"loop break Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); } } } @@ -1309,7 +1309,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) } break; case ALARM_SOURCE_TYPE__MotorAlarm: - if (CheckMotorAlarms) + if (0)//(CheckMotorAlarms) { if (FPGA_WD_Occurred == true) { @@ -1321,7 +1321,32 @@ uint32_t AlarmHandlingLoop(uint32_t tick) } else { - value = MotorGetStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); + switch (AlarmItem[Alarm_i].AlarmValue) + { + case 1: + Status = MotorGetOverCurrentStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); + if (Status == true) + Report("------Overcurrent on motor------", __FILE__,__LINE__,AlarmItem[Alarm_i].DeviceId, RpMessage, AlarmItem[Alarm_i].EventType, 0); + break; + case 2: + Status = MotorGetUnderVoltageStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); + if (Status == true) + Report("------Undervoltage on motor------", __FILE__,__LINE__,AlarmItem[Alarm_i].DeviceId, RpMessage, AlarmItem[Alarm_i].EventType, 0); + break; + case 3: + Status = MotorGetStallStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); + if (Status == true) + Report("------Stall on motor------", __FILE__,__LINE__,AlarmItem[Alarm_i].DeviceId, RpMessage, AlarmItem[Alarm_i].EventType, 0); + break; + case 4: + Status = MotorGetOverHeatStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); + if (Status == true) + Report("------Overtemperature on motor------", __FILE__,__LINE__,AlarmItem[Alarm_i].DeviceId, RpMessage, AlarmItem[Alarm_i].EventType, 0); + break; + default: + Status = false; + } + /*value = MotorGetStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); if (AlarmItem[Alarm_i].AlarmDirection == true) { if (value && AlarmItem[Alarm_i].AlarmValue) @@ -1335,7 +1360,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) { Status = true; } - } + }*/ } } else diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index d2379c309..6d4d1c668 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -496,7 +496,7 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) LOG_ERROR (DispenserId, "Dispenser identification failed"); //return ERROR; } - status |= Dispenser_EEPROM_Read_Data(DispenserId); + Trigger_Dispenser_ReadData(DispenserId); } Calculateinit(); } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 1221be915..309eada85 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -785,10 +785,13 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) AlarmHandlingSetAlarm(HeaterUnderEventType_B[HeaterId], false); AlarmHandlingSetAlarm(HeaterEventType[HeaterId], false); - if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) - Enable_Reading_Heaters_ADC(HeaterId2CurrentId[HeaterId]); - else - Enable_Reading_Heaters_Current(HeaterId2CurrentId[HeaterId]); + if (HeaterPreviousRead[HeaterId] < HeaterCmd[HeaterId].targettemperatue ) + { + if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) + Enable_Reading_Heaters_ADC(HeaterId2CurrentId[HeaterId]); + else + Enable_Reading_Heaters_Current(HeaterId2CurrentId[HeaterId]); + } //ReportWithPackageFilter(HeatersFilter,"PrepareHeater Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF) @@ -1021,11 +1024,19 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) ReportWithPackageFilter(HeatersFilter, "Temperature Error",__FILE__,__LINE__,index,RpError, 0,0); return OK; } - if (getIdleState() == false) + //if (getIdleState() == false) + //not idle, not cooling to temp { - ReportWithPackageFilter(HeatersFilter,"DC Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterReady[index],0); - ReportWithPackageFilter(HeatersFilter,"Heater over the max temperature",__FILE__,index,OverHeatCounter[index],RpWarning,HeaterControl[index].sensormaxvalue, 0); - AlarmHandlingSetAlarm(HeaterEventType[index], true); + if ((HeaterReady[index]==false)&&(HeaterPreviousRead[index]>HeaterCmd[index].targettemperatue)) + { + ReportWithPackageFilter(HeatersFilter,"DC Heater Over the max temperature, cooling off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterCmd[index].targettemperatue,0); + } + else + { + ReportWithPackageFilter(HeatersFilter,"DC Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterReady[index],0); + ReportWithPackageFilter(HeatersFilter,"Heater over the max temperature",__FILE__,index,OverHeatCounter[index],RpWarning,HeaterControl[index].sensormaxvalue, 0); + AlarmHandlingSetAlarm(HeaterEventType[index], true); + } } } if (index == HEATER_TYPE__DryerAirHeater) @@ -1767,21 +1778,21 @@ uint32_t HeatersControlLoop(uint32_t tick) continue; if (DCTimeSliceAllocation[DcHeaterId] > 0) //heater active { - if (SliceCounter == 0) + if (SliceCounter == DcHeaterId) { if (HeaterMaxTempFlag[DcHeaterId] == false) { ActivateHeater (DcHeaterId); } } - else if (SliceCounter >= DCTimeSliceAllocation[DcHeaterId]) //turn off + else if (SliceCounter-DcHeaterId >= DCTimeSliceAllocation[DcHeaterId]) //turn off { DeActivateHeater (DcHeaterId); } } else { - DeActivateHeater (DcHeaterId); + DeActivateHeater (DcHeaterId); } } //handle the time sharing module diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 0575f0388..5a4e4f02d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -492,6 +492,14 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = true; } else + if(request->amount == 0xAD5) //Set SecondFeederCorrection + { + LOG_ERROR(request->delay,"Set SecondFeederCorrection"); + SecondFeederCorrection = request->delay; + response.progress = SecondFeederCorrection; + 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_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 5c9b360f6..4081b53f2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -23,6 +23,7 @@ typedef enum threadMotorsEnum extern double TotalProcessedLength; extern double PoolerTotalProcessedLength; +extern int SecondFeederCorrection; void ThreadSetBreakSensorLimit(int limit); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 21211481e..8a4960433 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -846,15 +846,22 @@ uint32_t Release_Right_TFU_Tension() return status; } +int SecondFeederCorrection = 4; uint32_t Adjust_Right_TFU_Tension_2nd_Callback(uint32_t MotorId, uint32_t ReadValue) { - Report("Adjust_Right_TFU_Tension_2ndCallback 4 more steps",__FILE__,__LINE__,MotorId,RpMessage,0,0); + MotorStop (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,Soft_Stop); //per L6470 errata between mov and run commands + Report("Adjust_Right_TFU_Tension_2ndCallback x more steps",__FILE__,__LINE__,MotorId,RpMessage,SecondFeederCorrection,0); + if (JobIsActive()==false) + { + Report("release tension - job aborted",__FILE__,__LINE__,MotorId,RpMessage,0,0); + Release_Right_TFU_Tension(); + } return OK; } uint32_t Adjust_Right_TFU_Tension_Callback(uint32_t MotorId, uint32_t ReadValue) { Report("Adjust_Right_TFU_Tension_Callback",__FILE__,__LINE__,MotorId,RpMessage,0,0); - MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize,4* MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].microstep, Release_Right_TFU_TensionCallback,1000); + MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize,SecondFeederCorrection* MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].microstep, Adjust_Right_TFU_Tension_2nd_Callback,1000); RTFU_Up = true; return OK; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index e14b420fa..761433888 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -846,6 +846,7 @@ uint32_t PowerUpUpdateFunc(MessageContainer* requestContainer) StartPowerUpRequest* request = start_power_up_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ustrncpy (PowerUpToken, requestContainer->token,36); + PowerUpUpdate(MachineStateDetail); start_power_up_request__free_unpacked(request,NULL); return status; } -- cgit v1.3.1 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 --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- Software/Embedded_SW/Embedded/DataDef.h | 2 +- .../Head_Card/EEPROM/Head_EEPROM.c | 2 +- .../Embedded/Drivers/I2C_Communication/I2C_Comm.c | 48 +++++++- .../WHS_Card/Cartridges/Cartridges.c | 132 --------------------- .../WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c | 12 +- .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 5 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 5 + .../Embedded/Modules/Diagnostics/Diagnostics.c | 10 +- .../Embedded_SW/Embedded/Modules/General/process.c | 6 + .../Embedded/Modules/Heaters/Heaters_print.c | 25 ++-- .../Embedded/Modules/Thread/ThreadLoad.c | 6 +- .../Embedded/Modules/Thread/Thread_print.c | 10 +- .../Embedded/Modules/Waste/Waste_init.c | 46 +++++-- .../Embedded/Software Release Notes.txt | 14 +++ 15 files changed, 146 insertions(+), 179 deletions(-) delete mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') 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 60707d0cb..4b1fec423 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,33}; +TangoVersion_t _gTangoVersion = {1,4,6,34}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 4c74839a1..4b6bdc129 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -20,7 +20,7 @@ #define NO_INITIAL_HEATING #define MAX_STRING_LEN 255 //Embedded version + filter.c -//#define WATCHDOG +#define WATCHDOG //#define DISPESER_TEST //#define FPGA_WATCHDOG_DISABLE 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 d7f0c8277..0d767b864 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 @@ -121,7 +121,7 @@ uint32_t Check_Head_Type_Via_EEPROM() if (status == 0xFF) { ACTIVITY_RED_LED_ON; - AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true); + //AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true); } if((Head_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF)) diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c index 8bd21b9b4..7c98b53da 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c @@ -22,9 +22,9 @@ #include "i2c_fifo.h" #include "i2c.h" - - - +uint32_t LastReadI2C_BASE; unsigned char LastReadaddr; unsigned char* LastReaddata; unsigned int LastReadlen; +uint32_t LastWriteI2C_BASE; unsigned char LastWriteaddr; unsigned char *LastWritedata; unsigned int LastWritelen; +Task_Handle TaskId; uint32_t Arb_Loss_Count = 0; //***************************************************************************** //! Indicates whether or not the I2C bus has timed out. @@ -50,6 +50,7 @@ bool I2CMasterTimeout(uint32_t ui32Base) } } +char I2CErrMsg[181]; uint32_t I2C_WriteBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data, unsigned int len) { uint32_t status = OK; @@ -212,11 +213,31 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf, //Byte2Write = Byte2Write & 0xFF; - /*if(No_BytesToWrite <= 2) { + status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite); + //status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite); + /*if(No_BytesToWrite <= 2) + { status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite); - } else { + } + else + { status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite); }*/ + if (status == OK) + { + //LastWriteI2C_BASE = I2C_BASE; + LastWriteaddr = Slave_Add; + LastWritedata = buff; + LastWritelen = No_BytesToWrite; + TaskId = Task_self(); + } + else + { + usnprintf(I2CErrMsg, 180, "I2C Err write 0x%x 0x%x, last good read 0x%x, %d, write 0x%x, %d, T 0x%x 0x%x",status,Slave_Add, + LastReadaddr, LastReadlen, + LastWriteaddr, LastWritelen, Task_self(),TaskId); + Report(I2CErrMsg, __FILE__, __LINE__, status, RpWarning, Slave_Add, 0); + } //uint32_t I2C_W_buf[256] = {0},i; @@ -225,7 +246,6 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf, // I2C_W_buf[i] = request->bytestwrite[i]; // } - status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite); if (status) { if (Arb_Loss_Count++ >= 5) @@ -289,6 +309,22 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u } } + if (status == OK) + { + //LastReadI2C_BASE = I2C_BASE; + LastReadaddr = Slave_Add; + LastReaddata = buff; + LastReadlen = No_BytesToRead; + TaskId = Task_self(); + } + else + { + usnprintf(I2CErrMsg, 180, "I2C Err read 0x%x 0x%x, last good read 0x%x, %d, write 0x%x, %d, T 0x%x 0x%x",status,Slave_Add, + LastReadaddr, LastReadlen, + LastWriteaddr, LastWritelen, Task_self(),TaskId); + Report(I2CErrMsg, __FILE__, __LINE__, status, RpWarning, Slave_Add, 0); + } + /*else { if (Arb_Loss_Count) diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c deleted file mode 100644 index 8d11589be..000000000 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Cartridges.c - * - * Created on: Jun 29, 2020 - * Author: avi - */ -#include "include.h" -#include "DataDef.h" -#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" - -typedef enum -{ - UPPER_CART, - LOWER_CART, - UNKNOWN_CART,//at power up - NONE_CART,//NA -}WASTE_ID; - -//WASTE_ID Waste_Id; - -typedef enum -{ - CART_UNKNOWN,//after power-up... - CART_OUT, - CART_IN, - CART_SELECTED, -}CART_STATE; - -typedef enum -{ - CART_INIT,//unknown, acquire info, decide - CART_IDLE,//empty + valid (RFID tag OK), ready to use - CART_FULL, - CART_EMPTYING, - CART_EMPTYING_PAUSED, - CART_BLOCKED,//RFID FAILED ... -}CART_STATUS;// mode - -typedef struct -{ - CART_STATE State; - uint8_t RFID_Legality; - double Leval;//waste tank level mili litters - uint8_t Warnings;//empty / full / overflow - bool Emptying_Process;// YES / NO - uint8_t Emptying_Duration; //if Emptying_Process YES -}WASTE_HANDLING; - -typedef struct -{ - uint8_t Door; // OPEN / CLOSE / unknown - uint8_t Waste_Active; // CART_2 / CART_3 / NONE - WASTE_HANDLING Waste_Handling[2]; -}CART_HANDLING; - -CART_HANDLING Cart_Handling; - -void cartWaste_Init() -{ - //Initial state - OUT - Cart_Handling.Waste_Handling[UPPER_CART].State = CART_UNKNOWN; - Cart_Handling.Waste_Handling[LOWER_CART].State = CART_UNKNOWN; - - Pannel_Leds(CART_2,MODE_OFF); - Pannel_Leds(CART_3,MODE_OFF); - - Cart_Handling.Door = UNKNOWN; - Cart_Handling.Waste_Active = NONE_CART; -} - -void cartCart_door()//Polled by polling function. Notify waste. Poll each 1 second. During active filling poll each 100msec -{ - if(Get_COVER_1_State(CartridgesDoor))//to check the polarity - { - Cart_Handling.Door = OPEN; - } - else - { - Cart_Handling.Door = CLOSE; - } -} - -void cartCART_INSERTED(WASTE_ID CartId) //every 1 sec. -{ - switch(CartId) - { - case UPPER_CART: - if(Is_Cartridge_Present(CART_2) == true) - { - Cart_Handling.Waste_Handling[UPPER_CART].State = CART_IN; - Pannel_Leds(CART_2,MODE_ON); - } - break; - case LOWER_CART: - if(Is_Cartridge_Present(CART_3) == true) - { - Cart_Handling.Waste_Handling[LOWER_CART].State = CART_IN; - Pannel_Leds(CART_3,MODE_ON); - } - break; - default: - break; - } -} - -void cartCART_EXTRACTED(WASTE_ID CartId) -{ - if(Cart_Handling.Waste_Active == CART_SELECTED) - { - #warning notify waste module - } - - Cart_Handling.Waste_Handling[CartId].State = CART_OUT; - - switch(CartId) - { - case UPPER_CART: - if(Is_Cartridge_Present(CART_2) == false) - { - Pannel_Leds(CART_2,MODE_OFF); - } - break; - case LOWER_CART: - if(Is_Cartridge_Present(CART_3) == false) - { - Pannel_Leds(CART_3,MODE_OFF); - } - break; - default: - break; - } -} 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 3671ff4e0..db9ee1053 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 @@ -554,7 +554,7 @@ double CalculateWHSWasteTankLevelMiliLiter() waste_volume_milliliter = Vm_ml -LocalV0_ml; } //ReportWithPackageFilter(WasteFilter,"------------ waste_volume_ml -----------------", __FILE__, __LINE__, 0, RpMessage, (int)(waste_volume_milliliter), 0); - Report("------------ get waste level in ml -----------------", __FILE__, __LINE__, 0, RpMessage, (int)(waste_volume_milliliter), 0); + Report("------------ get waste level in ml -----------------", __FILE__, LocalV0_ml, Vm_ml, RpMessage, (int)(waste_volume_milliliter), 0); return waste_volume_milliliter; } @@ -578,13 +578,13 @@ bool waste_seq_cont() case Open_Valve: Set_WHS_valve(VOC_VALVE, OPEN, 0); Write_WHS_Valve_reg(); - Report("------------ waste level procedure open -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0); + //Report("------------ waste level procedure open -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0); OpenClose = Close_Valve; break; case Close_Valve: Set_WHS_valve(VOC_VALVE, CLOSE, 0); Write_WHS_Valve_reg(); - Report("------------ waste level procedure close ----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0); + //Report("------------ waste level procedure close ----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0); OpenClose = Read_Waste; break; case Read_Waste: @@ -607,7 +607,7 @@ bool waste_seq_cont() WasteCounter = 0; waste_level_ml = avg/8; - Report("------------ Avg waste level in ml -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0); + Report("------------ Avg waste level in ml -----------------", __FILE__, WasteAverageIndex, avg, RpMessage, (int)(waste_level_ml), 0); } return status; } @@ -673,7 +673,7 @@ bool waste_seq_step1_cont() Trigger_SetWHS_VOC_Valve(OPEN); - //WasteControlId = AddControlCallback(NULL, Trigger_ReadWHS_WasteContinouos, WASTE_PROCESS_TIME, TemplateDataReadCBFunction,0,0, 0 ); + WasteControlId = AddControlCallback(NULL, Trigger_ReadWHS_WasteContinouos, WASTE_PROCESS_TIME, TemplateDataReadCBFunction,0,0, 0 ); Report("------------ waste_seq_step1_cont -----------------", __FILE__, __LINE__, WasteControlId, RpMessage, 0, 0); return status; @@ -704,7 +704,7 @@ bool waste_seq_step1() WasteCounter = 0; OpenClose = CLOSE; - ReportWithPackageFilter(WasteFilter,"------------ open waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + Report("------------ open waste level Air valve -----------------", __FILE__, __LINE__, WHS_Eeprom.bytes.Orifice_Waste_Level_V0_ml, RpMessage, 0, 0); Trigger_SetWHS_VOC_Valve(OPEN); ReportWithPackageFilter(WasteFilter,"------------ wait 1 second -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); 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 c5f8037aa..8618524d9 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 @@ -470,6 +470,7 @@ bool WHS_Set_Blower_Control_Closed_Loop(double Q_value) Valve_Set(IDS_Id_to_AirValve[midtank_cleared], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON Valve_Set(IDS_Id_to_CartrideValve[midtank_cleared], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON } + return OK; } else { @@ -634,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/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 356f192a3..1c2b6662d 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -652,6 +652,9 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId) usnprintf(AlarmReasonStr, 100, "Alarm %d type %d caused a job stop",AlarmId,AlarmItem[AlarmId].EventType); return JOB_OTHER_ALARM; } + case ALARM_SOURCE_TYPE__FluidLevelAlarm: + usnprintf(AlarmReasonStr, 100, "Midtank %d is empty",AlarmItem[AlarmId].DeviceId); + return JOB_OUT_OF_DYE; default: usnprintf(AlarmReasonStr, 100, "Alarm %d type %d caused a job stop",AlarmId,AlarmItem[AlarmId].EventType); return JOB_OTHER_ALARM; @@ -993,6 +996,8 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) if (FoundReason != JOB_OK) { JobEndReason = getEndReason(AlarmId); + if (JobEndReason!=FoundReason) + ReportWithPackageFilter(AlarmFilter,"end reason mismatch!!!", __FILE__,AlarmId,JobEndReason, RpMessage, FoundReason, 0); //AbortJob(AlarmReasonStr); //PrepareReady(Module_Alarms,ModuleFail); ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 849d1cd9b..8e01fe18e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -115,7 +115,7 @@ double dispenserinklevel[MAX_SYSTEM_DISPENSERS][1]; double midtankinklevel[MAX_SYSTEM_DISPENSERS][1]; double MidTankpressure[MAX_SYSTEM_DISPENSERS][1]; double HeadFlowMeter; -double tempFlow = 0.0; +//double tempFlow = 0.0; double DrierFlowMeter; double AcVoltage; double WasteLevel = 0.0; @@ -819,11 +819,11 @@ void DiagnosticOneMinuteCollection(void) DiagnosticsMonitor.dryerairflow = &DrierFlowMeter; HeadFlowMeter = GetWHSAirFlow(HEAD_FLOW_METER); - if (fabs(tempFlow - HeadFlowMeter)>0.05) + /*if (fabs(tempFlow - HeadFlowMeter)>0.05) { Report("Head flow change 1m",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0); tempFlow = HeadFlowMeter; - } + }*/ DiagnosticsMonitor.n_headairflow = 1; DiagnosticsMonitor.headairflow = &HeadFlowMeter; @@ -858,11 +858,11 @@ void DiagnosticOneSecCollection(void) HeadFlowMeter = GetWHSAirFlow(HEAD_FLOW_METER); DiagnosticsMonitor.n_headairflow = 1; DiagnosticsMonitor.headairflow = &HeadFlowMeter; - if (fabs(tempFlow - HeadFlowMeter)>0.25) + /*if (fabs(tempFlow - HeadFlowMeter)>0.25) { Report("Head flow change 1s",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0); tempFlow = HeadFlowMeter; - } + }*/ WasteLevel = GetWHSWasteTankLevelMiliLiter()/1000;//change from ml to litter static double InitCounter = 0; if (GetMachineState()headzone4temp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true,ProcessParams->headzone4temp); @@ -239,6 +240,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone7temp); } + Trigger_HeaterWriting(); if (ProcessParams->headzone8temp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone8temp); @@ -263,6 +265,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone10temp); } + Trigger_HeaterWriting(); if (ProcessParams->headzone11temp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone11temp); @@ -282,6 +285,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData) } if(Head_Type == HEAD_TYPE_STAPLE_SPUN) { + Trigger_HeaterWriting(); if (ProcessParams->rblowertemp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->rblowertemp); @@ -290,6 +294,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->rblowertemp); } + Trigger_HeaterWriting(); if (ProcessParams->lblowertemp>1) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->lblowertemp); @@ -298,6 +303,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData) { status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->lblowertemp); } + Trigger_HeaterWriting(); Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,ProcessParams->rblowerflow); Trigger_Head_Fan_Control(HEAD_FAN_LEFT,ProcessParams->lblowerflow); } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 309eada85..73da7924b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -1110,6 +1110,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) } return ERROR; } +bool IncreaseBlower = false; uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { int index=HEATER_TYPE_MAX_HEATERS; @@ -1259,23 +1260,29 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) ReportWithPackageFilter(HeatersFilter,"AC Ready",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); HeaterAtTemp[index] = true; HeaterPrepareReady(); + IncreaseBlower = false; } } if ( (readValue > (HeaterCmd[index].targettemperatue * ((100-HeaterControl[index].outputproportionalband+2)/100))) && (readValue < (HeaterCmd[index].targettemperatue * ((100+HeaterControl[index].outputproportionalband)/100)))) { - if (BlowerCfg.enabled == true) + if (IncreaseBlower == false) { - if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) - { - WHS_Set_SetPoint_Q_value(headairflow); - } - else + IncreaseBlower = true; + if (BlowerCfg.enabled == true) { - Turn_the_Blower_On();//Turn on with the Default_Voltage - if (BlowerCfg.voltage) - Control_Voltage_To_Blower(BlowerCfg.voltage); + if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) + { + WHS_Set_SetPoint_Q_value(headairflow); + } + else + { + Turn_the_Blower_On();//Turn on with the Default_Voltage + if (BlowerCfg.voltage) + Control_Voltage_To_Blower(BlowerCfg.voltage); + } } + } } if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0)) 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) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 8a4960433..d762e507f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -217,7 +217,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) } } - FeederSpeedStore[FeederSpeedIndex++] = length; + /*FeederSpeedStore[FeederSpeedIndex++] = length; if (FeederSpeedIndex>=SPEED_STORE_SIZE) { FeederSpeedIndex = 0; @@ -225,8 +225,8 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) for (Speed_i = 0;Speed_i=SPEED_STORE_SIZE) { PullerSpeedIndex = 0; @@ -326,7 +326,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) PullerSpeedAverage+=PullerSpeedStore[Speed_i]; PullerSpeedAverage = PullerSpeedAverage/SPEED_STORE_SIZE; //ReportWithPackageFilter(ThreadFilter,"Average Speed 2 second",__FILE__,__LINE__,(int)(FeederSpeedAverage*100),RpWarning,(int)(PullerSpeedAverage*100),0); - } + }**/ //} diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c index cf9fb3b7b..03ee73daf 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c @@ -20,6 +20,7 @@ #include #include #include +#include // //#define CARTRIDGE_INK_TIMEOUT 60 //#define CARTRIDGE_INK_TIMEOUTx2 120 @@ -231,11 +232,11 @@ bool RdCartridgeParam(cartridge_name cart_name) { case waste_cartridge1: WHS_info.cartridge_1.serial_number = temp_funcion; //to do - WHS_info.cartridge_1.status = temp_funcion; // to do + WHS_info.cartridge_1.status = WasteEmpty; // to do break; case waste_cartridge2: WHS_info.cartridge_2.serial_number = temp_funcion; - WHS_info.cartridge_2.status = temp_funcion; + WHS_info.cartridge_2.status = WasteEmpty; break; case INK_cartridge: ReadCartridgeData(cart_name); @@ -313,6 +314,12 @@ U8 set_cartridge_2(U8 cartridge_status) bool SetWastePump( bool power) { + if ((IFS_Availability[1] == IFS_RECOGNIZED)&&(IFS_Availability[2] == IFS_RECOGNIZED)) //ifs installed -check cartridges + { + if ((WHS_WasteCartridgeLowerPresent() == false)&&(WHS_WasteCartridgeMiddlePresent() == false)) + return ERROR; + } + /* set the waste pump on/off off - : @@ -415,6 +422,29 @@ U8 CartridgeWasteFilling(bool status) SetWasteLevelEmptyingLimit(GetWHSWasteTankLevelMiliLiter()); waste_seq_step1_cont(); } + switch (WHS_info.active_cartridge) + { + case waste_cartridge1: + Pannel_Leds( CART_2, MODE_ON); //set led color + cart2.color = BLINK; + ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge1 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + break; + case waste_cartridge2: + Pannel_Leds( CART_3, MODE_ON); //set led color + cart3.color = BLINK; + ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge2 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + break; + case no_waste_cartridge: + ReportWithPackageFilter(WasteFilter,"------------ !!!!!WHS No waste cartridge !!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + ReportWithPackageFilter(WasteFilter,"------------ !!!! WHS insert cartridge!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + SetWastePump(CLOSE); + //WHS_info.WHS_pump.time = 0; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true); + ret = ERROR; + break; + default: + break; + } ret=OK; } else // stop Waste cartridge filling @@ -460,9 +490,9 @@ U8 CartridgeWasteFilling(bool status) /* ------read waste tank sensors ----------- */ #define WASTE_CARTRIDGE_SIZE 1500 -#define WASTE_LEVEL_OVERFLOW 4000 -#define WASTE_LEVEL_FULL 3500 -#define WASTE_LEVEL_EMPTY 2100 +#define WASTE_LEVEL_OVERFLOW 2700 +#define WASTE_LEVEL_FULL 2300 +#define WASTE_LEVEL_EMPTY 900 double WasteLevelOverflow = WASTE_LEVEL_OVERFLOW; double WasteLevelFull = WASTE_LEVEL_FULL; double WasteLevelEmpty = WASTE_LEVEL_EMPTY; @@ -727,7 +757,7 @@ bool WasteTankCBFunction() ReportWithPackageFilter(WasteFilter,"------------ WHS, Cartridge cover open -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.cartridge_cover, 0);//popup message :"Cartridge cover open" //todo if ( WHS_info.WHS_pump.status == OPEN) { - CartridgeWasteFilling(CLOSE); + CartridgeWasteFilling(OFF); pump_on_flag = OPEN; } @@ -759,12 +789,12 @@ bool WasteTankCBFunction() } else // CLOSE { - //if (WHS_info.sttMachine == WHS_full) CartridgeWasteFilling(OPEN); + if (WHS_info.sttMachine == WHS_full) CartridgeWasteFilling(ON); SetActiveWastCartridge(); if (pump_on_flag == OPEN ) { WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL; // todo - // CartridgeWasteFilling(OPEN); + CartridgeWasteFilling(OPEN); pump_on_flag = CLOSE; } IFS_info.Cartridge_Ink_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_device_Id , WasteTankCBFunction ); diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index b53a7016f..a090a9612 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,17 @@ +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 + Embedded SW Release note - Version 1.4.6.33 - Pack 2+ ============================================================= remove logs from I2C errors - show only summary. -- cgit v1.3.1