From 5d9f09e5beeb61671ab1a68b021ec6da62bc3042 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 18 Jun 2020 17:27:56 +0300 Subject: Version 1.4.6.32; enable variating control timing for thread. fix WHS pid --- .../Embedded/Modules/Thread/Thread_print.c | 27 +++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 72b0439ad..e7a333cc2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -58,6 +58,10 @@ uint32_t JobCounter = 0; MotorControlConfig_t MotorControlConfig[MAX_THREAD_MOTORS_NUM]; uint32_t DeviceId2Motor[MAX_THREAD_MOTORS_NUM]; +int MotorTiming[MAX_THREAD_MOTORS_NUM]; +int MotorTimer[MAX_THREAD_MOTORS_NUM]; + + uint32_t PreviousPosition = 0, CurrentPosition = 0; double CurrentRequestedLength = 0.0; double CurrentProcessedLength = 0.0; @@ -506,6 +510,18 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } index = IfIndex&0xFF; + if (MotorTiming[index]>1) + { + MotorTimer[index]++; + if (MotorTimer[index]>=MotorTiming[index]) + { + MotorTimer[index]=0; + } + else + { + return OK; + } + } if(MotorControlConfig[index].m_isEnabled ) { //if (MotorDriverResponse[ThreadMotorIdToMotorId[index]].Busy == true) @@ -874,6 +890,7 @@ uint32_t ThreadPrepare_TensionCallback (int DancerId, double tension) ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_TensionCallback Prepare Ready",__FILE__,__LINE__,DancerId,RpWarning,PrepareWaitCount,0); PrepareReady(Module_Thread,ModuleDone); } + return OK; } uint32_t ThreadPrepare_Tension (int DancerId, double tension) { @@ -936,7 +953,7 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) JobTicket* JobTicket = JobDetails; uint32_t status = OK; CurrentSegmentId = 0; - + float temp_dt = 0; JobCounter = 0; TotalProcessedLength = 0.0; PoolerTotalProcessedLength = 0.0; @@ -1035,6 +1052,14 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) MotorControlConfig[Motor_i].m_mesuredParam = 0; MotorControlConfig[Motor_i].m_preError = 0; MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage + + temp_dt = MotorControlConfig[Motor_i].m_params.dt/0.001; + MotorTiming[Motor_i] = (int)temp_dt; + if (MotorTiming[Motor_i]) + { + MotorTimer[Motor_i] = MotorTiming[Motor_i]-1; + ReportWithPackageFilter(ThreadFilter,"MotorTiming",__FILE__,Motor_i,MotorTiming[Motor_i],RpWarning,MotorTimer[Motor_i],0); + } ////////////////////////////////////////////////// for (i = 0;i < (int)MotorsControl[Motor_i].pvinputfilterfactormode; i++) { -- cgit v1.3.1 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_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Head_Card/IO_Ports/Heaters/Head_Heaters.c | 2 ++ .../Head_Card/PT100/Head_PT100_ADC.c | 27 +++++++++----- .../Embedded/Drivers/I2C_Communication/I2C.h | 2 ++ .../Embedded/Drivers/I2C_Communication/I2C_Comm.c | 28 +++------------ .../WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c | 20 +++++------ .../Embedded/Drivers/Motors/MotorActions.c | 2 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 11 ++++-- .../Embedded_SW/Embedded/Modules/General/Safety.c | 42 +++++++++++++++++++++- .../Embedded/Modules/Thread/Thread_Winder.c | 9 +++-- .../Embedded/Modules/Thread/Thread_print.c | 19 +++++----- .../Embedded/Software Release Notes.txt | 30 ++++++++++++++++ .../StateMachines/Initialization/InitSequence.c | 2 ++ 13 files changed, 137 insertions(+), 59 deletions(-) (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 c48538752..60707d0cb 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,32}; +TangoVersion_t _gTangoVersion = {1,4,6,33}; #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 0cc1db9f6..e4f7f81ad 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 @@ -64,6 +64,8 @@ uint32_t Write_Head_Card_Heaters_Commands() } else Report(" Write_Head_Card_Heaters",__FILE__,__LINE__,255,RpWarning,0,0); + if (status) + ReadFailures++; return status; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c index 35d0a0b1e..108676b47 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c @@ -22,6 +22,10 @@ ADDR 0x8E #include "modules/control/millisecTask.h" #include "Modules/AlarmHandling/AlarmHandling.h" #include "drivers/Heater/TemperatureSensor.h" + +#include "PMR/Diagnostics/EventType.pb-c.h" +//#include "StateMachines/Initialization/InitSequence.h" + //#include "PT100RTD.h" #include "../I2C_Head_Mux.h" @@ -92,8 +96,8 @@ uint32_t I2C_Write_SensorId(uint32_t I2C_ID, TEMPERATURE_SENSOR_ID_ENUM SensorId I2C_ADC_ADS122C04_SLAVE_ADD = SensorId_To_SlaveAdd(SensorId); status |= I2C_Write(I2C_ID, I2C_ADC_ADS122C04_SLAVE_ADD, I2C_Write_buf, No_BytesToWrite); - if (status) - Report("I2C_Write_SensorId error", __FILE__,Arb_Loss_Count,status, RpMessage,SensorId, 0); + //if (status) + // ReportWithPackageFilter(LoadFilter,"I2C_Write_SensorId error", __FILE__,Arb_Loss_Count,status, RpMessage,SensorId, 0); return status; } @@ -126,6 +130,8 @@ uint32_t I2C_Read_SensorId(uint32_t I2C_ID, TEMPERATURE_SENSOR_ID_ENUM SensorId, //TODO Choose TEMP1 sensor by I/O I2C_ADC_ADS122C04_SLAVE_ADD = SensorId_To_SlaveAdd(SensorId); status |= I2C_Read(I2C_ID, I2C_ADC_ADS122C04_SLAVE_ADD + 1, I2C_Read_buf, No_BytesToRead); + //if (status) + // ReportWithPackageFilter(LoadFilter,"I2C_Read_SensorId error", __FILE__,Arb_Loss_Count,status, RpMessage,SensorId, 0); return status; } @@ -210,8 +216,8 @@ uint32_t HeadADCPT100_SendReadDataCommand(TEMPERATURE_SENSOR_ID_ENUM SensorId) //delayms(10); Status |= I2C_Read_SensorId(I2C_ID_HEAD_CARD, SensorId, temp, 3); - if (Status) - Report("HeadADCPT100_SendReadDataCommand error", __FILE__,Arb_Loss_Count,Status, RpMessage,SensorId, 0); + //if (Status) + // ReportWithPackageFilter(LoadFilter,"HeadADCPT100_SendReadDataCommand error", __FILE__,Arb_Loss_Count,Status, RpMessage,SensorId, 0); //First send the MSB so we need to reorder the bytes Data_ADC_Head = temp[0]; @@ -852,7 +858,7 @@ uint32_t Get_HeadCard_PT100(TEMPERATURE_SENSOR_ID_ENUM SensorId) return TempSensorResponse[SensorId].Temperature_C_mult_by_100; } -uint16_t ReadCalls = 0;ReadFailures = 0; +uint16_t ReadCalls = 0, ReadFailures = 0, ReadResets = 0; bool I2C_Failure = false; #define I2C_FAILURES_PERIOD 100 #define I2C_FAILURES_LIMIT 30 @@ -884,10 +890,15 @@ uint32_t Set_HeadCard_PT100() //call every 50mSec (minimum delay 30mSec) ReadFailures++; if(ReadFailures>I2C_FAILURES_LIMIT) //30 failures in 10 seconds { + ReadResets++; //I2C_Failure = true; - ReportWithPackageFilter(HeatersFilter,"Head I2C interface failure ",__FILE__,__LINE__,ReadFailures,RpError, ReadCalls,0); - //SetMachineState(MACHINE_STATE_BUILT_IN_FAILED); - //AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE,true); + ReportWithPackageFilter(HeatersFilter,"Head I2C interface failure ",__FILE__,ReadResets,ReadFailures,RpError, ReadCalls,0); + if (ReadResets > 50) + { + Report("Head malfunctioning, shut down",__FILE__,ReadResets,ReadFailures,RpError, ReadCalls,0); + //SetMachineState(MACHINE_STATE_BUILT_IN_FAILED); + AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE,true); + } } } return Status; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h index d8b2d1286..ed4c1228f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h @@ -17,6 +17,8 @@ uint32_t I2C_control(uint32_t I2C_ID, uint32_t Slave_Add, bool RW,uint32_t Byte2 void Init_All_I2C(); void I2C_ReadingTask_Init(void); +extern uint16_t ReadFailures; + //------------------------------------------------------------------------------------------------------------- //uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t No_BytesTWrite, uint32_t *Bytes2Write ); 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 bda830e8e..ab05c92a9 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c @@ -207,11 +207,11 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf, //Byte2Write = Byte2Write & 0xFF; - if(No_BytesToWrite <= 2) { + /*if(No_BytesToWrite <= 2) { status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite); } else { status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite); - } + }*/ //uint32_t I2C_W_buf[256] = {0},i; @@ -220,8 +220,7 @@ 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); - //status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite); + status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite); if (status) { if (Arb_Loss_Count++ > 10) @@ -273,25 +272,8 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u //Byte2Write = Byte2Write & 0xFF; -// if(No_BytesTWrite == 1) -// { -// status = Write_Single_I2C(I2C_BASE, Slave_Add,Bytes2Write[0] & 0xFF); -// } -// else -// { -// -// } - - //uint32_t I2C_W_buf[256] = {0},i; - -// for(i = 0; i < request->n_bytestwrite;i++) -// { -// I2C_W_buf[i] = request->bytestwrite[i]; -// } - - //status = I2C_WriteBuff(I2C_BASE, Slave_Add, Bytes2Write, No_BytesTWrite); - //status = I2C_ReadBuff(I2C_BASE, Slave_Add, I2C_Read_buf, No_BytesToRead); - status = I2C_ReadFifo(I2C_BASE, Slave_Add, buff, No_BytesToRead); + status = I2C_ReadBuff(I2C_BASE, Slave_Add, I2C_Read_buf, No_BytesToRead); + //status = I2C_ReadFifo(I2C_BASE, Slave_Add, buff, No_BytesToRead); if (status) { if (Arb_Loss_Count++ > 10) 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 7590113c1..c36d27d74 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 @@ -41,9 +41,9 @@ typedef struct }WhsControlConfig_t; WhsControlConfig_t WHS_ControlData = {0}; -#define MAX_WHS_CONTROL_SAMPLES 10 +/*#define MAX_WHS_CONTROL_SAMPLES 10 float WhsBlowerSamples[MAX_WHS_CONTROL_SAMPLES] ; -int WhsBlowerSamplesPointer = 0; +int WhsBlowerSamplesPointer = 0;*/ bool Read_Max5805_device_ID(); double calc_Q_average(WHS_Flow_Meter ORF_id,double Q_temp); @@ -236,9 +236,9 @@ bool WHS_init_Blower() WHS_ControlData.m_preError = 0; WHS_ControlData.m_SetParam = 5.0;//need to update SetParams on presegment stage - WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES/2; + //WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES/2; - memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples)); + //memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples)); return status; } @@ -614,7 +614,7 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam) float avreageSampleValue = 0; int i; - WhsBlowerSamples[WhsBlowerSamplesPointer] = measuredParam;//(-1 * TranslatedReadValue); + /*WhsBlowerSamples[WhsBlowerSamplesPointer] = measuredParam;//(-1 * TranslatedReadValue); WhsBlowerSamplesPointer++; if (WhsBlowerSamplesPointer >= WHS_ControlData.SamplesFilterSize) WhsBlowerSamplesPointer = 0; @@ -622,7 +622,7 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam) avreageSampleValue += WhsBlowerSamples[i]; avreageSampleValue = avreageSampleValue / (int)WHS_ControlData.SamplesFilterSize; - /*WHS_ControlData.m_mesuredParam = avreageSampleValue;*/ + WHS_ControlData.m_mesuredParam = avreageSampleValue;*/ WHS_ControlData.m_mesuredParam = measuredParam; WHS_ControlData.m_SetParam = setParam; WHS_ControlData.m_calculatedError = PIDAlgorithmCalculation((float)WHS_ControlData.m_SetParam , (float)WHS_ControlData.m_mesuredParam, @@ -687,14 +687,14 @@ uint32_t WHS_PidRequestMessage(void* request) WHS_ControlData.m_preError = 0; WHS_ControlData.m_SetParam = PID_Request->outputproportionalcycletime;//need to update SetParams on presegment stage - WHS_ControlData.SamplesFilterSize = PID_Request->pvinputfilterfactormode; + /*WHS_ControlData.SamplesFilterSize = PID_Request->pvinputfilterfactormode; if (PID_Request->pvinputfilterfactormode > MAX_WHS_CONTROL_SAMPLES) WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES; if (PID_Request->pvinputfilterfactormode < 0.5) // = 0 WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES/2; - - memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples)); - WhsBlowerSamplesPointer = 0; +*/ + //memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples)); + //WhsBlowerSamplesPointer = 0; return OK; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 0d6cd35c7..b2e623a11 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -674,7 +674,7 @@ uint32_t MotorMovetoLimitSwitch (TimerMotors_t MotorId,bool direction, uint32_t } MotorTimeout[MotorId] = 0; - MotorTimeLag[MotorId] = eTenMillisecond; + MotorTimeLag[MotorId] = 5; //five milliseconds for better accuracy MotorTimeLimit[MotorId] = timeout; if ((MotorId == HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD)||(HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH)||(HARDWARE_MOTOR_TYPE__MOTO_SCREW)) diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 8af4720a6..eded4bdce 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -976,6 +976,13 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) AlarmId = Alarm_i; ReportWithPackageFilter(AlarmFilter,"an alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); break; + case EVENT_TYPE__ELECTRICAL_CABINET_OVERTEMPERATURE: + case EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE: + case EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE_2: + FoundReason = JOB_TEMPERATURE_ALARM; + AlarmId = Alarm_i; + ReportWithPackageFilter(AlarmFilter,"machine internal over-temperature is preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); + break; default: break; } @@ -1214,7 +1221,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) } break; case ALARM_SOURCE_TYPE__CurrentAlarm: - if (CheckCurrentAlarms) + if ((CheckCurrentAlarms)&&(getIdleState()==false)) { if (AlarmItem[Alarm_i].ModuleDeviceId == 0xFF) { @@ -1338,7 +1345,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) break; if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Warning) FluidLevelWarning = AlarmItem[Alarm_i].AlarmValue; - else if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Error) + else if ((AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Error)&&(AlarmItem[Alarm_i].AlarmDirection == UNDER_VALUE)) FluidLevelError = AlarmItem[Alarm_i].AlarmValue; value = Get_MidTank_Int1000_Sensor(AlarmItem[Alarm_i].DeviceId); if (AlarmItem[Alarm_i].AlarmDirection == OVER_VALUE) diff --git a/Software/Embedded_SW/Embedded/Modules/General/Safety.c b/Software/Embedded_SW/Embedded/Modules/General/Safety.c index e8454370c..400b083e4 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/Safety.c +++ b/Software/Embedded_SW/Embedded/Modules/General/Safety.c @@ -65,7 +65,46 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) if (AllDispensersInSafety) { - if (Get_COVER_1_State(DryerDoor)) + if (WHS_GPI_SW_FILTER_PRES()) + { + //report and handle filter missing + AlarmHandlingSetAlarm(EVENT_TYPE__AIR_FILTER_NOT_INSTALLED, true); + mAirFilterAlarmState = true; + AirFilterAlarmState = true; + } + else + { + if (WHS_GPI_WASTE_FLOW_SWITCH() == false) + { + //report and handle air flow failure + //if blower if off handling is different + AlarmHandlingSetAlarm(EVENT_TYPE__NO_AIR_PRESSURE, true); + mAirFlowAlarmState = true; + AirFlowAlarmState = true; + } + else + { + if (Get_COVER_1_State(DryerDoor)) + { + //report and handle dryer door open + AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, true); + mDrierDoorAlarmState = true; + DrierDoorAlarmState = true; + } + else + { + //if (WHS_GPI_WASTE_OVERFULL()) - cannot read this switch + { + //report and handle waste overflow + AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true); + mWasteOverflowAlarmState = true; + WasteOverflowAlarmState = true; + } + } + } + } + +/* if (Get_COVER_1_State(DryerDoor)) { //report and handle dryer door open AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, true); @@ -103,6 +142,7 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) } } } + */ } else if (AnyDispensersInSafety) { 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; } diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index ac4f813eb..b53a7016f 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,33 @@ +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 SW Release note - Version 1.4.6.32 - Pack 2+ +============================================================= +remove file system semaphore protection. +new paramete for motors for powerstep drivers. +preparation for dispensers test (compilation flag). +fix dispenser new pressure sensor reading. +whs pid fixing, minimum and maximum limits, alarms. +prevent job on VOC / air flow alarms +dancers motors homing - update (clear) EEPROM +skip HW Config storing if there is no change +minimal fill-up level for new midtankks - 0.5 litres +test for dancers PID on more than 1 millisecond - set by controloutputtype +thread movement waits for LTFU tension preparation +prevent job on missing spool - PP machines + + + Embedded SW Release note - Version 1.4.6.31 - Pack 2+ ============================================================= fix bug in SW update - test many short jobs. diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index ced5e2677..629804170 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -417,6 +417,8 @@ uint32_t InitSequenceInitialBlowerActivation(void) { Control_Voltage_To_Blower(1); //stop the blower Task_sleep (1000); + Trigger_WHS_MAX11614_Read_allADC(); + Task_sleep (10); if (ResetReason & SYSCTL_CAUSE_POR) { for (i=0;i<8;i++) -- cgit v1.3.1