From 79be2b0f2ec9c5236979a0c7e1bea5bd2cbc52fe Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 19 May 2019 18:53:53 +0300 Subject: Version 1.3.10.2: another way to test the dispenser type --- Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c | 2 +- Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c | 2 +- 2 files changed, 2 insertions(+), 2 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 f8b0efb17..f1c8956ff 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -481,7 +481,7 @@ void ScrewTimerInterrupt(int ARG0) TimerDisable(Screw_timerBase, TIMER_A); } ROM_IntMasterEnable(); - Rotations+=0.01; + Rotations+=0.03; return ; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index c292f7dcd..ad8f497db 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -503,7 +503,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } if ((JobCounter % 1000) == 0) { - if (JobCounter >= 20000) + if (JobCounter >= 5000) { MotorSpeedSamples[index][MotorSpeedSamplePointer[index]] = CurrentControlledSpeed[index];//(-1 * TranslatedReadValue); MotorSpeedSamplePointer[index]++; -- cgit v1.3.1 From d3a01259a456926ec6a0b05ba897c89230149774 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 19 May 2019 19:00:24 +0300 Subject: Version 1.3.10.3 Ignore position 0 (job length bug) --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Modules/Thread/Thread_print.c | 25 +++++++++++----------- 2 files changed, 14 insertions(+), 13 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 6705148e3..24bc7d0ab 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,3,10,2}; +TangoVersion_t _gTangoVersion = {1,3,10,3}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index ad8f497db..50547656a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -165,22 +165,23 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) return 0xFFFFFFFF; } CurrentPosition = MotorGetPosition(ThreadMotorIdToMotorId[index]); -// if (CurrentPosition == 0) -// return OK; //unusable data - if (initialpos == 0xFFFF) + if (CurrentPosition != 0) { + if (initialpos == 0xFFFF) + { + PreviousPosition = CurrentPosition; + initialpos = 0; + } + positionDiff = Control_Delta_Position_Pass(CurrentPosition,PreviousPosition); + //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; PreviousPosition = CurrentPosition; - initialpos = 0; - } - positionDiff = Control_Delta_Position_Pass(CurrentPosition,PreviousPosition); - //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; - PreviousPosition = CurrentPosition; - // total length = (position diff / full cycle) * pulley perimeter - //(positionDiff/pulseperround)*((2*PI*motor_Radius) + // total length = (position diff / full cycle) * pulley perimeter + //(positionDiff/pulseperround)*((2*PI*motor_Radius) - //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; - length = (double)(positionDiff)*LengthCalculationMultiplier; + //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; + length = (double)(positionDiff)*LengthCalculationMultiplier; + } CurrentProcessedLength+=length; -- cgit v1.3.1 From 5f6a459aab9a781dc143d8a6eb214408ead6906d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 19 May 2019 19:28:56 +0300 Subject: PID - fabs() enabled small integral values. empty waste indication. --- .../Embedded/Common/SWUpdate/FileSystem.c | 1 + .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Common/report/reportInit.c | 10 ++ .../Embedded_SW/Embedded/Modules/Control/PIDAlgo.c | 2 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 4 +- .../Embedded/Modules/Heaters/Heaters_print.c | 2 + .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 2 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 8 +- .../Embedded_SW/Embedded/Modules/Thread/Thread.h | 1 + .../Embedded/Modules/Thread/Thread_init.c | 6 +- .../Embedded/Modules/Thread/Thread_print.c | 138 +++++++++++++++------ .../Embedded_SW/Embedded/Modules/Waste/Waste.h | 1 + .../Embedded/Modules/Waste/Waste_init.c | 2 + .../Embedded/Software Release Notes.txt | 1 + .../StateMachines/Initialization/InitSequence.c | 2 +- 15 files changed, 131 insertions(+), 51 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 8fb7024be..68745b390 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -154,6 +154,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) // memcpy (&ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle)); //if (ReceivedFileHandle == FileHandle) //{ + KeepAliveOneSecondCounter = 0; Fresult = f_write(ReceivedFileHandle,request->buffer.data,request->buffer.len,&WrittenBytes ); lFresult = Fresult; if(Fresult != FR_OK) 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 24bc7d0ab..21c7eb041 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,3,10,3}; +TangoVersion_t _gTangoVersion = {1,4,0,0}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index bc3cbe20b..0d5836acf 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -38,6 +38,8 @@ #include "PMR/debugging/StartDebugLogResponse.pb-c.h" #include "PMR/debugging/StopDebugLogResponse.pb-c.h" +#include "modules/General/process.h" + /*PackageHandle ControlFilter; PackageHandle HeatersFilter; PackageHandle JobFilter ; @@ -147,6 +149,14 @@ uint32_t ReportInitMessage(MessageContainer* requestContainer) uint32_t RESC = SysCtlResetCauseGet (); LOG_ERROR(RESC,"Reset Reason Register"); /*SysCtlResetCauseClear(RESC);*/ +#ifdef TEST_PID_THREAD + Task_sleep(1000); + dyeingspeed = 50; + ThreadJoggingFunc(50); + ThreadPreSegmentState(NULL,0); + Task_sleep(2000); + ThreadAbortJoggingFunc(); +#endif return status; } uint32_t StopReportInitMessage(MessageContainer* requestContainer) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c index a443b4785..dd9841777 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c @@ -46,7 +46,7 @@ float AdvancedPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_ error = _setPoint - _mesuredParam; //In case of error too small then stop integration - if(abs(error) > params->epsilon) + if(fabs(error) > params->epsilon) { *_integral = *_integral + error*params->dt; } diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 2fa4c9fe4..184aa52be 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -265,10 +265,10 @@ void DiagnosticsLoadDigitalValues(void) DigitalOutputState[11].value = DataUpdated; DigitalOutputState[12].interfaceio = INTERFACE_IOS__GPI_WCONTAINER_FULL; - DigitalOutputState[12].value = WHS_IsContainerOverflow(); + DigitalOutputState[12].value = WHS_IsContainerFull(); DigitalOutputState[13].interfaceio = INTERFACE_IOS__GPI_WCONTAINER_WARN; - DigitalOutputState[13].value = WHS_IsContainerFull(); + DigitalOutputState[13].value = WHS_IsContainerEmpty(); DigitalOutputState[14].interfaceio = INTERFACE_IOS__GPO_SPARE1_1; /*waste lower cartridge presence*/ DigitalOutputState[14].value = WHS_WasteCartridgeLowerPresent(); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index b401af289..0ac355910 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -258,6 +258,7 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) } HeaterRecalculateHeaterParams(HeaterId, 0); DeActivateHeater(HeaterId); + HeaterPIDConfig[HeaterId].m_SetParam = 0; HeaterReady[HeaterId] = true; } else if (HeaterId < MAX_AC_HEATERS) //AC Heaters @@ -286,6 +287,7 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) } DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + HeaterPIDConfig[HeaterId].m_SetParam = 0; HeaterReady[HeaterId] = true; } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 74ae94fd4..d312dcb78 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -117,7 +117,7 @@ uint32_t IDS_HomeDispenserCallback(uint32_t motorId, uint32_t ReadValue) // HomingActive[DispenserId]= false; Report("Start backlash",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); - + Task_sleep(10); MotorSetDirection(motorId,MotorsCfg[motorId].directionthreadwize); MotorSetSpeed(motorId, 1000); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 4e965350a..604ddf214 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -289,8 +289,8 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); { JobTicket* JobTicket = JobDetails; uint8_t *SegmentPtr = 0, *BrushStopPtr = 0; - JobDescriptionFileBrushStop *BrushStop; - JobDescriptionFileSegment *Segment; + JobDescriptionFileBrushStop *BrushStop = NULL; + JobDescriptionFileSegment *Segment = NULL; int Dispenser_i, Brush_i,DispenserId; uint32_t Bytes = 0,readBytes = 0,ImmediateRead = 0,SegmentSize = 0,BrushStopSize = 0; uint32_t status = OK; @@ -325,8 +325,8 @@ c. Go to step 2.a x Segment.BrushStopsCount. DispenserUsedInJob[Dispenser_i] = false; } n_segments = 0; - if (EnableCleaning == true) - DispenserUsedInJob[CLEANER_DISPENSER] = true; +// if (EnableCleaning == true) +// DispenserUsedInJob[CLEANER_DISPENSER] = true; if (JobTicket->enablelubrication == true) { //DispenserUsedInJob[LUBRICANT_DISPENSER] = true; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index 97f3811c7..19201c708 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -17,6 +17,7 @@ #include "thread_ex.h" +#define NORMAL_COEF_DIVIDER 100 typedef struct { uint32_t startoffsetpulses; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 4454565c1..265c751c6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -106,18 +106,18 @@ uint32_t MotorPidRequestMessage(HardwarePidControl* request) #ifdef TEST_LONGER_PID_THREAD MotorsControl[Motor_i].pvinputfilterfactormode = 10; //test longer control #endif - for (i = 0;i < MotorsControl[Motor_i].pvinputfilterfactormode; i++) + for (i = 0;i < (int)MotorsControl[Motor_i].pvinputfilterfactormode; i++) { MotorSamples[Motor_i][i] = 0; //reset the samples value for control beginning MotorSpeedSamples[Motor_i][i] = 0; } NormalizedErrorCoEfficient[Motor_i] = (2*PI*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].armlength); temp = 1<<(DancersCfg[ThreadMotorIdToDancerId[Motor_i]].resolutionbits); - temp=(10*(temp-1)*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].maximalmovementmm); + temp=(NORMAL_COEF_DIVIDER*(temp-1)*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].maximalmovementmm); NormalizedErrorCoEfficient[Motor_i] = NormalizedErrorCoEfficient[Motor_i] / temp; // uint32_t MotorSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; temp = 1<<(DancersCfg[ThreadMotorIdToDancerId[Motor_i]].resolutionbits); - temp = (temp*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].maximalmovementmm*2); + temp = (temp*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].maximalmovementmm*3/2); DancerStopActivityLimit[Motor_i] = temp/(2*PI*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].armlength); 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 50547656a..25485290b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -137,13 +137,11 @@ void ThreadUpdateProcessLength (double length, void *Funcptr) CurrentRequestedLength = length*100;//Centimetres CurrentProcessedLength = 0; ProcessedLengthFuncPtr = (ProcessedLengthFunc)Funcptr; - initialpos = 0xFFFF; - Poolerinitialpos = 0xFFFF; } char Lenstr[150]; uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { - uint32_t positionDiff = 0; + uint32_t positionDiff = 0,prevprev; double length = 0.0; int index = MAX_THREAD_MOTORS_NUM; @@ -172,6 +170,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) PreviousPosition = CurrentPosition; initialpos = 0; } + prevprev = PreviousPosition; positionDiff = Control_Delta_Position_Pass(CurrentPosition,PreviousPosition); //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; PreviousPosition = CurrentPosition; @@ -181,8 +180,16 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; length = (double)(positionDiff)*LengthCalculationMultiplier; - } + if (length > 1000) + { + usnprintf(Lenstr, 100, "length huge: length %d, diff 0x%x, pos 0x%x prev 0x%x",(int)length*100,(int)positionDiff,PreviousPosition,prevprev); + SendJobProgress(0.0,0,false, Lenstr); + Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + + } + + } CurrentProcessedLength+=length; static int pooler_counter = 0; @@ -278,11 +285,11 @@ uint32_t ThreadSpeedControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) index = IfIndex&0xFF; SpeedSamples[MotorSamplePointer[index]] = speed;//(-1 * TranslatedReadValue); MotorSamplePointer[index]++; - if (MotorSamplePointer[index] >= MotorsControl[index].pvinputfilterfactormode) + if (MotorSamplePointer[index] >= (int)MotorsControl[index].pvinputfilterfactormode) MotorSamplePointer[index] = 0; - for (i=0;i>8 != IfTypeThread) { LOG_ERROR (IfIndex, "Wrong Interface type"); @@ -405,6 +430,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } return OK; } + KeepReadValue = ReadValue; TranslatedReadValue = ReadValue - DancersCfg[DancerId].zeropoint; if (index == POOLER_MOTOR) { @@ -415,15 +441,15 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) //TranslatedReadValue = 0;//test MotorSamples[index][MotorSamplePointer[index]] = TranslatedReadValue;//(-1 * TranslatedReadValue); MotorSamplePointer[index]++; - if (MotorSamplePointer[index] >= MotorsControl[index].pvinputfilterfactormode) + if (MotorSamplePointer[index] >= (int)MotorsControl[index].pvinputfilterfactormode) MotorSamplePointer[index] = 0; #ifdef TEST_LONGER_PID_THREAD else // test: handle tension once in pvinputfilterfactormode milliseconds return OK; #endif - for (i=0;i= 5000) + //if (index == WINDER_MOTOR) //feeder unit handles errors opposite to left unit + //{ + // Report("MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,CurrentControlledSpeed[index],0); + //} + /`*if (JobCounter >= 3000) { MotorSpeedSamples[index][MotorSpeedSamplePointer[index]] = CurrentControlledSpeed[index];//(-1 * TranslatedReadValue); MotorSpeedSamplePointer[index]++; @@ -515,28 +546,45 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) avreageMotorSampleValue = avreageMotorSampleValue / MAX_CONTROL_SAMPLES; //Report("MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,avreageMotorSampleValue,0); OriginalMotorSpd_2PPS[index] = avreageMotorSampleValue; - } - } + }*`/ + }*/ calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index]; //calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*CurrentControlledSpeed[index]; +#ifndef TEST_PID_THREAD if (abs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue) +#else + if (index == FEEDER_MOTOR) //feeder unit handles errors opposite to left unit +#endif { - /*if (keepdata == true) - { - calculatedError[controlIndex] = MotorControlConfig[index].m_calculatedError; - MotorId[controlIndex] = index; - readValue[controlIndex] = ReadValue; - AveragereadValue[controlIndex] = avreageSampleValue; - calculatedspeed[controlIndex] = calculated_speed; - NormError[controlIndex] - = MotorControlConfig[index].m_mesuredParam; - mIntegral[controlIndex] = MotorControlConfig[index].m_integral; - timestamp[controlIndex] = msec_millisecondCounter; - if (controlIndex++>=MAX_THREAD_CONTROL_LOG) - controlIndex = 0; - }*/ CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); + if (((JobCounter % 2000) == index*100)&&(index == WINDER_MOTOR)) //feeder unit handles errors opposite to left unit + { + Report("MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,CurrentControlledSpeed[index],0); + } +#ifdef TEST_PID_THREAD + int len; + if ((JobCounter % 2000) == index*100) + //if (keepdata == true) + { + /*calculatedError[controlIndex] = MotorControlConfig[index].m_calculatedError; + MotorId[controlIndex] = index; + readValue[controlIndex] = ReadValue; + AveragereadValue[controlIndex] = avreageSampleValue; + calculatedspeed[controlIndex] = calculated_speed; + NormError[controlIndex] = MotorControlConfig[index].m_mesuredParam; + mIntegral[controlIndex] = MotorControlConfig[index].m_integral; + timestamp[controlIndex] = msec_millisecondCounter;*/ + len = usnprintf(TMessage, 150, "read %d avg %d error(6) %d integral(9) %d,delta(9) %d, calc(3) %d speed %d", + ReadValue,avreageSampleValue,(int)(MotorControlConfig[index].m_mesuredParam*1000000), + (int)(MotorControlConfig[index].m_integral*1000000000),(int)((MotorControlConfig[index].m_mesuredParam*MotorControlConfig[index].m_params.dt)*1000000000), + (int)(MotorControlConfig[index].m_calculatedError*1000),(int)calculated_speed); + Report(TMessage,__FILE__,__LINE__,DancerId,RpError,ReadValue,0); + //Task_sleep(100); + //if (controlIndex++>=MAX_THREAD_CONTROL_LOG) + // controlIndex = 0; + } +#endif } else MotorFailedSample[index]++; @@ -658,8 +706,10 @@ bool InitialProcess = false; ControlIdtoMotorId[Motor_i] = 0xFF; CurrentControlledSpeed[Motor_i] = 0; } +#ifndef TEST_PID_THREAD ControlIdtoMotorId[Motor_i] = AddControlCallback(ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); //AddControlCallback(ThreadControlSpeedReadFunction, eHundredMillisecond,MotorGetSpeedFromFPGA,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],Motor_i); +#endif } if (Motor_i == POOLER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will n//ot be controlled { @@ -670,7 +720,9 @@ bool InitialProcess = false; CurrentControlledSpeed[Motor_i] = 0; ControlIdtoMotorId[Motor_i] = 0xFF; } +#ifndef TEST_PID_THREAD ControlIdtoMotorId[Motor_i] = AddControlCallback(ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); +#endif } if (Motor_i == WINDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will n//ot be controlled { @@ -681,17 +733,23 @@ bool InitialProcess = false; CurrentControlledSpeed[Motor_i] = 0; ControlIdtoMotorId[Motor_i] = 0xFF; } +#ifndef TEST_PID_THREAD ControlIdtoMotorId[Motor_i] = AddControlCallback(ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); +#endif } // if (HW_Motor_Id == HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled // AddControlCallback(ThreadSpeedControlCBFunction, eOneMillisecond,TemplateDataReadCBFunction,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],0); if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled continue; } - //testDancersControl(); +#ifdef TEST_PID_THREAD + testDancersControl(); +#endif PrepareReady(Module_Thread,ModuleDone); //set 3 dancers to the profile positions InitialProcess = true; + initialpos = 0xFFFF; + Poolerinitialpos = 0xFFFF; return OK; } @@ -709,6 +767,8 @@ void SetOriginMotorSpeed(float process_speed) //MotorControlConfig[Motor_i].m_SetParam = motor_speed; OriginalMotorSpd_2PPS[Motor_i] = (int) motor_speed; CurrentControlledSpeed[Motor_i] = (int) motor_speed; + Report("Original Speed",__FILE__,Motor_i,motor_speed,RpWarning,process_speed,0); + for (i = 0; i <= MAX_CONTROL_SAMPLES; i++) MotorSpeedSamples[Motor_i][i] = motor_speed; } @@ -732,8 +792,10 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) SetOriginMotorSpeed(process_speed); ThreadControlActive = true; PrepareState = false; +#ifndef TEST_PID_THREAD // set the new speed in the dryer motor to the speed of the new segment MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING, OriginalMotorSpd_2PPS[DRYER_MOTOR]); +#endif #ifdef HUNDRED_MICROSECONDS_DANCER_READ MillisecLogInit(); #endif diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h index 74f7b40ef..a0a758b94 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h @@ -100,6 +100,7 @@ U8 WHS_HW_test(void); bool WHS_IsEmptying(); bool WHS_IsContainerFull(); +bool WHS_IsContainerEmpty(); bool WHS_IsContainerOverflow(); bool WHS_WasteCartridgeLowerPresent(); bool WHS_WasteCartridgeMiddlePresent(); diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c index 7d24f9618..962b941af 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c @@ -99,6 +99,8 @@ struct WHS_information struct WHS_information WHS_info; bool WHS_IsContainerFull(){return WHS_info.WHS_sensors.waste_tank_full_sensor;} +bool WHS_IsContainerEmpty(){return WHS_info.WHS_sensors.waste_tank_empty_sensor;} + bool WHS_IsContainerOverflow(){return WHS_info.WHS_sensors.waste_tank_over_flow_sensor;} bool WHS_WasteCartridgeLowerPresent(){return WHS_info.WHS_sensors.waste_cartridge1_precense_sensor;} bool WHS_WasteCartridgeMiddlePresent(){return WHS_info.WHS_sensors.waste_cartridge2_precense_sensor;} diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index c02824117..a6a82ae6d 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -10,6 +10,7 @@ Modules: Alarm handling: many unusful alarm removed: motors, heating process, midtank empty Diagnostic data reduced significantly in frequency Waste state machine disabled for ITMA + improve backlash after homing Drivers: VOC Gas sensor fixes. Lubricant valve workaround until FPGA will be fixed diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 8ee3c8181..bdf8bd15d 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -190,7 +190,7 @@ uint32_t InitSequenceBlowerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) if (BlowerCfg.heatingvoltage) Control_Voltage_To_Blower(BlowerCfg.heatingvoltage); else - Control_Voltage_To_Blower(2700); + Control_Voltage_To_Blower(3000); Safety_Init(); InitStages++; //InitSequenceStateMachine(InitStages); -- cgit v1.3.1 From 77e72b9d16522648a350a95382309e9692434011 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 23 May 2019 14:59:16 +0300 Subject: prints --- Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 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 f1c8956ff..66c2e1659 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -305,11 +305,11 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) ScrewRunningTime = temp;//(SYS_CLK_FREQ*Steps)/ScrewSpeed; //ROM_IntMasterEnable(); //usnprintf(TempScrewStr, 100, "Winder: Horizon,Rotation, PPR, RPP{ %d, %d ,%d, %d} ",(int)screw_horizontal_speed,(int)RotationsPerSecond,(int)InternalWinderCfg.NumberOfRotationPerPassage,(int)MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround); - //usnprintf(ScrewStr, 100, "Winder: Steps,Speed, Time, WinderSpeed{ %d, %d ,%d, %d} ",(int)ScrewNumberOfSteps,(int)ScrewSpeed,(int)temp,(int)WinderReferenceSpeed); + usnprintf(ScrewStr, 100, "Winder: Steps,Speed, Time, WinderSpeed{ %d, %d ,%d, %d} ",(int)ScrewNumberOfSteps,(int)ScrewSpeed,(int)temp,(int)WinderReferenceSpeed); // Report(logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); // #warning PID is now only proportional (above) //Report(TempScrewStr,__FILE__,__LINE__,0,RpWarning,0, 0); - //Report(ScrewStr,__FILE__,__LINE__,ScrewCurrentDirection,RpWarning,CalculationDirectionChangeCounter, 0); + Report(ScrewStr,__FILE__,__LINE__,ScrewCurrentDirection,RpWarning,CalculationDirectionChangeCounter, 0); //REPORT_MSG(temp , "new winder speed"); //Report("new winder speed",__FILE__,ScrewNumberOfSteps,temp,RpWarning,ScrewSpeed,0); } @@ -372,12 +372,12 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) temp *= ScrewNumberOfSteps; temp /= ScrewSpeed; ScrewRunningTime = temp;//(SYS_CLK_FREQ*InternalWinderCfg.segmentoffsetpulses)/ScrewSpeed; - REPORT_MSG(ScrewNumberOfSteps,"Winder pre segment - ScrewNumberOfSteps"); - REPORT_MSG(ScrewRunningTime,"Winder pre segment - ScrewRunningTime"); + REPORT_MSG((int)ScrewNumberOfSteps,"Winder pre segment - ScrewNumberOfSteps"); + REPORT_MSG((int)ScrewRunningTime,"Winder pre segment - ScrewRunningTime"); // MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); //ScrewDirection = 1-ScrewDirection; REPORT_MSG(SegmentId,"Winder pre segment - SegmentId"); - REPORT_MSG(ScrewSpeed,"Winder pre segment - ScrewSpeed"); + REPORT_MSG((int)ScrewSpeed,"Winder pre segment - ScrewSpeed"); //MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); ScrewsStartControlTimer (); ScrewControlId = AddControlCallback(Screw100msecDirectionChange, eHundredMillisecond,TemplateDataReadCBFunction,0,0,0); -- cgit v1.3.1 From d7d99dc7d1fa11845c5d4df3bbff16fec33b406c Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 26 May 2019 18:13:17 +0300 Subject: Version 1.4.0.2 improve winding (simplify). incorporate screw encoder reading. fix length/time problem between IDS and Thread. --- .../Embedded/Common/SWUpdate/FileSystem.c | 3 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 15 ++- .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.h | 1 + .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 42 ++++++-- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 13 ++- .../Embedded_SW/Embedded/Modules/Control/PIDAlgo.c | 2 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 1 + .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 41 +++++++- .../Embedded/Modules/Stubs_Handler/Stub_Motor.c | 2 +- .../Embedded_SW/Embedded/Modules/Thread/Thread.h | 6 +- .../Embedded/Modules/Thread/ThreadLoad.c | 2 +- .../Embedded/Modules/Thread/Thread_Winder.c | 116 +++++++++++++-------- .../Embedded/Modules/Thread/Thread_ex.h | 2 +- .../Embedded/Modules/Thread/Thread_init.c | 2 +- .../Embedded/Modules/Thread/Thread_print.c | 26 +++-- .../Embedded/StateMachines/Printing/JobSTM.c | 38 ++++--- .../Embedded/StateMachines/Printing/PrintingSTM.c | 30 +++++- 18 files changed, 237 insertions(+), 107 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 68745b390..68500ac88 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -154,7 +154,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) // memcpy (&ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle)); //if (ReceivedFileHandle == FileHandle) //{ - KeepAliveOneSecondCounter = 0; + Control_WD(ENABLE,10); //activate heaters/dispenser watchdog, 0.5 seconds + KeepAliveOneSecondCounter = 0; Fresult = f_write(ReceivedFileHandle,request->buffer.data,request->buffer.len,&WrittenBytes ); lFresult = Fresult; if(Fresult != FR_OK) 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 21c7eb041..b2590abab 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,0,0}; +TangoVersion_t _gTangoVersion = {1,4,0,2}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d 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 26f6d5c56..5cfaddb1e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -225,6 +225,17 @@ void FPGA_GetClrMotStat_Cmd(TimerMotors_t _motorId) } +void FPGA_GetFPGAMotSpeed_Cmd(TimerMotors_t _motorId) +{ + uint32_t temp; + Fpga_Spi[_motorId].TX_MOSI = x_GET_PARAM | x_SPEED; + Fpga_Spi[_motorId].TX_MOSI = Fpga_Spi[_motorId].TX_MOSI << 24;// move the command to the MSB TODO necessary??? + //Fpga_Spi[_motorId].AMT_OF_Words = 1; + temp = Fpga_Spi[_motorId].TX_MOSI; + + MillisecReadFromMotor(_motorId, temp, 4, MotorGetSpeedFromFPGA_Callback); +} + void FPGA_GetMotSpeed_Cmd(TimerMotors_t _motorId) { Fpga_Spi[_motorId].TX_MOSI = x_GET_PARAM | x_SPEED; @@ -769,7 +780,9 @@ void FPGA_SetMotSpeedDirect(TimerMotors_t _motorId)//Run Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - FPGA_SPI_Transnit(_motorId); + //FPGA_SPI_Transnit(_motorId); + MotorSendFPGARequest(_motorId,temp, 4); //returns -1 on busy or other error + } void FPGA_SetMotMaxSpeed(TimerMotors_t _motorId)//Mov { diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.h index e2937e597..114d24a85 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.h @@ -14,6 +14,7 @@ uint32_t Read_Motors_Driver_Type(TimerMotors_t i); void FPGA_GetClrMotStat_Cmd(TimerMotors_t _motorId); void FPGA_GetMotSpeed_Cmd(TimerMotors_t _motorId); void FPGA_Get_ADC_OUT_Cmd(TimerMotors_t _motorId); +void FPGA_GetFPGAMotSpeed_Cmd(TimerMotors_t _motorId); void FPGA_Get_Res(TimerMotors_t _motorId); void FPGA_GetBusy(); diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 106e60316..202021282 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -117,9 +117,13 @@ uint32_t MotorSetDirection(TimerMotors_t _motorId,bool _direction) return OK; } -uint32_t MotorSetSpeed(TimerMotors_t _motorId, uint32_t _freq)//TODO MicroSteps? +uint32_t MotorSetSpeed(TimerMotors_t _motorId, float _freq)//TODO MicroSteps? { - int RunSpeed = SpdCalc(_freq); + if (_motorId == HARDWARE_MOTOR_TYPE__MOTO_SCREW) + { + LOG_ERROR ((int)_freq, "SCREW SET SPEED CALLED"); + } + uint32_t RunSpeed = SpdCalc(_freq); #ifdef EVALUATION_BOARD Run_Value = RunSpeed; Mot_Run(); @@ -130,9 +134,9 @@ uint32_t MotorSetSpeed(TimerMotors_t _motorId, uint32_t _freq)//TODO MicroSteps? return OK; } -uint32_t MotorSetSpeedDirect(TimerMotors_t _motorId, uint32_t _freq) +uint32_t MotorSetSpeedDirect(TimerMotors_t _motorId, float _freq) { - int RunSpeed = SpdCalc(_freq); + uint32_t RunSpeed = SpdCalc(_freq); MotorDriverRequest[_motorId].Speed = RunSpeed; FPGA_SetMotSpeedDirect(_motorId); @@ -140,7 +144,7 @@ uint32_t MotorSetSpeedDirect(TimerMotors_t _motorId, uint32_t _freq) } -uint32_t MotorGetSpeed(TimerMotors_t _motorId) +float MotorGetSpeed(TimerMotors_t _motorId) { return MotorDriverResponse[_motorId].Speed; } @@ -174,6 +178,25 @@ uint32_t MotorGetPositionFromFPGA_Callback(TimerMotors_t _motorId,uint32_t Data) return MotorDriverResponse[_motorId].Position; } +uint32_t MotorGetSpeedFromFPGA1(TimerMotors_t _motorId) +{ + #ifdef EVALUATION_BOARD + MotorDriverResponse[_motorId].Speed = (CurrentSpdCalc(Get_Param(x_SPEED))); + return (uint32_t)(MotorDriverResponse[_motorId].Speed); + #else + FPGA_GetFPGAMotSpeed_Cmd(_motorId); + return OK; + #endif +} +float MotorGetSpeedFromFPGA_Callback(TimerMotors_t _motorId,uint32_t Data) +{ + #ifndef EVALUATION_BOARD + // FPGA_Get_Res(_motorId); + MotorDriverResponse[_motorId].Speed = CurrentSpdCalc(Data); + #endif + return MotorDriverResponse[_motorId].Speed; +} + //uint32_t MotorGetPositionFromFPGA_Res(TimerMotors_t _motorId) //{ // #ifndef EVALUATION_BOARD @@ -190,20 +213,19 @@ uint32_t MotorGetSpeedFromFPGA(TimerMotors_t _motorId) // MotorDriverResponse[_motorId].Speed = (float)(CurrentSpdCalc(MotFPGA_Spi.RX_MISO)); // return MotorDriverResponse[_motorId].Speed; #ifdef EVALUATION_BOARD - uint32_t temp = (uint32_t)(CurrentSpdCalc(Get_Param(x_SPEED))); - MotorDriverResponse[_motorId].Speed = temp; - return temp; + MotorDriverResponse[_motorId].Speed = (CurrentSpdCalc(Get_Param(x_SPEED))); + return (uint32_t)(MotorDriverResponse[_motorId].Speed); #else FPGA_GetMotSpeed_Cmd(_motorId); return OK; #endif } -uint32_t MotorGetSpeedFromFPGA_Res(TimerMotors_t _motorId) +float MotorGetSpeedFromFPGA_Res(TimerMotors_t _motorId) { #ifndef EVALUATION_BOARD FPGA_Get_Res(_motorId); - MotorDriverResponse[_motorId].Speed = (float)(CurrentSpdCalc(Fpga_Spi[_motorId].RX_MISO)); + MotorDriverResponse[_motorId].Speed = CurrentSpdCalc(Fpga_Spi[_motorId].RX_MISO); #endif return MotorDriverResponse[_motorId].Speed; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index 894f60c09..81cc7828b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -96,7 +96,7 @@ typedef struct typedef struct { bool Direction; - uint32_t Speed; + float Speed; uint32_t Position; uint32_t Status; uint8_t MicroSteps; @@ -125,14 +125,14 @@ uint32_t MotorGetDirection(TimerMotors_t _motorId); uint32_t MotorSetDirection(TimerMotors_t _motorId,bool _direction); -uint32_t MotorSetSpeed(TimerMotors_t _motorId, uint32_t _freq); -uint32_t MotorSetSpeedDirect(TimerMotors_t _motorId, uint32_t _freq); // call directly and not from millisec task +uint32_t MotorSetSpeed(TimerMotors_t _motorId, float _freq); +uint32_t MotorSetSpeedDirect(TimerMotors_t _motorId, float _freq); // call directly and not from millisec task uint32_t MotorSetMaxSpeed(TimerMotors_t _motorId, uint32_t MaxSpeed); uint32_t MotorSetMicroStep(TimerMotors_t _motorId, uint32_t microstep); -uint32_t MotorGetSpeed(TimerMotors_t _motorId); +float MotorGetSpeed(TimerMotors_t _motorId); uint32_t MotorGetADC(TimerMotors_t _motorId); uint32_t MotorGetPosition(TimerMotors_t _motorId); @@ -142,7 +142,10 @@ uint32_t MotorGetPositionFromFPGA_Callback(TimerMotors_t _motorId,uint32_t Data) //uint32_t MotorGetPositionFromFPGA_Res(TimerMotors_t _motorId); uint32_t MotorGetSpeedFromFPGA(TimerMotors_t _motorId); -uint32_t MotorGetSpeedFromFPGA_Res(TimerMotors_t _motorId); +float MotorGetSpeedFromFPGA_Res(TimerMotors_t _motorId); +uint32_t MotorGetSpeedFromFPGA1(TimerMotors_t _motorId); +float MotorGetSpeedFromFPGA_Callback(TimerMotors_t _motorId,uint32_t Data); + uint32_t MotorGetADCFromFPGA(TimerMotors_t _motorId); uint32_t MotorGetADCFromFPGA_Res(TimerMotors_t _motorId); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c index dd9841777..6c1b647be 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c @@ -11,7 +11,7 @@ float PIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_P error = _setPoint - _mesuredParam; //In case of error too small then stop integration - if(abs(error) > params->epsilon) + if(fabs(error) > params->epsilon) { *_integral = *_integral + error*params->dt; } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index a5165e7f2..4dbd2e89e 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -44,6 +44,7 @@ uint32_t IDSPrepareState(void *JobDetails); void IDSPrepareStart(void); uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId); +uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId); uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId); uint32_t IDSDistanceToSpoolState(void); uint32_t IDSEndState(void); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index efedfe545..1d395ec8c 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -850,6 +850,40 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); } return OK; } +uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId) +{ + JobDescriptionFileSegment* PrevSegment = SegmentDetails; + uint32_t status = OK; + JobDescriptionFileBrushStop * tFileBrushStop; + int Brush_i; + +//check and close previous segment + if (PrevSegment) + { + if (JobBrushStopIdbrushstopscount) //we did not finish reading the brushstops of the previous segment + { + Report("Unhandled brushstops remained",__FILE__,__LINE__,(int)JobBrushStopId,RpWarning,(int)PrevSegment->brushstopscount,0); + //REPORT_MSG (Segment->brushstopscount, "Segment->brushstopscount"); + for (Brush_i=JobBrushStopId;Brush_ibrushstopscount;Brush_i++) + { + if (status == ERROR) + break; + tFileBrushStop = GetNextBrushStopFromJobFile(); + if (tFileBrushStop) + { + FreeBrushStopFileData(tFileBrushStop); + Report("Unhandled brushstops handled",__FILE__,__LINE__,(int)Brush_i,RpWarning,(int)PrevSegment->brushstopscount,0); + } + else + { + status = ERROR; + break; + } + }//for brushstops + } + } + return status; +} uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) { JobSegment* Segment = SegmentDetails; @@ -864,7 +898,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) /* wait for all dispensers to get to the required pressure * move the presegment ready when all dispensers are ready. */ - REPORT_MSG(SegmentId,"IDSPreSegmentState"); + REPORT_MSG(Segment->n_brushstops,"IDSPreSegmentState"); if (JobBrushStopId>=Segment->n_brushstops) { LOG_ERROR(Segment->n_brushstops,"Error JobBrushStopId"); @@ -873,7 +907,6 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) return ERROR; } - if ((EnableIntersegment == true)&&(IntersegmentLength>0)) { Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); //if intersegment is defined throw the ink away @@ -1026,7 +1059,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) /*IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId, segmentfirst_speed, NULL);*/ - Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); CurrentDispenserSpeed[DispenserId] = segmentfirst_speed; usnprintf(IdsMessage, 80, @@ -1034,7 +1067,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) DispenserId, (int) Dispensers[Dispenser_i]->nanolitterpersecond, (int) Dispensers[Dispenser_i]->nanoliterperpulse, - (int) segmentfirst_speed,Dispensers[Dispenser_i]->dispenserstepdivision,MotorsCfg[HW_Motor_Id].microstep); + (int) (segmentfirst_speed*1000),Dispensers[Dispenser_i]->dispenserstepdivision,MotorsCfg[HW_Motor_Id].microstep); //REPORT_MSG(segmentfirst_speed,IdsMessage); Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); //SendJobProgress(0.0, 0, false, IdsMessage); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c index 0854aba40..53a860970 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c @@ -449,7 +449,7 @@ void Stub_MotorSpeedRequest(MessageContainer* requestContainer) //deley TODO SysCtlDelay(10000); //response.speed = (double)(CurrentSpdCalc(MotorGetSpeedFromFPGA_Res(Motor_Id))); - response.speed = MotorGetSpeedFromFPGA_Res(Motor_Id); + response.speed = (double)(MotorGetSpeedFromFPGA_Res(Motor_Id)); #endif ////////////////////////////////////////////////////////////////// diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index 19201c708..0093a5a2a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -56,8 +56,8 @@ extern int32_t BreakSensordebouncetimemilli; extern HardwarePidControl MotorsControl[MAX_THREAD_MOTORS_NUM]; //extern InternalWinderConfigStruc InternalWinderCfg; extern HardwareDancer DancersCfg[MAX_SYSTEM_DANCERS]; -extern uint32_t CurrentControlledSpeed[MAX_THREAD_MOTORS_NUM]; -extern int OriginalMotorSpd_2PPS[MAX_THREAD_MOTORS_NUM]; +extern double CurrentControlledSpeed[MAX_THREAD_MOTORS_NUM]; +extern double OriginalMotorSpd_2PPS[MAX_THREAD_MOTORS_NUM]; #define MAX_CONTROL_SAMPLES 10 extern int32_t MotorSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; @@ -65,7 +65,7 @@ extern int MotorSamplePointer[MAX_THREAD_MOTORS_NUM]; extern double NormalizedErrorCoEfficient[MAX_THREAD_MOTORS_NUM]; extern int DancerStopActivityLimit[MAX_THREAD_MOTORS_NUM]; extern MotorControlConfig_t MotorControlConfig[MAX_THREAD_MOTORS_NUM]; -extern int32_t MotorSpeedSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; +extern double MotorSpeedSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; extern int MotorSpeedSamplePointer[MAX_THREAD_MOTORS_NUM]; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index ab5075ab9..66d6baed5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -594,7 +594,7 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) MotorControlConfig[index].m_calculatedError = (-1*MotorControlConfig[index].m_calculatedError); }*/ calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index]; - if (abs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue) + if (fabs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue) { CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 66c2e1659..9ebc32f57 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -43,10 +43,11 @@ uint32_t ScrewDirectionChangeCounter = 1; //holds the current number of runs of //uint32_t ScrewChangeCounter = 0; //uint32_t ScrewChangeLimit = 0; uint32_t CalculationDirectionChangeCounter = 1; //holds the current number of runs of the screw - will be used to build the cone -uint16_t WinderMotorSpeed[MAX_WINDER_SPEED_CALCULATION]; +double WinderMotorSpeed[MAX_WINDER_SPEED_CALCULATION]; uint16_t WinderMotorSpeedCounter = 0; bool WinderMotorSpeedRollOver = false; -double ScrewSpeed = 0; +#define DEFAULT_SCREW_SPEED 1400 +double ScrewSpeed = DEFAULT_SCREW_SPEED; 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; @@ -96,7 +97,7 @@ uint32_t Winder_Prepare(void) uint32_t status = 0; //JobTicket* JobTicket = JobDetails; //float process_speed = JobTicket->processparameters->dyeingspeed; - double ScrewSpeed = 1500;//(process_speed*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].pulleyradius); // we will use pulley radius of the screw for this purpose, as of now + double ScrewSpeed = DEFAULT_SCREW_SPEED;//(process_speed*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].pulleyradius); // we will use pulley radius of the screw for this purpose, as of now //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,InternalWinderCfg.segmentoffsetpulses); //REPORT_MSG(ScrewSpeed, "Winder_Prepare"); /* @@ -143,9 +144,9 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue) //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,InternalWinderCfg.segmentoffsetpulses); //REPORT_MSG(numOfSteps, "Winder_PrepareStage2"); - //Read_Screw_Encoder(); - //ScrewLocationLimitSwitch = Screw_RotEnc.Position; - //REPORT_MSG(ScrewLocationLimitSwitch, "Winder_PrepareStage2 Encoder Location"); + Read_Screw_Encoder(); + ScrewLocationLimitSwitch = Screw_RotEnc.Position; + REPORT_MSG(ScrewLocationLimitSwitch, "Winder_PrepareStage2 Encoder Location"); REPORT_MSG(millisecondCounter/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].maxfrequency*/, "Winder_PrepareStage2"); @@ -169,8 +170,13 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) //SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_SCREW); //set this point as the spool home //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,temp_MaxFrequency); - //Read_Screw_Encoder(); - //ScrewLocationStart = Screw_RotEnc.Position; + MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Soft_Hiz); //per L6470 errata between mov and run commands + Task_sleep(5); + Reset_Screw_Encoder(); + Task_sleep(5); + Read_Screw_Encoder(); + Task_sleep(5); + ScrewLocationStart = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationStart, "Winder_ScrewAtOffsetCallback Encoder Location"); @@ -180,7 +186,6 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) ScrewControlId = 0xFF; ScrewNumberOfSteps = 0; REPORT_MSG(millisecondCounter, "Winder_ScrewAtOffsetCallback"); - MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Soft_Hiz); //per L6470 errata between mov and run commands PrepareReady(Module_Winder, ModuleDone); return OK; } @@ -212,26 +217,28 @@ InternalWinderCfg.segmentoffsetpulses numOfSteps = InternalWinderCfg.startoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; */ -char ScrewStr[100]; +char ScrewStr[150]; //char TempScrewStr[100]; double WinderReferenceSpeed=0; -int32_t TotalWinderSpeed=0; +double TotalWinderSpeed=0; bool Add100 = false; double Rotations = 6.0; +bool flipflop = false; +uint32_t motspeed; +float speedf; +int WinderCalculation = 0; uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { //uint32_t Steps; double temp,tempScrewSpeed; double screw_horizontal_speed = 0; double RotationsPerSecond; - int32_t Averagewinderspeed = 0; + double Averagewinderspeed = 0; - //ScrewChangeCounter++; - //if ((ScrewChangeCounter>3)&&(ScrewChangeCounter<(ScrewChangeLimit-2))) //do not take the winder speed near the limits - { - TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter]; - WinderMotorSpeed[WinderMotorSpeedCounter] = CurrentControlledSpeed[WINDER_MOTOR]; - TotalWinderSpeed+=WinderMotorSpeed[WinderMotorSpeedCounter]; +// { +// TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter]; +// WinderMotorSpeed[WinderMotorSpeedCounter] = CurrentControlledSpeed[WINDER_MOTOR]; +// TotalWinderSpeed+=WinderMotorSpeed[WinderMotorSpeedCounter]; if (WinderMotorSpeedCounter++>=MAX_WINDER_SPEED_CALCULATION) { if (WinderMotorSpeedRollOver == false) @@ -239,20 +246,34 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) Add100 = true; LOG_ERROR(Add100, "Add100 = true"); } - WinderMotorSpeedCounter=0; +// WinderMotorSpeedCounter=0; WinderMotorSpeedRollOver=true; } +// } + if (flipflop) + { + speedf = MotorGetSpeedFromFPGA_Res(HARDWARE_MOTOR_TYPE__MOTO_SCREW); } + else + { + MotorGetSpeedFromFPGA1(HARDWARE_MOTOR_TYPE__MOTO_SCREW); + } + flipflop = 1-flipflop; if (ScrewDirectionChangeCounter == CalculationDirectionChangeCounter) return OK; + //deley TODO + ScrewCurrentDirection = 1-ScrewCurrentDirection; CalculationDirectionChangeCounter++; - //REPORT_MSG(ScrewLocationRun[1] - ScrewLocationRun[0], "Screw Run NumberOfSteps"); - //usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0])); + //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; + //REPORT_MSG((abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); +// usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); + usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, + abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); //usnprintf(ScrewStr, 100, "Winder Encoder: 0 %d 1 %d diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],ScrewLocationRun[1] - ScrewLocationRun[0]); - //Report(ScrewStr,__FILE__,__LINE__,ScrewLocationLimitSwitch,RpWarning,ScrewLocationStart, 0); + Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); if (ScrewCurrentDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize) //next time going out { @@ -265,8 +286,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if ((CalculationDirectionChangeCounter/2)%InternalWinderCfg.spoolbackingrate == 0) { ScrewNumberOfSteps--; - REPORT_MSG(ScrewNumberOfSteps, "Head Backing ScrewNumberOfSteps"); - + Report("Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } else //next time going back @@ -274,34 +294,38 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if ((CalculationDirectionChangeCounter/2)%InternalWinderCfg.SpoolBottomBackingRate == 0) { ScrewNumberOfSteps++; - REPORT_MSG(ScrewNumberOfSteps, "Bottom Backing ScrewNumberOfSteps"); + Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } - if (WinderMotorSpeedRollOver) + /* if (WinderMotorSpeedRollOver) { - /*for (i=0;i 6.6)//7.0) - Rotations = 6.0; + // if (Rotations > 6.6)//7.0) + // Rotations = 6.0; RotationsPerSecond = WinderReferenceSpeed / (double)MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround; tempScrewSpeed = screw_horizontal_speed*RotationsPerSecond; //ROM_IntMasterDisable(); + tempScrewSpeed = DEFAULT_SCREW_SPEED; + CurrentControlledSpeed[SCREW_MOTOR] = ScrewSpeed; + temp = SYS_CLK_FREQ; temp *= ScrewNumberOfSteps; temp /= tempScrewSpeed; if ((ScrewRunningTime != temp)||(ScrewSpeed != tempScrewSpeed)) { ScrewSpeed = tempScrewSpeed; + ScrewSpeed = DEFAULT_SCREW_SPEED; ScrewRunningTime = temp;//(SYS_CLK_FREQ*Steps)/ScrewSpeed; //ROM_IntMasterEnable(); //usnprintf(TempScrewStr, 100, "Winder: Horizon,Rotation, PPR, RPP{ %d, %d ,%d, %d} ",(int)screw_horizontal_speed,(int)RotationsPerSecond,(int)InternalWinderCfg.NumberOfRotationPerPassage,(int)MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround); @@ -353,6 +377,7 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) RotationsPerSecond = OriginalMotorSpd_2PPS[WINDER_MOTOR] / MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround; // calculation input#3: speed = rotation per second * traverse per rotation = traverse per second. speed set: traverse per second (mm) * pulses per mm. ScrewSpeed = screw_horizontal_speed*RotationsPerSecond; + ScrewSpeed = DEFAULT_SCREW_SPEED; //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); usnprintf(ScrewStr, 100, "SCREW speed Rot/sec %d horizon %d pulses %d",(int)RotationsPerSecond,(int)screw_horizontal_speed,(int)ScrewSpeed); @@ -372,12 +397,12 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) temp *= ScrewNumberOfSteps; temp /= ScrewSpeed; ScrewRunningTime = temp;//(SYS_CLK_FREQ*InternalWinderCfg.segmentoffsetpulses)/ScrewSpeed; - REPORT_MSG((int)ScrewNumberOfSteps,"Winder pre segment - ScrewNumberOfSteps"); - REPORT_MSG((int)ScrewRunningTime,"Winder pre segment - ScrewRunningTime"); + REPORT_MSG(ScrewNumberOfSteps,"Winder pre segment - ScrewNumberOfSteps"); + REPORT_MSG(ScrewRunningTime,"Winder pre segment - ScrewRunningTime"); // MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); //ScrewDirection = 1-ScrewDirection; REPORT_MSG(SegmentId,"Winder pre segment - SegmentId"); - REPORT_MSG((int)ScrewSpeed,"Winder pre segment - ScrewSpeed"); + REPORT_MSG(ScrewSpeed,"Winder pre segment - ScrewSpeed"); //MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); ScrewsStartControlTimer (); ScrewControlId = AddControlCallback(Screw100msecDirectionChange, eHundredMillisecond,TemplateDataReadCBFunction,0,0,0); @@ -458,20 +483,20 @@ void ScrewsStartControlTimer (void) return; } -int random = 0; + void ScrewTimerInterrupt(int ARG0) { ROM_TimerIntClear(Screw_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt ROM_IntMasterDisable(); - //Read_Screw_Encoder(); - //ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; if (SCREW_TimerActivated == true) { + Read_Screw_Encoder(); ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)ScrewRunningTime); MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); - MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed+random); + MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); + ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; // ScrewChangeCounter = 0; // ScrewChangeLimit = ScrewRunningTime/12000000; ScrewDirectionChangeCounter++; @@ -481,7 +506,8 @@ void ScrewTimerInterrupt(int ARG0) TimerDisable(Screw_timerBase, TIMER_A); } ROM_IntMasterEnable(); - Rotations+=0.03; + //MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); + //Rotations+=0.03; return ; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 91eedeb6b..ead318758 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -28,7 +28,7 @@ void ThreadSetBreakSensorLimit(int limit); uint32_t InternalWindingConfigMessage(JobSpool* request); uint32_t ThreadConfigBreakSensor(void *request); -uint32_t ThreadGetMotorSpeed(threadMotorsEnum MotorId); +double ThreadGetMotorSpeed(threadMotorsEnum MotorId); double ThreadGetMotorCalculatedError(int DancerId); uint32_t ThreadPrepareState(void *JobDetails); uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 265c751c6..0acb587b2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -22,7 +22,7 @@ MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS]={0}; HardwarePidControl MotorsControl[MAX_THREAD_MOTORS_NUM] = {0}; -int32_t MotorSpeedSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES] = {0}; +double MotorSpeedSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES] = {0}; int MotorSpeedSamplePointer[MAX_THREAD_MOTORS_NUM] = {0}; int32_t MotorSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES] = {0}; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 25485290b..a285d4194 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -39,7 +39,7 @@ //by recieved esign flow of the user from the UI /////////////////////////////////////////////////////////////////////////////////////////// -uint32_t CurrentControlledSpeed[MAX_THREAD_MOTORS_NUM] = {0}; +double CurrentControlledSpeed[MAX_THREAD_MOTORS_NUM] = {0}; TimerMotors_t ThreadMotorIdToMotorId[MAX_THREAD_MOTORS_NUM] = {HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,HARDWARE_MOTOR_TYPE__MOTO_WINDER,HARDWARE_MOTOR_TYPE__MOTO_SCREW}; HardwareDancerType ThreadMotorIdToDancerId[MAX_THREAD_MOTORS_NUM] = {FEEDER_DANCER,NUM_OF_DANCERS,POOLER_DANCER,WINDER_DANCER,NUM_OF_DANCERS}; @@ -48,7 +48,7 @@ uint32_t SpeedControlId=0xFF; uint32_t PoolerSpeedControlId=0xFF; double DancerError[NUM_OF_DANCERS] = {0.0}; -int OriginalMotorSpd_2PPS[MAX_THREAD_MOTORS_NUM] = {0}; +double OriginalMotorSpd_2PPS[MAX_THREAD_MOTORS_NUM] = {0}; uint32_t JobCounter = 0; MotorControlConfig_t MotorControlConfig[MAX_THREAD_MOTORS_NUM]; @@ -186,6 +186,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) usnprintf(Lenstr, 100, "length huge: length %d, diff 0x%x, pos 0x%x prev 0x%x",(int)length*100,(int)positionDiff,PreviousPosition,prevprev); SendJobProgress(0.0,0,false, Lenstr); Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + length = 0; } @@ -275,7 +276,7 @@ uint32_t ThreadSpeedControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) int index=MAX_THREAD_MOTORS_NUM; int32_t i, avreageSampleValue = 0; //double tempcalcspeed = 0; - uint32_t calculated_speed; + double calculated_speed; float speed = getSensorSpeedData(); if (IfIndex>>8 != IfTypeThread) { @@ -297,7 +298,7 @@ uint32_t ThreadSpeedControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) &MotorControlConfig[index].m_params, &MotorControlConfig[index].m_preError, &MotorControlConfig[index].m_integral); //SetMotorFreq (index, MotorControlConfig[index].m_calculatedError); calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index]; - if (abs(calculated_speed-CurrentControlledSpeed[index])>2) + if (fabs(calculated_speed-CurrentControlledSpeed[index])>2) { CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); @@ -305,7 +306,7 @@ uint32_t ThreadSpeedControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } return OK; } -uint32_t _speed; +float _speed; uint32_t ThreadControlSpeedReadFunction(uint32_t IfIndex, uint32_t ReadValue) { int index; @@ -393,7 +394,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) int DancerId; int32_t TranslatedReadValue, avreageSampleValue = 0,avreageMotorSampleValue = 0; //double tempcalcspeed = 0; - uint32_t calculated_speed; + double calculated_speed; double NormalizedError; if (ThreadControlActive == false) @@ -551,17 +552,17 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index]; //calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*CurrentControlledSpeed[index]; #ifndef TEST_PID_THREAD - if (abs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue) + if (fabs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue) #else if (index == FEEDER_MOTOR) //feeder unit handles errors opposite to left unit #endif { CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); - if (((JobCounter % 2000) == index*100)&&(index == WINDER_MOTOR)) //feeder unit handles errors opposite to left unit + /*if (((JobCounter % 2000) == index*100)&&(index == WINDER_MOTOR)) //feeder unit handles errors opposite to left unit { - Report("MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,CurrentControlledSpeed[index],0); - } + Report("MotorSpeedUpdated",__FILE__,index,(int)OriginalMotorSpd_2PPS[index],RpWarning,(int)CurrentControlledSpeed[index],0); + }*/ #ifdef TEST_PID_THREAD int len; if ((JobCounter % 2000) == index*100) @@ -587,7 +588,10 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) #endif } else + { MotorFailedSample[index]++; + //LOG_ERROR(index,"No change in speed"); + } } @@ -595,7 +599,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } //******************************************************************************************************************** -uint32_t ThreadGetMotorSpeed(threadMotorsEnum MotorId) +double ThreadGetMotorSpeed(threadMotorsEnum MotorId) { return CurrentControlledSpeed[MotorId]; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 7269354f9..7ad887925 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -782,23 +782,6 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes { responseContainer.has_error = true; responseContainer.error = JobError_to_ErrorCode[JobEndReason]; - switch (JobEndReason) - { - case JOB_THREAD_BREAK: - AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); - break; - case JOB_POOLER_DANCER_FAIL: - AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER,true); - break; - case JOB_FEEDER_DANCER_FAIL: - AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER,true); - break; - case JOB_WINDER_DANCER_FAIL: - AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER,true); - break; - default: - break; - } } if (JobAbortedByUser == true) { @@ -827,6 +810,26 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes CurrentRequest = NULL; } JobStopReporting(); + if(JobEndReason != JOB_OK) + { + switch (JobEndReason) + { + case JOB_THREAD_BREAK: + AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); + break; + case JOB_POOLER_DANCER_FAIL: + AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER,true); + break; + case JOB_FEEDER_DANCER_FAIL: + AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER,true); + break; + case JOB_WINDER_DANCER_FAIL: + AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER,true); + break; + default: + break; + } + } JobMessageStruc JobMessage; JobMessage.messageId = PrintingResultsOk; @@ -841,6 +844,7 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes } void JobStopReporting(void) { + LOG_ERROR(0,"JobStopReporting"); JobToken[0] = 0; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 46241c3a0..2aa260e9f 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -665,7 +665,7 @@ void PrintSTMMsgHandler(void * msg) if (SegmentId >= n_segments) { if (dryerbufferlength == 0) - EndState(CurrentJob, "Job Ended"); + EndState(CurrentJob, "Job Ended"); else DistanceToSpoolState(CurrentJob); } @@ -673,12 +673,34 @@ void PrintSTMMsgHandler(void * msg) { if (CurrentJob->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) { - if (Segment->base.descriptor->sizeof_message != 40) - LOG_ERROR (Segment->base.descriptor->sizeof_message, "Segment size error. not freeing"); + if ((Segment) && (Segment->base.descriptor->sizeof_message != 40)) + LOG_ERROR(SegmentId, "Error releasing Segment"); else if (Segment) - FreeSegmentFileData(Segment); + { + if (IDSCheckSegmentData(Segment, SegmentId) == OK) + { + FreeSegmentFileData(Segment); + } + else + { + JobEndReason = JOB_OTHER_ALARM; + if (dryerbufferlength == 0) + EndState(CurrentJob, "Job Ended"); + else + DistanceToSpoolState(CurrentJob); + } + + } Segment = GetNextSegmentFromJobFile(); + if (Segment == NULL) + { + JobEndReason = JOB_OTHER_ALARM; + if (dryerbufferlength == 0) + EndState(CurrentJob, "Job Ended"); + else + DistanceToSpoolState(CurrentJob); + } SSegment.length = Segment->length; SSegment.has_length = Segment->has_length; SSegment.n_brushstops = Segment->brushstopscount; -- cgit v1.3.1 From aacf8b3ae866d99d78870899c9b80184a66e0167 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 28 May 2019 17:05:30 +0300 Subject: Version 1.4.0.3 fix priming on empty dispenser. other small bugs --- .../Embedded/Common/SWUpdate/FileSystem.c | 1 + .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/Motors/MotorActions.c | 2 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 28 ++++++++------- .../Embedded/Modules/Diagnostics/Diagnostics.c | 1 + .../Embedded/Modules/General/GeneralHardware.c | 2 ++ .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 41 +++++++++++++++++++++- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 1 + .../Embedded/Modules/Thread/Thread_Winder.c | 14 ++++---- .../Embedded/Software Release Notes.txt | 11 ++++++ .../Embedded/StateMachines/Printing/JobSTM.c | 7 ++-- 11 files changed, 85 insertions(+), 25 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 68500ac88..6c0262f66 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -35,6 +35,7 @@ #include "third_party/fatfs/src/diskio.h" #include "drivers/Flash_Memory/Flash_Memory.h" #include "drivers/Flash_Memory/fatfs/ff.h" +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "third_party/fatfs/src/ffconf.h" 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 b2590abab..bee894585 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,0,2}; +TangoVersion_t _gTangoVersion = {1,4,0,3}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index bf96335e1..3177dc787 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -469,7 +469,7 @@ uint32_t MotorMovetoLimitSwitch (TimerMotors_t MotorId,bool direction, uint32_t MotorTimeLag[MotorId] = eTenMillisecond; MotorTimeLimit[MotorId] = timeout; - if ((MotorId == HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD)||(HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH)) + if ((MotorId == HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD)||(HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH)||(HARDWARE_MOTOR_TYPE__MOTO_SCREW)) MotorTimeLag[MotorId] = 2; MotorSetDirection( MotorId, direction); diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 931b6674f..73532a7d2 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -669,6 +669,8 @@ uint32_t AlarmHandling_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue) return OK; } +void AlarmHandlingInternalSetAlarm(uint32_t AlarmId, bool value); + void AlarmHandlingSetAlarm(uint32_t AlarmId, bool value) { AlarmHandlingInternalSetAlarm( AlarmId, value); @@ -1024,12 +1026,12 @@ void AlarmHandlingTask(UArg arg0, UArg arg1) } } //StartEventsNotificationResponse StartEventsNotification = START_EVENTS_NOTIFICATION_RESPONSE__INIT; -StartEventsNotificationResponse response = START_EVENTS_NOTIFICATION_RESPONSE__INIT; +StartEventsNotificationResponse EventsResponse = START_EVENTS_NOTIFICATION_RESPONSE__INIT; int LargeMessagesAH = 0; void SendEventNotifications(void) { MessageContainer responseContainer; - //StartEventsNotificationResponse response = START_EVENTS_NOTIFICATION_RESPONSE__INIT; + //StartEventsNotificationResponse EventsResponse = START_EVENTS_NOTIFICATION_RESPONSE__INIT; int i,e=0; if (AlarmHandlingActive == false) @@ -1042,20 +1044,20 @@ void SendEventNotifications(void) return; } - response.n_events = 0; + EventsResponse.n_events = 0; UInt Key = Task_disable(); for (i = 0;itoken, true, &response, &upload_hardware_configuration_response__pack, &upload_hardware_configuration_response__get_packed_size); if (status!= OK) { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index d312dcb78..0907c4a67 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -205,6 +205,10 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) Disable_MidTank_Pressure_Reading(DispenserId); Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + if (DispenserId == LUBRICANT_DISPENSER) + { + Lubricant_2Way_Valve (START); + } MotorSetMicroStep(MotorId, MotorsCfg[MotorId].microstep); CurrentDispenserSpeed[DispenserId] = 0; @@ -227,6 +231,36 @@ uint32_t IDS_CheckDispenserLimitSwitch (LimitSwitchAlarms LS_Id) else return FPGA_Read_limit_Switches(Dispenser_Id_to_Alarm_LS_Id[LS_Id]); } +uint32_t IDS_EmptyDispenserCallback(uint32_t motorId, uint32_t ReadValue) +{ + uint8_t DispenserId = motorId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; + + Read_MidTank_Pressure_Sensor(DispenserId); + //close dry air valve in the dispenser + Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); + Disable_MidTank_Pressure_Reading(DispenserId); + + MotorStop(motorId,Hard_Hiz); + CurrentDispenserSpeed[DispenserId] = 0; + MotorSetMicroStep(motorId, MotorsCfg[motorId].microstep); + HomingActive[DispenserId]= false; + if (DispenserId == LUBRICANT_DISPENSER) + { + Lubricant_2Way_Valve (STOP); + } + + Report("End Priming",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); + //MotorSetMicroStep(motorId, MotorsCfg[motorId].microstep); + if (HomingRequestCallback[DispenserId]) + { + HomingRequestCallback[DispenserId](DispenserId,0); + HomingRequestCallback[DispenserId] = NULL; + } + + +return OK; + +} uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr callback) { @@ -254,8 +288,13 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt IDS_Dispenser_RefillStarted(DispenserId); IDS_Dispenser_MovingDirection(DispenserId,UP); + if (DispenserId == LUBRICANT_DISPENSER) + { + Lubricant_2Way_Valve (START); + } + - MotorMovetoLimitSwitch (MotorId,MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Empty_Id[DispenserId], IDS_HomeDispenserCallback,0); + MotorMovetoLimitSwitch (MotorId,MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Empty_Id[DispenserId], IDS_EmptyDispenserCallback,0); CurrentDispenserSpeed[DispenserId] = speed; return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 1d395ec8c..aea16bb60 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -7,6 +7,7 @@ #include "ids.h" #include "ids_ex.h" #include "../control/control.h" +#include "../control/MillisecTask.h" #include "../general/process.h" #include "../control/pidalgo.h" #include "../thread/thread.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 9ebc32f57..a68995168 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -223,7 +223,7 @@ double WinderReferenceSpeed=0; double TotalWinderSpeed=0; bool Add100 = false; double Rotations = 6.0; -bool flipflop = false; +int flipflop = 0; uint32_t motspeed; float speedf; int WinderCalculation = 0; @@ -250,20 +250,20 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) WinderMotorSpeedRollOver=true; } // } - if (flipflop) + if (flipflop == 0) { - speedf = MotorGetSpeedFromFPGA_Res(HARDWARE_MOTOR_TYPE__MOTO_SCREW); + MotorGetSpeedFromFPGA1(HARDWARE_MOTOR_TYPE__MOTO_SCREW); } - else + else if (flipflop == 1) { - MotorGetSpeedFromFPGA1(HARDWARE_MOTOR_TYPE__MOTO_SCREW); + speedf = MotorGetSpeedFromFPGA_Res(HARDWARE_MOTOR_TYPE__MOTO_SCREW); } - flipflop = 1-flipflop; + flipflop ++; if (ScrewDirectionChangeCounter == CalculationDirectionChangeCounter) return OK; //deley TODO - + flipflop = 0; ScrewCurrentDirection = 1-ScrewCurrentDirection; CalculationDirectionChangeCounter++; diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index a6a82ae6d..32d5e73b2 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,14 @@ +Embedded SW Release note - Version 1.3.10.6 - Itma Candidate 5 +============================================================= +change winding - fixed speed + +Embedded SW Release note - Version 1.3.10.5 - Itma Candidate 4 +============================================================= +bug fixes and work around: segment free, usb log, job length, length measurements, heating +better support for new and older dispensers +waste indication - empty and full + + Embedded SW Release note - Version 1.3.10.2 - Itma Candidate 3 ============================================================= Machine: diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 7ad887925..f5ae89368 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -743,6 +743,7 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes Report(infomsg,__FILE__,__LINE__,55,RpWarning,33, 44); }*/ UInt Key = Task_disable(); + double totlength = 0; if (JobToken[0] != 0) { @@ -753,12 +754,14 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes } //previousJobLength = ProcessedLength; jobStatus.has_progress = true; + totlength = TotalProcessedLength; if (TotalProcessedLength > job_length) { Report("job length bigger than assigned",__FILE__,__LINE__,TotalProcessedLength,RpWarning,job_length, done); - TotalProcessedLength = job_length; + //TotalProcessedLength = job_length; + totlength = job_length; } - jobStatus.progress = TotalProcessedLength; + jobStatus.progress = totlength; jobStatus.has_currentsegmentindex = true; jobStatus.currentsegmentindex = SegmentId; -- cgit v1.3.1 From a12577b0c2a81435ce8a9ca72cc21411c15321eb Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Thu, 30 May 2019 15:03:01 +0300 Subject: change the motors drivers ditection logic --- .../Embedded_SW/Embedded/.config/.productview.dat | Bin 0 -> 24477 bytes .../Embedded/.config/xconfig_Embedded/.buildtime | 1 + .../Embedded/.config/xconfig_Embedded/.interfaces | 0 .../Embedded/.config/xconfig_Embedded/.xdcenv.mak | 16 ++ .../.config/xconfig_Embedded/compiler.opt.defs | 1 + .../Embedded/.config/xconfig_Embedded/config.bld | 24 ++ .../Embedded/.config/xconfig_Embedded/custom.mak | 11 + .../Embedded/.config/xconfig_Embedded/package.bld | 78 ++++++ .../Embedded/.config/xconfig_Embedded/package.mak | 256 ++++++++++++++++++++ .../Embedded/.config/xconfig_Embedded/package.xdc | 7 + .../Embedded/.config/xconfig_Embedded/package.xs | 20 ++ .../.config/xconfig_Embedded/package/.vers_b160 | 0 .../.config/xconfig_Embedded/package/.vers_g180 | 0 .../.config/xconfig_Embedded/package/.vers_r170 | 0 .../.config/xconfig_Embedded/package/.xdc-B06 | 0 .../.config/xconfig_Embedded/package/build.cfg | 9 + .../package/cfg/Embedded.xem4f.mak | 11 + .../package/cfg/Embedded_pem4f.cfg | 268 +++++++++++++++++++++ .../package/cfg/Embedded_pem4f.mak | 46 ++++ .../xconfig_Embedded/package/package.bld.xml | 84 +++++++ .../xconfig_Embedded/package/package.defs.h | 13 + .../xconfig_Embedded/package/package.xdc.dep | 53 ++++ .../xconfig_Embedded/package/package.xdc.inc | 12 + .../package/package_xconfig_Embedded.c | 21 ++ .../package/rel/xconfig_Embedded.xdc.inc | 3 + .../package/rel/xconfig_Embedded.xdc.ninc | 0 .../xconfig_Embedded/package/xconfig_Embedded.ccs | Bin 0 -> 1245 bytes .../package/xconfig_Embedded.class | Bin 0 -> 6801 bytes .../xconfig_Embedded/package/xconfig_Embedded.java | 143 +++++++++++ .../xconfig_Embedded/package/xconfig_Embedded.sch | 0 Software/Embedded_SW/Embedded/DataDef.h | 19 +- .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 76 +++++- .../Drivers/I2C_Communication/DAC/Blower.c | 76 ++++++ .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 21 ++ .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 6 +- .../Embedded_SW/Embedded/Drivers/SPI/SPI_Comm.c | 7 + .../Embedded/Modules/Control/MillisecTask.c | 5 + .../Embedded/Modules/Thread/Thread_init.c | 2 +- 38 files changed, 1273 insertions(+), 16 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/.config/.productview.dat create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.buildtime create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.interfaces create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.xdcenv.mak create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/compiler.opt.defs create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/config.bld create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/custom.mak create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.bld create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.mak create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xdc create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xs create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_b160 create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_g180 create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_r170 create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.xdc-B06 create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/build.cfg create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded.xem4f.mak create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.cfg create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.mak create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.bld.xml create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.defs.h create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.dep create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.inc create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package_xconfig_Embedded.c create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/rel/xconfig_Embedded.xdc.inc create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/rel/xconfig_Embedded.xdc.ninc create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.ccs create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.class create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.java create mode 100644 Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.sch (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/.config/.productview.dat b/Software/Embedded_SW/Embedded/.config/.productview.dat new file mode 100644 index 000000000..01bba8454 Binary files /dev/null and b/Software/Embedded_SW/Embedded/.config/.productview.dat differ diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.buildtime b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.buildtime new file mode 100644 index 000000000..7f6d56957 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.buildtime @@ -0,0 +1 @@ +C:\Tango\Software\Embedded_SW\Embedded\.config\xconfig_Embedded\.buildtime \ No newline at end of file diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.interfaces b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.interfaces new file mode 100644 index 000000000..e69de29bb diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.xdcenv.mak b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.xdcenv.mak new file mode 100644 index 000000000..7654ecd27 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.xdcenv.mak @@ -0,0 +1,16 @@ +# +_XDCBUILDCOUNT = +ifneq (,$(findstring path,$(_USEXDCENV_))) +override XDCPATH = C:/TI/tirtos_tivac_2_16_00_08/packages;C:/TI/tirtos_tivac_2_16_00_08/products/tidrivers_tivac_2_16_00_08/packages;C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages;C:/TI/tirtos_tivac_2_16_00_08/products/ndk_2_25_00_09/packages;C:/TI/tirtos_tivac_2_16_00_08/products/uia_2_00_05_50/packages;C:/TI/tirtos_tivac_2_16_00_08/products/ns_1_11_00_10/packages;C:/TI/TivaWare_C_Series-2.1.2.111;C:/TI/ccsv7/ccs_base;C:/Tango/Software/Embedded_SW/Embedded/.config +override XDCROOT = C:/TI/xdctools_3_32_00_06_core +override XDCBUILDCFG = ./config.bld +endif +ifneq (,$(findstring args,$(_USEXDCENV_))) +override XDCARGS = +override XDCTARGETS = +endif +# +ifeq (0,1) +PKGPATH = C:/TI/tirtos_tivac_2_16_00_08/packages;C:/TI/tirtos_tivac_2_16_00_08/products/tidrivers_tivac_2_16_00_08/packages;C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages;C:/TI/tirtos_tivac_2_16_00_08/products/ndk_2_25_00_09/packages;C:/TI/tirtos_tivac_2_16_00_08/products/uia_2_00_05_50/packages;C:/TI/tirtos_tivac_2_16_00_08/products/ns_1_11_00_10/packages;C:/TI/TivaWare_C_Series-2.1.2.111;C:/TI/ccsv7/ccs_base;C:/Tango/Software/Embedded_SW/Embedded/.config;C:/TI/xdctools_3_32_00_06_core/packages;.. +HOSTOS = Windows +endif diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/compiler.opt.defs b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/compiler.opt.defs new file mode 100644 index 000000000..c48b1a33d --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/compiler.opt.defs @@ -0,0 +1 @@ +-I"C:/TI/tirtos_tivac_2_16_00_08/packages" -I"C:/TI/tirtos_tivac_2_16_00_08/products/tidrivers_tivac_2_16_00_08/packages" -I"C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages" -I"C:/TI/tirtos_tivac_2_16_00_08/products/ndk_2_25_00_09/packages" -I"C:/TI/tirtos_tivac_2_16_00_08/products/uia_2_00_05_50/packages" -I"C:/TI/tirtos_tivac_2_16_00_08/products/ns_1_11_00_10/packages" -I"C:/TI/TivaWare_C_Series-2.1.2.111" -I"C:/TI/ccsv7/ccs_base" -I"C:/Tango/Software/Embedded_SW/Embedded/.config" -I"C:/TI/xdctools_3_32_00_06_core/packages" -I"C:/Tango/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/.." -IC:/TI/ccsv7/tools/compiler/ti-cgt-arm_16.9.4.LTS/include/rts -IC:/TI/ccsv7/tools/compiler/ti-cgt-arm_16.9.4.LTS/include -Dxdc_target_types__="ti/targets/arm/elf/std.h" -Dxdc_target_name__=M4F -Dxdc_cfg__xheader__="\"C:/Tango/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.h\"" diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/config.bld b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/config.bld new file mode 100644 index 000000000..74ff6d21b --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/config.bld @@ -0,0 +1,24 @@ +/* THIS IS A GENERATED FILE -- DO NOT EDIT */ + +var target; /* the target used for this build */ + +/* configuro was passed the target's name explicitly */ +try { + target = xdc.module('ti.targets.arm.elf.M4F'); +} +catch (e) { + throw new Error("Can't find the target named '" + 'ti.targets.arm.elf.M4F' + + "' along the path '" + environment["xdc.path"] + + "': please check the spelling of the target's name and that it exists along this path."); +} +if (!(target instanceof xdc.module("xdc.bld.ITarget").Module)) { + throw new Error("The module named 'ti.targets.arm.elf.M4F' exists but it's not a target: please check the spelling of the target's name"); +} + +/* configuro was passed compiler options explicitly */ +target.ccOpts.prefix = unescape("%22--code_state%3D16%20--float_support%3DFPv4SPD16%20-me%20") + target.ccOpts.prefix; + +/* configuro was passed the target's rootDir explicitly */ +target.rootDir = 'C:/TI/ccsv7/tools/compiler/ti-cgt-arm_16.9.4.LTS'; + +Build.targets = [target]; diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/custom.mak b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/custom.mak new file mode 100644 index 000000000..776a3cb74 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/custom.mak @@ -0,0 +1,11 @@ +## THIS IS A GENERATED FILE -- DO NOT EDIT +.configuro: .libraries,em4f linker.cmd package/cfg/Embedded_pem4f.oem4f + +# To simplify configuro usage in makefiles: +# o create a generic linker command file name +# o set modification times of compiler.opt* files to be greater than +# or equal to the generated config header +# +linker.cmd: package/cfg/Embedded_pem4f.xdl + $(SED) 's"^\"\(package/cfg/Embedded_pem4fcfg.cmd\)\"$""\"C:/Tango/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/\1\""' package/cfg/Embedded_pem4f.xdl > $@ + -$(SETDATE) -r:max package/cfg/Embedded_pem4f.h compiler.opt compiler.opt.defs diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.bld b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.bld new file mode 100644 index 000000000..30e81adf6 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.bld @@ -0,0 +1,78 @@ +/* THIS IS A GENERATED FILE -- DO NOT EDIT */ + +var targ = xdc.module('ti.targets.arm.elf.M4F'); +/* configuro was told the platform explicitly */ +var platform = 'ti.platforms.tiva:TM4C129XNCZAD'; + +/* decide whether to make an assembly or an executable */ +var makeAssembly = false; + + +var Executable = xdc.module('xdc.bld.Executable'); + +var exeOpts = new Executable.Attrs({ + cfgScript: 'C:/Tango/Software/Embedded_SW/Embedded/Embedded.cfg', + profile: 'release', + cfgHome: 'xconfig_Embedded', +}); + +exeOpts.cfgArgs = 'null'; +exeOpts.cfgArgsEncoded = true; + +var exe = Pkg[makeAssembly ? 'addAssembly': 'addExecutable']( + 'Embedded', + targ, + platform, + exeOpts +); + +/* + * Generate the compiler.opt file + * Do this here instead of during the initial creation of the configuro + * package, because the contents of any config.bld script are unknown + * at that time. Config.bld can't be executed until the XDC build phase. + */ +if (makeAssembly) { + var suffix = targ.dllExt || '.p' + targ.suffix; +} +else { + var suffix = '.p' + targ.suffix; +} + +var thisObj = { + cfg: 'C:/Tango/Software/Embedded_SW/Embedded/Embedded.cfg', + outputPath: 'C:/Tango/Software/Embedded_SW/Embedded/.config/xconfig_Embedded', + exeName: 'Embedded' + suffix, + exeIntName: 'Embedded' + suffix.replace('.', '_'), + targ: targ, + linkerCommandFile: 'linker.cmd', + compilerOptFile: 'compiler.opt', + compilerDefsFile: 'compiler.opt' + ".defs", + makeAssembly: makeAssembly +}; +var tmpl = xdc.loadTemplate('xdc/tools/configuro/template/compiler.opt.xdt'); +tmpl.genFile('compiler.opt', thisObj, [], false); + +/* + * Generate the custom makefile. + */ +var tmpl = xdc.loadTemplate('xdc/tools/configuro/template/' + + (makeAssembly? 'custom.mak.asm.xdt' : 'custom.mak.exe.xdt')); +tmpl.genFile('custom.mak', thisObj, [], false); +Pkg.makeEpilogue = "include custom.mak"; + +/* + * Generate the package script. + */ +var tmpl = xdc.loadTemplate('xdc/tools/configuro/template/package.xs.xdt'); +tmpl.genFile('package.xs', thisObj, [], false); + +if (makeAssembly) { +/* + * Generate the linker options into a staging file, so that the presence or + * age of the advertised linker command file can be the makefile trigger to + * rebuild the package from the user's config script. + */ + var tmpl = xdc.loadTemplate('xdc/tools/configuro/template/linker.cmd.asm.xdt'); + tmpl.genFile('linker.cmd.cp', thisObj, [], false); +} diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.mak b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.mak new file mode 100644 index 000000000..6f18e8d3b --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.mak @@ -0,0 +1,256 @@ +# +# Do not edit this file. This file is generated from +# package.bld. Any modifications to this file will be +# overwritten whenever makefiles are re-generated. +# + +unexport MAKEFILE_LIST +MK_NOGENDEPS := $(filter clean,$(MAKECMDGOALS)) +override PKGDIR = xconfig_Embedded +XDCINCS = -I. -I$(strip $(subst ;, -I,$(subst $(space),\$(space),$(XPKGPATH)))) +XDCCFGDIR = package/cfg/ + +# +# The following dependencies ensure package.mak is rebuilt +# in the event that some included BOM script changes. +# +ifneq (clean,$(MAKECMDGOALS)) +C:/TI/xdctools_3_32_00_06_core/packages/xdc/utils.js: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/utils.js +C:/TI/xdctools_3_32_00_06_core/packages/xdc/xdc.tci: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/xdc.tci +C:/TI/xdctools_3_32_00_06_core/packages/xdc/template.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/template.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/om2.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/om2.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/xmlgen.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/xmlgen.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/xmlgen2.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/xmlgen2.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/Warnings.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/Warnings.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/IPackage.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/IPackage.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/package.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/package.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/global/Clock.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/global/Clock.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/global/Trace.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/global/Trace.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/bld.js: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/bld.js +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/BuildEnvironment.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/BuildEnvironment.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/PackageContents.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/PackageContents.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/_gen.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/_gen.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Library.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Library.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Executable.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Executable.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Repository.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Repository.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Configuration.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Configuration.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Script.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Script.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Manifest.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Manifest.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Utils.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/Utils.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITarget.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITarget.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITarget2.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITarget2.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITarget3.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITarget3.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITargetFilter.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/ITargetFilter.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/package.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/bld/package.xs +package.mak: config.bld +C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/ITarget.xs: +package.mak: C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/ITarget.xs +C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/C28_large.xs: +package.mak: C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/C28_large.xs +C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/C28_float.xs: +package.mak: C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/C28_float.xs +C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/package.xs: +package.mak: C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/package.xs +C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/arm/elf/IArm.xs: +package.mak: C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/arm/elf/IArm.xs +C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/arm/elf/package.xs: +package.mak: C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/arm/elf/package.xs +package.mak: package.bld +C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/compiler.opt.xdt: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/compiler.opt.xdt +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/io/File.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/io/File.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/io/package.xs: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/io/package.xs +C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/compiler.defs.xdt: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/compiler.defs.xdt +C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/custom.mak.exe.xdt: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/custom.mak.exe.xdt +C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/package.xs.xdt: +package.mak: C:/TI/xdctools_3_32_00_06_core/packages/xdc/tools/configuro/template/package.xs.xdt +endif + +ti.targets.arm.elf.M4F.rootDir ?= C:/TI/ccsv7/tools/compiler/ti-cgt-arm_16.9.4.LTS +ti.targets.arm.elf.packageBase ?= C:/TI/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/targets/arm/elf/ +.PRECIOUS: $(XDCCFGDIR)/%.oem4f +.PHONY: all,em4f .dlls,em4f .executables,em4f test,em4f +all,em4f: .executables,em4f +.executables,em4f: .libraries,em4f +.executables,em4f: .dlls,em4f +.dlls,em4f: .libraries,em4f +.libraries,em4f: .interfaces + @$(RM) $@ + @$(TOUCH) "$@" + +.help:: + @$(ECHO) xdc test,em4f + @$(ECHO) xdc .executables,em4f + @$(ECHO) xdc .libraries,em4f + @$(ECHO) xdc .dlls,em4f + + +all: .executables +.executables: .libraries .dlls +.libraries: .interfaces + +PKGCFGS := $(wildcard package.xs) package/build.cfg +.interfaces: package/package.xdc.inc package/package.defs.h package.xdc $(PKGCFGS) + +-include package/package.xdc.dep +package/%.xdc.inc package/%_xconfig_Embedded.c package/%.defs.h: %.xdc $(PKGCFGS) + @$(MSG) generating interfaces for package xconfig_Embedded" (because $@ is older than $(firstword $?))" ... + $(XSRUN) -f xdc/services/intern/cmd/build.xs $(MK_IDLOPTS) -m package/package.xdc.dep -i package/package.xdc.inc package.xdc + +.dlls,em4f .dlls: Embedded.pem4f + +-include package/cfg/Embedded_pem4f.mak +-include package/cfg/Embedded_pem4f.cfg.mak +ifeq (,$(MK_NOGENDEPS)) +-include package/cfg/Embedded_pem4f.dep +endif +Embedded.pem4f: package/cfg/Embedded_pem4f.xdl + @ + + +ifeq (,$(wildcard .libraries,em4f)) +Embedded.pem4f package/cfg/Embedded_pem4f.c: .libraries,em4f +endif + +package/cfg/Embedded_pem4f.c package/cfg/Embedded_pem4f.h package/cfg/Embedded_pem4f.xdl: override _PROG_NAME := Embedded.xem4f +package/cfg/Embedded_pem4f.c: package/cfg/Embedded_pem4f.cfg +package/cfg/Embedded_pem4f.xdc.inc: package/cfg/Embedded_pem4f.xdl +package/cfg/Embedded_pem4f.xdl package/cfg/Embedded_pem4f.c: .interfaces + +clean:: clean,em4f + -$(RM) package/cfg/Embedded_pem4f.cfg + -$(RM) package/cfg/Embedded_pem4f.dep + -$(RM) package/cfg/Embedded_pem4f.c + -$(RM) package/cfg/Embedded_pem4f.xdc.inc + +clean,em4f:: + -$(RM) Embedded.pem4f +.executables,em4f .executables: Embedded.xem4f + +Embedded.xem4f: |Embedded.pem4f + +-include package/cfg/Embedded.xem4f.mak +Embedded.xem4f: package/cfg/Embedded_pem4f.oem4f + $(RM) $@ + @$(MSG) lnkem4f $@ ... + $(RM) $(XDCCFGDIR)/$@.map + $(ti.targets.arm.elf.M4F.rootDir)/bin/armcl -fs $(XDCCFGDIR)$(dir $@). -q -u _c_int00 --silicon_version=7M4 -z --strict_compatibility=on -o $@ package/cfg/Embedded_pem4f.oem4f package/cfg/Embedded_pem4f.xdl -w -c -m $(XDCCFGDIR)/$@.map -l $(ti.targets.arm.elf.M4F.rootDir)/lib/libc.a + +Embedded.xem4f: export C_DIR= +Embedded.xem4f: PATH:=$(ti.targets.arm.elf.M4F.rootDir)/bin/;$(PATH) +Embedded.xem4f: Path:=$(ti.targets.arm.elf.M4F.rootDir)/bin/;$(PATH) + +Embedded.test test,em4f test: Embedded.xem4f.test + +Embedded.xem4f.test:: Embedded.xem4f +ifeq (,$(_TESTLEVEL)) + @$(MAKE) -R -r --no-print-directory -f $(XDCROOT)/packages/xdc/bld/xdc.mak _TESTLEVEL=1 Embedded.xem4f.test +else + @$(MSG) running $< ... + $(call EXEC.Embedded.xem4f, ) +endif + +clean,em4f:: + -$(RM) $(wildcard .tmp,Embedded.xem4f,*) + + +clean:: clean,em4f + +clean,em4f:: + -$(RM) Embedded.xem4f +%,copy: + @$(if $<,,$(MSG) don\'t know how to build $*; exit 1) + @$(MSG) cp $< $@ + $(RM) $@ + $(CP) $< $@ +Embedded_pem4f.oem4f,copy : package/cfg/Embedded_pem4f.oem4f +Embedded_pem4f.sem4f,copy : package/cfg/Embedded_pem4f.sem4f + +$(XDCCFGDIR)%.c $(XDCCFGDIR)%.h $(XDCCFGDIR)%.xdl: $(XDCCFGDIR)%.cfg $(XDCROOT)/packages/xdc/cfg/Main.xs | .interfaces + @$(MSG) "configuring $(_PROG_NAME) from $< ..." + $(CONFIG) $(_PROG_XSOPTS) xdc.cfg $(_PROG_NAME) $(XDCCFGDIR)$*.cfg $(XDCCFGDIR)$* + +.PHONY: release,xconfig_Embedded +ifeq (,$(MK_NOGENDEPS)) +-include package/rel/xconfig_Embedded.tar.dep +endif +package/rel/xconfig_Embedded/xconfig_Embedded/package/package.rel.xml: package/package.bld.xml +package/rel/xconfig_Embedded/xconfig_Embedded/package/package.rel.xml: package/build.cfg +package/rel/xconfig_Embedded/xconfig_Embedded/package/package.rel.xml: package/package.xdc.inc +package/rel/xconfig_Embedded/xconfig_Embedded/package/package.rel.xml: .force + @$(MSG) generating external release references $@ ... + $(XS) $(JSENV) -f $(XDCROOT)/packages/xdc/bld/rel.js $(MK_RELOPTS) . $@ + +xconfig_Embedded.tar: package/rel/xconfig_Embedded.xdc.inc package/rel/xconfig_Embedded/xconfig_Embedded/package/package.rel.xml + @$(MSG) making release file $@ "(because of $(firstword $?))" ... + -$(RM) $@ + $(call MKRELTAR,package/rel/xconfig_Embedded.xdc.inc,package/rel/xconfig_Embedded.tar.dep) + + +release release,xconfig_Embedded: all xconfig_Embedded.tar +clean:: .clean + -$(RM) xconfig_Embedded.tar + -$(RM) package/rel/xconfig_Embedded.xdc.inc + -$(RM) package/rel/xconfig_Embedded.tar.dep + +clean:: .clean + -$(RM) .libraries $(wildcard .libraries,*) +clean:: + -$(RM) .dlls $(wildcard .dlls,*) +# +# The following clean rule removes user specified +# generated files or directories. +# + +ifneq (clean,$(MAKECMDGOALS)) +ifeq (,$(wildcard package)) + $(shell $(MKDIR) package) +endif +ifeq (,$(wildcard package/cfg)) + $(shell $(MKDIR) package/cfg) +endif +ifeq (,$(wildcard package/lib)) + $(shell $(MKDIR) package/lib) +endif +ifeq (,$(wildcard package/rel)) + $(shell $(MKDIR) package/rel) +endif +ifeq (,$(wildcard package/internal)) + $(shell $(MKDIR) package/internal) +endif +endif +clean:: + -$(RMDIR) package + +include custom.mak diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xdc b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xdc new file mode 100644 index 000000000..5ae1a0aa5 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xdc @@ -0,0 +1,7 @@ +/*! + * Package generated by xdc.tools.configuro + * + * @_nodoc + */ +package xconfig_Embedded { +} diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xs b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xs new file mode 100644 index 000000000..373d44f5e --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package.xs @@ -0,0 +1,20 @@ +/* THIS IS A GENERATED FILE -- DO NOT EDIT */ + +/* return the names of the generated config objects */ +function getLibs(prog) { + /* for programs, push the generated config object file into the + * generated linker command file. + */ + /* replace the last period in the name by an underscore */ + var name = "package/cfg/" + prog.name.replace(/\.([^.]*)$/, "_$1"); + /* base is a hack until we add cfgName to Program */ + var base = "package/cfg/" + prog.name.replace(/\.([^.]*)$/, ""); + var suffix = prog.build.target.suffix; + + var libs = [ +// name + '.o' + suffix, + base + '_p' + suffix + '.o' + suffix + ]; + + return libs.join(';'); +} diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_b160 b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_b160 new file mode 100644 index 000000000..e69de29bb diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_g180 b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_g180 new file mode 100644 index 000000000..e69de29bb diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_r170 b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.vers_r170 new file mode 100644 index 000000000..e69de29bb diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.xdc-B06 b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/.xdc-B06 new file mode 100644 index 000000000..e69de29bb diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/build.cfg b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/build.cfg new file mode 100644 index 000000000..5ec1eb102 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/build.cfg @@ -0,0 +1,9 @@ +if (pkg.$vers.length >= 3) { + pkg.$vers.push(Packages.xdc.services.global.Vers.getDate(xdc.csd() + '/..')); +} + +pkg.build.libraries = [ +]; + +pkg.build.libDesc = [ +]; diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded.xem4f.mak b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded.xem4f.mak new file mode 100644 index 000000000..f7ad36e1c --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded.xem4f.mak @@ -0,0 +1,11 @@ +# +# Do not edit this file. This file is generated from +# package.bld. Any modifications to this file will be +# overwritten whenever makefiles are re-generated. +# +# target compatibility key = ti.targets.arm.elf.M4F{1,0,16.9,4 +# +Embedded.xem4f: package/cfg/Embedded.xem4f.mak + +clean:: + -$(RM) package/cfg/Embedded.xem4f.mak diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.cfg b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.cfg new file mode 100644 index 000000000..5e7fdeb7d --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.cfg @@ -0,0 +1,268 @@ +/* + * ======== package/cfg/Embedded_pem4f.cfg ======== + * This generated configuration script runs the user's configuration script + * the context of a specific target and platform in order to generate + * all the files necessary to create an executable; e.g., linker command + * files, static C/C++ data structures, etc. + */ + +/* + * ======== _applyChanges ======== + * Changes that bring the build target to the state at the end of the build + * model + */ +function _applyChanges(obj, chgObj) { + var wasSealed = false; + if (obj.$sealed) { + wasSealed = true; + obj.$unseal(); + } + for (var prop in chgObj) { + if (typeof obj[prop] == 'object' && obj[prop] != undefined) { + if ("$category" in obj[prop] && obj[prop].$category == "Vector") { + obj[prop].length = chgObj[prop].length; + for (var i = 0; i < chgObj[prop].length; i++) { + if (obj[prop].length < i + 1) { + obj[prop].length++; + } + obj[prop][i] = chgObj[prop][i]; + } + } + else { + _applyChanges(obj[prop], chgObj[prop]); + } + } + else { + obj[prop] = chgObj[prop]; + } + } + if (wasSealed) { + obj.$seal(); + } +} + +/* + * ======== _runescape ======== + * Recursive unescape to decode serialized strings + */ +function _runescape(obj) { + for (var i in obj) { + if (obj[i] != null) { + if (typeof obj[i] == 'string') { + obj[i] = unescape(obj[i]); + } + else if (typeof obj[i] == 'object') { + _runescape(obj[i]); + } + } + } +} + +/* + * ======== _getPlatCfg ======== + */ +function _getPlatCfg() { + var tmp = {}; + _runescape(tmp); + return (tmp); +} +/* + * ======== _cfginit ======== + */ +function _cfginit() { + xdc.loadPackage('xdc.services.intern.cmd'); + var prog = xdc.om['xdc.cfg.Program']; + + /* initialize prog attrs from build model */ + var build = { + profile: "release", + cfgScript: "C%3A/Tango/Software/Embedded_SW/Embedded/Embedded.cfg", + cfgHome: "xconfig_Embedded", + cfgArgs: "null", + cfgArgsEncoded: true, + releases: { + 0: { + name: "xconfig_Embedded", + attrs: { + prefix: "", + label: "default" + }, + otherFiles: {}, + excludeDirs: {} + } + }, + prelink: false + }; + _runescape(build); + build.cfgArgs = null; + build.target = xdc.module("ti.targets.arm.elf.M4F"); + var targChange = { + platforms: [ + "ti.platforms.tiva%3ATM4C1294NCPDT%3A1" + ], + version: "ti.targets.arm.elf.M4F%7B1%2C0%2C16.9%2C4", + extensions: { + ".sem4fe": { + suf: ".sem4fe", + typ: "asm" + }, + ".sem4f": { + suf: ".sem4f", + typ: "asm" + }, + ".sv7M4": { + suf: ".sv7M4", + typ: "asm" + }, + ".sv7M": { + suf: ".sv7M", + typ: "asm" + } + }, + rootDir: "C%3A/TI/ccsv7/tools/compiler/ti-cgt-arm_16.9.4.LTS", + ccOpts: { + prefix: "%22--code_state%3D16%20--float_support%3DFPv4SPD16%20-me%20-qq%20-pdsw225" + }, + rawVersion: "16.9.4" + }; + _runescape(targChange); + _applyChanges(build.target, targChange); + + prog.build = build; + + prog.name = "Embedded.xem4f"; + prog.cfgBase = "package/cfg/Embedded_pem4f"; + + prog.endian = prog.build.target.model.endian; + prog.codeModel = prog.build.target.model.codeModel; + + /* use the platform package's Platform module */ + var Platform = xdc.useModule("ti.platforms.tiva.Platform"); + var platParams = _getPlatCfg(); + var invalidParams = []; + for (var prop in platParams) { + if (!(prop in Platform.PARAMS)) { + delete platParams[prop]; + invalidParams.push(prop); + } + } + prog.platformName = "ti.platforms.tiva:TM4C129XNCZAD"; + prog.platform = Platform.create("TM4C129XNCZAD", platParams); + for (var i = 0; i < invalidParams.length; i++) { + Platform.$logWarning("The parameter '" + invalidParams[i] + "' is " + + "passed to this platform instance through Build.platformTable, " + + "but the instance does not have a configuration parameter with " + + "that name.", prog.platform, "TM4C129XNCZAD"); + } + + /* record the executable's package name */ + prog.buildPackage = "xconfig_Embedded"; + + /* record build-model information required during config generation */ + prog.$$bind("$$isasm", 0); + prog.$$bind("$$isrom", 0); + prog.$$bind("$$gentab", [ + ]); + + /* bind prog to an appropriate execution context */ + prog.cpu = prog.platform.getExeContext(prog); + + /* import the target's run-time support pkg */ + xdc.loadPackage("ti.targets.arm.rtsarm"); +} + +/* function to import the cfg script's package */ +function _userscript(script) { + var home; + var spath; + home = xdc.loadPackage("xconfig_Embedded"); + + xdc.om.$$bind('$homepkg', home); + + var cfgScript = "C:/Tango/Software/Embedded_SW/Embedded/Embedded.cfg"; + if (!script) { + utils.loadCapsule(cfgScript, false, spath); + } + else { + /* set up the same environment that loadCapsule would */ + var $saveCsd = utils.csd; + var $cfgFile = utils.findFile(cfgScript, spath); + var cname = cfgScript; + if ($cfgFile) { + $cfgFile = java.io.File($cfgFile); + utils.csd = $cfgFile.getParentFile().getCanonicalPath(); + cname = "" + $cfgFile.getCanonicalPath(); + } + + /* create the capsule object */ + var cap = { + prototype: utils.global, + $path: cname, + $private: {path: cname}, + $capsule: undefined, /* set to cap below */ + }; + + /* 'this.$capsule' is always cap object */ + cap.$capsule = cap; + + /* save the capsule object */ + utils.$$capmap[cname] = cap; + + try { + var cx = + Packages.org.mozilla.javascript.Context.getCurrentContext(); + var rdr = new + java.io.BufferedReader(new java.io.StringReader(script)); + Packages.config.Shell.evaluateLoad(cx, cap, rdr, cname, 1); + } + finally { + rdr.close(); + utils.csd = $saveCsd; + } + } +} + +function _postinit() { + var cout = null; + + var Program = xdc.om['xdc.cfg.Program']; + /* get the exec command for this executable */ + if (Program.execCmd == null) { + Program.execCmd = Program.platform.getExecCmd(Program, + xdc.om["ti.platforms.tiva"].packageBase); + } + cout = "define EXEC." + Program.name + '\n\n'; + cout += Program.execCmd; + cout += "\nendef\n\n"; + + /* if SourceDir generates a makefile, we need to run it */ + _genSourceDirMak("package/cfg/Embedded_pem4f", "Embedded.pem4f"); + + utils.genDep("package/cfg/Embedded_pem4f", "xconfig_Embedded", utils.loadedFiles, cout, null); +} + +function _genSourceDirMak(cfgBase, cfgName) +{ + var SourceDir = xdc.om['xdc.cfg.SourceDir']; + + if (SourceDir && SourceDir.$instances.length > 0) { + /* construct rule to run SourceDir generated makefile */ + var make = "\t$(MAKE) -f " + + SourceDir.outputDir + "/" + SourceDir.makefileName; + + /* this file is included by package.mak (if it exists) */ + var file = new java.io.File(cfgBase + ".cfg.mak"); + file["delete"](); + var out = new java.io.BufferedWriter(new java.io.FileWriter(file)); + + /* add rules to run SourceDir generated makefile */ + out.write("# invoke SourceDir generated makefile for " + cfgName + + "\n" + cfgName + ": .libraries," + cfgName + + "\n.libraries," + cfgName + ": " + cfgBase + ".xdl\n" + + make + "\n\n" + + "clean::\n" + make + " clean\n\n" + ); + out.close(); + out = null; + } +} diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.mak b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.mak new file mode 100644 index 000000000..ba42567df --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/cfg/Embedded_pem4f.mak @@ -0,0 +1,46 @@ +# +# Do not edit this file. This file is generated from +# package.bld. Any modifications to this file will be +# overwritten whenever makefiles are re-generated. +# +# target compatibility key = ti.targets.arm.elf.M4F{1,0,16.9,4 +# +ifeq (,$(MK_NOGENDEPS)) +-include package/cfg/Embedded_pem4f.oem4f.dep +package/cfg/Embedded_pem4f.oem4f.dep: ; +endif + +package/cfg/Embedded_pem4f.oem4f: | .interfaces +package/cfg/Embedded_pem4f.oem4f: package/cfg/Embedded_pem4f.c package/cfg/Embedded_pem4f.mak + @$(RM) $@.dep + $(RM) $@ + @$(MSG) clem4f $< ... + $(ti.targets.arm.elf.M4F.rootDir)/bin/armcl -c "--code_state=16 --float_support=FPv4SPD16 -me -qq -pdsw225 -ms --fp_mode=strict --endian=little -mv7M4 --abi=eabi --float_support=fpv4spd16 -eo.oem4f -ea.sem4f -Dxdc_cfg__xheader__='"xconfig_Embedded/package/cfg/Embedded_pem4f.h"' -Dxdc_target_name__=M4F -Dxdc_target_types__=ti/targets/arm/elf/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_16_9_4 -O2 $(XDCINCS) -I$(ti.targets.arm.elf.M4F.rootDir)/include/rts -I$(ti.targets.arm.elf.M4F.rootDir)/include -fs=./package/cfg -fr=./package/cfg -fc $< + $(MKDEP) -a $@.dep -p package/cfg -s oem4f $< -C "--code_state=16 --float_support=FPv4SPD16 -me -qq -pdsw225 -ms --fp_mode=strict --endian=little -mv7M4 --abi=eabi --float_support=fpv4spd16 -eo.oem4f -ea.sem4f -Dxdc_cfg__xheader__='"xconfig_Embedded/package/cfg/Embedded_pem4f.h"' -Dxdc_target_name__=M4F -Dxdc_target_types__=ti/targets/arm/elf/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_16_9_4 -O2 $(XDCINCS) -I$(ti.targets.arm.elf.M4F.rootDir)/include/rts -I$(ti.targets.arm.elf.M4F.rootDir)/include -fs=./package/cfg -fr=./package/cfg + -@$(FIXDEP) $@.dep $@.dep + +package/cfg/Embedded_pem4f.oem4f: export C_DIR= +package/cfg/Embedded_pem4f.oem4f: PATH:=$(ti.targets.arm.elf.M4F.rootDir)/bin/;$(PATH) +package/cfg/Embedded_pem4f.oem4f: Path:=$(ti.targets.arm.elf.M4F.rootDir)/bin/;$(PATH) + +package/cfg/Embedded_pem4f.sem4f: | .interfaces +package/cfg/Embedded_pem4f.sem4f: package/cfg/Embedded_pem4f.c package/cfg/Embedded_pem4f.mak + @$(RM) $@.dep + $(RM) $@ + @$(MSG) clem4f -n $< ... + $(ti.targets.arm.elf.M4F.rootDir)/bin/armcl -c -n -s --symdebug:none "--code_state=16 --float_support=FPv4SPD16 -me -qq -pdsw225 --endian=little -mv7M4 --abi=eabi --float_support=fpv4spd16 -eo.oem4f -ea.sem4f -Dxdc_cfg__xheader__='"xconfig_Embedded/package/cfg/Embedded_pem4f.h"' -Dxdc_target_name__=M4F -Dxdc_target_types__=ti/targets/arm/elf/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_16_9_4 -O2 $(XDCINCS) -I$(ti.targets.arm.elf.M4F.rootDir)/include/rts -I$(ti.targets.arm.elf.M4F.rootDir)/include -fs=./package/cfg -fr=./package/cfg -fc $< + $(MKDEP) -a $@.dep -p package/cfg -s oem4f $< -C -n -s --symdebug:none "--code_state=16 --float_support=FPv4SPD16 -me -qq -pdsw225 --endian=little -mv7M4 --abi=eabi --float_support=fpv4spd16 -eo.oem4f -ea.sem4f -Dxdc_cfg__xheader__='"xconfig_Embedded/package/cfg/Embedded_pem4f.h"' -Dxdc_target_name__=M4F -Dxdc_target_types__=ti/targets/arm/elf/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_16_9_4 -O2 $(XDCINCS) -I$(ti.targets.arm.elf.M4F.rootDir)/include/rts -I$(ti.targets.arm.elf.M4F.rootDir)/include -fs=./package/cfg -fr=./package/cfg + -@$(FIXDEP) $@.dep $@.dep + +package/cfg/Embedded_pem4f.sem4f: export C_DIR= +package/cfg/Embedded_pem4f.sem4f: PATH:=$(ti.targets.arm.elf.M4F.rootDir)/bin/;$(PATH) +package/cfg/Embedded_pem4f.sem4f: Path:=$(ti.targets.arm.elf.M4F.rootDir)/bin/;$(PATH) + +clean,em4f :: + -$(RM) package/cfg/Embedded_pem4f.oem4f + -$(RM) package/cfg/Embedded_pem4f.sem4f + +Embedded.pem4f: package/cfg/Embedded_pem4f.oem4f package/cfg/Embedded_pem4f.mak + +clean:: + -$(RM) package/cfg/Embedded_pem4f.mak diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.bld.xml b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.bld.xml new file mode 100644 index 000000000..b80ad50de --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.bld.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.defs.h b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.defs.h new file mode 100644 index 000000000..0a0250f07 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.defs.h @@ -0,0 +1,13 @@ +/* + * Do not modify this file; it is automatically + * generated and any modifications will be overwritten. + * + * @(#) xdc-B06 + */ + +#ifndef xconfig_Embedded__ +#define xconfig_Embedded__ + + + +#endif /* xconfig_Embedded__ */ diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.dep b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.dep new file mode 100644 index 000000000..f3d85fb1c --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.dep @@ -0,0 +1,53 @@ +clean:: + $(RM) package/xconfig_Embedded.sch + $(RM) package/.vers_g180 + $(RM) package/.vers_r170 + $(RM) package/.vers_b160 + $(RM) package/.xdc-B06 + $(RM) package/xconfig_Embedded.java + $(RM) package/xconfig_Embedded.class + $(RM) package/package_xconfig_Embedded.c + $(RM) package/package.defs.h + $(RM) package/xconfig_Embedded.ccs + +.interfaces: package/xconfig_Embedded.sch package/.vers_g180 package/.vers_r170 package/.vers_b160 package/.xdc-B06 package/xconfig_Embedded.java package/package_xconfig_Embedded.c package/package.defs.h package/xconfig_Embedded.ccs +package/package.xdc.inc: package/.vers_g180 +package/.vers_g180: +package/package.xdc.inc: package/.vers_r170 +package/.vers_r170: +package/package.xdc.inc: package/.vers_b160 +package/.vers_b160: + +.interfaces: + +# schema include file dependencies +package.xs: +package/package.xdc.inc: package.xs + +# schema update dependencies +package/package.xdc.inc: xdc/IPackage.xdc +xdc/IPackage.xdc: +vpath xdc/IPackage.xdc $(XPKGVPATH) + +ifneq (clean,$(MAKECMDGOALS)) +C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/antlr.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/antlr.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/intern/gen/java/package.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/intern/gen/java/package.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/intern/cmd/java/package.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/intern/cmd/java/package.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/js.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/js.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/tar.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/tar.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/global/java/package.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/global/java/package.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/spec/java/package.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/spec/java/package.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/ecj.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/shelf/java/ecj.jar +C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/intern/xsr/java/package.jar: +package/package.xdc.inc: C:/TI/xdctools_3_32_00_06_core/packages/xdc/services/intern/xsr/java/package.jar +endif +# goals for files generated during schema generation but unspecified by schema's pattern rule + diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.inc b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.inc new file mode 100644 index 000000000..e002a7470 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package.xdc.inc @@ -0,0 +1,12 @@ +package.xdc +package.xs +package/xconfig_Embedded.sch +package/.vers_g180 +package/.vers_r170 +package/.vers_b160 +package/.xdc-B06 +package/xconfig_Embedded.java +package/xconfig_Embedded.class +package/package_xconfig_Embedded.c +package/package.defs.h +package/xconfig_Embedded.ccs diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package_xconfig_Embedded.c b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package_xconfig_Embedded.c new file mode 100644 index 000000000..e62997303 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/package_xconfig_Embedded.c @@ -0,0 +1,21 @@ +/* + * Do not modify this file; it is automatically + * generated and any modifications will be overwritten. + * + * @(#) xdc-B06 + */ + +#include + +__FAR__ char xconfig_Embedded__dummy__; + +#define __xdc_PKGVERS null +#define __xdc_PKGNAME xconfig_Embedded +#define __xdc_PKGPREFIX xconfig_Embedded_ + +#ifdef __xdc_bld_pkg_c__ +#define __stringify(a) #a +#define __local_include(a) __stringify(a) +#include __local_include(__xdc_bld_pkg_c__) +#endif + diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/rel/xconfig_Embedded.xdc.inc b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/rel/xconfig_Embedded.xdc.inc new file mode 100644 index 000000000..0f839efb2 --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/rel/xconfig_Embedded.xdc.inc @@ -0,0 +1,3 @@ +package/package.bld.xml +package/build.cfg +package/package.xdc.inc diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/rel/xconfig_Embedded.xdc.ninc b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/rel/xconfig_Embedded.xdc.ninc new file mode 100644 index 000000000..e69de29bb diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.ccs b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.ccs new file mode 100644 index 000000000..8eec3a496 Binary files /dev/null and b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.ccs differ diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.class b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.class new file mode 100644 index 000000000..eb25f2af0 Binary files /dev/null and b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.class differ diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.java b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.java new file mode 100644 index 000000000..7699c0f1b --- /dev/null +++ b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.java @@ -0,0 +1,143 @@ +/* + * Do not modify this file; it is automatically + * generated and any modifications will be overwritten. + * + * @(#) xdc-B06 + */ +import java.util.*; +import org.mozilla.javascript.*; +import xdc.services.intern.xsr.*; +import xdc.services.spec.Session; + +public class xconfig_Embedded +{ + static final String VERS = "@(#) xdc-B06\n"; + + static final Proto.Elm $$T_Bool = Proto.Elm.newBool(); + static final Proto.Elm $$T_Num = Proto.Elm.newNum(); + static final Proto.Elm $$T_Str = Proto.Elm.newStr(); + static final Proto.Elm $$T_Obj = Proto.Elm.newObj(); + + static final Proto.Fxn $$T_Met = new Proto.Fxn(null, null, 0, -1, false); + static final Proto.Map $$T_Map = new Proto.Map($$T_Obj); + static final Proto.Arr $$T_Vec = new Proto.Arr($$T_Obj); + + static final XScriptO $$DEFAULT = Value.DEFAULT; + static final Object $$UNDEF = Undefined.instance; + + static final Proto.Obj $$Package = (Proto.Obj)Global.get("$$Package"); + static final Proto.Obj $$Module = (Proto.Obj)Global.get("$$Module"); + static final Proto.Obj $$Instance = (Proto.Obj)Global.get("$$Instance"); + static final Proto.Obj $$Params = (Proto.Obj)Global.get("$$Params"); + + static final Object $$objFldGet = Global.get("$$objFldGet"); + static final Object $$objFldSet = Global.get("$$objFldSet"); + static final Object $$proxyGet = Global.get("$$proxyGet"); + static final Object $$proxySet = Global.get("$$proxySet"); + static final Object $$delegGet = Global.get("$$delegGet"); + static final Object $$delegSet = Global.get("$$delegSet"); + + Scriptable xdcO; + Session ses; + Value.Obj om; + + boolean isROV; + boolean isCFG; + + Proto.Obj pkgP; + Value.Obj pkgV; + + ArrayList imports = new ArrayList(); + ArrayList loggables = new ArrayList(); + ArrayList mcfgs = new ArrayList(); + ArrayList icfgs = new ArrayList(); + ArrayList inherits = new ArrayList(); + ArrayList proxies = new ArrayList(); + ArrayList sizes = new ArrayList(); + ArrayList tdefs = new ArrayList(); + + void $$IMPORTS() + { + Global.callFxn("loadPackage", xdcO, "xdc"); + Global.callFxn("loadPackage", xdcO, "xdc.corevers"); + } + + void $$OBJECTS() + { + pkgP = (Proto.Obj)om.bind("xconfig_Embedded.Package", new Proto.Obj()); + pkgV = (Value.Obj)om.bind("xconfig_Embedded", new Value.Obj("xconfig_Embedded", pkgP)); + } + + void $$SINGLETONS() + { + pkgP.init("xconfig_Embedded.Package", (Proto.Obj)om.findStrict("xdc.IPackage.Module", "xconfig_Embedded")); + Scriptable cap = (Scriptable)Global.callFxn("loadCapsule", xdcO, "xconfig_Embedded/package.xs"); + om.bind("xdc.IPackage$$capsule", cap); + Object fxn; + fxn = Global.get(cap, "init"); + if (fxn != null) pkgP.addFxn("init", (Proto.Fxn)om.findStrict("xdc.IPackage$$init", "xconfig_Embedded"), fxn); + fxn = Global.get(cap, "close"); + if (fxn != null) pkgP.addFxn("close", (Proto.Fxn)om.findStrict("xdc.IPackage$$close", "xconfig_Embedded"), fxn); + fxn = Global.get(cap, "validate"); + if (fxn != null) pkgP.addFxn("validate", (Proto.Fxn)om.findStrict("xdc.IPackage$$validate", "xconfig_Embedded"), fxn); + fxn = Global.get(cap, "exit"); + if (fxn != null) pkgP.addFxn("exit", (Proto.Fxn)om.findStrict("xdc.IPackage$$exit", "xconfig_Embedded"), fxn); + fxn = Global.get(cap, "getLibs"); + if (fxn != null) pkgP.addFxn("getLibs", (Proto.Fxn)om.findStrict("xdc.IPackage$$getLibs", "xconfig_Embedded"), fxn); + fxn = Global.get(cap, "getSects"); + if (fxn != null) pkgP.addFxn("getSects", (Proto.Fxn)om.findStrict("xdc.IPackage$$getSects", "xconfig_Embedded"), fxn); + pkgP.bind("$capsule", cap); + pkgV.init2(pkgP, "xconfig_Embedded", Value.DEFAULT, false); + pkgV.bind("$name", "xconfig_Embedded"); + pkgV.bind("$category", "Package"); + pkgV.bind("$$qn", "xconfig_Embedded."); + pkgV.bind("$vers", Global.newArray()); + Value.Map atmap = (Value.Map)pkgV.getv("$attr"); + atmap.seal("length"); + imports.clear(); + pkgV.bind("$imports", imports); + StringBuilder sb = new StringBuilder(); + sb.append("var pkg = xdc.om['xconfig_Embedded'];\n"); + sb.append("if (pkg.$vers.length >= 3) {\n"); + sb.append("pkg.$vers.push(Packages.xdc.services.global.Vers.getDate(xdc.csd() + '/..'));\n"); + sb.append("}\n"); + sb.append("if ('xconfig_Embedded$$stat$base' in xdc.om) {\n"); + sb.append("pkg.packageBase = xdc.om['xconfig_Embedded$$stat$base'];\n"); + sb.append("pkg.packageRepository = xdc.om['xconfig_Embedded$$stat$root'];\n"); + sb.append("}\n"); + sb.append("pkg.build.libraries = [\n"); + sb.append("];\n"); + sb.append("pkg.build.libDesc = [\n"); + sb.append("];\n"); + Global.eval(sb.toString()); + } + + void $$INITIALIZATION() + { + Value.Obj vo; + + if (isCFG) { + }//isCFG + Global.callFxn("init", pkgV); + ((Value.Arr)om.findStrict("$packages", "xconfig_Embedded")).add(pkgV); + } + + public void exec( Scriptable xdcO, Session ses ) + { + this.xdcO = xdcO; + this.ses = ses; + om = (Value.Obj)xdcO.get("om", null); + + Object o = om.geto("$name"); + String s = o instanceof String ? (String)o : null; + isCFG = s != null && s.equals("cfg"); + isROV = s != null && s.equals("rov"); + + $$IMPORTS(); + $$OBJECTS(); + if (isROV) { + }//isROV + $$SINGLETONS(); + $$INITIALIZATION(); + } +} diff --git a/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.sch b/Software/Embedded_SW/Embedded/.config/xconfig_Embedded/package/xconfig_Embedded.sch new file mode 100644 index 000000000..e69de29bb diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 0cf75637c..bbc2d3c24 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -130,12 +130,29 @@ enum #define DOUBLE_BUFFER 2 - +/* #define CurrentMotDriver 0x08 #define VoltageMotDriver 0x00 #define CurrentCombinedMotDriver 0x0108 // 01 Combined Driver, 08 Current #define VoltageCombinedMotDriver 0x0100 // 01 Combined Driver, 00 Voltage #define CombinrdMotDriver 0x0300 // 03 Combined Driver + Combined Modes , 00 Voltage mode enabled +*/ + +typedef enum +{ + //Don't change the value! + Current = 0x08, + Voltage = 0x00, +}MOTDRIVER_MODE; + + +typedef enum +{ + CurrentMotDriver, + VoltageMotDriver, + CombinrdMotDriver, +}MOTDRIVER_TYPE; + //#define MagneticLImitSwitch 0x01 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 26f6d5c56..cfe466d01 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -136,24 +136,61 @@ uint8_t FPGA_SPI_Receive(TimerMotors_t _motorId) //---------------- GET ------------------------------ -uint32_t Read_Motors_Driver_Type(TimerMotors_t i) +void Read_Motors_Driver_ADC(TimerMotors_t i) { - uint32_t status = OK; - SysCtlDelay(12000); Fpga_Spi[i].TX_MOSI = (x_GET_PARAM | x_ADC_OUT)<<8; FPGA_SPI_Transnit(i); SysCtlDelay(12000); FPGA_Get_Res(i); MotorDriverResponse[i].ADC = Fpga_Spi[i].RX_MISO; +} + +uint32_t Read_Motors_Driver_Type(TimerMotors_t i) +{ + uint32_t status = OK; + + Read_Motors_Driver_ADC(i); + +/* int nop = 0; + + if((i == 7) || (i==9)) + { + nop ++; + } + +*/ if(MotorDriverResponse[i].ADC < 14) { MotorDriverResponse[i].DriverType = CurrentMotDriver; //(L6472, ADC = 11) + MotorDriverResponse[i].DriverMode = Current; } else + if((MotorDriverResponse[i].ADC >= 14) && (MotorDriverResponse[i].ADC < 20)) { MotorDriverResponse[i].DriverType = VoltageMotDriver; //(L6470, ADC = 17) + MotorDriverResponse[i].DriverMode = Voltage; + } + else + { + //TODO cross between MISO and MOSI in the SPI communication + Read_Motors_Driver_ADC(i); + + if(MotorDriverResponse[i].ADC >= 20) // //(powerSTEP01, ADC = 24) + { + MotorDriverResponse[i].DriverType = CombinrdMotDriver; + + //default for dispensers- Voltage mode, for other motors Current mode + if((i >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1) && (i <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) + MotorDriverResponse[i].DriverMode = Voltage; + else + MotorDriverResponse[i].DriverMode = Current; + } + else + { + status = ERROR; + } } /* if(MotorsCfg[_motorId].microstep == 0)//voltage mode @@ -542,8 +579,17 @@ uint32_t FPGA_MotorConfig_callback(TimerMotors_t _motorId, uint32_t ReadValue) // CM_VM = VoltageMotDriver; // } // }*/ - CM_VM = MotorDriverResponse[_motorId].DriverType & 0xFF; +/* + if(MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) + { + CM_VM = CurrentMotDriver; + } + else + CM_VM = MotorDriverResponse[_motorId].DriverType & 0xFF; + +*/ + CM_VM = MotorDriverResponse[_motorId].DriverMode; temp |= (!x_SYNC_EN | CM_VM | good | x_SYNC_SEL_1)<<16; MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback); break; @@ -554,7 +600,7 @@ uint32_t FPGA_MotorConfig_callback(TimerMotors_t _motorId, uint32_t ReadValue) if(MotorsCfg[_motorId].configword!=0) { //temp = x_SET_PARAM | x_CONFIG; - if(MotorDriverResponse[_motorId].DriverType == VoltageCombinedMotDriver) + if(MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) { temp = x_SET_PARAM | x_POWERSTEP01_CONFIG; } @@ -690,18 +736,19 @@ uint32_t FPGA_MotorConfig_callback(TimerMotors_t _motorId, uint32_t ReadValue) } case MOTOR_CONFIG_GATECFG1: ConfigStages[_motorId]++; - if(MotorDriverResponse[_motorId].DriverType == VoltageCombinedMotDriver) + if(MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) { temp = x_SET_PARAM | x_POWERSTEP01_GATECFG1; temp = temp << 24; //Gate Current of 8mA for 2000 ns (boost: 125 ns) Clock watchdog disabled - temp |= (POWERSTEP01_TCC_2000ns | POWERSTEP01_IGATE_16mA | POWERSTEP01_TBOOST_125ns | POWERSTEP01_WD_EN_DISABLE)<<8; + //temp |= (POWERSTEP01_TCC_2000ns | POWERSTEP01_IGATE_16mA | POWERSTEP01_TBOOST_125ns | POWERSTEP01_WD_EN_DISABLE)<<8; + temp |= (POWERSTEP01_TCC_2000ns | POWERSTEP01_IGATE_8mA | POWERSTEP01_TBOOST_125ns | POWERSTEP01_WD_EN_DISABLE)<<8; if( MillisecWriteToMotor(_motorId, temp, 4, FPGA_MotorConfig_callback) < 0 ) return ERROR; break; } case MOTOR_CONFIG_GATECFG2: ConfigStages[_motorId]++; - if(MotorDriverResponse[_motorId].DriverType == VoltageCombinedMotDriver) + if(MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) { temp = x_SET_PARAM | x_POWERSTEP01_GATECFG2; temp = temp << 24; @@ -831,7 +878,10 @@ void FPGA_SetMotMicroStep(TimerMotors_t _motorId)// // } // }*/ - CM_VM = MotorDriverResponse[_motorId].DriverType & 0xFF; + //CM_VM = MotorDriverResponse[_motorId].DriverType & 0xFF; + + //The CM_VM bit sets the current control method between voltage and current mode: + CM_VM = MotorDriverResponse[_motorId].DriverMode; temp |= (!x_SYNC_EN | CM_VM | good | x_SYNC_SEL_1)<<16; @@ -938,7 +988,7 @@ void FPGA_SetMotKvalHold(TimerMotors_t _motorId) temp = x_SET_PARAM | x_KVAL_HOLD; temp = temp << 24; - if((MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) && (MotorDriverRequest[_motorId].KvalHold > 0x7F)) + if((MotorDriverResponse[_motorId].DriverMode == Current) && (MotorDriverRequest[_motorId].KvalHold > 0x7F)) MotorDriverRequest[_motorId].KvalHold = 0x7F; temp |= MotorDriverRequest[_motorId].KvalHold<<16; @@ -955,7 +1005,7 @@ void FPGA_SetMotKvalRun(TimerMotors_t _motorId) temp = x_SET_PARAM | x_KVAL_RUN; temp = temp << 24; - if((MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) && (MotorDriverRequest[_motorId].KvalRun > 0x7F)) + if((MotorDriverResponse[_motorId].DriverMode == Current) && (MotorDriverRequest[_motorId].KvalRun > 0x7F)) MotorDriverRequest[_motorId].KvalRun = 0x7F; temp |= MotorDriverRequest[_motorId].KvalRun<<16; @@ -972,7 +1022,7 @@ void FPGA_SetMotKvalAcc(TimerMotors_t _motorId) temp = x_SET_PARAM | x_KVAL_ACC; temp = temp << 24; - if((MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) && (MotorDriverRequest[_motorId].KvalAcc > 0x7F)) + if((MotorDriverResponse[_motorId].DriverMode == Current) && (MotorDriverRequest[_motorId].KvalAcc > 0x7F)) MotorDriverRequest[_motorId].KvalAcc = 0x7F; temp |= MotorDriverRequest[_motorId].KvalAcc<<16; @@ -989,7 +1039,7 @@ void FPGA_SetMotKvalDec(TimerMotors_t _motorId) temp = x_SET_PARAM | x_KVAL_DEC; temp = temp << 24; - if((MotorDriverResponse[_motorId].DriverType == CurrentMotDriver) && (MotorDriverRequest[_motorId].KvalDec > 0x7F)) + if((MotorDriverResponse[_motorId].DriverMode == Current) && (MotorDriverRequest[_motorId].KvalDec > 0x7F)) MotorDriverRequest[_motorId].KvalDec = 0x7F; temp |= MotorDriverRequest[_motorId].KvalDec<<16; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c index 5534a710c..6ee02783d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c @@ -54,6 +54,22 @@ uint32_t Write_DAC_and_Input_Register(uint32_t Bits) return status; } +uint32_t Write_DAC_and_Input_Register_temp(uint32_t Bits)//to test enc +{ + uint32_t status = OK; + + DAC.Bytes.Command = AD5691R_CMD_WRITE_INPUT_N_UPDATE_REG; + + + DAC.Bytes.Data_High = (Bits >> 4); + + DAC.Bytes.Data_Low = ((Bits & 0xf)<<4); + + status = I2C_Write(DAC_I2C_BASE, I2C_DAC_ADDRESS, DAC.Write_DAC_I2C_Buf, 3); + + return status; +} + uint32_t Write_Input_Register() { uint32_t status = OK; @@ -219,6 +235,66 @@ uint32_t Cancel_Gradual_Increase_Blower(uint32_t Initial_mV) */ +////////////////////////////////////////////////////////////////////////////////////////// + +#include "drivers/FPGA/FPGA.h"; + +extern SCREW_ENC Screw_RotEnc; + +extern uint32_t Read_Screw_Encoder(); + +void Screw_ENC_Velocity_to_DAC()//every 1mSec +{ + static uint32_t Last_position = 0; + uint32_t Current_Position = 0; + uint32_t Screw_Velocity = 0; + uint32_t Value_to_ADC = 0; + static bool first_time = true; + + int8_t Sign = 1; + + if(first_time) + { + Reset_Screw_Encoder(); + first_time = false; + + } + else + { + Read_Screw_Encoder(); + Current_Position = (uint32_t)Screw_RotEnc.Position; + + if(Current_Position > Last_position ) + { + Screw_Velocity = Current_Position - Last_position; + Sign = 1; + } + else + { + Screw_Velocity = Last_position - Current_Position; + Sign = -1; + } + + + uint32_t temp = (Screw_Velocity << 2 ); + + if(temp > 2047) + temp = 2047; + /*else + if(temp < -2047) + temp = -2047;*/ + + Value_to_ADC = 2048 + (Sign * temp); + + //Send to ADC; + //Write_DAC_and_Input_Register(Value_to_ADC<<4); + Write_DAC_and_Input_Register_temp(Value_to_ADC); + + Last_position = Current_Position; + } +} + + diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 106e60316..4488cfd4f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -27,6 +27,7 @@ #include "drivers/FPGA/FPGA_Comm.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "driverlib/ssi.h" +#include "StateMachines/Printing/PrintingSTM.h" extern unsigned long Run_Value ; extern unsigned long Pos_Value ; @@ -475,3 +476,23 @@ void loop_Run_Read_Speed()//every miliSec } */ + + +void Combined_Motor_Driver_Mode(TimerMotors_t _motorId, MOTDRIVER_MODE New_Mode)// New_mode: Current or Voltage +{ + if(MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver) + { + MotorDriverResponse[_motorId].DriverMode = New_Mode; + //need to do all the configuration acording to the new mode + //The STEP_MODE register includes the CM_VM bit (sets the method between voltage and current mode) + FPGA_SetMotMicroStep(_motorId); + } +} +void Combined_dispenser_Driver_Mode(uint8_t Dispenser_ID, MOTDRIVER_MODE New_Mode)// New_mode: Current or Voltage +{ + assert(Dispenser_ID < MAX_DISPENSER_NUM); + + Combined_Motor_Driver_Mode(Dispenser_ID + 5, New_Mode);//dispenser ID -> motor id +} + + diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index 894f60c09..c2c124da5 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -101,7 +101,8 @@ typedef struct uint32_t Status; uint8_t MicroSteps; uint32_t ADC; //read the Adc in order to know the motor driver type L6470/ L6472 / powerSTEP01 - uint32_t DriverType; //current or voltage mode + MOTDRIVER_TYPE DriverType; //current or voltage mode + MOTDRIVER_MODE DriverMode; //current or voltage mode in powerSTEP01 bool Busy; }MotorDriverResponseStruct; @@ -214,4 +215,7 @@ uint32_t MotorMoveToStopper (TimerMotors_t _motorId,bool direction, uint32_t Spe uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout); uint32_t MotorGoTo(TimerMotors_t _motorIdn, uint32_t Steps); + +void Combined_Motor_Driver_Mode(TimerMotors_t _motorId, MOTDRIVER_MODE New_Mode);// New_mode: Current or Voltage +void Combined_dispenser_Driver_Mode(uint8_t Dispenser_ID, MOTDRIVER_MODE New_Mode);// New_mode: Current or Voltage #endif /* DRIVERS_MOTOR_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/SPI/SPI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/SPI/SPI_Comm.c index 4cfb0704b..2fd26552b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/SPI/SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/SPI/SPI_Comm.c @@ -1251,7 +1251,14 @@ uint32_t Get_Param(byte param)//OK //while(SSIBusy(SSI2_BASE)){}; // while(Check_SPI_Busy() == BUSY){}; /* Send GetParam operation code to dSPIN */ + + /*if((param == x_CONFIG) && (MotorDriverResponse[_motorId].DriverType == CombinrdMotDriver)) + { + temp = Write_Byte((uint8_t)x_POWERSTEP01_CONFIG | (uint8_t)param); + } + else*/ temp = Write_Byte((uint8_t)x_GET_PARAM | (uint8_t)param); + /* MSB which should be 0 */ rx |= (temp & 0xFF) << 24; switch (param) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index cb1be7fa5..eefac2854 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -349,6 +349,9 @@ uint32_t MillisecLoop(uint32_t tick) //gather Motor data from FPGA //ROM_IntMasterDisable(); */ + + + #ifndef EVALUATION_BOARD FPGA_GetBusy(); //load the busy motor information to all motors FPGA_Read_LS_Safty_Ind_Reg(); @@ -501,6 +504,8 @@ uint32_t MillisecLowLoop(uint32_t tick) //gather Motor data from FPGA //ROM_IntMasterDisable(); + //Screw_ENC_Velocity_to_DAC(); - for testing the screw enc + if (Ten_msTick) { //Speed_Data = Calculate_Speed_Sensor_Velocity(); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 265c751c6..3fb6f3af2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -56,7 +56,7 @@ uint32_t MotorsConfigMessage(HardwareMotor * request) MotorsCfg[Motor_i].pulseperround = request->pulseperround; MotorsCfg[Motor_i].pulleyradius = request->pulleyradius; MotorsCfg[Motor_i].configword = request->configword; - if(MotorDriverResponse[Motor_i].DriverType == VoltageCombinedMotDriver) + if(MotorDriverResponse[Motor_i].DriverType == CombinrdMotDriver) { MotorsCfg[Motor_i].directionthreadwize = !(request->directionthreadwize);//PowerSTEP01 } -- cgit v1.3.1 From b525fbcad1ac8c7126caa82ec8458ffbb6284384 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 30 May 2019 17:33:20 +0300 Subject: Version 1.4.0.4: Improved memory handling, handles SW crash after a job failure --- .../Embedded/Common/SWUpdate/FileSystem.c | 14 +++--- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 3 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Common/Utilities/Utils.c | 14 +++--- .../Embedded/Common/report/distributor.c | 3 +- .../Embedded/Common/report/reportInit.c | 6 +-- .../Embedded/Communication/CommunicationTask.c | 11 +++++ .../Embedded_SW/Embedded/Communication/Container.c | 42 ++++++++++------- Software/Embedded_SW/Embedded/Embedded.cfg | 52 +++++----------------- Software/Embedded_SW/Embedded/Main.c | 4 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 12 ++++- .../Embedded/Modules/Diagnostics/Diagnostics.c | 2 +- .../Embedded_SW/Embedded/Modules/General/process.c | 50 ++++++++++++--------- .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 2 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 4 ++ .../Embedded/Modules/Thread/Thread_print.c | 5 ++- .../Embedded/StateMachines/Printing/JobSTM.c | 3 +- .../Embedded/StateMachines/Printing/PrintingSTM.c | 18 +++++++- 18 files changed, 140 insertions(+), 107 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 6c0262f66..c424320ff 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -109,7 +109,7 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) } else { - free (UploadFileHandle); + my_free (UploadFileHandle); UploadFileHandle = 0; } @@ -172,7 +172,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileReceivedLength,"file upload ended successfully"); f_close(ReceivedFileHandle); - free (UploadFileHandle); + my_free (UploadFileHandle); + UploadFileHandle = 0; FileReceivedLength = 0; FileDone = true; } @@ -182,7 +183,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileReceivedLength,"file upload too much data!"); f_close(ReceivedFileHandle); - free (UploadFileHandle); + my_free (UploadFileHandle); + UploadFileHandle = 0; FileReceivedLength = 0; FileDone = true; } @@ -206,7 +208,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) responseContainer.continuous = false; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); - my_free(request->buffer.data); + //my_free(request->buffer.data); file_chunk_upload_request__free_unpacked(request,NULL); my_free(responseContainer.data.data); SendCharsWithType(container_buffer, container_size,MESSAGE_TYPE__FileChunkUploadResponse); @@ -301,7 +303,7 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileSentLength,"file download ended successfully"); f_close(SentFileHandle); - free (DownloadFileHandle); + my_free (DownloadFileHandle); FileSentLength = 0; } else @@ -310,7 +312,7 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileSentLength,"file download too much data!"); f_close(SentFileHandle); - free (DownloadFileHandle); + my_free (DownloadFileHandle); FileSentLength = 0; } } diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 01a30c21a..3bae023db 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -102,7 +102,8 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) ustrncpy (ActivateToken, requestContainer->token,36); - strcpy (SWUpgradePath,request->path); + strncpy (SWUpgradePath,request->path,99); + SWUpgradePath[99] = NULL; strcat(SWUpgradePath,"/package.cfg"); Fresult = FileRead(SWUpgradePath, &Bytes, &buffer); 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 bee894585..05864303f 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,0,3}; +TangoVersion_t _gTangoVersion = {1,4,0,4}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c index 341a43704..3871acb94 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c @@ -15,12 +15,12 @@ //***************************************************************************** -#define MAX_MEM_LOG 100 +/*#define MAX_MEM_LOG 100 int freeIndex=0,malloc_index=0; uint32_t malloc_size[MAX_MEM_LOG+1]; uint32_t malloc_time[MAX_MEM_LOG+1]; void * malloc_addr[MAX_MEM_LOG+1]; -void * free_addr[MAX_MEM_LOG+1]; +void * free_addr[MAX_MEM_LOG+1];*/ //uint32_t total_allocated = 0; void *my_malloc(size_t _size) { @@ -43,14 +43,14 @@ void *my_malloc(size_t _size) malloc_time[malloc_index] = msec_millisecondCounter; } */ - if ((addr)&&(_size>400)) + /*if ((addr)&&(_size>400)) { malloc_addr[malloc_index] = addr; malloc_size[malloc_index] = _size; malloc_time[malloc_index] = msec_millisecondCounter; if (malloc_index++>=MAX_MEM_LOG) malloc_index = 0; - } + }*/ return addr; } int allocated_size = 0; @@ -80,9 +80,9 @@ void my_free(void *_ptr) // allocated_size+=malloc_size[i]; * */ - free_addr[freeIndex] = _ptr; - if (freeIndex++>=MAX_MEM_LOG) - freeIndex = 0; +// free_addr[freeIndex] = _ptr; +// if (freeIndex++>=MAX_MEM_LOG) +// freeIndex = 0; } } diff --git a/Software/Embedded_SW/Embedded/Common/report/distributor.c b/Software/Embedded_SW/Embedded/Common/report/distributor.c index e4ab5fa36..d485abb70 100644 --- a/Software/Embedded_SW/Embedded/Common/report/distributor.c +++ b/Software/Embedded_SW/Embedded/Common/report/distributor.c @@ -728,7 +728,8 @@ static void messageDistribute(char *msg, Dist_Table[DistTableEntry].dest[index].function(msg,FileName,LineNumber,errorCode,parameter1,parameter2); } */ - strcpy (reportmsg,msg); + strncpy (reportmsg,msg,250); + reportmsg[251] = NULL; if (ReportFunc1 != NULL) ReportFunc1(reportmsg, FileName,LineNumber,errorCode,Severity, parameter); diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 0d5836acf..8a39e8fd4 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -101,7 +101,7 @@ int ReportResponseFunc(char *message, /* The formatted message response.message = message; responseContainer = /*Report*/createContainer(MESSAGE_TYPE__StartDebugLogResponse, protobufToken, false, &response, &start_debug_log_response__pack, &start_debug_log_response__get_packed_size); responseContainer.continuous = true; - if (responseContainer.data.data) + //if (responseContainer.data.data) { uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); if (container_buffer) @@ -111,13 +111,13 @@ int ReportResponseFunc(char *message, /* The formatted message if (SendCharsWithType(container_buffer, container_size,MESSAGE_TYPE__StartDebugLogResponse) == false) //comm tx mailbox full { //CommunicationMailboxFlush(); - //protobufToken[0] = 0; + protobufToken[0] = 0; my_free(container_buffer); } } my_free(responseContainer.data.data); } - + //Task_sleep(5); return OK; } diff --git a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c index 23f193b25..27780a9e3 100644 --- a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c +++ b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c @@ -201,7 +201,12 @@ int32_t SetCommunicationPath(bool UARTorUSB) CommType = UARTorUSB; return OK; } +/*#define MAX_CONT_LOG 199 +uint16_t cSendSize[MAX_CONT_LOG+1] = {0}; +uint32_t cSendTime[MAX_CONT_LOG+1] = {0}; +uint16_t cSendindex = 0; +*/ /****************************************************************************** * ======== communicationTask ======== * Task for this function is created statically. See the project's .cfg file. @@ -230,6 +235,12 @@ void communicationTxTask(UArg arg0, UArg arg1) else if (CommType == isUART) Uart_Tx(CommTxMessage.Buff, CommTxMessage.msgSize); } +/* cSendSize[cSendindex] = CommTxMessage.msgSize; + cSendTime[cSendindex] = msec_millisecondCounter; + + if (cSendindex++>=MAX_CONT_LOG) + cSendindex = 0; +*/ if (diagnosticscontainer_buffer == CommTxMessage.Buff) diagnosticscontainer_buffer = 0; my_free(CommTxMessage.Buff); diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index dd89c7b15..89deb2b0b 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -48,16 +48,16 @@ #include "Common/report/report.h" #include "Connection.h" -#define MAX_CONT_LOG 100 +#define MAX_CONT_LOG 199 -uint16_t TxmsgId[MAX_CONT_LOG+1] = {0}; +/*uint16_t TxmsgId[MAX_CONT_LOG+1] = {0}; uint16_t TxLength[MAX_CONT_LOG+1] = {0}; uint32_t TxAddr[MAX_CONT_LOG+1] = {0}; uint16_t Txindex = 0; uint32_t msgId[MAX_CONT_LOG+1] = {0}; uint32_t Length[MAX_CONT_LOG+1] = {0}; uint32_t DataLength[MAX_CONT_LOG+1] = {0}; -byte index = 0; +byte RxIndex = 0;*/ MessageContainer createContainer(MessageType type, char* token, protobuf_c_boolean completed, void* response, size_t (*packPtr)(void*, uint8_t*), size_t (*sizePtr)(void*)) @@ -79,7 +79,7 @@ MessageContainer createContainer(MessageType type, char* token, protobuf_c_boole container.data.data = response_buffer; container.data.len = response_size; - if (SuspendLargeMessages == true) + /*if (SuspendLargeMessages == true) { // Report("EndJobMessage",__FILE__,__LINE__,(int)type,RpWarning,(int)response_size,0); TxmsgId[Txindex] = type; @@ -87,7 +87,7 @@ MessageContainer createContainer(MessageType type, char* token, protobuf_c_boole TxAddr[Txindex] = msec_millisecondCounter; if (Txindex++>=MAX_CONT_LOG) Txindex = 0; - } + }*/ //free(response); return container; @@ -131,18 +131,17 @@ void receive_callback(char* buffer, size_t length) MessageContainer* requestContainer = message_container__unpack(NULL, length, (uint8_t*)buffer); if (requestContainer == NULL) return; - // HeatingTestSendResonse(0, false,true,true, /*OriginalMotorSpd_2PPS[index]*/length,requestContainer->type,0,0, "Container"); if (requestContainer->type != MESSAGE_TYPE__KeepAliveRequest) //user action resets the idle counter { resetIdleCounter(); REPORT_MSG(requestContainer->type,"Message received"); } KeepAliveOneSecondCounter = 0; - msgId[index] = requestContainer->type; - Length[index] = length; - DataLength[index] = msec_millisecondCounter; - if (index++>=MAX_CONT_LOG) - index = 0; + /*msgId[RxIndex] = requestContainer->type; + Length[RxIndex] = length; + DataLength[RxIndex] = msec_millisecondCounter; + if (RxIndex++>=MAX_CONT_LOG) + RxIndex = 0;*/ switch(requestContainer->type) { case MESSAGE_TYPE__CalculateRequest: @@ -433,13 +432,19 @@ void receive_callback(char* buffer, size_t length) message_container__free_unpacked(requestContainer, NULL); } -bool SendResult,KeepSendResult = true; +/*bool SendResult,KeepSendResult = true; uint16_t SendmsgId[MAX_CONT_LOG+1] = {0}; uint16_t SendSize[MAX_CONT_LOG+1] = {0}; uint32_t SendTime[MAX_CONT_LOG+1] = {0}; -uint16_t Sendindex = 0; +bool Sendresult[MAX_CONT_LOG+1] = {0}; +uint16_t Sendindex = 0;*/ bool SendChars(char* buffer,size_t length) { +/* SendmsgId[Sendindex] = 0xFFFF; + SendSize[Sendindex] = length; + SendTime[Sendindex] = msec_millisecondCounter; + if (Sendindex++>=MAX_CONT_LOG) + Sendindex = 0;*/ SendResult = CommunicationTaskSendMessage(buffer, length); if (SendResult == false) KeepSendResult = false; @@ -447,12 +452,15 @@ bool SendChars(char* buffer,size_t length) } bool SendCharsWithType(char* buffer,size_t length,MessageType type) { - SendmsgId[Sendindex] = type; - SendSize[Sendindex] = length; - SendTime[Sendindex] = msec_millisecondCounter; +// SendmsgId[Sendindex] = type; +// SendSize[Sendindex] = length; +// SendTime[Sendindex] = msec_millisecondCounter; + + SendResult = CommunicationTaskSendMessage(buffer, length); + +// Sendresult[Sendindex] = SendResult; if (Sendindex++>=MAX_CONT_LOG) Sendindex = 0; - SendResult = CommunicationTaskSendMessage(buffer, length); if (SendResult == false) KeepSendResult = false; return SendResult; diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index 5dd991512..c50a0057a 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -5,19 +5,22 @@ var SysMin = xdc.useModule('xdc.runtime.SysMin'); var System = xdc.useModule('xdc.runtime.System'); var Error = xdc.useModule('xdc.runtime.Error'); var ti_sysbios_hal_Hwi = xdc.useModule('ti.sysbios.hal.Hwi'); -var Memory = xdc.useModule('xdc.runtime.Memory'); var Timestamp = xdc.useModule('xdc.runtime.Timestamp'); var TimestampProvider = xdc.useModule('ti.sysbios.family.arm.lm4.TimestampProvider'); var SyncGeneric = xdc.useModule('xdc.runtime.knl.SyncGeneric'); var Mailbox = xdc.useModule('ti.sysbios.knl.Mailbox'); -var HeapStd = xdc.useModule('xdc.runtime.HeapStd'); +//var HeapStd = xdc.useModule('xdc.runtime.HeapStd'); var GIO = xdc.useModule('ti.sysbios.io.GIO'); var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore'); var Task = xdc.useModule('ti.sysbios.knl.Task'); +//var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem'); +var HeapTrack = xdc.useModule('ti.sysbios.heaps.HeapTrack'); +//var Memory = xdc.useModule('xdc.runtime.Memory'); -BIOS.heapSize = 30767; // bios heapmem -//Memory.defaultHeapSize = 48767; -Program.heap = 50000; //sysmem +BIOS.heapSize = 50000; // bios heapmem +//Memory.defaultHeapSize = 20000; +//Program.heap = 40000; +//Program.stack = 4096; Clock.timerId = 7; @@ -27,15 +30,7 @@ Program.global.adcHwi = Hwi.create(30, "&ADC0SS0Handler", hwi0Params); var hwi1Params = new Hwi.Params(); hwi1Params.instance.name = "sysTick"; Program.global.sysTick = Hwi.create(15, "&SysTickHandler", hwi1Params); -/*var hwi2Params = new Hwi.Params(); -hwi2Params.instance.name = "UART0"; -Program.global.uart0 = Hwi.create(21, "&USB0Handler", hwi2Params); -*/ -/* -var hwi21Params = new Hwi.Params(); -hwi21Params.instance.name = "portpint"; -Program.global.portpint = Hwi.create(92, "&PortPIntHandler", hwi21Params); -*/ + var hwi13Params = new Hwi.Params(); hwi13Params.instance.name = "timer0"; hwi13Params.priority = 128; @@ -51,10 +46,6 @@ hwi15Params.arg = 2; hwi15Params.priority = 160; Program.global.timer2 = Hwi.create(39, "&EightMilliSecondHeatersInterrupt", hwi15Params); -/*var hwi5Params = new Hwi.Params(); -hwi5Params.instance.name = "usb0"; -Program.global.usb0 = Hwi.create(58, "&USBCDCD_hwiHandler", hwi5Params);*/ - var hwi6Params = new Hwi.Params(); hwi6Params.instance.name = "timer1"; hwi6Params.priority = 128; @@ -66,33 +57,11 @@ hwi17Params.arg = 3; hwi17Params.priority = 96; Program.global.timer3 = Hwi.create(51, "&ScrewTimerInterrupt", hwi17Params); -/* -var semaphore1Params = new Semaphore.Params(); -semaphore1Params.instance.name = "messageSem"; -semaphore1Params.mode = Semaphore.Mode_BINARY; -Program.global.messageSem = Semaphore.create(null, semaphore1Params); - -var semaphore2Params = new Semaphore.Params(); -semaphore2Params.instance.name = "selfCheckSem"; -semaphore2Params.mode = Semaphore.Mode_BINARY; -Program.global.selfCheckSem = Semaphore.create(null, semaphore2Params); - -*/ var semaphore4Params = new Semaphore.Params(); semaphore4Params.instance.name = "initConnectionSem"; semaphore4Params.mode = Semaphore.Mode_BINARY; Program.global.initConnectionSem = Semaphore.create(null, semaphore4Params); -/* -var semaphore5Params = new Semaphore.Params(); -semaphore5Params.instance.name = "uart7Sem"; -semaphore5Params.mode = Semaphore.Mode_BINARY; -Program.global.uart7Sem = Semaphore.create(null, semaphore5Params); - -var semaphore6Params = new Semaphore.Params(); -semaphore6Params.instance.name = "ethernetSem"; -semaphore6Params.mode = Semaphore.Mode_BINARY; -Program.global.ethernetSem = Semaphore.create(null, semaphore6Params); -*/ + var semaphore0Params = new Semaphore.Params(); semaphore0Params.instance.name = "adcResultSem"; semaphore0Params.mode = Semaphore.Mode_BINARY; @@ -267,4 +236,3 @@ Program.gen.debuggerFiles = false; Task.defaultStackSize = 1024; Task.idleTaskVitalTaskFlag = false; Task.enableIdleTask = false; -Program.stack = 4096; diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 5b6066a5f..36825d232 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -139,7 +139,7 @@ Void errHook(Error_Block *eb) if (Fresult == FR_OK) { f_lseek(FileHandle, FileHandle->fsize); - strcpy(File,site->file); + strncpy(File,site->file,49); len = usnprintf(message, 80, "\r\n%s %s",__DATE__, __TIME__); Fresult = f_write(FileHandle,message,len,&Bytes ); /* print user supplied error code */ @@ -169,8 +169,10 @@ Void errHook(Error_Block *eb) Task_sleep (200); my_free(FileHandle); } +#ifdef WATCHDOG //Power_Reset(); SysCtlReset(); +#endif } //***************************************************************************** diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 73532a7d2..a4e1379c5 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -1051,6 +1051,12 @@ void SendEventNotifications(void) if (AlarmState[i].Status == true) { EventsResponse.n_events++; + if ((AlarmState[i].EventPtr == NULL) ||(AlarmState[i].EventPtr->base.descriptor->sizeof_message != 24)) + { + LOG_ERROR(i,"bad pointer for event"); + EventsResponse.n_events--; + AlarmState[i].Status = false; + } } } @@ -1098,10 +1104,12 @@ void SendEventNotifications(void) my_free(container_buffer); } } + else + AlarmHandlingStop(); if (EventsResponse.events) my_free(EventsResponse.events); - if (responseContainer.data.data) - my_free(responseContainer.data.data); + //if (responseContainer.data.data) + // my_free(responseContainer.data.data); } uint32_t ResolveEventRequestFunc(MessageContainer* requestContainer) { diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index b89fa43ed..a3b2022e9 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -423,7 +423,7 @@ int j=0; MessageContainer diagnosticsresponseContainer; uint8_t diagnostics_response_buffer[3500]; uint8_t *diagnostics_response_ptr = diagnostics_response_buffer; -uint8_t* diagnosticscontainer_buffer=0; +char * diagnosticscontainer_buffer=0; int LargeMessagesD = 0; void SendDiagnostics(void) diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index 277891861..b0351b4ff 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -235,33 +235,41 @@ uint32_t ProcessParamsInit(void) UploadProcessParametersRequest* request; FileHandle = my_malloc(sizeof(FIL)); - Fresult = FileOpen(ProcessParamsConfigPath, &Bytes, FileHandle); - if (Fresult == FR_OK) + if (FileHandle) { - buffer = my_malloc (Bytes); - if (buffer) + Fresult = FileOpen(ProcessParamsConfigPath, &Bytes, FileHandle); + if (Fresult == FR_OK) { - for (i=0;i<=(Bytes/100);i++) + buffer = my_malloc (Bytes); + if (buffer) { - Fresult = f_read(FileHandle,&buffer[i*100],100,&j ); - k+=j; - } - if (k!=Bytes) - LOG_ERROR(k,"File read error"); + for (i=0;i<=(Bytes/100);i++) + { + Fresult = f_read(FileHandle,&buffer[i*100],100,&j ); + k+=j; + } + if (k!=Bytes) + LOG_ERROR(k,"File read error"); - request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); - // ProcessParameters* ProcessParams = process_parameters__unpack(NULL, Bytes, buffer); - if (request) - { - ProcessParameters* ProcessParams = request->processparameters; - Fresult = HandleProcessParameters(ProcessParams); - //memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); - upload_process_parameters_request__free_unpacked(request,NULL); - } - free (buffer); + request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); + // ProcessParameters* ProcessParams = process_parameters__unpack(NULL, Bytes, buffer); + if (request) + { + ProcessParameters* ProcessParams = request->processparameters; + Fresult = HandleProcessParameters(ProcessParams); + //memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); + upload_process_parameters_request__free_unpacked(request,NULL); + } + my_free (buffer); + } + f_close(FileHandle); + } + else + { + LOG_ERROR(Fresult,"File open error"); } + my_free (FileHandle); } - f_close(FileHandle); return Fresult; } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 0907c4a67..e9efd97df 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -207,7 +207,7 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer if (DispenserId == LUBRICANT_DISPENSER) { - Lubricant_2Way_Valve (START); + Lubricant_2Way_Valve (STOP); } MotorSetMicroStep(MotorId, MotorsCfg[MotorId].microstep); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index aea16bb60..f7cf38ba8 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -475,12 +475,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. if (SegmentPtr) my_free(SegmentPtr); + SegmentPtr = NULL; if (BrushStopPtr) my_free(BrushStopPtr); + BrushStopPtr = NULL; if (Segment != NULL) job_description_file_segment__free_unpacked(Segment,NULL); + Segment = NULL; if (BrushStop != NULL) job_description_file_brush_stop__free_unpacked (BrushStop,NULL); + BrushStop = NULL; Fresult = f_close(FileHandle); GeneralHwReady = true; REPORT_MSG (n_segments, "Finished checking the file"); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index a285d4194..4743008e5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -114,7 +114,10 @@ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Rea if (Current_Read < Previous_Read) + { Time_Pass = (MAX_COUNTER - Previous_Read) + Current_Read + 1; + Report("Length rollover",__FILE__,__LINE__,(int)Current_Read,RpWarning,(int)Previous_Read,0); + } else Time_Pass = Current_Read - Previous_Read; @@ -771,7 +774,7 @@ void SetOriginMotorSpeed(float process_speed) //MotorControlConfig[Motor_i].m_SetParam = motor_speed; OriginalMotorSpd_2PPS[Motor_i] = (int) motor_speed; CurrentControlledSpeed[Motor_i] = (int) motor_speed; - Report("Original Speed",__FILE__,Motor_i,motor_speed,RpWarning,process_speed,0); + //Report("Original Speed",__FILE__,Motor_i,motor_speed,RpWarning,process_speed,0); for (i = 0; i <= MAX_CONTROL_SAMPLES; i++) MotorSpeedSamples[Motor_i][i] = motor_speed; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index f5ae89368..44dd09030 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -860,7 +860,8 @@ void AbortJob(char *Msg) Message.messageId = Abort; PrtMessage->messageId = PrintSystemFailure; - strcpy(PrtMessage->messageData,Msg); + strncpy(PrtMessage->messageData,Msg,99); + //PrtMessage->messageData[99] = NULL; Message.msglen = 10; if (JobmsgQ != NULL) Mailbox_post(JobmsgQ , &Message, BIOS_NO_WAIT); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 2aa260e9f..484dc9e7e 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -122,9 +122,15 @@ FRESULT CloseJobFile() my_free (JobRequestFileHandle); JobRequestFileHandle = NULL; if (BrushStopPtr) + { my_free(BrushStopPtr); + BrushStopPtr = NULL; + } if (SegmentPtr) + { my_free(SegmentPtr); + SegmentPtr = NULL; + } REPORT_MSG(Fresult,"CloseJobFile"); return Fresult; @@ -145,7 +151,10 @@ JobDescriptionFileSegment *GetNextSegmentFromJobFile() { readbBytes += ImmediateRead; if (SegmentPtr) + { my_free(SegmentPtr); + SegmentPtr = NULL; + } SegmentPtr = my_malloc (SegmentSize); if (SegmentPtr) { @@ -158,6 +167,7 @@ JobDescriptionFileSegment *GetNextSegmentFromJobFile() } }// read segment data my_free(SegmentPtr); + SegmentPtr = NULL; }//segment malloc else { @@ -181,6 +191,7 @@ void FreeSegmentFileData(JobDescriptionFileSegment *Segment) Segment = NULL; if (SegmentPtr) my_free(SegmentPtr); + SegmentPtr = NULL; } JobDescriptionFileBrushStop *GetNextBrushStopFromJobFile() { @@ -196,7 +207,10 @@ JobDescriptionFileBrushStop *GetNextBrushStopFromJobFile() { readbBytes += ImmediateRead; if (BrushStopPtr) + { my_free(BrushStopPtr); + BrushStopPtr = NULL; + } BrushStopPtr = my_malloc (BrushStopSize); if (BrushStopPtr) @@ -213,6 +227,7 @@ JobDescriptionFileBrushStop *GetNextBrushStopFromJobFile() //status = ERROR; } my_free(BrushStopPtr); + BrushStopPtr = NULL; }//brushstop size read ok else { @@ -237,6 +252,7 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop) BrushStop = NULL; if (BrushStopPtr) my_free(BrushStopPtr); + BrushStopPtr = NULL; } /************************************************************************************************************************************/ /* this function is for development initial stages. it analyses the hardware configuration to determine which modules are operational @@ -546,7 +562,7 @@ uint32_t EndState(void *JobDetails, char *Message) { //ROM_IntMasterDisable(); //SuspendLargeMessages = true; - LOG_ERROR(2,"SuspendLargeMessages EndState"); + //LOG_ERROR(2,"SuspendLargeMessages EndState"); //DiagnosticsStop(); if (Configured[Module_Winder]) { -- cgit v1.3.1 From 002f8f76ede07a2b7b444a8e03f9f172b2fb952e Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 2 Jun 2019 16:46:26 +0300 Subject: Screw is homing at the end of the job. IDS - handle small speed --- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 2 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 4 +- .../Embedded/Modules/Thread/Thread_Winder.c | 60 ++++++++++++++++++++-- 3 files changed, 58 insertions(+), 8 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index a11835205..d4454136b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -22,7 +22,7 @@ #define NUM_OF_MOTORS (HARDWARE_MOTOR_TYPE__MOTO_RLOADING + 1) // TODO After the integration with mulbery change to: //#define NUM_OF_MOTORS HARDWARE_MOTOR_TYPE__MOTO_SPARE1_1 - +#define MINIMAL_MOTOR_SPEED 0.2 //typedef enum //{ diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index f7cf38ba8..0b54658ad 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -829,7 +829,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); DispenserId, Dispensers[Dispenser_i]->nanoliterperpulse, MotorsCfg[HW_Motor_Id].microstep); } - if ((int) segmentfirst_speed > 0) + if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) { segmentfirst_speed *= (100+WFCF); segmentfirst_speed /= 100; @@ -1057,7 +1057,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) DispenserId, Dispensers[Dispenser_i]->nanoliterperpulse, MotorsCfg[HW_Motor_Id].microstep); } - if ((int) segmentfirst_speed > 0) + if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) { DispenserSegmentReady[DispenserId] = false; //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index a68995168..82f96c497 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -46,7 +46,7 @@ uint32_t CalculationDirectionChangeCounter = 1; //holds the current number of ru double WinderMotorSpeed[MAX_WINDER_SPEED_CALCULATION]; uint16_t WinderMotorSpeedCounter = 0; bool WinderMotorSpeedRollOver = false; -#define DEFAULT_SCREW_SPEED 1400 +#define DEFAULT_SCREW_SPEED 1200 double ScrewSpeed = DEFAULT_SCREW_SPEED; 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 @@ -315,7 +315,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) RotationsPerSecond = WinderReferenceSpeed / (double)MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround; tempScrewSpeed = screw_horizontal_speed*RotationsPerSecond; //ROM_IntMasterDisable(); - tempScrewSpeed = DEFAULT_SCREW_SPEED; + tempScrewSpeed = ScrewSpeed; CurrentControlledSpeed[SCREW_MOTOR] = ScrewSpeed; @@ -325,7 +325,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if ((ScrewRunningTime != temp)||(ScrewSpeed != tempScrewSpeed)) { ScrewSpeed = tempScrewSpeed; - ScrewSpeed = DEFAULT_SCREW_SPEED; + //ScrewSpeed = DEFAULT_SCREW_SPEED; ScrewRunningTime = temp;//(SYS_CLK_FREQ*Steps)/ScrewSpeed; //ROM_IntMasterEnable(); //usnprintf(TempScrewStr, 100, "Winder: Horizon,Rotation, PPR, RPP{ %d, %d ,%d, %d} ",(int)screw_horizontal_speed,(int)RotationsPerSecond,(int)InternalWinderCfg.NumberOfRotationPerPassage,(int)MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround); @@ -364,12 +364,12 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) if (SegmentId == 0) // do all this only in the beginning of the job. do not touch after that (assuming spool does not change mid job) { ScrewCurrentDirection = (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize); - +/* // * speed is set by the winding parameters and by winder rotational speed (read POSITION every 10msec) // * calculate // * 1. calculate speed according to JobTicket->processparameters->dyeingspeed // * calculation input: traverse length in milimeters/pulses, number of rotations per traverse ==> length of traverse per rotation. - ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; + ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; ScrewNumberOfSteps -= 100; screw_horizontal_speed = ScrewNumberOfSteps / InternalWinderCfg.NumberOfRotationPerPassage; // calculation input#2: number of rotations per second - (basically: speed/winder perimeter. later - according to winder actual speed - calculate according to winder position accumulation in the last second. @@ -384,7 +384,25 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) //REPORT_MSG(segmentfirst_speed,ScrewStr); Report(ScrewStr,__FILE__,__LINE__,RotationsPerSecond,RpWarning,ScrewSpeed,0); SendJobProgress(0.0,0,false, ScrewStr); +*/ + // * speed is set by the winding parameters and by winder rotational speed (read POSITION every 10msec) + // * calculate + // * 1. calculate speed according to JobTicket->processparameters->dyeingspeed + // * calculation input: traverse length in pulses, number of rotations per traverse ==> length of traverse per rotation. + ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; + screw_horizontal_speed = InternalWinderCfg.segmentoffsetpulses / InternalWinderCfg.NumberOfRotationPerPassage; //steps per winder cycle + // calculation input#2: number of rotations per second - speed/winder diameter. WE USE HERE 39 MM AS ATHE WINDER DIAMETER - SOME AVERAGE BETWEEN EMPTY AND FULL + RotationsPerSecond = (dyeingspeed*10.0)/(19.50*PI); + // calculation input#3: speed = rotation per second * traverse per rotation = traverse per second. speed set: traverse per second (mm) * pulses per mm. + ScrewSpeed = screw_horizontal_speed*RotationsPerSecond; + usnprintf(ScrewStr, 100, "SCREW speed Rot/sec %d horizon %d pulses %d",(int)RotationsPerSecond*100,(int)screw_horizontal_speed*100,(int)ScrewSpeed); + //REPORT_MSG(segmentfirst_speed,ScrewStr); + Report(ScrewStr,__FILE__,__LINE__,RotationsPerSecond,RpWarning,ScrewSpeed,0); + SendJobProgress(0.0,0,false, ScrewStr); + ScrewNumberOfSteps -= 100; + + /////////////////////// CurrentControlledSpeed[SCREW_MOTOR] = ScrewSpeed; OriginalMotorSpd_2PPS[SCREW_MOTOR] = ScrewSpeed; WinderReferenceSpeed = OriginalMotorSpd_2PPS[WINDER_MOTOR]; @@ -419,6 +437,38 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) return OK; } +uint32_t ScrewDTSControlId = 0xFF; +uint32_t ScrewDTSCallback(uint32_t deviceID, uint32_t BusyFlag) +{ + REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback called"); + SafeRemoveControlCallback(ScrewDTSControlId, ScrewDTSCallback); + + if (ScrewControlId != 0xFF) + { + RemoveControlCallback(ScrewControlId,Screw100msecDirectionChange); + ScrewControlId = 0xFF; + } + CurrentControlledSpeed[SCREW_MOTOR] = 0; + ScrewsStopControlTimer(); + //move the cart to the edge so the spool can be easily replaced + //MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize, 1000, GPI_LS_SCREW_RIGHT, NULL,0); + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_SCREW,Hard_Hiz); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize, ScrewSpeed, GPI_LS_SCREW_RIGHT, Winder_PrepareStage2,2000); + + + return OK; +} +uint32_t WinderDistanceToSpoolState(void ) +{ + double DTS_Time = ((dryerbufferlength*100)/dyeingspeed)*1000;//distance to spool time in milliseconds + REPORT_MSG ((int)DTS_Time,"WinderDistanceToSpoolState"); + + ScrewDTSControlId = AddControlCallback(ScrewDTSCallback, DTS_Time-500,TemplateDataReadCBFunction,0,0,0); + REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback start"); + + return OK; +} + uint32_t Winder_End(void) { //stop screw -- cgit v1.3.1 From 2a0e5736df4a6514baeea815152528632c285478 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 4 Jun 2019 09:05:30 +0300 Subject: Version 1.4.0.7 Heaters PID on band, does not check motor status --- .../Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 7 ++----- .../Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c | 16 ++++++++-------- .../Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c | 14 +++++++++----- .../Scripts/Assemblies/Dryer/GPO_BLOWER_PWM_Precent_.cs | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index eefac2854..b5797e749 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -349,9 +349,6 @@ uint32_t MillisecLoop(uint32_t tick) //gather Motor data from FPGA //ROM_IntMasterDisable(); */ - - - #ifndef EVALUATION_BOARD FPGA_GetBusy(); //load the busy motor information to all motors FPGA_Read_LS_Safty_Ind_Reg(); @@ -568,13 +565,13 @@ uint32_t MillisecLowLoop(uint32_t tick) DrawerFansStatus = temp & 0x1F; SystemFansStatus = temp & 0xE0; //KeepAliveOneSecondCall(); - for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) + /*for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) { if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) continue; // if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); - } + }*/ if (!(OneMinute_Tick)) { for (Heater_i = 0;Heater_i < NUM_OF_CURRENT_HEATERS;Heater_i++) diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index c9b704aa3..88f61637c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -889,12 +889,11 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } */ // if ((readValue > (HeaterCmd[index].targettemperatue * AcHeatersLoweroperationLimit/1000))&&(readValue < (HeaterCmd[index].targettemperatue * AcHeatersUpperoperationLimit/1000)))//read value within 0.5 percent from target - if ((readValue > (HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)&&(readValue < (HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100))//read value within 0.5 percent from target + if ( (readValue > (HeaterCmd[index].targettemperatue * ((100-HeaterControl[index].outputproportionalband)/100))) + && (readValue < (HeaterCmd[index].targettemperatue * ((100+HeaterControl[index].outputproportionalband)/100)))) { -////////////////// //InitialHeating = false; Report("AC PID Activating",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); -//////////////////////// DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, 0); HeatersControlStart(); @@ -931,8 +930,8 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) //REPORT_MSG (readValue,"AC HEATER Under temperature"); } } - else //PID active*/ - { + else //PID active + {*/ if ((readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100))) { //disable PID outside band @@ -1051,7 +1050,8 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } //if ((readValue > (HeaterCmd[index].targettemperatue * DcHeatersLoweroperationLimit/1000))&&(readValue < (HeaterCmd[index].targettemperatue * DcHeatersUpperoperationLimit/1000)))//read value within 0.5 percent from target - if ((readValue > (HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)&&(readValue < (HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100))//read value within 0.5 percent from target + if ( (readValue > (HeaterCmd[index].targettemperatue * ((100-HeaterControl[index].outputproportionalband)/100))) + && (readValue < (HeaterCmd[index].targettemperatue * ((100+HeaterControl[index].outputproportionalband)/100)))) { Report("DC PID Activating",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); //DCInitialHeating[index] = false; @@ -1078,8 +1078,8 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } } - else ///pid active*/ - { + else ///pid active + {*/ //check only for the proportional band limits HeaterPIDConfig[index].m_mesuredParam = readValue; if ((readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100))) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 82f96c497..2bbc93523 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -270,10 +270,10 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; //REPORT_MSG((abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); // usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); - usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, - abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); + //usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, + // abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); //usnprintf(ScrewStr, 100, "Winder Encoder: 0 %d 1 %d diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],ScrewLocationRun[1] - ScrewLocationRun[0]); - Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); if (ScrewCurrentDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize) //next time going out { @@ -438,6 +438,10 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) return OK; } uint32_t ScrewDTSControlId = 0xFF; +uint32_t WinderDistanceToSpoolEnded(uint32_t deviceID, uint32_t ReadValue) +{ + REPORT_MSG ((int)msec_millisecondCounter,"WinderDistanceToSpoolEnded called"); +} uint32_t ScrewDTSCallback(uint32_t deviceID, uint32_t BusyFlag) { REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback called"); @@ -453,7 +457,7 @@ uint32_t ScrewDTSCallback(uint32_t deviceID, uint32_t BusyFlag) //move the cart to the edge so the spool can be easily replaced //MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize, 1000, GPI_LS_SCREW_RIGHT, NULL,0); MotorStop(HARDWARE_MOTOR_TYPE__MOTO_SCREW,Hard_Hiz); - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize, ScrewSpeed, GPI_LS_SCREW_RIGHT, Winder_PrepareStage2,2000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize, ScrewSpeed, GPI_LS_SCREW_RIGHT, WinderDistanceToSpoolEnded,2000); return OK; @@ -463,7 +467,7 @@ uint32_t WinderDistanceToSpoolState(void ) double DTS_Time = ((dryerbufferlength*100)/dyeingspeed)*1000;//distance to spool time in milliseconds REPORT_MSG ((int)DTS_Time,"WinderDistanceToSpoolState"); - ScrewDTSControlId = AddControlCallback(ScrewDTSCallback, DTS_Time-500,TemplateDataReadCBFunction,0,0,0); + ScrewDTSControlId = AddControlCallback(ScrewDTSCallback, DTS_Time-800,TemplateDataReadCBFunction,0,0,0); REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback start"); return OK; diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/GPO_BLOWER_PWM_Precent_.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/GPO_BLOWER_PWM_Precent_.cs index f17802815..0465d0852 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/GPO_BLOWER_PWM_Precent_.cs +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/GPO_BLOWER_PWM_Precent_.cs @@ -12,7 +12,7 @@ using Tango.Stubs; public void OnExecute(StubManager stubManager) { - const int LOW = 0;//0 - 100% + const int LOW = 75;//0 - 100% var response = stubManager.Run("StubFpgaWriteRegRequest" ,0x60000400 | 0x112, 0xFF);//Freq 8 bit var response1 = stubManager.Run("StubFpgaWriteRegRequest" ,0x60000400 | 0x3EC, LOW+1);//Low 8 bit var response2 = stubManager.Run("StubFpgaWriteRegRequest" ,0x60000400 | 0x3EE, 101 - LOW);//High 8 bit -- cgit v1.3.1 From 0cbf104a30c3f0c4e9dbbe9db47d6ad72df03655 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 11 Jun 2019 18:49:45 +0300 Subject: Embedded SW Release note - Version 1.4.0.9 ============================================================= Drivers: Support for PowerStep 01 motor drivers (combined current/voltage) - initialization only Screw encoder reading (requires FPGA firmware update) Motor speeds in float - to enable small speeds. read motor speed from driver. Modules: PID - support small numbers in PID function - thread improved General -Safety alarms (not fully tested) Heaters PID fixed - use band setting for PID start of operation IDS - check that all brushstop data is read before moving to next segment. file initial reading improved. WFCF for active dispenser Thread - Thread control fixed. screw goes home on the last 800 milliseconds Procedures: JOBS units - supported in embedded, waiting for cooperation with APP --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 4 -- .../Embedded/Drivers/USB_Communication/USBCDCD.c | 3 + Software/Embedded_SW/Embedded/Main.c | 2 +- .../Embedded_SW/Embedded/Modules/General/buttons.c | 16 +++++ .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 34 ++++++++--- .../Embedded/Modules/Thread/Thread_Winder.c | 2 +- .../Embedded/Modules/Thread/Thread_ex.h | 1 + .../Embedded/Modules/Thread/Thread_print.c | 4 ++ .../Embedded/Software Release Notes.txt | 22 +++++++ .../Embedded/StateMachines/Printing/JobSTM.c | 14 ++++- .../Embedded/StateMachines/Printing/PrintingSTM.c | 69 ++++++++++++++++++---- .../Embedded/StateMachines/Printing/PrintingSTM.h | 2 + 13 files changed, 144 insertions(+), 31 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 6cfff6e17..f0ee0af19 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,0,7}; +TangoVersion_t _gTangoVersion = {1,4,0,9}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index c83be0a5c..2c29ad564 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -120,10 +120,6 @@ uint32_t MotorSetDirection(TimerMotors_t _motorId,bool _direction) uint32_t MotorSetSpeed(TimerMotors_t _motorId, float _freq)//TODO MicroSteps? { - if (_motorId == HARDWARE_MOTOR_TYPE__MOTO_SCREW) - { - LOG_ERROR ((int)_freq, "SCREW SET SPEED CALLED"); - } uint32_t RunSpeed = SpdCalc(_freq); #ifdef EVALUATION_BOARD Run_Value = RunSpeed; diff --git a/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c b/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c index 5863c90e5..56e695ca4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c +++ b/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c @@ -455,6 +455,9 @@ DFUDetachCallback(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgData, // // Release updateSem // + ControlStop(); + MillisecStop(); + Semaphore_post(updateSem); ROM_WatchdogResetDisable(WATCHDOG0_BASE); //ROM_WatchdogReloadSet(WATCHDOG0_BASE, 120000000*90); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 36825d232..224e32a70 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -74,7 +74,7 @@ #include "Modules/General/buttons.h" #include "Modules/Waste/Waste.h" #include -#define WATCHDOG +//#define WATCHDOG //***************************************************************************** diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index cfd44a6fa..1c719d778 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -613,6 +613,22 @@ void Ink_Cart_Led()//temporary for ITMA { 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_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 0b54658ad..826a9ff26 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -196,21 +196,25 @@ JobDescriptionFileBrushStop *GetNextBrushStopFromJobFile(); void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); */ - /************************************************************************************************************************************ - uint32_t IDS_MapDispenserUsedinFileJobshort(void *JobDetails) + /************************************************************************************************************************************/ + uint32_t IDS_MapDispenserUsedinFileJob(void *JobDetails) { JobTicket* JobTicket = JobDetails; - JobDescriptionFileBrushStop *BrushStop; - JobDescriptionFileSegment *Segment; + JobDescriptionFileBrushStop *BrushStop = NULL; + JobDescriptionFileSegment *Segment = NULL; int Dispenser_i, Brush_i,DispenserId; FRESULT Fresult = FR_OK; uint32_t status = OK; bool lookForLubrication = false; + int brushCounter = 0; + + GeneralHwReady = false; for (Dispenser_i = 0;Dispenser_ienablelubrication == true) @@ -225,6 +229,7 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); Segment = GetNextSegmentFromJobFile(); while(Segment) { + n_segments++; if ((Segment->has_brushstopscount)&&(Segment->brushstopscount)) { for (Brush_i=0;Brush_ibrushstopscount;Brush_i++) @@ -232,6 +237,12 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); BrushStop = GetNextBrushStopFromJobFile(); if (BrushStop) { + if ((brushCounter % 100)==0) + { + SendJobProgress(0.0,0,false, "Processing file"); + Control_WD(ENABLE,55); //activate heaters/dispenser watchdog, 0.5 seconds + } + brushCounter++; if (BrushStop->n_dispensers) { for (Dispenser_i = 0;Dispenser_i < BrushStop->n_dispensers;Dispenser_i++) @@ -245,6 +256,9 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); { lookForLubrication = false; lubricant_speed = BrushStop->dispensers[Dispenser_i]->nanolitterpersecond/BrushStop->dispensers[Dispenser_i]->nanoliterperpulse; + REPORT_MSG (BrushStop->dispensers[Dispenser_i]->nanolitterpersecond*100, "LUBRICANT nl / sec"); + REPORT_MSG (BrushStop->dispensers[Dispenser_i]->nanoliterperpulse*100, "LUBRICANT nl / pulse"); + REPORT_MSG (BrushStop->dispensers[Dispenser_i]->dispenserstepdivision, "step division"); if (BrushStop->dispensers[Dispenser_i]->dispenserstepdivision != DISPENSER_STEP_DIVISION__Auto) { @@ -281,11 +295,13 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); FreeSegmentFileData(Segment); CloseJobFile(); } + GeneralHwReady = true; + REPORT_MSG (n_segments, "Finished checking the file"); return status; } - *************************************************************************************************************************************/ - /************************************************************************************************************************************/ + /*************************************************************************************************************************************/ + /************************************************************************************************************************************ uint32_t IDS_MapDispenserUsedinFileJob(void *JobDetails) { JobTicket* JobTicket = JobDetails; @@ -299,7 +315,7 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); FIL *FileHandle = 0; //the system supports a single active file bool lookForLubrication = false; int brushCounter = 0; -/* +/`* Parsing the job description file. The job description file simply contains an array of segments and their brush stops. The job description file is meant to be read brush stop by brush stop while the job is in progress. @@ -319,7 +335,7 @@ a. Read brush stop message length. b. Read brush stop message. c. Go to step 2.a x Segment.BrushStopsCount. 3. Go to step 1 until end of file. - */ + *`/ GeneralHwReady = false; for (Dispenser_i = 0;Dispenser_i1) + { + n_segments = n_segments*n_units; + } //#warning Process parameters in job request are not handled. push separately for now if (Ticket->processparameters) { @@ -923,6 +928,7 @@ uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer) ustrncpy (JobToken, requestContainer->token,36); JobResumed = true; usnprintf(ErrorMsg, 100, "Job Resumed"); + Report("Job resumed",__FILE__,__LINE__, JobActive,RpMessage,JobResumed,0); jobStatus.message =ErrorMsg; jobStatus.has_progress = true; @@ -934,7 +940,7 @@ uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer) else { usnprintf(ErrorMsg, 100, "Job not Resumed"); - + Report("Job not resumed",__FILE__,__LINE__, JobActive,RpMessage,JobResumed,0); jobStatus.message =ErrorMsg; jobStatus.has_progress = true; jobStatus.progress = 0.0; @@ -997,7 +1003,9 @@ Void jobTask(UArg arg0, UArg arg1) { case JobRequestMsg: JobEndReason = JOB_OK; + Report("JobRequestMsg",__FILE__,__LINE__, JobActive,RpMessage,JobResumed,0); JobActive = true; + JobResumed = false; setmachineActive(true); PrepareState (CurrentJob); break; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 484dc9e7e..729e3ab8e 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -38,11 +38,14 @@ * functions describes motor operation flow and movement state during profile execution * used to operate in runtime correct profileflow execution *********************************************************************************************/ -static uint32_t PreSegmentState(void *Segment, int); -static uint32_t SegmentState(void *Segment, int); +static uint32_t PreSegmentState(void *Segment, int,int); +static uint32_t SegmentState(void *Segment, int,int); uint32_t EndState(void *JobDetails, char *Message); //static uint32_t ExitState(void *JobDetails); uint16_t n_segments = 0; +uint16_t n_units = 1; +uint16_t n_unit_segments = 0; + /********************************************************************** * the array and enum of PrintingState_t below must be in sync order ***********************************************************************/ @@ -98,7 +101,6 @@ uint8_t *SegmentPtr = 0, *BrushStopPtr = 0; FIL *JobRequestFileHandle = 0; //the system supports a single active file FRESULT OpenJobFile() { - //n_segments = 0; if (CurrentJob->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) { JobRequestFileHandle = my_malloc(sizeof(FIL)); @@ -112,6 +114,20 @@ FRESULT OpenJobFile() } return Fresult; } +FRESULT RewindJobFile() +{ + if (CurrentJob->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) + { + Fresult = f_lseek(JobRequestFileHandle, 0); + + if (Fresult == FR_OK) + { + readbBytes = 0; + } + REPORT_MSG(bBytes,"RewindJobFile"); + } + return Fresult; +} FRESULT CloseJobFile() { Fresult = f_close(JobRequestFileHandle); @@ -380,7 +396,7 @@ uint32_t PreSegmentReady(int ModuleId, ModuleStateEnum result) } //******************************************************************************************************************** -static uint32_t PreSegmentState(void *SegmentDetails, int SegmentId) +static uint32_t PreSegmentState(void *SegmentDetails, int SegmentId,int SegmentIdPointer) { SendJobProgress(0.0, SegmentId, false, "PreSegment Start"); if (Configured[Module_Thread]) @@ -462,7 +478,7 @@ uint32_t SegmentReady(int ModuleId, ModuleStateEnum result) } //******************************************************************************************************************** -static uint32_t SegmentState(void *SegmentDetails, int SegmentId) +static uint32_t SegmentState(void *SegmentDetails, int SegmentId,int SegmentIdPointer) { SendJobProgress(0.0, SegmentId, false, "Segment Start"); if (Configured[Module_IDS]) @@ -551,6 +567,7 @@ static uint32_t DistanceToSpoolState(void *JobDetails) if (Configured[Module_Winder]) { //DistanceToSpoolWaiting[Module_Winder] = ModuleWaiting; + WinderDistanceToSpoolState(); //Winder_DistanceToSpool(JobDetails); } return OK; @@ -625,7 +642,7 @@ void StartPrinting(void) //******************************************************************************************************************** //******************************************************************************************************************** -int SegmentId = 0; +int SegmentId = 0,UnitId = 0, SegmentIdPointer = 0; JobDescriptionFileSegment *Segment; JobSegment SSegment; @@ -647,27 +664,29 @@ void PrintSTMMsgHandler(void * msg) { case PrintRequest: SegmentId = 0; + SegmentIdPointer = 0; + UnitId = 0; if (CurrentJob->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) { Segment = GetNextSegmentFromJobFile(); SSegment.length = Segment->length; SSegment.has_length = Segment->has_length; SSegment.n_brushstops = Segment->brushstopscount; - PreSegmentState(&SSegment,SegmentId); + PreSegmentState(&SSegment,SegmentId,SegmentIdPointer); } else { - PreSegmentState(CurrentJob->segments[SegmentId],SegmentId); + PreSegmentState(CurrentJob->segments[SegmentIdPointer],SegmentId,SegmentIdPointer); } break; case PreSegmentResultsOk: if (CurrentJob->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) { - SegmentState(&SSegment,SegmentId); + SegmentState(&SSegment,SegmentId,SegmentIdPointer); } else { - SegmentState(CurrentJob->segments[SegmentId],SegmentId); + SegmentState(CurrentJob->segments[SegmentIdPointer],SegmentId,SegmentIdPointer); } break; case PreSegmentResultsFail: @@ -676,7 +695,33 @@ void PrintSTMMsgHandler(void * msg) break; case SegmentResultsOk: SegmentId++; + SegmentIdPointer++; //REPORT_MSG(SegmentId, "SegmentResultsOk segmentId"); + if ((SegmentId % n_unit_segments)==0) //finished a unit + { + Report("unit finished",__FILE__,__LINE__, SegmentId,RpMessage,n_unit_segments,0); + UnitId++; + if (UnitId < n_units) + { + if (CurrentJob->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) + { + //rewind file + if (RewindJobFile() != FR_OK) + { + JobEndReason = JOB_OTHER_ALARM; + if (dryerbufferlength == 0) + EndState(CurrentJob, "Job Ended"); + else + DistanceToSpoolState(CurrentJob); + } + Report("start unit ",__FILE__,__LINE__, UnitId,RpMessage,n_units,0); + } + SegmentIdPointer = 0; + } + } + + + Report("SegmentResultsOk segmentId",__FILE__,__LINE__, SegmentId,RpMessage,n_segments,0); if (SegmentId >= n_segments) { @@ -720,11 +765,11 @@ void PrintSTMMsgHandler(void * msg) SSegment.length = Segment->length; SSegment.has_length = Segment->has_length; SSegment.n_brushstops = Segment->brushstopscount; - PreSegmentState(&SSegment,SegmentId); + PreSegmentState(&SSegment,SegmentId,SegmentIdPointer); } else { - PreSegmentState(CurrentJob->segments[SegmentId],SegmentId); + PreSegmentState(CurrentJob->segments[SegmentIdPointer],SegmentId,SegmentIdPointer); } } break; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index d7d8262f4..b9a82defa 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -173,6 +173,8 @@ bool JobIsActive(void); extern bool SuspendLargeMessages; extern uint16_t n_segments; +extern uint16_t n_units; +extern uint16_t n_unit_segments; void SendJobProgress(double ProcessedLength,int SegmentId, bool done, char *Message); uint32_t PrepareReady(int ModuleId, ModuleStateEnum result); -- cgit v1.3.1 From 55387f5654403fff0ca3173f5bfcd69a12825ed8 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 17 Jun 2019 13:53:39 +0300 Subject: preparation for sample winding, preparation for work with FLASH instead of FFS --- .../Communication/PMR/Printing/JobTicket.pb-c.c | 32 ++++- .../Communication/PMR/Printing/JobTicket.pb-c.h | 6 +- .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 4 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 4 +- .../Embedded/Drivers/Motors/MotorActions.c | 16 +++ .../Embedded/Drivers/flash_ram/FlashProgram.h | 1 + .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 4 +- .../Embedded/Modules/General/GeneralHardware.c | 24 +++- .../Embedded/Modules/Heaters/Heaters_print.c | 5 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 2 +- .../Embedded/Modules/Stubs_Handler/Stub_Dancer.c | 10 ++ .../Embedded_SW/Embedded/Modules/Thread/Thread.h | 3 + .../Embedded/Modules/Thread/Thread_Winder.c | 152 ++++++++++++++------- .../Embedded/Modules/Thread/Thread_ex.h | 2 +- .../Embedded/Modules/Thread/Thread_init.c | 16 +++ .../Embedded/Modules/Thread/Thread_print.c | 13 ++ .../Embedded/StateMachines/Printing/JobSTM.c | 14 +- 17 files changed, 234 insertions(+), 74 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.c index a47ff627b..53754f409 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.c @@ -52,7 +52,7 @@ void job_ticket__free_unpacked assert(message->base.descriptor == &job_ticket__descriptor); protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); } -static const ProtobufCFieldDescriptor job_ticket__field_descriptors[12] = +static const ProtobufCFieldDescriptor job_ticket__field_descriptors[14] = { { "Guid", @@ -198,6 +198,30 @@ static const ProtobufCFieldDescriptor job_ticket__field_descriptors[12] = 0, /* flags */ 0,NULL,NULL /* reserved1,reserved2, etc */ }, + { + "units", + 13, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(JobTicket, has_units), + offsetof(JobTicket, units), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "SampleWinding", + 14, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(JobTicket, has_samplewinding), + offsetof(JobTicket, samplewinding), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, }; static const unsigned job_ticket__field_indices_by_name[] = { 2, /* field[2] = EnableInterSegment */ @@ -208,15 +232,17 @@ static const unsigned job_ticket__field_indices_by_name[] = { 4, /* field[4] = Length */ 1, /* field[1] = Name */ 5, /* field[5] = ProcessParameters */ + 13, /* field[13] = SampleWinding */ 8, /* field[8] = Segments */ 7, /* field[7] = Spool */ 9, /* field[9] = UploadStrategy */ 6, /* field[6] = WindingMethod */ + 12, /* field[12] = units */ }; static const ProtobufCIntRange job_ticket__number_ranges[1 + 1] = { { 1, 0 }, - { 0, 12 } + { 0, 14 } }; const ProtobufCMessageDescriptor job_ticket__descriptor = { @@ -226,7 +252,7 @@ const ProtobufCMessageDescriptor job_ticket__descriptor = "JobTicket", "", sizeof(JobTicket), - 12, + 14, job_ticket__field_descriptors, job_ticket__field_indices_by_name, 1, job_ticket__number_ranges, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.h index bf75643a9..d54a9c32e 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Printing/JobTicket.pb-c.h @@ -50,10 +50,14 @@ struct _JobTicket char *jobdescriptionfile; protobuf_c_boolean has_enablelubrication; protobuf_c_boolean enablelubrication; + protobuf_c_boolean has_units; + uint32_t units; + protobuf_c_boolean has_samplewinding; + protobuf_c_boolean samplewinding; }; #define JOB_TICKET__INIT \ { PROTOBUF_C_MESSAGE_INIT (&job_ticket__descriptor) \ - , NULL, NULL, 0, 0, 0, 0, 0, 0, NULL, 0, JOB_WINDING_METHOD__Embroidery, NULL, 0,NULL, 0, JOB_UPLOAD_STRATEGY__Default, NULL, 0, 0 } + , NULL, NULL, 0, 0, 0, 0, 0, 0, NULL, 0, JOB_WINDING_METHOD__Embroidery, NULL, 0,NULL, 0, JOB_UPLOAD_STRATEGY__Default, NULL, 0, 0, 0, 0, 0, 0 } /* JobTicket methods */ 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 de5c18332..0bcf9d192 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -91,7 +91,7 @@ static FpgaMotMap_t FpgaMotMap[NUM_OF_MOTORS] = {&F1_MOTO_RLOADARM_A1_TX_00, &F1_MOTO_RLOADARM_A1_TX_01, &F1_MOTO_RLOADARM_A1_RX_00 ,&F1_MOTO_RLOADARM_A1_RX_01 ,&F1_MOTO_RLOADARM_A1_WORDS ,&F1_Moto_Driver_NBUSY2_D, &F1_SPI_Busy1_D}, //MOTOR_RLOADING - Right Loading {&F1_MOTO_RLOADING_A1_TX_00, &F1_MOTO_RLOADING_A1_TX_01, &F1_MOTO_RLOADING_A1_RX_00, &F1_MOTO_RLOADING_A1_RX_01, &F1_MOTO_RLOADING_A1_WORDS, &F1_Moto_Driver_NBUSY2_D, &F1_SPI_Busy1_D}, -/* + //MOTOR_SPARE1_1 - Spare {&F3_MOTO_SPARE1_1_A1_TX_00, &F3_MOTO_SPARE1_1_A1_TX_01, &F3_MOTO_SPARE1_1_A1_RX_00 ,&F3_MOTO_SPARE1_1_A1_RX_01 ,&F3_MOTO_SPARE1_1_A1_WORDS ,&F3_Moto_Driver_NBUSY1_D, &F3_SPI_Busy1_D}, //MOTOR_SPARE1_2 - Spare @@ -100,7 +100,7 @@ static FpgaMotMap_t FpgaMotMap[NUM_OF_MOTORS] = {&F3_MOTO_SPARE2_1_A1_TX_00, &F3_MOTO_SPARE2_1_A1_TX_01, &F3_MOTO_SPARE2_1_A1_RX_00 ,&F3_MOTO_SPARE2_1_A1_RX_01 ,&F3_MOTO_SPARE2_1_A1_WORDS ,&F3_Moto_Driver_NBUSY1_D, &F3_SPI_Busy1_D}, //MOTOR_SPARE2_2 - Spare {&F3_MOTO_SPARE2_2_A1_TX_00, &F3_MOTO_SPARE2_2_A1_TX_01, &F3_MOTO_SPARE2_2_A1_RX_00 ,&F3_MOTO_SPARE2_2_A1_RX_01 ,&F3_MOTO_SPARE2_2_A1_WORDS ,&F3_Moto_Driver_NBUSY1_D, &F3_SPI_Busy1_D}, -*/ + }; uint8_t FPGA_SPI_Transnit(TimerMotors_t _motorId) diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index d4454136b..bce65e89b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -20,8 +20,8 @@ #define TimerMotors_t HardwareMotorType -#define NUM_OF_MOTORS (HARDWARE_MOTOR_TYPE__MOTO_RLOADING + 1) // TODO After the integration with mulbery change to: -//#define NUM_OF_MOTORS HARDWARE_MOTOR_TYPE__MOTO_SPARE1_1 +//#define NUM_OF_MOTORS (HARDWARE_MOTOR_TYPE__MOTO_RLOADING + 1) // TODO After the integration with mulbery change to: +#define NUM_OF_MOTORS HARDWARE_MOTOR_TYPE__MOTO_SPARE2_2+1 #define MINIMAL_MOTOR_SPEED 0.2 //typedef enum diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 3177dc787..b394a4391 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -149,6 +149,22 @@ uint32_t MotorGotoWithCallback (TimerMotors_t MotorId, uint32_t Steps, uint32_t MotorControlCallback[MotorId] = MotorMoveCallBackFunction; return MotorControlId[MotorId]; } +uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO +{ + assert (callback); + //assert (isValid(deviceId)); + + //call driver action to device id with the parameter + //SetMotorSpeed (deviceId, parameter); + MotorCallback[MotorId] = callback; + + //MotorStop(MotorId,Hard_Hiz ); + int sign = direction?1:-1; + MotorGoTo(MotorId,Steps*sign ); + MotorControlId[MotorId] = AddControlCallback( MotorMoveCallBackFunction, /*eTenMillisecond*/20, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); + MotorControlCallback[MotorId] = MotorMoveCallBackFunction; + return MotorControlId[MotorId]; +} uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO { diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h index b920bf47f..b5c0e7373 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h @@ -13,6 +13,7 @@ #define MOTOR_MAP_IN_FLASH (FLASH_RAM_BASE + 0X0000 ) #define ALARM_MAP_IN_FLASH (FLASH_RAM_BASE + 0X2000 ) #define JOB_MAP_IN_FLASH (FLASH_RAM_BASE + 0X4000 ) +#define DANCERS_MAP_IN_FLASH (FLASH_RAM_BASE + 0XA000) #define GENHWCFG_MAP_IN_FLASH (FLASH_RAM_BASE + 0X10000) #define OTHER_MAP_IN_FLASH (FLASH_RAM_BASE + 0X12000) diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index a4e1379c5..b651f2448 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -378,9 +378,9 @@ void AlarmHandlingInit(void) } AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH; - EraseFlashSection(ALARM_MAP_IN_FLASH,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); +// EraseFlashSection(ALARM_MAP_IN_FLASH,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem); - LOG_ERROR(AlarmItem[2].EventName,"Flash Test"); +// LOG_ERROR(AlarmItem[2].EventName,"Flash Test"); return; } diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 9c7e84bc2..2d64c8515 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -60,6 +60,7 @@ uint32_t HWConfigurationInit(void) FRESULT Fresult = FR_OK; FIL *FileHandle = 0; //the system supports a single active file uint8_t* buffer = NULL; + void* buffer1 = NULL; uint32_t Bytes = 0,i,j,k=0; uint32_t status = OK; UploadHardwareConfigurationRequest* UploadRequest=0; @@ -67,6 +68,17 @@ uint32_t HWConfigurationInit(void) GeneralHwReady = false; Control_WD(ENABLE,250); + memcpy(&Bytes,(void *)GENHWCFG_MAP_IN_FLASH,sizeof(Bytes)); + + if ((Bytes)&&(Bytes < 4000)) + { + buffer1 = my_malloc (Bytes); + if (buffer1) + { + memcpy(buffer1, (void *)(GENHWCFG_MAP_IN_FLASH+4),Bytes); + UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer1); + } + } Fresult = f_mkdir(SW_INFO_DIR); if ((Fresult == FR_OK)||(Fresult == FR_EXIST)) { @@ -86,13 +98,15 @@ uint32_t HWConfigurationInit(void) if (k!=Bytes) LOG_ERROR(k,"File read error"); } + Fresult= memcmp(buffer,buffer1,Bytes); UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer); status = HWConfiguration(UploadRequest); if (status ==OK) { upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); - EraseFlashSection(GENHWCFG_MAP_IN_FLASH,Bytes); - ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, Bytes, buffer); + //EraseFlashSection(GENHWCFG_MAP_IN_FLASH,Bytes+4); + //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,Bytes); + //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); } else { @@ -404,9 +418,15 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) uint32_t HWConfigurationFunc(MessageContainer* requestContainer) { uint32_t status = 0; + uint32_t DataLen = 0; MessageContainer responseContainer; UploadHardwareConfigurationResponse response = UPLOAD_HARDWARE_CONFIGURATION_RESPONSE__INIT; + EraseFlashSection(GENHWCFG_MAP_IN_FLASH,requestContainer->data.len+4); + DataLen = requestContainer->data.len; + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,&DataLen); + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, requestContainer->data.len, requestContainer->data.data); + FileWrite(requestContainer->data.data, requestContainer->data.len,HwConfigPath); UploadHardwareConfigurationRequest* UploadRequest = upload_hardware_configuration_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 88f61637c..3ebf56c7f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -677,7 +677,8 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { if (HeaterMaxTempFlag[index] == false) { - LOG_ERROR (MaxreadValue/100, "Heater Over the max temperature, turned off"); + //LOG_ERROR (MaxreadValue/100, "Heater Over the max temperature, turned off"); + Report(" AC Heater Over the max temperature, turned off",__FILE__,index,HeaterReady[index],RpWarning,HeaterControl[index].sensormaxvalue, 0); } DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); HeaterMaxTempFlag[index] = true; @@ -739,7 +740,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) HeaterRecalculateHeaterParams(index, 0); HeaterMaxTempFlag[index] = true; //LOG_ERROR ((MinreadValue/100), "Heater Over the max temperature, turned off"); - Report("Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterControl[index].sensormaxvalue,0); + Report("DC Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterReady[index],0); AlarmHandlingSetAlarm(HeaterEventType[index], true); return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 826a9ff26..4cc6eac30 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -107,7 +107,7 @@ int lInterSegmentLength = 0; uint32_t IDS_DispenserControlInit() { - DispensersControl = (void *)(GENHWCFG_MAP_IN_FLASH + 0x4000); + DispensersControl = (void *)(DANCERS_MAP_IN_FLASH + 1024); EraseFlashSection(DispensersControl,sizeof(HardwarePidControl)*MAX_SYSTEM_DISPENSERS); return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c index 6bfb3f322..03c05e105 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c @@ -67,6 +67,16 @@ void Stub_DancerPositionRequest(MessageContainer* requestContainer) response.detailed_status = DANCER_ENC[request->dancer_id].Det_status; response.has_general_status = true; } + else if(Dancer_Id < NUM_OF_ROTENC*2) + { + int Dancer = Dancer_Id - NUM_OF_ROTENC; + response.position = DancersCfg[Dancer].zeropoint; + response.has_position = true; + response.general_status = DANCER_ENC[Dancer].Gen_status; + response.has_general_status = true; + response.detailed_status = DANCER_ENC[Dancer].Det_status; + response.has_general_status = true; + } else { response.detailed_status = ERROR; // use the Reserved bits to send our errors diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index 0093a5a2a..230d06601 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -52,6 +52,9 @@ extern HardwarePidControlType ThreadMotorIdToControlId[MAX_THREAD_MOTORS_NUM]; extern bool BreakSensorenabled; extern int32_t BreakSensordebouncetimemilli; +extern bool SampleWinding; + + //extern MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS]; extern HardwarePidControl MotorsControl[MAX_THREAD_MOTORS_NUM]; //extern InternalWinderConfigStruc InternalWinderCfg; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 297cea44b..4f6585f2a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -58,6 +58,7 @@ InternalWinderConfigStruc InternalWinderCfg = {0}; uint32_t ScrewLocationLimitSwitch = 0,ScrewLocationStart = 0; uint32_t ScrewLocationRun[3]; +bool SampleWinding = false; uint32_t Winder_Init(void) { ScrewTimerInterruptInit(); @@ -92,8 +93,10 @@ uint32_t InternalWindingConfigMessage(JobSpool* request) * 1. move home to the limit switch (check that the cart is clear from the limit switch, start moving, with acceleration to maximal speed. enable interrupt on the limit switch, upon interrupt stop. * report ready to the job STM */ -uint32_t Winder_Prepare(void) +uint32_t Winder_Prepare(void *JobDetails) { + JobTicket* JobTicket = JobDetails; + uint32_t status = 0; //JobTicket* JobTicket = JobDetails; //float process_speed = JobTicket->processparameters->dyeingspeed; @@ -117,6 +120,11 @@ uint32_t Winder_Prepare(void) ScrewLocationRun[0] = 0; ScrewLocationRun[1] = 0; + if (JobTicket->has_samplewinding == true) + { + SampleWinding = JobTicket->samplewinding; + SampleWinding = true; + } if (FPGA_Read_limit_Switches(GPI_LS_SCREW_RIGHT)==LIMIT) { //REPORT_MSG(LIMIT, "Winder_Prepare at limit"); @@ -167,7 +175,6 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue) uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) { - //SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_SCREW); //set this point as the spool home //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,temp_MaxFrequency); MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Soft_Hiz); //per L6470 errata between mov and run commands @@ -179,6 +186,7 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) ScrewLocationStart = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationStart, "Winder_ScrewAtOffsetCallback Encoder Location"); + SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_SCREW); //set this point as the spool home ScrewCurrentDirection = false; ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; @@ -267,6 +275,8 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) ScrewCurrentDirection = 1-ScrewCurrentDirection; CalculationDirectionChangeCounter++; + if (SampleWinding) + return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; //REPORT_MSG((abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); // usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); @@ -348,10 +358,13 @@ uint32_t WinderPresegmentReady(uint32_t deviceID, uint32_t ReadValue) { return PreSegmentReady(Module_Winder,ModuleDone); } +uint32_t WinderSamplesSegmentCallback(uint32_t SegmentDetails, uint32_t SegmentId) +{ + ScrewTimerInterrupt(0); +} uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) { - //JobTicket* JobTicket = JobDetails; double screw_horizontal_speed = 0; double RotationsPerSecond; double temp = 0; @@ -361,78 +374,110 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) return ERROR; } - if (SegmentId == 0) // do all this only in the beginning of the job. do not touch after that (assuming spool does not change mid job) + if ((SegmentId == 0)||(SampleWinding)) // do all this only in the beginning of the job. do not touch after that (assuming spool does not change mid job) { - ScrewCurrentDirection = (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize); -/* - // * speed is set by the winding parameters and by winder rotational speed (read POSITION every 10msec) - // * calculate - // * 1. calculate speed according to JobTicket->processparameters->dyeingspeed - // * calculation input: traverse length in milimeters/pulses, number of rotations per traverse ==> length of traverse per rotation. - ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; - ScrewNumberOfSteps -= 100; - screw_horizontal_speed = ScrewNumberOfSteps / InternalWinderCfg.NumberOfRotationPerPassage; - // calculation input#2: number of rotations per second - (basically: speed/winder perimeter. later - according to winder actual speed - calculate according to winder position accumulation in the last second. - //RotationsPerSecond = dyeingspeed / (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulleyradius * PI); - RotationsPerSecond = OriginalMotorSpd_2PPS[WINDER_MOTOR] / MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround; - // calculation input#3: speed = rotation per second * traverse per rotation = traverse per second. speed set: traverse per second (mm) * pulses per mm. - ScrewSpeed = screw_horizontal_speed*RotationsPerSecond; - ScrewSpeed = DEFAULT_SCREW_SPEED; - - //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); - usnprintf(ScrewStr, 100, "SCREW speed Rot/sec %d horizon %d pulses %d",(int)RotationsPerSecond,(int)screw_horizontal_speed,(int)ScrewSpeed); - //REPORT_MSG(segmentfirst_speed,ScrewStr); - Report(ScrewStr,__FILE__,__LINE__,RotationsPerSecond,RpWarning,ScrewSpeed,0); - SendJobProgress(0.0,0,false, ScrewStr); -*/ - // * speed is set by the winding parameters and by winder rotational speed (read POSITION every 10msec) - // * calculate - // * 1. calculate speed according to JobTicket->processparameters->dyeingspeed - // * calculation input: traverse length in pulses, number of rotations per traverse ==> length of traverse per rotation. - ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; - screw_horizontal_speed = InternalWinderCfg.segmentoffsetpulses / InternalWinderCfg.NumberOfRotationPerPassage; //steps per winder cycle - // calculation input#2: number of rotations per second - speed/winder diameter. WE USE HERE 39 MM AS ATHE WINDER DIAMETER - SOME AVERAGE BETWEEN EMPTY AND FULL - RotationsPerSecond = (dyeingspeed*10.0)/(19.50*PI); - // calculation input#3: speed = rotation per second * traverse per rotation = traverse per second. speed set: traverse per second (mm) * pulses per mm. - ScrewSpeed = screw_horizontal_speed*RotationsPerSecond; + ScrewCurrentDirection = 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize; + if ((SegmentId > 0)&&(SampleWinding)) + { + InternalWinderCfg.segmentoffsetpulses = 120; + MotorGotoWithBusyCallback (HARDWARE_MOTOR_TYPE__MOTO_SCREW,true, (InternalWinderCfg.segmentoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep*(SegmentId-1)), WinderSamplesSegmentCallback,2000); //TODO + Report("ScrewsMotorGoTo direction,speed ", __FILE__,__LINE__,InternalWinderCfg.segmentoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep, RpMessage, ScrewSpeed, 0); + InternalWinderCfg.spoolbackingrate = 2000; //no cone for samples + InternalWinderCfg.SpoolBottomBackingRate = 2000; //no cone shape for samples + InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw + JobSegment* Segment = SegmentDetails; + InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw + ScrewSpeed = InternalWinderCfg.segmentoffsetpulses/(((Segment->length *100)/dyeingspeed)/3); + ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; + + //three passages during the segment + } + else if (SampleWinding) //first segment + { + //InternalWinderCfg.segmentoffsetpulses = 120; + InternalWinderCfg.spoolbackingrate = 2000; //no cone for samples + InternalWinderCfg.SpoolBottomBackingRate = 2000; //no cone shape for samples + InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw + JobSegment* Segment = SegmentDetails; + InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw + ScrewSpeed = InternalWinderCfg.segmentoffsetpulses/(((Segment->length *100)/dyeingspeed)/20); + ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; + } + else if ((SegmentId == 0)&&(SampleWinding == false)) + { + /* + // * speed is set by the winding parameters and by winder rotational speed (read POSITION every 10msec) + // * calculate + // * 1. calculate speed according to JobTicket->processparameters->dyeingspeed + // * calculation input: traverse length in milimeters/pulses, number of rotations per traverse ==> length of traverse per rotation. + ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; + ScrewNumberOfSteps -= 100; + screw_horizontal_speed = ScrewNumberOfSteps / InternalWinderCfg.NumberOfRotationPerPassage; + // calculation input#2: number of rotations per second - (basically: speed/winder perimeter. later - according to winder actual speed - calculate according to winder position accumulation in the last second. + //RotationsPerSecond = dyeingspeed / (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulleyradius * PI); + RotationsPerSecond = OriginalMotorSpd_2PPS[WINDER_MOTOR] / MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround; + // calculation input#3: speed = rotation per second * traverse per rotation = traverse per second. speed set: traverse per second (mm) * pulses per mm. + ScrewSpeed = screw_horizontal_speed*RotationsPerSecond; + ScrewSpeed = DEFAULT_SCREW_SPEED; + + //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); + usnprintf(ScrewStr, 100, "SCREW speed Rot/sec %d horizon %d pulses %d",(int)RotationsPerSecond,(int)screw_horizontal_speed,(int)ScrewSpeed); + //REPORT_MSG(segmentfirst_speed,ScrewStr); + Report(ScrewStr,__FILE__,__LINE__,RotationsPerSecond,RpWarning,ScrewSpeed,0); + SendJobProgress(0.0,0,false, ScrewStr); + */ + // * speed is set by the winding parameters and by winder rotational speed (read POSITION every 10msec) + // * calculate + // * 1. calculate speed according to JobTicket->processparameters->dyeingspeed + // * calculation input: traverse length in pulses, number of rotations per traverse ==> length of traverse per rotation. + ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; + screw_horizontal_speed = InternalWinderCfg.segmentoffsetpulses / InternalWinderCfg.NumberOfRotationPerPassage; //steps per winder cycle + // calculation input#2: number of rotations per second - speed/winder diameter. WE USE HERE 39 MM AS ATHE WINDER DIAMETER - SOME AVERAGE BETWEEN EMPTY AND FULL + RotationsPerSecond = (dyeingspeed*10.0)/(19.50*PI); + // calculation input#3: speed = rotation per second * traverse per rotation = traverse per second. speed set: traverse per second (mm) * pulses per mm. + ScrewSpeed = screw_horizontal_speed*RotationsPerSecond; + ScrewNumberOfSteps -= 100; + Add100 = false; + LOG_ERROR(Add100, "Add100 = false"); + } usnprintf(ScrewStr, 100, "SCREW speed Rot/sec %d horizon %d pulses %d",(int)RotationsPerSecond*100,(int)screw_horizontal_speed*100,(int)ScrewSpeed); //REPORT_MSG(segmentfirst_speed,ScrewStr); Report(ScrewStr,__FILE__,__LINE__,RotationsPerSecond,RpWarning,ScrewSpeed,0); SendJobProgress(0.0,0,false, ScrewStr); - ScrewNumberOfSteps -= 100; + ScrewDirectionChangeCounter = 1; + CalculationDirectionChangeCounter = 1; + memset (WinderMotorSpeed,0,sizeof(WinderMotorSpeed) ); + WinderMotorSpeedCounter=0; + TotalWinderSpeed = 0; + WinderMotorSpeedRollOver=false; /////////////////////// CurrentControlledSpeed[SCREW_MOTOR] = ScrewSpeed; OriginalMotorSpd_2PPS[SCREW_MOTOR] = ScrewSpeed; WinderReferenceSpeed = OriginalMotorSpd_2PPS[WINDER_MOTOR]; //screw_horizontal_speed = InternalWinderCfg.milimetersperrotation - // * 2. determine optimal micro-step setting - // * 3. calculate cart travel length from winding parameters - // * 4. start move of travel length - // * 5. register motor nBusy callback. this callback will flip between move(traverse length, hardstop) and goto(0), with handline og the coneshape and adjusting maxspeed + // * 2. determine optimal micro-step setting + // * 3. calculate cart travel length from winding parameters + // * 4. start move of travel length + // * 5. register motor nBusy callback. this callback will flip between move(traverse length, hardstop) and goto(0), with handline og the coneshape and adjusting maxspeed temp = SYS_CLK_FREQ; temp *= ScrewNumberOfSteps; temp /= ScrewSpeed; ScrewRunningTime = temp;//(SYS_CLK_FREQ*InternalWinderCfg.segmentoffsetpulses)/ScrewSpeed; - REPORT_MSG(ScrewNumberOfSteps,"Winder pre segment - ScrewNumberOfSteps"); - REPORT_MSG(ScrewRunningTime,"Winder pre segment - ScrewRunningTime"); -// MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); + REPORT_MSG((int)ScrewNumberOfSteps,"Winder pre segment - ScrewNumberOfSteps"); + REPORT_MSG((int)ScrewRunningTime,"Winder pre segment - ScrewRunningTime"); + //MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); //ScrewDirection = 1-ScrewDirection; REPORT_MSG(SegmentId,"Winder pre segment - SegmentId"); REPORT_MSG(ScrewSpeed,"Winder pre segment - ScrewSpeed"); //MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); ScrewsStartControlTimer (); - ScrewControlId = AddControlCallback(Screw100msecDirectionChange, eHundredMillisecond,TemplateDataReadCBFunction,0,0,0); - ScrewDirectionChangeCounter = 1; - CalculationDirectionChangeCounter = 1; - memset (WinderMotorSpeed,0,sizeof(WinderMotorSpeed) ); - WinderMotorSpeedCounter=0; - TotalWinderSpeed = 0; - WinderMotorSpeedRollOver=false; - Add100 = false; - LOG_ERROR(Add100, "Add100 = false"); } + if (SegmentId == 0) + { + ScrewControlId = AddControlCallback(Screw100msecDirectionChange, eHundredMillisecond,TemplateDataReadCBFunction,0,0,0); + } PreSegmentReady(Module_Winder,ModuleDone); return OK; @@ -560,6 +605,7 @@ void ScrewTimerInterrupt(int ARG0) TimerDisable(Screw_timerBase, TIMER_A); } ROM_IntMasterEnable(); + //Report("ScrewsStartControlTimer direction,speed ", __FILE__,__LINE__,ScrewCurrentDirection, RpMessage, ScrewSpeed, 0); //MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); //Rotations+=0.03; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 9d773c1af..81fa33ef2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -42,7 +42,7 @@ uint32_t LoadDancerConfigMessage(void); //uint32_t MotorPidRequestMessage(HardwarePidControl* request); uint32_t Winder_Init(void); -uint32_t Winder_Prepare(void); +uint32_t Winder_Prepare(void *JobDetails); uint32_t Winder_Presegment(void *JobDetails, uint32_t SegmentId); uint32_t WinderDistanceToSpoolState(void ); uint32_t Winder_End(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index b741f33f3..529e4d260 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -17,6 +17,7 @@ #include "Common/SWUpdate/FileSystem.h" #include "drivers/Flash_Memory/fatfs/ff.h" #include "drivers/SSI_Comm/Dancer/Dancer.h" +#include "drivers/Flash_ram/FlashProgram.h" #include "thread.h" MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS]={0}; @@ -151,6 +152,12 @@ uint32_t StoreDancerConfigMessage() response_size = hardware_configuration__pack(&DancerConfig, response_buffer); } Fresult = FileWrite(response_buffer,response_size,DancerConfigPath); + EraseFlashSection(DANCERS_MAP_IN_FLASH,1024); + for (Dancer_i = 0; Dancer_i < MAX_SYSTEM_DANCERS; Dancer_i++) + { + ReadAppAndProgram(DANCERS_MAP_IN_FLASH, sizeof(Dancers), Dancers); + } + my_free(response_buffer); return Fresult; @@ -163,6 +170,9 @@ uint32_t LoadDancerConfigMessage() HardwareConfiguration *DancerConfig; int Dancer_i; + HardwareDancer DancersCfg1[MAX_SYSTEM_DANCERS] = {0}; + + memcpy(DancersCfg1,(void *)DANCERS_MAP_IN_FLASH,sizeof(DancersCfg1)); Fresult = FileRead(DancerConfigPath, &Bytes, &buffer); if (Fresult == FR_OK) @@ -175,6 +185,12 @@ uint32_t LoadDancerConfigMessage() hardware_configuration__free_unpacked(DancerConfig,NULL); free (buffer); } + + if (DancersCfg[0].zeropoint != DancersCfg1[0].zeropoint) LOG_ERROR(DancersCfg[0].zeropoint,"DancersMismatch"); + else if (DancersCfg[1].zeropoint != DancersCfg1[1].zeropoint) LOG_ERROR(DancersCfg[1].zeropoint,"DancersMismatch"); + else if (DancersCfg[2].zeropoint != DancersCfg1[2].zeropoint) LOG_ERROR(DancersCfg[2].zeropoint,"DancersMismatch"); + else LOG_ERROR(DancersCfg[0].zeropoint,"Dancers Match!!"); + return Fresult; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index b9a28fe57..d0124fcc0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -780,6 +780,11 @@ void SetOriginMotorSpeed(float process_speed) MotorSpeedSamples[Motor_i][i] = motor_speed; } } +void ThreadPreSegmentEnded(void) +{ + REPORT_MSG (0,"First ThreadPreSegmentEnded"); + PreSegmentReady(Module_Thread,ModuleDone); +} //******************************************************************************************************************** uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) @@ -834,6 +839,14 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) PreSegmentState = true; DTSState = false; } + else if ((InitialProcess==true) && (SampleWinding == true)) + { + ThreadUpdateProcessLength (dryerbufferlength,(void *)ThreadPreSegmentEnded); + REPORT_MSG (dryerbufferlength," ThreadPreSegmentState DTS length (sample)"); + SegmentState = false; + PreSegmentState = true; + DTSState = false; + } else { ThreadUpdateProcessLength (0,(void *)NULL); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 9c0c822ae..f552636cd 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -218,7 +218,7 @@ static ReturnCode PrepareState(void *JobDetails) } if (Configured[Module_Winder]) { - if( Winder_Prepare()!= OK) + if( Winder_Prepare(CurrentJob)!= OK) { SendJobProgress(0.0, 0, false, "Winder prepare failed !!!!"); } @@ -388,13 +388,13 @@ uint32_t ThreadJoggingFunc(int speed) Ticket.segments = my_malloc(sizeof(Ticket.segments)); TSegment = my_malloc(sizeof(JobSegment)); Tspool = my_malloc(sizeof(JobSpool)); - TSegment->length = 5000.0; + TSegment->length = 200.0; TSegment->n_brushstops = 0; Ticket.segments[0] = TSegment; - Tspool->backingrate = 30; - Tspool->bottombackingrate = 18; + Tspool->backingrate = 32; + Tspool->bottombackingrate = 32; Tspool->segmentoffsetpulses = 1000; - Tspool->startoffsetpulses = 240; + Tspool->startoffsetpulses = 220; Tspool->rotationsperpassage = 3.1415926*2; Ticket.spool = Tspool; CurrentJob = &Ticket; @@ -640,6 +640,10 @@ void JobRequestFunc(MessageContainer* requestContainer) if (JobAlarmReason ==OK) { n_unit_segments = n_segments; + if ((Ticket->has_units)&&(Ticket->units > 1)) + { + n_units = Ticket->units; + } if (n_units>1) { n_segments = n_segments*n_units; -- cgit v1.3.1 From fa3f933179443f7f50b321e1730f363ae60a6c14 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 27 Jun 2019 19:02:38 +0300 Subject: Embedded SW Release note - Version 1.4.1.0 ============================================================= Move to length calculation FROM PULLER fix intersegment handling FLASH - rebuilt. using data from flash instead of FFS DFU fixed. Heaters handling fixed. job starts only in proximity to requested temperature --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Common/Utilities/Update.c | 7 + .../Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c | 4 +- .../Drivers/I2C_Communication/DAC/Blower.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 7 +- .../Embedded/Drivers/Motors/MotorActions.c | 1 + .../Embedded/Drivers/USB_Communication/USBCDCD.c | 5 +- .../Embedded/Drivers/USB_Communication/USBCDCD.h | 2 + .../Embedded/Drivers/flash_ram/FlashProgram.c | 1 - .../Embedded/Drivers/flash_ram/FlashProgram.h | 7 +- Software/Embedded_SW/Embedded/Embedded.cfg | 2 +- Software/Embedded_SW/Embedded/Main.c | 10 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 37 +++- .../Embedded/Modules/AlarmHandling/AlarmHandling.h | 3 + .../Embedded/Modules/General/GeneralHardware.c | 206 ++++++++++++++++----- .../Embedded/Modules/General/GeneralHardware.h | 1 + .../Embedded_SW/Embedded/Modules/General/process.c | 31 +++- .../Embedded/Modules/Heaters/Heaters_print.c | 41 +++- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 52 +++++- .../Embedded/Modules/Stubs_Handler/Progress.c | 8 + .../Embedded/Modules/Thread/Thread_Winder.c | 4 +- .../Embedded/Modules/Thread/Thread_ex.h | 1 + .../Embedded/Modules/Thread/Thread_print.c | 88 +++++++-- .../Embedded/Software Release Notes.txt | 8 + .../Embedded/StateMachines/Printing/JobSTM.c | 10 + 25 files changed, 428 insertions(+), 112 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 f0ee0af19..7fbc9acc8 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,0,9}; +TangoVersion_t _gTangoVersion = {1,4,1,0}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Update.c b/Software/Embedded_SW/Embedded/Common/Utilities/Update.c index 422c1632b..c2aad92f1 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/Update.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Update.c @@ -31,6 +31,13 @@ void UpdateUsb(void) // Disable all interrupts. // ROM_IntMasterDisable(); +#ifdef WATCHDOG + //ROM_WatchdogResetDisable(WATCHDOG0_BASE); + //ROM_WatchdogReloadSet(WATCHDOG0_BASE, 120000000*35); +#endif + ControlStop(); + MillisecStop(); + HeatersEnd(); // // Disable SysTick and its interrupt. diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c index fcf055b53..5aea18994 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c @@ -31,7 +31,7 @@ uint32_t MidTank_Pressure_Bits[8];//just for debug static uint8_t Config_Buf[3]; -static double MidThankReadingOffset = 0; +//static double MidThankReadingOffset = 0; uint32_t I2C_ADC_Config(uint32_t I2C_Slave_Add,uint32_t channel ) { @@ -125,7 +125,7 @@ double Calculate_Pressure(uint32_t VsampleInBits ) void MidTankPressureCorrection(double Offset) { - MidThankReadingOffset = Offset; + //MidThankReadingOffset = Offset; } double Calculate_Pressure(uint32_t VsampleInBits )//MidTank diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c index 6ee02783d..1cbd88f3b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c @@ -23,6 +23,7 @@ #include "drivers/I2C_Communication/I2C.h" #include "Blower.h" #include "modules/control/control.h" +#include "drivers/FPGA/FPGA.h" DAC_Union DAC; @@ -237,7 +238,6 @@ uint32_t Cancel_Gradual_Increase_Blower(uint32_t Initial_mV) ////////////////////////////////////////////////////////////////////////////////////////// -#include "drivers/FPGA/FPGA.h"; extern SCREW_ENC Screw_RotEnc; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index 2802d2e95..c9a3a4f38 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -20,8 +20,8 @@ #define TimerMotors_t HardwareMotorType -#define NUM_OF_MOTORS (HARDWARE_MOTOR_TYPE__MOTO_SPARE3_1 + 1) // TODO After the integration with mulbery change to: -//#define NUM_OF_MOTORS HARDWARE_MOTOR_TYPE__MOTO_SPARE1_1 +//#define NUM_OF_MOTORS (HARDWARE_MOTOR_TYPE__MOTO_RLOADING + 1) // TODO After the integration with mulbery change to: +#define NUM_OF_MOTORS HARDWARE_MOTOR_TYPE__MOTO_SPARE3_1+1 #define MINIMAL_MOTOR_SPEED 0.2 //typedef enum @@ -184,6 +184,9 @@ uint32_t MotorMove(TimerMotors_t _motorId,bool direction, uint32_t Steps); uint32_t MotorMoveWithCallback (TimerMotors_t _motorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout); uint32_t MotorGotoWithCallback (TimerMotors_t MotorId, uint32_t Steps, uint32_t LimitSwitchId,callback_fptr callback,uint32_t timeout); //TODO +uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout); //TODO + +uint32_t MotorGoToDir(TimerMotors_t _motorId,bool direction, uint32_t Steps); bool MotorControlGetnBusyState(uint32_t _motorId, uint32_t parameter); diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index b394a4391..a190730cb 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -431,6 +431,7 @@ uint32_t MotorMoveToLimitSwitchCallBackFunction(uint32_t IfIndex, uint32_t Limit } else { + REPORT_MSG(MotorId,"Motor at limit"); MotorStop(MotorId,Hard_Hiz); //TODO in run time limit switch just reverse direction } diff --git a/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c b/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c index 56e695ca4..b7a6fb67e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c +++ b/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.c @@ -455,12 +455,9 @@ DFUDetachCallback(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgData, // // Release updateSem // - ControlStop(); - MillisecStop(); + UpdateFlag = true; Semaphore_post(updateSem); - ROM_WatchdogResetDisable(WATCHDOG0_BASE); - //ROM_WatchdogReloadSet(WATCHDOG0_BASE, 120000000*90); } diff --git a/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.h b/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.h index 93719ab3e..95ce37568 100644 --- a/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.h +++ b/Software/Embedded_SW/Embedded/Drivers/USB_Communication/USBCDCD.h @@ -77,6 +77,8 @@ void USBCDCD_Reinit(void); void USBCDCD_hwiHandler(UArg arg0); +extern bool UpdateFlag; + //bool SendChars(char* buffer,size_t length); #ifdef __cplusplus } diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index ac1cff75e..f2f5aefb6 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -108,7 +108,6 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b // return(1); } -#warning flash erase is now done only in init. should consider adding before config changes uint32_t EraseFlashSection(uint32_t ui32FlashStart,uint32_t ui32FileSize) { volatile uint32_t ui32Idx; diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h index b5c0e7373..68b6dc2c5 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.h @@ -10,10 +10,11 @@ #define FLASH_RAM_BASE 0x000D0000 -#define MOTOR_MAP_IN_FLASH (FLASH_RAM_BASE + 0X0000 ) +#define EMBEDDED_PARAMETERS_MAP_IN_FLASH (FLASH_RAM_BASE + 0X0000 ) +#define PROCESS_PARAMETERS_MAP_IN_FLASH (FLASH_RAM_BASE + 0X0400 ) +#define DANCERS_MAP_IN_FLASH (FLASH_RAM_BASE + 0X0500) +#define DISPENSERS_MAP_IN_FLASH (FLASH_RAM_BASE + 0X1000) #define ALARM_MAP_IN_FLASH (FLASH_RAM_BASE + 0X2000 ) -#define JOB_MAP_IN_FLASH (FLASH_RAM_BASE + 0X4000 ) -#define DANCERS_MAP_IN_FLASH (FLASH_RAM_BASE + 0XA000) #define GENHWCFG_MAP_IN_FLASH (FLASH_RAM_BASE + 0X10000) #define OTHER_MAP_IN_FLASH (FLASH_RAM_BASE + 0X12000) diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index c50a0057a..a0b853ec8 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -86,7 +86,7 @@ Program.global.ReconnectSem = Semaphore.create(null, semaphore7Params); var MillisecTaskParams = new Task.Params(); MillisecTaskParams.instance.name = "MilliSecond"; -MillisecTaskParams.stackSize = 2048; +MillisecTaskParams.stackSize = 4096; MillisecTaskParams.priority = 12; Program.global.millisec = Task.create("&MillisecTask", MillisecTaskParams); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index a4cee031d..ba4b3ebf0 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -108,14 +108,14 @@ F3_GPO_01_REG F3_GPO_01_Reg; Types_Site *site; Error_Id eid; int eCode; - +char ErrorPath[50] = "0://ErrFile.txt"; +bool UpdateFlag = false; /* ======== errHook ======== */ Void errHook(Error_Block *eb) { FRESULT Fresult = FR_OK; FIL *FileHandle = 0; //the system supports a single active file uint32_t Bytes = 0; - char ErrorPath[50] = "0://ErrFile.txt"; char File[50] = ""; char message[300]; int len; @@ -128,6 +128,8 @@ Void errHook(Error_Block *eb) ACTIVITY_RED_LED_ON; COMM_RED_LED_ON; + if (UpdateFlag == true) + return; site = Error_getSite(eb); eid = Error_getId(eb); eCode = Error_getCode(eb); @@ -250,6 +252,7 @@ int main(void) InitWatchdog(ui32SysClock*10); #endif + //FlashInitAndLoad(); CommunicationTaskInit(); utilsInit(ui32SysClock); @@ -276,9 +279,6 @@ int main(void) //IDS_ModuleInit(); Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); -#ifndef FPGA_WATCHDOG - Control_WD(DISABLE,0); -#endif //////////////////////////// diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index b651f2448..d81b75529 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -24,9 +24,9 @@ #include "drivers/FPGA/FPGA_SPI_Comm.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/FPGA.h" -#include "PMR/Hardware/HardwareDancerType.pb-c.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "drivers/I2C_Communication/Dispenser_Card/IO_Ports/Dispenser_IO.h" +#include "Common/SWUpdate/FileSystem.h" #include "modules/thread/thread_ex.h" #include "modules/heaters/heaters_ex.h" @@ -38,6 +38,8 @@ #include #include +#include + #include #include #include @@ -347,7 +349,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ }; -char AlarmStorePath[25] ="0://SysInfo//AlarmPrm.cfg"; +char AlarmStorePath[30] ="0://SysInfo//AlarmPrm.cfg"; //bool DispenserInUse[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; bool EventsNotificationRequestAccepted = false; @@ -361,6 +363,30 @@ bool EventsNotificationRequestAccepted = false; //valve OCD //Motor Status //machine cover open +uint32_t AlarmHandlingFlashLoad(void) +{ + +// EraseFlashSection(ALARM_MAP_IN_FLASH,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); + ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem); +// LOG_ERROR(AlarmItem[2].EventName,"Flash Test"); + + return sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS; +} +uint32_t AlarmHandlingLoadFile(void) +{ + FRESULT Fresult = FR_OK; + uint8_t* buffer = NULL; + uint32_t Bytes = 0; + + Fresult = FileRead(AlarmStorePath, &Bytes, &buffer); + if (Fresult == FR_OK) + { + ReadAppAndProgram(AlarmItem, Bytes,buffer); + free (buffer); + } + return Bytes; +} + void AlarmHandlingInit(void) { Error_Block eb; @@ -378,9 +404,8 @@ void AlarmHandlingInit(void) } AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH; -// EraseFlashSection(ALARM_MAP_IN_FLASH,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); - ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem); -// LOG_ERROR(AlarmItem[2].EventName,"Flash Test"); + + //AlarmHandlingFlashLoad(); return; } @@ -758,6 +783,8 @@ uint32_t AlarmHandlingLoop(uint32_t tick) for (Alarm_i = 0;Alarm_i < MAX_SYSTEM_ALARMS;Alarm_i++) { Status = false; + if (AlarmItem[Alarm_i].AlarmSource > ALARM_SOURCE_TYPE__FluidLevelAlarm) + continue; if (tick%AlarmItem[Alarm_i].Frequency == 0) { switch (AlarmItem[Alarm_i].AlarmSource) diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h index 09dfa3f3d..392b31afc 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h @@ -9,6 +9,9 @@ #define MODULES_ALARMHANDLING_ALARMHANDLING_H_ #include "StateMachines/Printing/PrintingSTM.h" +uint32_t AlarmHandlingFlashLoad(void); +uint32_t AlarmHandlingLoadFile(void); + uint32_t AlarmHandling_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); //uint32_t AlarmHandling_CalculateTemperatures(uint32_t SensorId, uint32_t Data); diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 2d64c8515..23009d7fb 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -34,6 +34,10 @@ #include "PMR/Hardware/SystemResetRequest.pb-c.h" #include "PMR/Hardware/SystemResetResponse.pb-c.h" +#include "PMR/Printing/ProcessParameters.pb-c.h" +#include "PMR/Printing/UploadProcessParametersRequest.pb-c.h" +#include "PMR/Printing/UploadProcessParametersResponse.pb-c.h" + #include "drivers/I2C_Communication/DAC/Blower.h" #include "drivers/Valves/Valve.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" @@ -55,30 +59,14 @@ HardwareBlower BlowerCfg; char *SW_INFO_DIR = "0://SysInfo"; char HwConfigPath[50] = "0://SysInfo//GenHwCfg.cfg"; -uint32_t HWConfigurationInit(void) +void *HWConfigurationLoadFromFile( uint32_t *NumOfBytes) { FRESULT Fresult = FR_OK; FIL *FileHandle = 0; //the system supports a single active file uint8_t* buffer = NULL; - void* buffer1 = NULL; uint32_t Bytes = 0,i,j,k=0; - uint32_t status = OK; - UploadHardwareConfigurationRequest* UploadRequest=0; - GeneralHwReady = false; - Control_WD(ENABLE,250); - - memcpy(&Bytes,(void *)GENHWCFG_MAP_IN_FLASH,sizeof(Bytes)); - - if ((Bytes)&&(Bytes < 4000)) - { - buffer1 = my_malloc (Bytes); - if (buffer1) - { - memcpy(buffer1, (void *)(GENHWCFG_MAP_IN_FLASH+4),Bytes); - UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer1); - } - } + *NumOfBytes = 0; Fresult = f_mkdir(SW_INFO_DIR); if ((Fresult == FR_OK)||(Fresult == FR_EXIST)) { @@ -96,32 +84,68 @@ uint32_t HWConfigurationInit(void) k+=j; } if (k!=Bytes) + { LOG_ERROR(k,"File read error"); + free (buffer); + buffer = NULL; + } + else + *NumOfBytes = Bytes; } - Fresult= memcmp(buffer,buffer1,Bytes); - UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer); - status = HWConfiguration(UploadRequest); - if (status ==OK) - { - upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); - //EraseFlashSection(GENHWCFG_MAP_IN_FLASH,Bytes+4); - //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,Bytes); - //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); - } - else - { - SetMachineState(MACHINE_STATE_HW_CONFIG_FAILED); - } - free (buffer); } f_close(FileHandle); + free (FileHandle); + } + + return buffer; +} + +uint32_t HWConfigurationInit(void) +{ + void* buffer1 = NULL; + uint32_t status = OK; + UploadHardwareConfigurationRequest* UploadRequest=0; + uint8_t* buffer = NULL; + uint32_t Bytes = 0; + + GeneralHwReady = false; + Control_WD(ENABLE,250); + + memcpy(&Bytes,(void *)GENHWCFG_MAP_IN_FLASH,sizeof(Bytes)); + + if ((Bytes)&&(Bytes < 4000)) + { + buffer1 = my_malloc (Bytes); + if (buffer1) + { + memcpy(buffer1, (void *)(GENHWCFG_MAP_IN_FLASH+4),Bytes); + UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer1); + } + } + //buffer = HWConfigurationLoadFromFile(&Bytes); + //status= memcmp(buffer,buffer1,Bytes); + //UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer); + status = HWConfiguration(UploadRequest); + if (status ==OK) + { + upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); + //EraseFlashSection(GENHWCFG_MAP_IN_FLASH,Bytes+4); + //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,Bytes); + //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); + } + else + { + SetMachineState(MACHINE_STATE_HW_CONFIG_FAILED); } + if (buffer) + free (buffer); + //EmbeddedParametersInit(); IDS_Dispenser_Content_Init(); //ProcessParamsInit(); GeneralHwReady = true; STATUS_RED_LED_OFF; - return Fresult; + return status; } char EmbeddedParametersPath[50] = "0://SysInfo//EmbParam.cfg"; @@ -153,7 +177,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters.has_dispenserbuildpressurespeed = true; EmbeddedParameters.dispenserbuildpressurespeed=500; EmbeddedParameters.has_dispenserbuildpressurelimit = true; - EmbeddedParameters.dispenserbuildpressurelimit=1.5 ; + EmbeddedParameters.dispenserbuildpressurelimit=0.8 ; EmbeddedParameters.has_dispenserbuildpressuretimeout = true; EmbeddedParameters.dispenserbuildpressuretimeout=60000; EmbeddedParameters.has_dispenserbuildpressurelag = true; @@ -174,6 +198,16 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters.startheatingoninitsequence = true; //set to true shlomo 14/5/2019 //size_t n_generalparameters; // EmbeddedParameters.*generalparameters; + EmbeddedParameters.generalparameters = malloc (sizeof(double)*10); + if (EmbeddedParameters.generalparameters) + { + EmbeddedParameters.generalparameters[0] = 1.0; //CheckHardLimitAlarms + EmbeddedParameters.generalparameters[1] = 0.0; //CheckCurrentAlarms + EmbeddedParameters.generalparameters[2] = 0.0; //CheckTamperAlarms + EmbeddedParameters.generalparameters[3] = 800.0; //Winder homing time at end of job + //EmbeddedParameters.generalparameters[4] = 1.0; //Dispenser initial pressure limit + //EmbeddedParameters.generalparameters[5] = 1.0; //Dispenser initial pressure speed + } EmbeddedParameters.has_currentalarmlowlimit = true; EmbeddedParameters.currentalarmlowlimit = 0.80; EmbeddedParameters.has_currentalarmhighlimit = true; @@ -213,29 +247,34 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) FileWrite(response_buffer,response_size,EmbeddedParametersPath); my_free(response_buffer); } - else memcpy (&EmbeddedParameters,Params,sizeof(EmbeddedParameters)); + else + { + memcpy (&EmbeddedParameters,Params,sizeof(EmbeddedParameters)); + } + uint32_t Bytes = sizeof(EmbeddedParameters); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, &EmbeddedParameters); } uint32_t EmbeddedParametersInit(void) { FRESULT Fresult = FR_OK; - void* buffer = NULL; + //void* buffer = NULL; uint32_t Bytes = 0; - //ConfigurationParameters *Params; + ConfigurationParameters *Params; - Fresult = FileRead(EmbeddedParametersPath, &Bytes, &buffer); - /*if (Fresult == FR_OK) + memcpy(&Bytes,(void *)EMBEDDED_PARAMETERS_MAP_IN_FLASH,sizeof(Bytes)); + + if ((Bytes)&&(Bytes < 1000)) { - Params = configuration_parameters__unpack(NULL, Bytes, buffer); - LoadConfigurationParameters(Params); - DataUpdated=true; - free (buffer); - configuration_parameters__free_unpacked(Params,NULL); + Params = (ConfigurationParameters *)(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4); + memcpy (&EmbeddedParameters,Params,sizeof(EmbeddedParameters)); } - else*/ + else { LoadConfigurationParameters(0); } + IDS_Dispenser_SetTimeOutValues(EmbeddedParameters.closevalvetimeout, EmbeddedParameters.openvalvetimeout); IDS_Dispenser_SetBackLashValues(EmbeddedParameters.initialdispenserpressure, EmbeddedParameters.initialdispensertimeout, EmbeddedParameters.initialdispensertimelag); IDS_Dispenser_SetPrepareValues(EmbeddedParameters.dispenserbuildpressurespeed, EmbeddedParameters.dispenserbuildpressurelimit, EmbeddedParameters.dispenserbuildpressuretimeout, EmbeddedParameters.dispenserbuildpressurelag); @@ -481,3 +520,78 @@ void HWSystemResetRequest(MessageContainer* requestContainer) HWREG(NVIC_APINT) = NVIC_APINT_VECTKEY | NVIC_APINT_SYSRESETREQ; } +uint32_t FlashInitResults[5] = {0,0,0,0,0}; +void FlashInitAndLoad(void) +{ + FRESULT Fresult = FR_OK; + uint8_t* buffer = NULL; + uint32_t Bytes = 0; + + ConfigurationParameters *Params = NULL; + ProcessParameters* ProcessParams = NULL; + UploadProcessParametersRequest* request = NULL; + + char ProcessParamsPath[50] = "0://SysInfo//ProcessP.cfg"; + + FlashInit(); //initialize flash + Report("Flash Initialized", __FILE__,__LINE__,FLASH_SIZE, RpMessage, FLASH_RAM_BASE, 0); + + buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config + if (buffer) + { + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); + free (buffer); + FlashInitResults[0] = true; + } + Report("Hardware Initialized", __FILE__,__LINE__,Bytes, RpMessage, GENHWCFG_MAP_IN_FLASH, 0); + + StoreDancerConfigMessage(); + Report("Dancer Initialized", __FILE__,DancersCfg[0].zeropoint,DancersCfg[1].zeropoint, RpMessage, DancersCfg[2].zeropoint, 0); + Bytes = AlarmHandlingLoadFile(); + if (Bytes>0) + { + Report("Alarm Initialized from file", __FILE__,__LINE__,Bytes, RpMessage, ALARM_MAP_IN_FLASH, 0); + } + else + { + Bytes = AlarmHandlingFlashLoad(); + Report("Alarm Initialized hard coded", __FILE__,__LINE__,Bytes, RpMessage, ALARM_MAP_IN_FLASH, 0); + } + + Fresult = FileRead(EmbeddedParametersPath, &Bytes, &buffer); + if (Fresult == FR_OK) + { + Params = configuration_parameters__unpack(NULL, Bytes, buffer); + LoadConfigurationParameters(Params); + free (buffer); + configuration_parameters__free_unpacked(Params,NULL); + FlashInitResults[1] = true; + Report("Parameters Initialized from file", __FILE__,__LINE__,sizeof(EmbeddedParameters), RpMessage, EMBEDDED_PARAMETERS_MAP_IN_FLASH, 0); + } + else + { + LoadConfigurationParameters(0); + FlashInitResults[1] = 2; + Report("Parameters Initialized from default", __FILE__,__LINE__,sizeof(EmbeddedParameters), RpMessage, EMBEDDED_PARAMETERS_MAP_IN_FLASH, 0); + } + Bytes = sizeof(EmbeddedParameters); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, &EmbeddedParameters); + + Fresult = FileRead(ProcessParamsPath, &Bytes, &buffer); + if (Fresult == FR_OK) + { + request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); + ProcessParams = request->processparameters; + Bytes = sizeof(ProcessParams); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, &ProcessParams); + upload_process_parameters_request__free_unpacked(request,NULL); + FlashInitResults[2] = true; + Report("Process Initialized", __FILE__,__LINE__,Bytes, RpMessage, (int)ProcessParams->dryerzone1temp, 0); + } + else + Report("Process not Initialized", __FILE__,__LINE__,0, RpMessage, 0, 0); + +} diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h index 8fdbad42e..86f164977 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h @@ -12,6 +12,7 @@ extern ConfigurationParameters EmbeddedParameters; extern uint32_t HWConfigurationFunc(MessageContainer* requestContainer); extern void HWSystemResetRequest(MessageContainer* requestContainer); uint32_t HWConfigurationInit(void); +void FlashInitAndLoad(void); extern HardwareBlower BlowerCfg; diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index b0351b4ff..aafc1c5a9 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -15,13 +15,16 @@ #include "PMR/Printing/UploadProcessParametersResponse.pb-c.h" #include "PMR/Hardware/HardwarePidControlType.pb-c.h" #include "PMR/common/MessageContainer.pb-c.h" + #include "drivers/Valves/Valve.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" + #include "modules/ids/ids_ex.h" #include "third_party/fatfs/src/ffconf.h" #include "Common/SWUpdate/FileSystem.h" #include "StateMachines/Initialization/PowerIdle.h" +#include "drivers/Flash_ram/FlashProgram.h" double dyeingspeed = 0; @@ -182,11 +185,19 @@ void ProcessRequestFunc(MessageContainer* requestContainer) MessageContainer responseContainer; uint8_t* container_buffer; uint32_t status = 0; + uint32_t Bytes = 0; UploadProcessParametersRequest* request = upload_process_parameters_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ProcessParameters* ProcessParams = request->processparameters; if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters + { FileWrite(requestContainer->data.data, requestContainer->data.len,ProcessParamsConfigPath); + Bytes = sizeof(ProcessParameters); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, ProcessParams); + REPORT_MSG(Bytes,"Bytes wrtie to flash"); + + } //////////////////////////////////////////////////////////////////////// /*UploadProcessParametersRequest* requesttest; uint8_t* buffer = NULL; @@ -229,11 +240,11 @@ void ProcessRequestFunc(MessageContainer* requestContainer) uint32_t ProcessParamsInit(void) { FRESULT Fresult = FR_OK; - FIL *FileHandle = 0; //the system supports a single active file - uint8_t* buffer = NULL; - uint32_t Bytes = 0,i,j,k=0; - UploadProcessParametersRequest* request; - + //FIL *FileHandle = 0; //the system supports a single active file + //uint8_t* buffer = NULL; + uint32_t Bytes;// = 0,i,j,k=0; + //UploadProcessParametersRequest* request; +/* FileHandle = my_malloc(sizeof(FIL)); if (FileHandle) { @@ -270,6 +281,16 @@ uint32_t ProcessParamsInit(void) } my_free (FileHandle); } +*/ + + memcpy(&Bytes,(void *)PROCESS_PARAMETERS_MAP_IN_FLASH,sizeof(Bytes)); + REPORT_MSG(Bytes,"Bytes read from flash"); + + if ((Bytes)&&(Bytes < 1000)) + { + ProcessParameters* ProcessParams = (ProcessParameters *)(PROCESS_PARAMETERS_MAP_IN_FLASH+4); + Fresult = HandleProcessParameters(ProcessParams); + } return Fresult; } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 3ebf56c7f..fe9671657 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -112,6 +112,7 @@ Mailbox_Handle HeatersControlMsgQ = NULL; //bool InitialHeating = true; //bool DCInitialHeating[MAX_HEATERS_NUM] = {true}; bool HeaterReady[MAX_HEATERS_NUM] = {true}; +bool HeaterAtTemp[MAX_HEATERS_NUM] = {true}; uint32_t HeaterPreviousRead[MAX_HEATERS_NUM] = {0,0,0,0,0,0,0,0,0,0}; //A/C Heaters Cycle time in milliseconds - one for all heaters EventType HeaterEventType[MAX_HEATERS_NUM] = {EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_2_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE, EVENT_TYPE__DYEING_HEAD_ZONE_3_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_4_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_5_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_6_OVERTEMPERATURE, @@ -158,6 +159,7 @@ void HeatersControlInit(void) { //DCInitialHeating[i] = true; HeaterReady[i] = true; + HeaterAtTemp[i] = true; HeaterCmd[i].targettemperatue = 0; HeaterCmd[i].command = HEATER_OFF; HeaterCmd[i].heaterid = i; @@ -225,7 +227,7 @@ void LoadHeaterState(HeaterType HeaterType,HeaterState *HeaterState) HeaterState->has_isactive = true; HeaterState->isactive = GetHeaterState(HeaterId); HeaterState->has_isrampingup = true; - HeaterState->isrampingup = 1-HeaterReady[HeaterId]; + HeaterState->isrampingup = 1-HeaterAtTemp[HeaterId]; HeaterState->has_isinsetpoint = true; HeaterState->isinsetpoint = HeaterReady[HeaterId]; if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain) @@ -260,6 +262,7 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) DeActivateHeater(HeaterId); HeaterPIDConfig[HeaterId].m_SetParam = 0; HeaterReady[HeaterId] = true; + HeaterAtTemp[HeaterId] = true; } else if (HeaterId < MAX_AC_HEATERS) //AC Heaters { @@ -289,6 +292,7 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); HeaterPIDConfig[HeaterId].m_SetParam = 0; HeaterReady[HeaterId] = true; + HeaterAtTemp[HeaterId] = true; } AlarmHandlingSetAlarm(HeaterUnderEventType[HeaterId], false); @@ -474,6 +478,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) SecondDryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary),HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary],0); //InitialHeating = true; HeaterReady[HeaterId] = false; + HeaterAtTemp[HeaterId] = false; if (BlowerCfg.enabled == true) { Turn_the_Blower_On();//Turn on with the Default_Voltage @@ -503,6 +508,7 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) //HeaterPIDConfig[HeaterId].m_params.dt *=10; //DCInitialHeating[HeaterId] = true; HeaterReady[HeaterId] = false; + HeaterAtTemp[HeaterId] = false; HeaterRecalculateHeaterParams(HeaterId, 0); //turn all alarms off @@ -593,7 +599,7 @@ bool HeaterCheckReady(void) int i; for (i=0;i (HeaterCmd[index].targettemperatue * AcHeatersLoweroperationLimit/1000))&&(readValue < (HeaterCmd[index].targettemperatue * AcHeatersUpperoperationLimit/1000)))//read value within 0.5 percent from target + { + //InitialHeating = false; + Report("AC Ready",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); + HeaterAtTemp[index] = true; + HeaterPrepareReady(); + } + } if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0)) { HeaterPIDConfig[index].m_mesuredParam = readValue; @@ -1057,13 +1070,21 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) Report("DC PID Activating",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); //DCInitialHeating[index] = false; HeatersControlStart(); - HeaterReady[index] = true; AlarmHandlingSetAlarm(HeaterUnderEventType[index], false); Disable_Reading_Heaters_Current(HeaterId2CurrentId[index]); - HeaterPrepareReady(); + HeaterReady[index] = true; } return OK; } + if (HeaterAtTemp[index] == false) + { + if ((readValue > (HeaterCmd[index].targettemperatue * DcHeatersLoweroperationLimit/1000))&&(readValue < (HeaterCmd[index].targettemperatue * DcHeatersUpperoperationLimit/1000)))//read value within 0.5 percent from target + { + Report("DC Ready",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); + HeaterAtTemp[index] = true; + HeaterPrepareReady(); + } + } if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0)) { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 4cc6eac30..c8836a2b4 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -107,8 +107,8 @@ int lInterSegmentLength = 0; uint32_t IDS_DispenserControlInit() { - DispensersControl = (void *)(DANCERS_MAP_IN_FLASH + 1024); - EraseFlashSection(DispensersControl,sizeof(HardwarePidControl)*MAX_SYSTEM_DISPENSERS); + DispensersControl = (void *)(DISPENSERS_MAP_IN_FLASH); + //EraseFlashSection(DispensersControl,sizeof(HardwarePidControl)*MAX_SYSTEM_DISPENSERS); return OK; } @@ -595,7 +595,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - if (GetDispenserPressure(i) > 0.80) + if (GetDispenserPressure(i) > DispenserPreparePressure) NumofReadyDispensers++; } } @@ -691,8 +691,8 @@ c. Go to step 2.a x Segment.BrushStopsCount. REPORT_MSG((int)NumOfActiveDispensers, "Num Of Active Dispensers"); for (i = 0; i < MAX_DYE_DISPENSERS; i++) { - dispenserspeed = PrepeareSpeed/MotorsCfg[DispenserIdToMotorId[i]].microstep; - dispenserspeed = 480; + //dispenserspeed = PrepeareSpeed/MotorsCfg[DispenserIdToMotorId[i]].microstep; + dispenserspeed = DispenserPrepareSpeed; //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { @@ -851,9 +851,10 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); segmentfirst_speed /= 100; DispenserSegmentReady[DispenserId] = false; //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer - IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId, - segmentfirst_speed, - NULL); + //IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed,NULL); + MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); + CurrentDispenserSpeed[Dispenser_i] = segmentfirst_speed; + usnprintf(IdsMessage, 80, "WFCF Dispenser %d nl/sec %d nl/pulse %d speed %d", DispenserId, @@ -952,6 +953,37 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) InterSegmentStartWFCFDispensers = lInterSegmentLength-5000; } } + /*if (SegmentId == 0)//first segment - running the DTS out of the drier + { + Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); //if intersegment is defined throw the ink away + for (Dispenser_i = 0; Dispenser_i < MAX_SYSTEM_DISPENSERS; Dispenser_i++) + { + HW_Motor_Id = DispenserIdToMotorId[Dispenser_i]; + //MotorStop(HW_Motor_Id,Hard_Hiz); //26/03/19 test without valves + if (DispenserUsedInJob[Dispenser_i]==true)//unconfigured dispenser + { + MotorStop(HW_Motor_Id, Soft_Hiz); + CurrentDispenserSpeed[Dispenser_i] = 0; + } + } + lInterSegmentLength = ((dryerbufferlength*100)*1000/dyeingspeed); + lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication + InterSegmentStepsCount = 0; + DispenserPreSegmentControlId = AddControlCallback( IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); + if (DispenserPreSegmentControlId == 0xFF) + { + Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0); + return ERROR; + } + Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)dryerbufferlength,0); + if (EnableCleaning == true) + { + InterSegmentStartSprayCleaner = 500; + InterSegmentStartRocking = 1000; + InterSegmentCenterRockers = 3000; + } + InterSegmentStartWFCFDispensers = lInterSegmentLength-5000; + }*/ if (uploadstrategy == JOB_UPLOAD_STRATEGY__Default) { @@ -1017,8 +1049,10 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) } if ((EnableIntersegment == true)&&(IntersegmentLength>0)) { - MotorStop(HW_Motor_Id,Hard_Hiz); //26/03/19 test without valves + MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves CurrentDispenserSpeed[DispenserId] = 0; + //MotorSetSpeed(HW_Motor_Id, 5); + //CurrentDispenserSpeed[Dispenser_i] = 5; DispenserPreSegmentReady[DispenserId] = true; //27/03/19 check if job should be stopped REPORT_MSG(DispenserId,"Dispenser stopped pre Segment"); } diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 5d50a21c7..1420f7b97 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -51,6 +51,14 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.progress = (double)Calculate_Gas_Power_Consumption(); response.has_progress = true; + } + else + if((request->amount == 0x0CE) && (request->delay == 0x0CE)) //Get Gas Sensor + { + FlashInitAndLoad(); + response.progress = (double)OK; + response.has_progress = true; + } else if((request->amount == 0xDF) && (request->delay == 0xDF)) //Power off { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 4f6585f2a..8943e5d30 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -36,6 +36,7 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue); void ScrewTimerInterruptInit(void); void ScrewsStopControlTimer (void); void ScrewsStartControlTimer (void); +void ScrewTimerInterrupt(int); bool Winder_ScrewHoming = false; bool ScrewCurrentDirection = false; //holds current screw direction @@ -361,6 +362,7 @@ uint32_t WinderPresegmentReady(uint32_t deviceID, uint32_t ReadValue) uint32_t WinderSamplesSegmentCallback(uint32_t SegmentDetails, uint32_t SegmentId) { ScrewTimerInterrupt(0); + return OK; } uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) @@ -381,7 +383,7 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) { InternalWinderCfg.segmentoffsetpulses = 120; MotorGotoWithBusyCallback (HARDWARE_MOTOR_TYPE__MOTO_SCREW,true, (InternalWinderCfg.segmentoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep*(SegmentId-1)), WinderSamplesSegmentCallback,2000); //TODO - Report("ScrewsMotorGoTo direction,speed ", __FILE__,__LINE__,InternalWinderCfg.segmentoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep, RpMessage, ScrewSpeed, 0); + Report("ScrewsMotorGoTo direction,speed ", __FILE__,__LINE__,InternalWinderCfg.segmentoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep*(SegmentId-1), RpMessage, ScrewSpeed, 0); InternalWinderCfg.spoolbackingrate = 2000; //no cone for samples InternalWinderCfg.SpoolBottomBackingRate = 2000; //no cone shape for samples InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 81fa33ef2..167616afe 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -22,6 +22,7 @@ typedef enum threadMotorsEnum }threadMotorsEnum; extern double TotalProcessedLength; +extern double PoolerTotalProcessedLength; 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 d0124fcc0..5efc3798e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -67,6 +67,7 @@ double PoolerLengthCalculationMultiplier; double TempPoolerTotalProcessedLength = 0.0; double TempTotalProcessedLength = 0.0; +bool InitialProcess = false; bool PrepareState = false; // job parameters bool EnableLubrication = false; @@ -148,10 +149,12 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) double length = 0.0; int index = MAX_THREAD_MOTORS_NUM; - // if (ThreadControlActive == false) - // return OK; - // if (PrepareState == true) - // return OK; +#ifndef FEEDER_LENGTH_CALCULATION + if (ThreadControlActive == false) + return OK; + if (PrepareState == true) + return OK; +#endif if (IfIndex>>8 != IfTypeThread) { LOG_ERROR (IfIndex, "Wrong Interface type"); @@ -194,13 +197,14 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) } } + TotalProcessedLength += (length/100); + TempTotalProcessedLength = TotalProcessedLength; +#ifdef FEEDER_LENGTH_CALCULATION CurrentProcessedLength+=length; - static int pooler_counter = 0; - pooler_counter++; - TotalProcessedLength+= (length/100); - TempTotalProcessedLength = TotalProcessedLength; - if (pooler_counter%10 == 0) + static int feeder_counter = 0; + feeder_counter++; + if (feeder_counter%10 == 0) { if (PrepareState == true) { @@ -225,18 +229,22 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) ProcessedLengthFuncPtr(); } -return OK; +#endif + + return OK; } uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { - uint32_t positionDiff = 0; + uint32_t positionDiff = 0,prevprev; double length = 0.0; int index = MAX_THREAD_MOTORS_NUM; +#ifdef FEEDER_LENGTH_CALCULATION if (ThreadControlActive == false) return OK; if (PrepareState == true) return OK; +#endif if (IfIndex>>8 != IfTypeThread) { LOG_ERROR (IfIndex, "Wrong Interface type"); @@ -258,13 +266,56 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) PoolerPreviousPosition = PoolerCurrentPosition; Poolerinitialpos = 0; } + prevprev = PreviousPosition; positionDiff = Control_Delta_Position_Pass(PoolerCurrentPosition,PoolerPreviousPosition); //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; PoolerPreviousPosition = PoolerCurrentPosition; length = (double)(positionDiff)*PoolerLengthCalculationMultiplier; - PoolerTotalProcessedLength+= (length/100); - TempPoolerTotalProcessedLength = PoolerTotalProcessedLength; + //if (InitialProcess == false) + { + PoolerTotalProcessedLength+= (length/100); + TempPoolerTotalProcessedLength = PoolerTotalProcessedLength; + } + if (length > 1000) + { + usnprintf(Lenstr, 100, "pooler length huge: length %d, diff 0x%x, pos 0x%x prev 0x%x",(int)length*100,(int)positionDiff,PreviousPosition,prevprev); + SendJobProgress(0.0,0,false, Lenstr); + Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + length = 0; + + } +#ifndef FEEDER_LENGTH_CALCULATION + CurrentProcessedLength+=length; + + static int puller_counter = 0; + puller_counter++; + if (puller_counter%10 == 0) + { + if (PrepareState == true) + { + //later - add temperatures + TemperatureListString(Lenstr); + + SendJobProgress(0.0,0,false, Lenstr); + } + else + { + SendJobProgress(PoolerTotalProcessedLength,0,false, NULL); + } + + } + if ((CurrentProcessedLength>=CurrentRequestedLength )&&(CurrentRequestedLength > 0.0)) + { + usnprintf(Lenstr, 100, "Total processed length: Feeder: %d Pooler %d",(int)TotalProcessedLength,(int)PoolerTotalProcessedLength); + SendJobProgress(0.0,0,false, Lenstr); + Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + // segment/intersegment/distance to spool finished + if (ProcessedLengthFuncPtr) + ProcessedLengthFuncPtr(); + + } +#endif return OK; } @@ -632,7 +683,6 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) ThreadPreSegmentState(request,0); return OK; } -bool InitialProcess = false; //******************************************************************************************************************** uint32_t ThreadPrepareState(void *JobDetails) @@ -782,6 +832,7 @@ void SetOriginMotorSpeed(float process_speed) } void ThreadPreSegmentEnded(void) { + InitialProcess = false; REPORT_MSG (0,"First ThreadPreSegmentEnded"); PreSegmentReady(Module_Thread,ModuleDone); } @@ -839,14 +890,14 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) PreSegmentState = true; DTSState = false; } - else if ((InitialProcess==true) && (SampleWinding == true)) + /*else if (InitialProcess==true) { ThreadUpdateProcessLength (dryerbufferlength,(void *)ThreadPreSegmentEnded); REPORT_MSG (dryerbufferlength," ThreadPreSegmentState DTS length (sample)"); SegmentState = false; PreSegmentState = true; DTSState = false; - } + }*/ else { ThreadUpdateProcessLength (0,(void *)NULL); @@ -906,7 +957,12 @@ uint32_t ThreadDistanceToSpoolState(void ) { seglength = dryerbufferlength; REPORT_MSG (seglength,"ThreadDistanceToSpoolState"); +//#ifdef FEEDER_LENGTH_CALCULATION ThreadUpdateProcessLength (seglength,(void *)ThreadDistanceToSpoolEnded); +/*#else + ThreadUpdateProcessLength (0,(void *)NULL); //move DTS to job start + DistanceToSpoolReady(Module_Thread,ModuleDone); +#endif*/ SegmentState = false; PreSegmentState = false; DTSState = true; diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index ac5fb1b21..a03ab04b0 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,11 @@ +Embedded SW Release note - Version 1.4.1.0 +============================================================= +Move to length calculation FROM PULLER +fix intersegment handling +FLASH - rebuilt. using data from flash instead of FFS +DFU fixed. +Heaters handling fixed. job starts only in proximity to requested temperature + Embedded SW Release note - Version 1.4.0.9 ============================================================= Drivers: diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index f552636cd..b33bf09c1 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -763,6 +763,7 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes } //previousJobLength = ProcessedLength; jobStatus.has_progress = true; +#ifdef FEEDER_LENGTH_CALCULATION totlength = TotalProcessedLength; if (TotalProcessedLength > job_length) { @@ -770,6 +771,15 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes //TotalProcessedLength = job_length; totlength = job_length; } +#else + totlength = PoolerTotalProcessedLength; + if (PoolerTotalProcessedLength > job_length) + { + Report("job length bigger than assigned",__FILE__,__LINE__,PoolerTotalProcessedLength,RpWarning,job_length, done); + //TotalProcessedLength = job_length; + totlength = job_length; + } +#endif jobStatus.progress = totlength; jobStatus.has_currentsegmentindex = true; jobStatus.currentsegmentindex = SegmentId; -- cgit v1.3.1 From 31eb2421db55f356d67a75bf8c2c1f74802f5d86 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 30 Jun 2019 10:11:59 +0300 Subject: Version 1.4.1.1 improve watchdog/DFU handling (works, not great) --- Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- Software/Embedded_SW/Embedded/Common/Utilities/Update.c | 8 ++++++-- Software/Embedded_SW/Embedded/Common/Utilities/Utils.c | 2 ++ Software/Embedded_SW/Embedded/Common/report/reportInit.c | 13 ++++++++++++- Software/Embedded_SW/Embedded/DataDef.h | 3 +++ .../Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 3 ++- Software/Embedded_SW/Embedded/Main.c | 4 +--- .../Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c | 4 ++-- Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c | 3 +++ 9 files changed, 32 insertions(+), 10 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 7fbc9acc8..26f867fd1 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,1,0}; +TangoVersion_t _gTangoVersion = {1,4,1,1}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Update.c b/Software/Embedded_SW/Embedded/Common/Utilities/Update.c index c2aad92f1..60fee1164 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/Update.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Update.c @@ -13,6 +13,9 @@ #include #include +#include "Modules/Control/control.h" +#include "Modules/Control/MillisecTask.h" +#include "Modules/Heaters/Heaters_ex.h" #include "Drivers/USB_Communication/USBCDCD.h" @@ -32,8 +35,9 @@ void UpdateUsb(void) // ROM_IntMasterDisable(); #ifdef WATCHDOG - //ROM_WatchdogResetDisable(WATCHDOG0_BASE); - //ROM_WatchdogReloadSet(WATCHDOG0_BASE, 120000000*35); + ROM_WatchdogResetDisable(WATCHDOG0_BASE); + uint32_t timeout = 120000000*35; + ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout); #endif ControlStop(); MillisecStop(); diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c index 3871acb94..e22291963 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c @@ -97,6 +97,7 @@ void InitWatchdog(uint32_t clock) // // Enable the watchdog interrupt. // +#ifdef WATCHDOG MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0); ROM_WatchdogIntClear(WATCHDOG0_BASE); ROM_WatchdogIntTypeSet(WATCHDOG0_BASE,0); //interrupt, not NMI @@ -116,6 +117,7 @@ void InitWatchdog(uint32_t clock) // Enable the watchdog timer. // ROM_WatchdogEnable(WATCHDOG0_BASE); +#endif } void utilsInit(uint32_t ui32SysClock) { diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 8a39e8fd4..bcda9a9be 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -147,7 +147,18 @@ uint32_t ReportInitMessage(MessageContainer* requestContainer) #define SYSCTL_CAUSE_EXT 0x00000001 // External reset */ uint32_t RESC = SysCtlResetCauseGet (); - LOG_ERROR(RESC,"Reset Reason Register"); + char ResetMessage[200] = "Reset Reason Register"; + if (RESC & SYSCTL_CAUSE_HSRVREQ) strcat (ResetMessage," Service Req"); + if (RESC & SYSCTL_CAUSE_HIB) strcat (ResetMessage," Hibernate"); + if (RESC & SYSCTL_CAUSE_WDOG1) strcat (ResetMessage," Watchdog 1"); + if (RESC & SYSCTL_CAUSE_SW) strcat (ResetMessage," Software"); + if (RESC & SYSCTL_CAUSE_WDOG0) strcat (ResetMessage," Watchdog 0"); + if (RESC & SYSCTL_CAUSE_BOR) strcat (ResetMessage," Brown-out"); + if (RESC & SYSCTL_CAUSE_POR) strcat (ResetMessage," Power on"); + if (RESC & SYSCTL_CAUSE_EXT) strcat (ResetMessage," External"); + Report(ResetMessage,__FILE__,__LINE__,RESC,RpWarning,status,0); + Task_sleep (100); + /*SysCtlResetCauseClear(RESC);*/ #ifdef TEST_PID_THREAD Task_sleep(1000); diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index d9c82c5a7..647de4ff1 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -21,6 +21,9 @@ #define NO_INITIAL_HEATING #define MAX_STRING_LEN 255 //Embedded version + filter.c +#define WATCHDOG +#define FPGA_WATCHDOG + #define MAX_ERR_SAMPLES 5 //Number of Samples before sending error #define ERROR_TEMPERATURE_MEASUREMENT 0xFFFF diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index 69b6d3b3b..6f4419111 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -447,8 +447,9 @@ uint32_t DeActivateCleanerPump() void Power_Off()//Power Down { +#ifdef WATCHDOG ROM_WatchdogResetDisable(WATCHDOG0_BASE); - +#endif F2_CTRL_Reg.ushort |= PDOWN_RL1_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; } diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index ba4b3ebf0..ebeb7d718 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -74,8 +74,6 @@ #include "Modules/General/buttons.h" #include "Modules/Waste/Waste.h" #include -#define WATCHDOG -#define FPGA_WATCHDOG //***************************************************************************** @@ -249,7 +247,7 @@ int main(void) #endif #ifdef WATCHDOG - InitWatchdog(ui32SysClock*10); + InitWatchdog(ui32SysClock*3); #endif //FlashInitAndLoad(); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index fe9671657..31783db49 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -644,7 +644,7 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { int index=MAX_HEATERS_NUM; int32_t MaxreadValue; - int32_t MinreadValue; + if (IfIndex>>8 != IfTypeHeaters) { LOG_ERROR (IfIndex, "Wrong Interface type"); @@ -677,7 +677,7 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) SecondaryPT100Read = readValue; } MaxreadValue = max (MainPT100Read,SecondaryPT100Read); - MinreadValue = min (MainPT100Read,SecondaryPT100Read); + if (MaxreadValue >= HeaterControl[index].sensormaxvalue) { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 5efc3798e..eb1b751bb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -733,6 +733,7 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) if (Motor_i == FEEDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled { + Report("Feeder Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); if (SpeedControlId != 0xFF) { RemoveControlCallback(SpeedControlId,ThreadLengthCBFunction); @@ -744,6 +745,7 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) } if (Motor_i == POOLER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled { + Report("Puller Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); if (PoolerSpeedControlId != 0xFF) { if (RemoveControlCallback(PoolerSpeedControlId,PoolerThreadLengthCBFunction)!=OK) @@ -783,6 +785,7 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) } if (Motor_i == WINDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will n//ot be controlled { + Report("Winder Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); if (ControlIdtoMotorId[Motor_i] != 0xFF) { if(RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction)!=OK) -- cgit v1.3.1 From 1dfd14ae3fbf868e8992420127a9cf3e6318e5ff Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 9 Jul 2019 17:14:59 +0300 Subject: Version 1.4.2.0 - infrastructure for IFS, improved flash handling, thread unloading --- Software/Embedded_SW/Embedded/.cproject | 2 +- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 2 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Communication/Container.c | 9 + .../Communication/PMR/Common/MessageType.pb-c.c | 206 ++++---- .../Communication/PMR/Common/MessageType.pb-c.h | 8 + .../Communication/PMR/Diagnostics/Cartridge.pb-c.c | 118 +++++ .../Communication/PMR/Diagnostics/Cartridge.pb-c.h | 77 +++ .../PMR/Diagnostics/CartridgeAction.pb-c.c | 37 ++ .../PMR/Diagnostics/CartridgeAction.pb-c.h | 43 ++ .../PMR/Diagnostics/CartridgeSlot.pb-c.c | 39 ++ .../PMR/Diagnostics/CartridgeSlot.pb-c.h | 44 ++ .../PMR/Diagnostics/CartridgeTagContent.pb-c.c | 417 +++++++++++++++ .../PMR/Diagnostics/CartridgeTagContent.pb-c.h | 112 ++++ .../Diagnostics/CartridgeValidationRequest.pb-c.c | 105 ++++ .../Diagnostics/CartridgeValidationRequest.pb-c.h | 75 +++ .../Diagnostics/CartridgeValidationResponse.pb-c.c | 105 ++++ .../Diagnostics/CartridgeValidationResponse.pb-c.h | 74 +++ .../Communication/PMR/Diagnostics/EventType.pb-c.c | 566 +++++++++++---------- .../Communication/PMR/Diagnostics/EventType.pb-c.h | 4 + .../StartCartridgesUpdateRequest.pb-c.c | 72 +++ .../StartCartridgesUpdateRequest.pb-c.h | 70 +++ .../StartCartridgesUpdateResponse.pb-c.c | 105 ++++ .../StartCartridgesUpdateResponse.pb-c.h | 75 +++ .../Diagnostics/StopCartridgesUpdateRequest.pb-c.c | 72 +++ .../Diagnostics/StopCartridgesUpdateRequest.pb-c.h | 70 +++ .../StopCartridgesUpdateResponse.pb-c.c | 72 +++ .../StopCartridgesUpdateResponse.pb-c.h | 70 +++ .../PMR/Hardware/HardwareMotor.pb-c.c | 123 ++++- .../PMR/Hardware/HardwareMotor.pb-c.h | 20 +- .../PMR/Hardware/HardwareMotorType.pb-c.c | 12 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 10 + Software/Embedded_SW/Embedded/Main.c | 1 + .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 2 + .../Embedded/Modules/General/GeneralHardware.c | 264 +++++----- .../Embedded/Modules/General/GeneralHardware.h | 4 +- .../Embedded_SW/Embedded/Modules/General/process.c | 75 ++- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 2 +- .../Embedded/Modules/IFS/RfidTagContent.h | 51 ++ Software/Embedded_SW/Embedded/Modules/IFS/ifs.c | 31 ++ Software/Embedded_SW/Embedded/Modules/IFS/ifs.h | 16 + .../Embedded_SW/Embedded/Modules/Thread/Thread.h | 3 +- .../Embedded/Modules/Thread/ThreadLoad.c | 80 ++- .../Embedded/Modules/Thread/Thread_init.c | 31 +- .../Embedded/Software Release Notes.txt | 8 + 45 files changed, 2824 insertions(+), 560 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.c create mode 100644 Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.h create mode 100644 Software/Embedded_SW/Embedded/Modules/IFS/RfidTagContent.h create mode 100644 Software/Embedded_SW/Embedded/Modules/IFS/ifs.c create mode 100644 Software/Embedded_SW/Embedded/Modules/IFS/ifs.h (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/.cproject b/Software/Embedded_SW/Embedded/.cproject index 0f253578d..6007737b7 100644 --- a/Software/Embedded_SW/Embedded/.cproject +++ b/Software/Embedded_SW/Embedded/.cproject @@ -170,7 +170,7 @@ - + diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 273dfb49d..77056213f 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -120,7 +120,6 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) } for (File_i = 0;File_in_filedescriptors;File_i++) { - CurrentRunningFile = 0; CurrentFileSize = -1; vme_index = 0; switch(VersionPackage->filedescriptors[File_i]->destination) @@ -156,6 +155,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename); Fresult = f_unlink("//SYSINFO//ALARMPRM.CFG"); Fresult |= f_rename (FullPath, "//SYSINFO//ALARMPRM.CFG"); + AlarmHandlingLoadFile(); CurrentRunningFile++; break; case VERSION_FILE_DESTINATION__GeneralHWConfigParams: 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 ba601e283..ad0191ab4 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,1,1}; +TangoVersion_t _gTangoVersion = {1,4,2,0}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index ca253c5be..86e1b06c4 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -424,6 +424,15 @@ void receive_callback(char* buffer, size_t length) case MESSAGE_TYPE__DispenserDataRequest: DispenserDataRequestFunc(requestContainer); break; + case MESSAGE_TYPE__StartCartridgesUpdateRequest: + LOG_ERROR (requestContainer->type,"MESSAGE_TYPE__StartCartridgesUpdateRequest"); + break; + case MESSAGE_TYPE__StopCartridgesUpdateRequest: + LOG_ERROR (requestContainer->type,"MESSAGE_TYPE__StopCartridgesUpdateRequest"); + break; + case MESSAGE_TYPE__CartridgeValidationResponse: + LOG_ERROR (requestContainer->type,"MESSAGE_TYPE__CartridgeValidationResponse"); + break; default: //unsupported message type !! LOG_ERROR (requestContainer->type,"unsupported message type"); diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.c index 48bc98319..2ca8c9192 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.c @@ -7,7 +7,7 @@ #endif #include "MessageType.pb-c.h" -static const ProtobufCEnumValue message_type__enum_values_by_number[207] = +static const ProtobufCEnumValue message_type__enum_values_by_number[215] = { { "None", "MESSAGE_TYPE__None", 0 }, { "ErrorResponse", "MESSAGE_TYPE__ErrorResponse", 1 }, @@ -126,6 +126,8 @@ static const ProtobufCEnumValue message_type__enum_values_by_number[207] = { "StartApplicationLogsResponse", "MESSAGE_TYPE__StartApplicationLogsResponse", 1010 }, { "StopApplicationLogsRequest", "MESSAGE_TYPE__StopApplicationLogsRequest", 1011 }, { "StopApplicationLogsResponse", "MESSAGE_TYPE__StopApplicationLogsResponse", 1012 }, + { "ColorProfileRequest", "MESSAGE_TYPE__ColorProfileRequest", 1013 }, + { "ColorProfileResponse", "MESSAGE_TYPE__ColorProfileResponse", 1014 }, { "StartDiagnosticsRequest", "MESSAGE_TYPE__StartDiagnosticsRequest", 2000 }, { "StartDiagnosticsResponse", "MESSAGE_TYPE__StartDiagnosticsResponse", 2001 }, { "MotorAbortHomingRequest", "MESSAGE_TYPE__MotorAbortHomingRequest", 2002 }, @@ -166,6 +168,12 @@ static const ProtobufCEnumValue message_type__enum_values_by_number[207] = { "SetBlowerStateResponse", "MESSAGE_TYPE__SetBlowerStateResponse", 2037 }, { "SetValveStateRequest", "MESSAGE_TYPE__SetValveStateRequest", 2038 }, { "SetValveStateResponse", "MESSAGE_TYPE__SetValveStateResponse", 2039 }, + { "StartCartridgesUpdateRequest", "MESSAGE_TYPE__StartCartridgesUpdateRequest", 2040 }, + { "StartCartridgesUpdateResponse", "MESSAGE_TYPE__StartCartridgesUpdateResponse", 2041 }, + { "StopCartridgesUpdateRequest", "MESSAGE_TYPE__StopCartridgesUpdateRequest", 2042 }, + { "StopCartridgesUpdateResponse", "MESSAGE_TYPE__StopCartridgesUpdateResponse", 2043 }, + { "CartridgeValidationRequest", "MESSAGE_TYPE__CartridgeValidationRequest", 2044 }, + { "CartridgeValidationResponse", "MESSAGE_TYPE__CartridgeValidationResponse", 2045 }, { "JobRequest", "MESSAGE_TYPE__JobRequest", 3000 }, { "JobResponse", "MESSAGE_TYPE__JobResponse", 3001 }, { "AbortJobRequest", "MESSAGE_TYPE__AbortJobRequest", 3002 }, @@ -218,107 +226,115 @@ static const ProtobufCEnumValue message_type__enum_values_by_number[207] = { "DispenserDataResponse", "MESSAGE_TYPE__DispenserDataResponse", 8001 }, }; static const ProtobufCIntRange message_type__value_ranges[] = { -{0, 0},{3, 2},{1000, 104},{2000, 117},{3000, 157},{4000, 167},{5000, 171},{6000, 175},{7000, 181},{8000, 205},{0, 207} +{0, 0},{3, 2},{1000, 104},{2000, 119},{3000, 165},{4000, 175},{5000, 179},{6000, 183},{7000, 189},{8000, 213},{0, 215} }; -static const ProtobufCEnumValueIndex message_type__enum_values_by_name[207] = +static const ProtobufCEnumValueIndex message_type__enum_values_by_name[215] = { - { "AbortJobRequest", 159 }, - { "AbortJobResponse", 160 }, - { "ActivateVersionRequest", 203 }, - { "ActivateVersionResponse", 204 }, + { "AbortJobRequest", 167 }, + { "AbortJobResponse", 168 }, + { "ActivateVersionRequest", 211 }, + { "ActivateVersionResponse", 212 }, { "CalculateRequest", 2 }, { "CalculateResponse", 3 }, - { "ConnectRequest", 177 }, - { "ConnectResponse", 178 }, - { "CreateRequest", 189 }, - { "CreateResponse", 190 }, - { "CurrentJobRequest", 163 }, - { "CurrentJobResponse", 164 }, - { "DeleteRequest", 191 }, - { "DeleteResponse", 192 }, + { "CartridgeValidationRequest", 163 }, + { "CartridgeValidationResponse", 164 }, + { "ColorProfileRequest", 117 }, + { "ColorProfileResponse", 118 }, + { "ConnectRequest", 185 }, + { "ConnectResponse", 186 }, + { "CreateRequest", 197 }, + { "CreateResponse", 198 }, + { "CurrentJobRequest", 171 }, + { "CurrentJobResponse", 172 }, + { "DeleteRequest", 199 }, + { "DeleteResponse", 200 }, { "DirectSynchronizationRequest", 109 }, { "DirectSynchronizationResponse", 110 }, - { "DisconnectRequest", 179 }, - { "DisconnectResponse", 180 }, - { "DispenserAbortHomingRequest", 127 }, - { "DispenserAbortHomingResponse", 128 }, - { "DispenserAbortJoggingRequest", 133 }, - { "DispenserAbortJoggingResponse", 134 }, - { "DispenserDataRequest", 205 }, - { "DispenserDataResponse", 206 }, - { "DispenserHomingRequest", 129 }, - { "DispenserHomingResponse", 130 }, - { "DispenserJoggingRequest", 131 }, - { "DispenserJoggingResponse", 132 }, + { "DisconnectRequest", 187 }, + { "DisconnectResponse", 188 }, + { "DispenserAbortHomingRequest", 129 }, + { "DispenserAbortHomingResponse", 130 }, + { "DispenserAbortJoggingRequest", 135 }, + { "DispenserAbortJoggingResponse", 136 }, + { "DispenserDataRequest", 213 }, + { "DispenserDataResponse", 214 }, + { "DispenserHomingRequest", 131 }, + { "DispenserHomingResponse", 132 }, + { "DispenserJoggingRequest", 133 }, + { "DispenserJoggingResponse", 134 }, { "ErrorResponse", 1 }, - { "ExecuteProcessRequest", 185 }, - { "ExecuteProcessResponse", 186 }, + { "ExecuteProcessRequest", 193 }, + { "ExecuteProcessResponse", 194 }, { "ExternalBridgeLoginRequest", 105 }, { "ExternalBridgeLoginResponse", 106 }, { "ExternalBridgeLogoutRequest", 107 }, { "ExternalBridgeLogoutResponse", 108 }, { "ExternalBridgeUdpDiscoveryPacket", 104 }, - { "FileChunkDownloadRequest", 199 }, - { "FileChunkDownloadResponse", 200 }, - { "FileChunkUploadRequest", 183 }, - { "FileChunkUploadResponse", 184 }, - { "FileDownloadRequest", 197 }, - { "FileDownloadResponse", 198 }, - { "FileUploadRequest", 181 }, - { "FileUploadResponse", 182 }, - { "GetFilesRequest", 195 }, - { "GetFilesResponse", 196 }, - { "GetStorageInfoRequest", 193 }, - { "GetStorageInfoResponse", 194 }, - { "JobRequest", 157 }, - { "JobResponse", 158 }, - { "KeepAliveRequest", 175 }, - { "KeepAliveResponse", 176 }, - { "KillProcessRequest", 187 }, - { "KillProcessResponse", 188 }, - { "MotorAbortHomingRequest", 119 }, - { "MotorAbortHomingResponse", 120 }, - { "MotorAbortJoggingRequest", 125 }, - { "MotorAbortJoggingResponse", 126 }, - { "MotorHomingRequest", 121 }, - { "MotorHomingResponse", 122 }, - { "MotorJoggingRequest", 123 }, - { "MotorJoggingResponse", 124 }, + { "FileChunkDownloadRequest", 207 }, + { "FileChunkDownloadResponse", 208 }, + { "FileChunkUploadRequest", 191 }, + { "FileChunkUploadResponse", 192 }, + { "FileDownloadRequest", 205 }, + { "FileDownloadResponse", 206 }, + { "FileUploadRequest", 189 }, + { "FileUploadResponse", 190 }, + { "GetFilesRequest", 203 }, + { "GetFilesResponse", 204 }, + { "GetStorageInfoRequest", 201 }, + { "GetStorageInfoResponse", 202 }, + { "JobRequest", 165 }, + { "JobResponse", 166 }, + { "KeepAliveRequest", 183 }, + { "KeepAliveResponse", 184 }, + { "KillProcessRequest", 195 }, + { "KillProcessResponse", 196 }, + { "MotorAbortHomingRequest", 121 }, + { "MotorAbortHomingResponse", 122 }, + { "MotorAbortJoggingRequest", 127 }, + { "MotorAbortJoggingResponse", 128 }, + { "MotorHomingRequest", 123 }, + { "MotorHomingResponse", 124 }, + { "MotorJoggingRequest", 125 }, + { "MotorJoggingResponse", 126 }, { "None", 0 }, { "OverrideDataBaseRequest", 111 }, { "OverrideDataBaseResponse", 112 }, { "ProgressRequest", 4 }, { "ProgressResponse", 5 }, - { "ResolveEventRequest", 143 }, - { "ResolveEventResponse", 144 }, - { "ResumeCurrentJobRequest", 165 }, - { "ResumeCurrentJobResponse", 166 }, - { "SetBlowerStateRequest", 153 }, - { "SetBlowerStateResponse", 154 }, - { "SetComponentValueRequest", 141 }, - { "SetComponentValueResponse", 142 }, - { "SetDigitalOutRequest", 135 }, - { "SetDigitalOutResponse", 136 }, - { "SetHeaterStateRequest", 151 }, - { "SetHeaterStateResponse", 152 }, - { "SetValveStateRequest", 155 }, - { "SetValveStateResponse", 156 }, + { "ResolveEventRequest", 145 }, + { "ResolveEventResponse", 146 }, + { "ResumeCurrentJobRequest", 173 }, + { "ResumeCurrentJobResponse", 174 }, + { "SetBlowerStateRequest", 155 }, + { "SetBlowerStateResponse", 156 }, + { "SetComponentValueRequest", 143 }, + { "SetComponentValueResponse", 144 }, + { "SetDigitalOutRequest", 137 }, + { "SetDigitalOutResponse", 138 }, + { "SetHeaterStateRequest", 153 }, + { "SetHeaterStateResponse", 154 }, + { "SetValveStateRequest", 157 }, + { "SetValveStateResponse", 158 }, { "StartApplicationLogsRequest", 113 }, { "StartApplicationLogsResponse", 114 }, - { "StartDebugLogRequest", 167 }, - { "StartDebugLogResponse", 168 }, - { "StartDiagnosticsRequest", 117 }, - { "StartDiagnosticsResponse", 118 }, - { "StartEventsNotificationRequest", 147 }, - { "StartEventsNotificationResponse", 148 }, + { "StartCartridgesUpdateRequest", 159 }, + { "StartCartridgesUpdateResponse", 160 }, + { "StartDebugLogRequest", 175 }, + { "StartDebugLogResponse", 176 }, + { "StartDiagnosticsRequest", 119 }, + { "StartDiagnosticsResponse", 120 }, + { "StartEventsNotificationRequest", 149 }, + { "StartEventsNotificationResponse", 150 }, { "StopApplicationLogsRequest", 115 }, { "StopApplicationLogsResponse", 116 }, - { "StopDebugLogRequest", 169 }, - { "StopDebugLogResponse", 170 }, - { "StopDiagnosticsRequest", 145 }, - { "StopDiagnosticsResponse", 146 }, - { "StopEventsNotificationRequest", 149 }, - { "StopEventsNotificationResponse", 150 }, + { "StopCartridgesUpdateRequest", 161 }, + { "StopCartridgesUpdateResponse", 162 }, + { "StopDebugLogRequest", 177 }, + { "StopDebugLogResponse", 178 }, + { "StopDiagnosticsRequest", 147 }, + { "StopDiagnosticsResponse", 148 }, + { "StopEventsNotificationRequest", 151 }, + { "StopEventsNotificationResponse", 152 }, { "StubAbortJobRequest", 100 }, { "StubAbortJobResponse", 101 }, { "StubCartridgeReadRequest", 6 }, @@ -417,18 +433,18 @@ static const ProtobufCEnumValueIndex message_type__enum_values_by_name[207] = { "StubTivaWriteRegResponse", 79 }, { "StubValveRequest", 30 }, { "StubValveResponse", 31 }, - { "SystemResetRequest", 173 }, - { "SystemResetResponse", 174 }, - { "ThreadAbortJoggingRequest", 139 }, - { "ThreadAbortJoggingResponse", 140 }, - { "ThreadJoggingRequest", 137 }, - { "ThreadJoggingResponse", 138 }, - { "UploadHardwareConfigurationRequest", 171 }, - { "UploadHardwareConfigurationResponse", 172 }, - { "UploadProcessParametersRequest", 161 }, - { "UploadProcessParametersResponse", 162 }, - { "ValidateVersionRequest", 201 }, - { "ValidateVersionResponse", 202 }, + { "SystemResetRequest", 181 }, + { "SystemResetResponse", 182 }, + { "ThreadAbortJoggingRequest", 141 }, + { "ThreadAbortJoggingResponse", 142 }, + { "ThreadJoggingRequest", 139 }, + { "ThreadJoggingResponse", 140 }, + { "UploadHardwareConfigurationRequest", 179 }, + { "UploadHardwareConfigurationResponse", 180 }, + { "UploadProcessParametersRequest", 169 }, + { "UploadProcessParametersResponse", 170 }, + { "ValidateVersionRequest", 209 }, + { "ValidateVersionResponse", 210 }, }; const ProtobufCEnumDescriptor message_type__descriptor = { @@ -437,9 +453,9 @@ const ProtobufCEnumDescriptor message_type__descriptor = "MessageType", "MessageType", "", - 207, + 215, message_type__enum_values_by_number, - 207, + 215, message_type__enum_values_by_name, 10, message_type__value_ranges, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h index 7fde64335..5ca19030f 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Common/MessageType.pb-c.h @@ -137,6 +137,8 @@ typedef enum _MessageType { MESSAGE_TYPE__StartApplicationLogsResponse = 1010, MESSAGE_TYPE__StopApplicationLogsRequest = 1011, MESSAGE_TYPE__StopApplicationLogsResponse = 1012, + MESSAGE_TYPE__ColorProfileRequest = 1013, + MESSAGE_TYPE__ColorProfileResponse = 1014, MESSAGE_TYPE__StartDiagnosticsRequest = 2000, MESSAGE_TYPE__StartDiagnosticsResponse = 2001, MESSAGE_TYPE__MotorAbortHomingRequest = 2002, @@ -177,6 +179,12 @@ typedef enum _MessageType { MESSAGE_TYPE__SetBlowerStateResponse = 2037, MESSAGE_TYPE__SetValveStateRequest = 2038, MESSAGE_TYPE__SetValveStateResponse = 2039, + MESSAGE_TYPE__StartCartridgesUpdateRequest = 2040, + MESSAGE_TYPE__StartCartridgesUpdateResponse = 2041, + MESSAGE_TYPE__StopCartridgesUpdateRequest = 2042, + MESSAGE_TYPE__StopCartridgesUpdateResponse = 2043, + MESSAGE_TYPE__CartridgeValidationRequest = 2044, + MESSAGE_TYPE__CartridgeValidationResponse = 2045, MESSAGE_TYPE__JobRequest = 3000, MESSAGE_TYPE__JobResponse = 3001, MESSAGE_TYPE__AbortJobRequest = 3002, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.c new file mode 100644 index 000000000..fc27894ce --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.c @@ -0,0 +1,118 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: Cartridge.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "Cartridge.pb-c.h" +void cartridge__init + (Cartridge *message) +{ + static const Cartridge init_value = CARTRIDGE__INIT; + *message = init_value; +} +size_t cartridge__get_packed_size + (const Cartridge *message) +{ + assert(message->base.descriptor == &cartridge__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t cartridge__pack + (const Cartridge *message, + uint8_t *out) +{ + assert(message->base.descriptor == &cartridge__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t cartridge__pack_to_buffer + (const Cartridge *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &cartridge__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +Cartridge * + cartridge__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (Cartridge *) + protobuf_c_message_unpack (&cartridge__descriptor, + allocator, len, data); +} +void cartridge__free_unpacked + (Cartridge *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &cartridge__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor cartridge__field_descriptors[3] = +{ + { + "Slot", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_ENUM, + offsetof(Cartridge, has_slot), + offsetof(Cartridge, slot), + &cartridge_slot__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Tag", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_MESSAGE, + 0, /* quantifier_offset */ + offsetof(Cartridge, tag), + &cartridge_tag_content__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Index", + 3, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(Cartridge, has_index), + offsetof(Cartridge, index), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned cartridge__field_indices_by_name[] = { + 2, /* field[2] = Index */ + 0, /* field[0] = Slot */ + 1, /* field[1] = Tag */ +}; +static const ProtobufCIntRange cartridge__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 3 } +}; +const ProtobufCMessageDescriptor cartridge__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "Cartridge", + "Cartridge", + "Cartridge", + "", + sizeof(Cartridge), + 3, + cartridge__field_descriptors, + cartridge__field_indices_by_name, + 1, cartridge__number_ranges, + (ProtobufCMessageInit) cartridge__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.h new file mode 100644 index 000000000..1f4446b48 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/Cartridge.pb-c.h @@ -0,0 +1,77 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: Cartridge.proto */ + +#ifndef PROTOBUF_C_Cartridge_2eproto__INCLUDED +#define PROTOBUF_C_Cartridge_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + +#include "CartridgeSlot.pb-c.h" +#include "CartridgeTagContent.pb-c.h" + +typedef struct _Cartridge Cartridge; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _Cartridge +{ + ProtobufCMessage base; + protobuf_c_boolean has_slot; + CartridgeSlot slot; + CartridgeTagContent *tag; + protobuf_c_boolean has_index; + int32_t index; +}; +#define CARTRIDGE__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&cartridge__descriptor) \ + , 0, CARTRIDGE_SLOT__Ink, NULL, 0, 0 } + + +/* Cartridge methods */ +void cartridge__init + (Cartridge *message); +size_t cartridge__get_packed_size + (const Cartridge *message); +size_t cartridge__pack + (const Cartridge *message, + uint8_t *out); +size_t cartridge__pack_to_buffer + (const Cartridge *message, + ProtobufCBuffer *buffer); +Cartridge * + cartridge__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void cartridge__free_unpacked + (Cartridge *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*Cartridge_Closure) + (const Cartridge *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor cartridge__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_Cartridge_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.c new file mode 100644 index 000000000..b0a681376 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.c @@ -0,0 +1,37 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeAction.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "CartridgeAction.pb-c.h" +static const ProtobufCEnumValue cartridge_action__enum_values_by_number[2] = +{ + { "Inserted", "CARTRIDGE_ACTION__Inserted", 0 }, + { "Ejected", "CARTRIDGE_ACTION__Ejected", 1 }, +}; +static const ProtobufCIntRange cartridge_action__value_ranges[] = { +{0, 0},{0, 2} +}; +static const ProtobufCEnumValueIndex cartridge_action__enum_values_by_name[2] = +{ + { "Ejected", 1 }, + { "Inserted", 0 }, +}; +const ProtobufCEnumDescriptor cartridge_action__descriptor = +{ + PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC, + "CartridgeAction", + "CartridgeAction", + "CartridgeAction", + "", + 2, + cartridge_action__enum_values_by_number, + 2, + cartridge_action__enum_values_by_name, + 1, + cartridge_action__value_ranges, + NULL,NULL,NULL,NULL /* reserved[1234] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.h new file mode 100644 index 000000000..9664d8b1f --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeAction.pb-c.h @@ -0,0 +1,43 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeAction.proto */ + +#ifndef PROTOBUF_C_CartridgeAction_2eproto__INCLUDED +#define PROTOBUF_C_CartridgeAction_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + + + +/* --- enums --- */ + +typedef enum _CartridgeAction { + CARTRIDGE_ACTION__Inserted = 0, + CARTRIDGE_ACTION__Ejected = 1 + PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CARTRIDGE_ACTION) +} CartridgeAction; + +/* --- messages --- */ + +/* --- per-message closures --- */ + + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCEnumDescriptor cartridge_action__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_CartridgeAction_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.c new file mode 100644 index 000000000..370c41dc2 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.c @@ -0,0 +1,39 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeSlot.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "CartridgeSlot.pb-c.h" +static const ProtobufCEnumValue cartridge_slot__enum_values_by_number[3] = +{ + { "Ink", "CARTRIDGE_SLOT__Ink", 0 }, + { "WasteMiddle", "CARTRIDGE_SLOT__WasteMiddle", 1 }, + { "WasteLower", "CARTRIDGE_SLOT__WasteLower", 2 }, +}; +static const ProtobufCIntRange cartridge_slot__value_ranges[] = { +{0, 0},{0, 3} +}; +static const ProtobufCEnumValueIndex cartridge_slot__enum_values_by_name[3] = +{ + { "Ink", 0 }, + { "WasteLower", 2 }, + { "WasteMiddle", 1 }, +}; +const ProtobufCEnumDescriptor cartridge_slot__descriptor = +{ + PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC, + "CartridgeSlot", + "CartridgeSlot", + "CartridgeSlot", + "", + 3, + cartridge_slot__enum_values_by_number, + 3, + cartridge_slot__enum_values_by_name, + 1, + cartridge_slot__value_ranges, + NULL,NULL,NULL,NULL /* reserved[1234] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.h new file mode 100644 index 000000000..8036073ba --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeSlot.pb-c.h @@ -0,0 +1,44 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeSlot.proto */ + +#ifndef PROTOBUF_C_CartridgeSlot_2eproto__INCLUDED +#define PROTOBUF_C_CartridgeSlot_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + + + +/* --- enums --- */ + +typedef enum _CartridgeSlot { + CARTRIDGE_SLOT__Ink = 0, + CARTRIDGE_SLOT__WasteMiddle = 1, + CARTRIDGE_SLOT__WasteLower = 2 + PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CARTRIDGE_SLOT) +} CartridgeSlot; + +/* --- messages --- */ + +/* --- per-message closures --- */ + + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCEnumDescriptor cartridge_slot__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_CartridgeSlot_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.c new file mode 100644 index 000000000..66c11df51 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.c @@ -0,0 +1,417 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeTagContent.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "CartridgeTagContent.pb-c.h" +void cartridge_tag_content__init + (CartridgeTagContent *message) +{ + static const CartridgeTagContent init_value = CARTRIDGE_TAG_CONTENT__INIT; + *message = init_value; +} +size_t cartridge_tag_content__get_packed_size + (const CartridgeTagContent *message) +{ + assert(message->base.descriptor == &cartridge_tag_content__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t cartridge_tag_content__pack + (const CartridgeTagContent *message, + uint8_t *out) +{ + assert(message->base.descriptor == &cartridge_tag_content__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t cartridge_tag_content__pack_to_buffer + (const CartridgeTagContent *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &cartridge_tag_content__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +CartridgeTagContent * + cartridge_tag_content__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (CartridgeTagContent *) + protobuf_c_message_unpack (&cartridge_tag_content__descriptor, + allocator, len, data); +} +void cartridge_tag_content__free_unpacked + (CartridgeTagContent *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &cartridge_tag_content__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor cartridge_tag_content__field_descriptors[26] = +{ + { + "UniqueId", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(CartridgeTagContent, has_uniqueid), + offsetof(CartridgeTagContent, uniqueid), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "SerialNumber", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, serialnumber), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "FactoryId", + 3, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, factoryid), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "FillingSystemId", + 4, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(CartridgeTagContent, has_fillingsystemid), + offsetof(CartridgeTagContent, fillingsystemid), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "ColorName", + 5, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, colorname), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "ColorCategory", + 6, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(CartridgeTagContent, has_colorcategory), + offsetof(CartridgeTagContent, colorcategory), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "ColorTypeRevision", + 7, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(CartridgeTagContent, has_colortyperevision), + offsetof(CartridgeTagContent, colortyperevision), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "CartridgeSize", + 8, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(CartridgeTagContent, has_cartridgesize), + offsetof(CartridgeTagContent, cartridgesize), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "FilledInkVolume", + 9, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(CartridgeTagContent, has_filledinkvolume), + offsetof(CartridgeTagContent, filledinkvolume), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "InkBatchNum", + 10, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, inkbatchnum), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "InkMFGDate", + 11, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, inkmfgdate), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "InkEOLDate", + 12, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, inkeoldate), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "CartridgeFillingDate", + 13, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, cartridgefillingdate), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "WasteFilledDate", + 14, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, wastefilleddate), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "PlugInCounter", + 15, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(CartridgeTagContent, has_plugincounter), + offsetof(CartridgeTagContent, plugincounter), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Inkfill", + 16, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_inkfill), + offsetof(CartridgeTagContent, inkfill), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "InkUsed", + 17, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_inkused), + offsetof(CartridgeTagContent, inkused), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "InkEmpty", + 18, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_inkempty), + offsetof(CartridgeTagContent, inkempty), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "WasteEmpty", + 19, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_wasteempty), + offsetof(CartridgeTagContent, wasteempty), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "WasteFilling", + 20, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_wastefilling), + offsetof(CartridgeTagContent, wastefilling), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "WasteFull", + 21, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_wastefull), + offsetof(CartridgeTagContent, wastefull), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Blocked", + 22, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_blocked), + offsetof(CartridgeTagContent, blocked), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Fail", + 23, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeTagContent, has_fail), + offsetof(CartridgeTagContent, fail), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "WasteCounter", + 24, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(CartridgeTagContent, has_wastecounter), + offsetof(CartridgeTagContent, wastecounter), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "MachineIdInkUsed", + 25, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, machineidinkused), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "MachineIdWasteUsed", + 26, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(CartridgeTagContent, machineidwasteused), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned cartridge_tag_content__field_indices_by_name[] = { + 21, /* field[21] = Blocked */ + 12, /* field[12] = CartridgeFillingDate */ + 7, /* field[7] = CartridgeSize */ + 5, /* field[5] = ColorCategory */ + 4, /* field[4] = ColorName */ + 6, /* field[6] = ColorTypeRevision */ + 2, /* field[2] = FactoryId */ + 22, /* field[22] = Fail */ + 8, /* field[8] = FilledInkVolume */ + 3, /* field[3] = FillingSystemId */ + 9, /* field[9] = InkBatchNum */ + 11, /* field[11] = InkEOLDate */ + 17, /* field[17] = InkEmpty */ + 10, /* field[10] = InkMFGDate */ + 16, /* field[16] = InkUsed */ + 15, /* field[15] = Inkfill */ + 24, /* field[24] = MachineIdInkUsed */ + 25, /* field[25] = MachineIdWasteUsed */ + 14, /* field[14] = PlugInCounter */ + 1, /* field[1] = SerialNumber */ + 0, /* field[0] = UniqueId */ + 23, /* field[23] = WasteCounter */ + 18, /* field[18] = WasteEmpty */ + 13, /* field[13] = WasteFilledDate */ + 19, /* field[19] = WasteFilling */ + 20, /* field[20] = WasteFull */ +}; +static const ProtobufCIntRange cartridge_tag_content__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 26 } +}; +const ProtobufCMessageDescriptor cartridge_tag_content__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "CartridgeTagContent", + "CartridgeTagContent", + "CartridgeTagContent", + "", + sizeof(CartridgeTagContent), + 26, + cartridge_tag_content__field_descriptors, + cartridge_tag_content__field_indices_by_name, + 1, cartridge_tag_content__number_ranges, + (ProtobufCMessageInit) cartridge_tag_content__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.h new file mode 100644 index 000000000..116bea117 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeTagContent.pb-c.h @@ -0,0 +1,112 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeTagContent.proto */ + +#ifndef PROTOBUF_C_CartridgeTagContent_2eproto__INCLUDED +#define PROTOBUF_C_CartridgeTagContent_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + +typedef struct _CartridgeTagContent CartridgeTagContent; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _CartridgeTagContent +{ + ProtobufCMessage base; + protobuf_c_boolean has_uniqueid; + uint32_t uniqueid; + char *serialnumber; + char *factoryid; + protobuf_c_boolean has_fillingsystemid; + int32_t fillingsystemid; + char *colorname; + protobuf_c_boolean has_colorcategory; + int32_t colorcategory; + protobuf_c_boolean has_colortyperevision; + int32_t colortyperevision; + protobuf_c_boolean has_cartridgesize; + int32_t cartridgesize; + protobuf_c_boolean has_filledinkvolume; + int32_t filledinkvolume; + char *inkbatchnum; + char *inkmfgdate; + char *inkeoldate; + char *cartridgefillingdate; + char *wastefilleddate; + protobuf_c_boolean has_plugincounter; + int32_t plugincounter; + protobuf_c_boolean has_inkfill; + protobuf_c_boolean inkfill; + protobuf_c_boolean has_inkused; + protobuf_c_boolean inkused; + protobuf_c_boolean has_inkempty; + protobuf_c_boolean inkempty; + protobuf_c_boolean has_wasteempty; + protobuf_c_boolean wasteempty; + protobuf_c_boolean has_wastefilling; + protobuf_c_boolean wastefilling; + protobuf_c_boolean has_wastefull; + protobuf_c_boolean wastefull; + protobuf_c_boolean has_blocked; + protobuf_c_boolean blocked; + protobuf_c_boolean has_fail; + protobuf_c_boolean fail; + protobuf_c_boolean has_wastecounter; + int32_t wastecounter; + char *machineidinkused; + char *machineidwasteused; +}; +#define CARTRIDGE_TAG_CONTENT__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&cartridge_tag_content__descriptor) \ + , 0, 0, NULL, NULL, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL } + + +/* CartridgeTagContent methods */ +void cartridge_tag_content__init + (CartridgeTagContent *message); +size_t cartridge_tag_content__get_packed_size + (const CartridgeTagContent *message); +size_t cartridge_tag_content__pack + (const CartridgeTagContent *message, + uint8_t *out); +size_t cartridge_tag_content__pack_to_buffer + (const CartridgeTagContent *message, + ProtobufCBuffer *buffer); +CartridgeTagContent * + cartridge_tag_content__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void cartridge_tag_content__free_unpacked + (CartridgeTagContent *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*CartridgeTagContent_Closure) + (const CartridgeTagContent *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor cartridge_tag_content__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_CartridgeTagContent_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.c new file mode 100644 index 000000000..e78b31d4b --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.c @@ -0,0 +1,105 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeValidationRequest.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "CartridgeValidationRequest.pb-c.h" +void cartridge_validation_request__init + (CartridgeValidationRequest *message) +{ + static const CartridgeValidationRequest init_value = CARTRIDGE_VALIDATION_REQUEST__INIT; + *message = init_value; +} +size_t cartridge_validation_request__get_packed_size + (const CartridgeValidationRequest *message) +{ + assert(message->base.descriptor == &cartridge_validation_request__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t cartridge_validation_request__pack + (const CartridgeValidationRequest *message, + uint8_t *out) +{ + assert(message->base.descriptor == &cartridge_validation_request__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t cartridge_validation_request__pack_to_buffer + (const CartridgeValidationRequest *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &cartridge_validation_request__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +CartridgeValidationRequest * + cartridge_validation_request__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (CartridgeValidationRequest *) + protobuf_c_message_unpack (&cartridge_validation_request__descriptor, + allocator, len, data); +} +void cartridge_validation_request__free_unpacked + (CartridgeValidationRequest *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &cartridge_validation_request__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor cartridge_validation_request__field_descriptors[2] = +{ + { + "Cartridge", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_MESSAGE, + 0, /* quantifier_offset */ + offsetof(CartridgeValidationRequest, cartridge), + &cartridge__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Action", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_ENUM, + offsetof(CartridgeValidationRequest, has_action), + offsetof(CartridgeValidationRequest, action), + &cartridge_action__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned cartridge_validation_request__field_indices_by_name[] = { + 1, /* field[1] = Action */ + 0, /* field[0] = Cartridge */ +}; +static const ProtobufCIntRange cartridge_validation_request__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 2 } +}; +const ProtobufCMessageDescriptor cartridge_validation_request__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "CartridgeValidationRequest", + "CartridgeValidationRequest", + "CartridgeValidationRequest", + "", + sizeof(CartridgeValidationRequest), + 2, + cartridge_validation_request__field_descriptors, + cartridge_validation_request__field_indices_by_name, + 1, cartridge_validation_request__number_ranges, + (ProtobufCMessageInit) cartridge_validation_request__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.h new file mode 100644 index 000000000..568baa8ce --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationRequest.pb-c.h @@ -0,0 +1,75 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeValidationRequest.proto */ + +#ifndef PROTOBUF_C_CartridgeValidationRequest_2eproto__INCLUDED +#define PROTOBUF_C_CartridgeValidationRequest_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + +#include "Cartridge.pb-c.h" +#include "CartridgeAction.pb-c.h" + +typedef struct _CartridgeValidationRequest CartridgeValidationRequest; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _CartridgeValidationRequest +{ + ProtobufCMessage base; + Cartridge *cartridge; + protobuf_c_boolean has_action; + CartridgeAction action; +}; +#define CARTRIDGE_VALIDATION_REQUEST__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&cartridge_validation_request__descriptor) \ + , NULL, 0, CARTRIDGE_ACTION__Inserted } + + +/* CartridgeValidationRequest methods */ +void cartridge_validation_request__init + (CartridgeValidationRequest *message); +size_t cartridge_validation_request__get_packed_size + (const CartridgeValidationRequest *message); +size_t cartridge_validation_request__pack + (const CartridgeValidationRequest *message, + uint8_t *out); +size_t cartridge_validation_request__pack_to_buffer + (const CartridgeValidationRequest *message, + ProtobufCBuffer *buffer); +CartridgeValidationRequest * + cartridge_validation_request__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void cartridge_validation_request__free_unpacked + (CartridgeValidationRequest *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*CartridgeValidationRequest_Closure) + (const CartridgeValidationRequest *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor cartridge_validation_request__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_CartridgeValidationRequest_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.c new file mode 100644 index 000000000..835be6765 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.c @@ -0,0 +1,105 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeValidationResponse.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "CartridgeValidationResponse.pb-c.h" +void cartridge_validation_response__init + (CartridgeValidationResponse *message) +{ + static const CartridgeValidationResponse init_value = CARTRIDGE_VALIDATION_RESPONSE__INIT; + *message = init_value; +} +size_t cartridge_validation_response__get_packed_size + (const CartridgeValidationResponse *message) +{ + assert(message->base.descriptor == &cartridge_validation_response__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t cartridge_validation_response__pack + (const CartridgeValidationResponse *message, + uint8_t *out) +{ + assert(message->base.descriptor == &cartridge_validation_response__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t cartridge_validation_response__pack_to_buffer + (const CartridgeValidationResponse *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &cartridge_validation_response__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +CartridgeValidationResponse * + cartridge_validation_response__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (CartridgeValidationResponse *) + protobuf_c_message_unpack (&cartridge_validation_response__descriptor, + allocator, len, data); +} +void cartridge_validation_response__free_unpacked + (CartridgeValidationResponse *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &cartridge_validation_response__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor cartridge_validation_response__field_descriptors[2] = +{ + { + "IsValid", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(CartridgeValidationResponse, has_isvalid), + offsetof(CartridgeValidationResponse, isvalid), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Cartridge", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_MESSAGE, + 0, /* quantifier_offset */ + offsetof(CartridgeValidationResponse, cartridge), + &cartridge__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned cartridge_validation_response__field_indices_by_name[] = { + 1, /* field[1] = Cartridge */ + 0, /* field[0] = IsValid */ +}; +static const ProtobufCIntRange cartridge_validation_response__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 2 } +}; +const ProtobufCMessageDescriptor cartridge_validation_response__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "CartridgeValidationResponse", + "CartridgeValidationResponse", + "CartridgeValidationResponse", + "", + sizeof(CartridgeValidationResponse), + 2, + cartridge_validation_response__field_descriptors, + cartridge_validation_response__field_indices_by_name, + 1, cartridge_validation_response__number_ranges, + (ProtobufCMessageInit) cartridge_validation_response__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.h new file mode 100644 index 000000000..8803b6307 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/CartridgeValidationResponse.pb-c.h @@ -0,0 +1,74 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: CartridgeValidationResponse.proto */ + +#ifndef PROTOBUF_C_CartridgeValidationResponse_2eproto__INCLUDED +#define PROTOBUF_C_CartridgeValidationResponse_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + +#include "Cartridge.pb-c.h" + +typedef struct _CartridgeValidationResponse CartridgeValidationResponse; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _CartridgeValidationResponse +{ + ProtobufCMessage base; + protobuf_c_boolean has_isvalid; + protobuf_c_boolean isvalid; + Cartridge *cartridge; +}; +#define CARTRIDGE_VALIDATION_RESPONSE__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&cartridge_validation_response__descriptor) \ + , 0, 0, NULL } + + +/* CartridgeValidationResponse methods */ +void cartridge_validation_response__init + (CartridgeValidationResponse *message); +size_t cartridge_validation_response__get_packed_size + (const CartridgeValidationResponse *message); +size_t cartridge_validation_response__pack + (const CartridgeValidationResponse *message, + uint8_t *out); +size_t cartridge_validation_response__pack_to_buffer + (const CartridgeValidationResponse *message, + ProtobufCBuffer *buffer); +CartridgeValidationResponse * + cartridge_validation_response__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void cartridge_validation_response__free_unpacked + (CartridgeValidationResponse *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*CartridgeValidationResponse_Closure) + (const CartridgeValidationResponse *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor cartridge_validation_response__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_CartridgeValidationResponse_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c index d5b888912..11ae78d92 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c @@ -7,7 +7,7 @@ #endif #include "EventType.pb-c.h" -static const ProtobufCEnumValue event_type__enum_values_by_number[285] = +static const ProtobufCEnumValue event_type__enum_values_by_number[289] = { { "None", "EVENT_TYPE__None", 0 }, { "REQUEST_SENT", "EVENT_TYPE__REQUEST_SENT", 1000 }, @@ -20,6 +20,10 @@ static const ProtobufCEnumValue event_type__enum_values_by_number[285] = { "RECORDING_STARTED", "EVENT_TYPE__RECORDING_STARTED", 1007 }, { "RECORDING_STOPPED", "EVENT_TYPE__RECORDING_STOPPED", 1008 }, { "JOB_STATUS", "EVENT_TYPE__JOB_STATUS", 1009 }, + { "JOB_STARTED", "EVENT_TYPE__JOB_STARTED", 1010 }, + { "JOB_ABORTED", "EVENT_TYPE__JOB_ABORTED", 1011 }, + { "JOB_FAILED", "EVENT_TYPE__JOB_FAILED", 1012 }, + { "JOB_COMPLETED", "EVENT_TYPE__JOB_COMPLETED", 1013 }, { "POWER_UP_BIT_FAILURE", "EVENT_TYPE__POWER_UP_BIT_FAILURE", 2000 }, { "EMERGENCY_PUSH_BUTTON_PRESSED", "EVENT_TYPE__EMERGENCY_PUSH_BUTTON_PRESSED", 2001 }, { "FRONT_COVER_1_OPEN", "EVENT_TYPE__FRONT_COVER_1_OPEN", 2002 }, @@ -296,295 +300,299 @@ static const ProtobufCEnumValue event_type__enum_values_by_number[285] = { "WASTE_CARTRIDGE_RFID_TIMEOUT", "EVENT_TYPE__WASTE_CARTRIDGE_RFID_TIMEOUT", 10005 }, }; static const ProtobufCIntRange event_type__value_ranges[] = { -{0, 0},{1000, 1},{2000, 11},{3000, 28},{4000, 79},{5000, 101},{6000, 144},{7000, 150},{8000, 238},{9000, 270},{10000, 279},{0, 285} +{0, 0},{1000, 1},{2000, 15},{3000, 32},{4000, 83},{5000, 105},{6000, 148},{7000, 154},{8000, 242},{9000, 274},{10000, 283},{0, 289} }; -static const ProtobufCEnumValueIndex event_type__enum_values_by_name[285] = +static const ProtobufCEnumValueIndex event_type__enum_values_by_name[289] = { - { "AIR_FILTER_CLOGGED", 271 }, - { "AIR_FILTER_NOT_INSTALLED", 270 }, - { "ALL_WASTE_CARTRIDGES_FULL", 282 }, + { "AIR_FILTER_CLOGGED", 275 }, + { "AIR_FILTER_NOT_INSTALLED", 274 }, + { "ALL_WASTE_CARTRIDGES_FULL", 286 }, { "APPLICATION_EXCEPTION", 4 }, { "APPLICATION_INFORMATION", 5 }, { "APPLICATION_STARTED", 6 }, { "APPLICATION_TERMINATED", 7 }, - { "CARTRIDGES_COVER_OPEN", 17 }, - { "CHILLER_DRY_CONTACT", 276 }, - { "DISPENSER_1_EMPTY", 166 }, - { "DISPENSER_1_HIGH_PRESSURE", 230 }, - { "DISPENSER_1_LOWER_HARD_LIMIT", 222 }, - { "DISPENSER_1_MOTOR_OVERCURRENT", 182 }, - { "DISPENSER_1_MOTOR_OVERTEMPERATURE", 190 }, - { "DISPENSER_1_MOTOR_STALL", 198 }, - { "DISPENSER_1_MOTOR_UNDERVOLTAGE", 206 }, - { "DISPENSER_1_OVERPRESSURE", 150 }, - { "DISPENSER_1_REFILL_FAILURE", 174 }, - { "DISPENSER_1_UNDERPRESSURE", 158 }, - { "DISPENSER_1_UPPER_HARD_LIMIT", 214 }, - { "DISPENSER_2_EMPTY", 167 }, - { "DISPENSER_2_HIGH_PRESSURE", 231 }, - { "DISPENSER_2_LOWER_HARD_LIMIT", 223 }, - { "DISPENSER_2_MOTOR_OVERCURRENT", 183 }, - { "DISPENSER_2_MOTOR_OVERTEMPERATURE", 191 }, - { "DISPENSER_2_MOTOR_STALL", 199 }, - { "DISPENSER_2_MOTOR_UNDERVOLTAGE", 207 }, - { "DISPENSER_2_OVERPRESSURE", 151 }, - { "DISPENSER_2_REFILL_FAILURE", 175 }, - { "DISPENSER_2_UNDERPRESSURE", 159 }, - { "DISPENSER_2_UPPER_HARD_LIMIT", 215 }, - { "DISPENSER_3_EMPTY", 168 }, - { "DISPENSER_3_HIGH_PRESSURE", 232 }, - { "DISPENSER_3_LOWER_HARD_LIMIT", 224 }, - { "DISPENSER_3_MOTOR_OVERCURRENT", 184 }, - { "DISPENSER_3_MOTOR_OVERTEMPERATURE", 192 }, - { "DISPENSER_3_MOTOR_STALL", 200 }, - { "DISPENSER_3_MOTOR_UNDERVOLTAGE", 208 }, - { "DISPENSER_3_OVERPRESSURE", 152 }, - { "DISPENSER_3_REFILL_FAILURE", 176 }, - { "DISPENSER_3_UNDERPRESSURE", 160 }, - { "DISPENSER_3_UPPER_HARD_LIMIT", 216 }, - { "DISPENSER_4_EMPTY", 169 }, - { "DISPENSER_4_HIGH_PRESSURE", 233 }, - { "DISPENSER_4_LOWER_HARD_LIMIT", 225 }, - { "DISPENSER_4_MOTOR_OVERCURRENT", 185 }, - { "DISPENSER_4_MOTOR_OVERTEMPERATURE", 193 }, - { "DISPENSER_4_MOTOR_STALL", 201 }, - { "DISPENSER_4_MOTOR_UNDERVOLTAGE", 209 }, - { "DISPENSER_4_OVERPRESSURE", 153 }, - { "DISPENSER_4_REFILL_FAILURE", 177 }, - { "DISPENSER_4_UNDERPRESSURE", 161 }, - { "DISPENSER_4_UPPER_HARD_LIMIT", 217 }, - { "DISPENSER_5_EMPTY", 170 }, - { "DISPENSER_5_HIGH_PRESSURE", 234 }, - { "DISPENSER_5_LOWER_HARD_LIMIT", 226 }, - { "DISPENSER_5_MOTOR_OVERCURRENT", 186 }, - { "DISPENSER_5_MOTOR_OVERTEMPERATURE", 194 }, - { "DISPENSER_5_MOTOR_STALL", 202 }, - { "DISPENSER_5_MOTOR_UNDERVOLTAGE", 210 }, - { "DISPENSER_5_OVERPRESSURE", 154 }, - { "DISPENSER_5_REFILL_FAILURE", 178 }, - { "DISPENSER_5_UNDERPRESSURE", 162 }, - { "DISPENSER_5_UPPER_HARD_LIMIT", 218 }, - { "DISPENSER_6_EMPTY", 171 }, - { "DISPENSER_6_HIGH_PRESSURE", 235 }, - { "DISPENSER_6_LOWER_HARD_LIMIT", 227 }, - { "DISPENSER_6_MOTOR_OVERCURRENT", 187 }, - { "DISPENSER_6_MOTOR_OVERTEMPERATURE", 195 }, - { "DISPENSER_6_MOTOR_STALL", 203 }, - { "DISPENSER_6_MOTOR_UNDERVOLTAGE", 211 }, - { "DISPENSER_6_OVERPRESSURE", 155 }, - { "DISPENSER_6_REFILL_FAILURE", 179 }, - { "DISPENSER_6_UNDERPRESSURE", 163 }, - { "DISPENSER_6_UPPER_HARD_LIMIT", 219 }, - { "DISPENSER_7_EMPTY", 172 }, - { "DISPENSER_7_HIGH_PRESSURE", 236 }, - { "DISPENSER_7_LOWER_HARD_LIMIT", 228 }, - { "DISPENSER_7_MOTOR_OVERCURRENT", 188 }, - { "DISPENSER_7_MOTOR_OVERTEMPERATURE", 196 }, - { "DISPENSER_7_MOTOR_STALL", 204 }, - { "DISPENSER_7_MOTOR_UNDERVOLTAGE", 212 }, - { "DISPENSER_7_OVERPRESSURE", 156 }, - { "DISPENSER_7_REFILL_FAILURE", 180 }, - { "DISPENSER_7_UNDERPRESSURE", 164 }, - { "DISPENSER_7_UPPER_HARD_LIMIT", 220 }, - { "DISPENSER_8_EMPTY", 173 }, - { "DISPENSER_8_HIGH_PRESSURE", 237 }, - { "DISPENSER_8_LOWER_HARD_LIMIT", 229 }, - { "DISPENSER_8_MOTOR_OVERCURRENT", 189 }, - { "DISPENSER_8_MOTOR_OVERTEMPERATURE", 197 }, - { "DISPENSER_8_MOTOR_STALL", 205 }, - { "DISPENSER_8_MOTOR_UNDERVOLTAGE", 213 }, - { "DISPENSER_8_OVERPRESSURE", 157 }, - { "DISPENSER_8_REFILL_FAILURE", 181 }, - { "DISPENSER_8_UNDERPRESSURE", 165 }, - { "DISPENSER_8_UPPER_HARD_LIMIT", 221 }, - { "DRYER_DOOR_OPEN", 83 }, - { "DRYER_FAN_RPM_TOO_LOW", 94 }, - { "DRYER_FAN_STOPPED", 95 }, - { "DRYER_HEATERS_ZONE_1_CURRENT_LOOP_BREAK", 92 }, - { "DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE", 90 }, - { "DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK", 93 }, - { "DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE", 91 }, - { "DRYER_LID_MOTOR_OVERCURRENT", 96 }, - { "DRYER_LID_MOTOR_OVERTEMPERATURE", 97 }, - { "DRYER_LID_MOTOR_STALL", 98 }, - { "DRYER_LID_MOTOR_UNDERVOLTAGE", 99 }, - { "DRYER_MOTOR_OVERCURRENT", 79 }, - { "DRYER_MOTOR_OVERTEMPERATURE", 80 }, - { "DRYER_MOTOR_STALL", 81 }, - { "DRYER_MOTOR_UNDERVOLTAGE", 82 }, - { "DRYER_THERMAL_CUTOFF", 89 }, - { "DRYER_ZONE_1_OVERTEMPERATURE", 84 }, - { "DRYER_ZONE_1_UNDERTEMPERATURE_A", 86 }, - { "DRYER_ZONE_1_UNDERTEMPERATURE_B", 87 }, - { "DRYER_ZONE_2_OVERTEMPERATURE", 85 }, - { "DRYER_ZONE_2_UNDERTEMPERATURE_A", 100 }, - { "DRYER_ZONE_2_UNDERTEMPERATURE_B", 88 }, - { "DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT", 140 }, - { "DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE", 141 }, - { "DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL", 142 }, - { "DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE", 143 }, - { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT", 136 }, - { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE", 137 }, - { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL", 138 }, - { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE", 139 }, - { "DYEING_HEAD_COVER_CLOSE_TIMEOUT", 131 }, - { "DYEING_HEAD_COVER_MOTOR_OVERCURRENT", 132 }, - { "DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE", 133 }, - { "DYEING_HEAD_COVER_MOTOR_STALL", 134 }, - { "DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE", 135 }, - { "DYEING_HEAD_COVER_OPEN_TIMEOUT", 130 }, - { "DYEING_HEAD_THERMAL_CUTOFF", 129 }, - { "DYEING_HEAD_ZONE_1_CURRENT_LOOP_BREAK", 124 }, - { "DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE", 119 }, - { "DYEING_HEAD_ZONE_1_OVERTEMPERATURE", 101 }, - { "DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A", 107 }, - { "DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B", 113 }, - { "DYEING_HEAD_ZONE_2_CURRENT_LOOP_BREAK", 125 }, - { "DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE", 120 }, - { "DYEING_HEAD_ZONE_2_OVERTEMPERATURE", 102 }, - { "DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A", 108 }, - { "DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B", 114 }, - { "DYEING_HEAD_ZONE_3_CURRENT_LOOP_BREAK", 126 }, - { "DYEING_HEAD_ZONE_3_CURRENT_OUT_OF_RANGE", 121 }, - { "DYEING_HEAD_ZONE_3_OVERTEMPERATURE", 103 }, - { "DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_A", 109 }, - { "DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_B", 115 }, - { "DYEING_HEAD_ZONE_4_CURRENT_LOOP_BREAK", 127 }, - { "DYEING_HEAD_ZONE_4_CURRENT_OUT_OF_RANGE", 122 }, - { "DYEING_HEAD_ZONE_4_OVERTEMPERATURE", 104 }, - { "DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A", 110 }, - { "DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_B", 116 }, - { "DYEING_HEAD_ZONE_5_6_CURRENT_LOOP_BREAK", 128 }, - { "DYEING_HEAD_ZONE_5_6_CURRENT_OUT_OF_RANGE", 123 }, - { "DYEING_HEAD_ZONE_5_OVERTEMPERATURE", 105 }, - { "DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A", 111 }, - { "DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_B", 117 }, - { "DYEING_HEAD_ZONE_6_OVERTEMPERATURE", 106 }, - { "DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A", 112 }, - { "DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B", 118 }, - { "ELECTRICAL_CABINET_FANS_RPM_TOO_LOW", 22 }, - { "ELECTRICAL_CABINET_FANS_STOPPED", 23 }, - { "EMERGENCY_PUSH_BUTTON_PRESSED", 12 }, - { "FEEDER_DANCER_MOTOR_OVERCURRENT", 66 }, - { "FEEDER_DANCER_MOTOR_OVERTEMPERATURE", 69 }, - { "FEEDER_DANCER_MOTOR_STALL", 72 }, - { "FEEDER_DANCER_MOTOR_UNDERVOLTAGE", 75 }, - { "FEEDER_MOTOR_OVERCURRENT", 31 }, - { "FEEDER_MOTOR_OVERTEMPERATURE", 38 }, - { "FEEDER_MOTOR_STALL", 45 }, - { "FEEDER_MOTOR_UNDERVOLTAGE", 52 }, - { "FRONT_COVER_1_OPEN", 13 }, - { "FRONT_COVER_2_OPEN", 14 }, - { "FRONT_COVER_3_OPEN", 15 }, - { "FRONT_COVER_4_OPEN", 16 }, - { "INK_CARTRIDGE_PRESENCE_SENSOR_TIMEOUT", 279 }, - { "INK_CARTRIDGE_RFID_TIMEOUT", 280 }, - { "INSUFFICIENT_AIR_FLOW", 277 }, + { "CARTRIDGES_COVER_OPEN", 21 }, + { "CHILLER_DRY_CONTACT", 280 }, + { "DISPENSER_1_EMPTY", 170 }, + { "DISPENSER_1_HIGH_PRESSURE", 234 }, + { "DISPENSER_1_LOWER_HARD_LIMIT", 226 }, + { "DISPENSER_1_MOTOR_OVERCURRENT", 186 }, + { "DISPENSER_1_MOTOR_OVERTEMPERATURE", 194 }, + { "DISPENSER_1_MOTOR_STALL", 202 }, + { "DISPENSER_1_MOTOR_UNDERVOLTAGE", 210 }, + { "DISPENSER_1_OVERPRESSURE", 154 }, + { "DISPENSER_1_REFILL_FAILURE", 178 }, + { "DISPENSER_1_UNDERPRESSURE", 162 }, + { "DISPENSER_1_UPPER_HARD_LIMIT", 218 }, + { "DISPENSER_2_EMPTY", 171 }, + { "DISPENSER_2_HIGH_PRESSURE", 235 }, + { "DISPENSER_2_LOWER_HARD_LIMIT", 227 }, + { "DISPENSER_2_MOTOR_OVERCURRENT", 187 }, + { "DISPENSER_2_MOTOR_OVERTEMPERATURE", 195 }, + { "DISPENSER_2_MOTOR_STALL", 203 }, + { "DISPENSER_2_MOTOR_UNDERVOLTAGE", 211 }, + { "DISPENSER_2_OVERPRESSURE", 155 }, + { "DISPENSER_2_REFILL_FAILURE", 179 }, + { "DISPENSER_2_UNDERPRESSURE", 163 }, + { "DISPENSER_2_UPPER_HARD_LIMIT", 219 }, + { "DISPENSER_3_EMPTY", 172 }, + { "DISPENSER_3_HIGH_PRESSURE", 236 }, + { "DISPENSER_3_LOWER_HARD_LIMIT", 228 }, + { "DISPENSER_3_MOTOR_OVERCURRENT", 188 }, + { "DISPENSER_3_MOTOR_OVERTEMPERATURE", 196 }, + { "DISPENSER_3_MOTOR_STALL", 204 }, + { "DISPENSER_3_MOTOR_UNDERVOLTAGE", 212 }, + { "DISPENSER_3_OVERPRESSURE", 156 }, + { "DISPENSER_3_REFILL_FAILURE", 180 }, + { "DISPENSER_3_UNDERPRESSURE", 164 }, + { "DISPENSER_3_UPPER_HARD_LIMIT", 220 }, + { "DISPENSER_4_EMPTY", 173 }, + { "DISPENSER_4_HIGH_PRESSURE", 237 }, + { "DISPENSER_4_LOWER_HARD_LIMIT", 229 }, + { "DISPENSER_4_MOTOR_OVERCURRENT", 189 }, + { "DISPENSER_4_MOTOR_OVERTEMPERATURE", 197 }, + { "DISPENSER_4_MOTOR_STALL", 205 }, + { "DISPENSER_4_MOTOR_UNDERVOLTAGE", 213 }, + { "DISPENSER_4_OVERPRESSURE", 157 }, + { "DISPENSER_4_REFILL_FAILURE", 181 }, + { "DISPENSER_4_UNDERPRESSURE", 165 }, + { "DISPENSER_4_UPPER_HARD_LIMIT", 221 }, + { "DISPENSER_5_EMPTY", 174 }, + { "DISPENSER_5_HIGH_PRESSURE", 238 }, + { "DISPENSER_5_LOWER_HARD_LIMIT", 230 }, + { "DISPENSER_5_MOTOR_OVERCURRENT", 190 }, + { "DISPENSER_5_MOTOR_OVERTEMPERATURE", 198 }, + { "DISPENSER_5_MOTOR_STALL", 206 }, + { "DISPENSER_5_MOTOR_UNDERVOLTAGE", 214 }, + { "DISPENSER_5_OVERPRESSURE", 158 }, + { "DISPENSER_5_REFILL_FAILURE", 182 }, + { "DISPENSER_5_UNDERPRESSURE", 166 }, + { "DISPENSER_5_UPPER_HARD_LIMIT", 222 }, + { "DISPENSER_6_EMPTY", 175 }, + { "DISPENSER_6_HIGH_PRESSURE", 239 }, + { "DISPENSER_6_LOWER_HARD_LIMIT", 231 }, + { "DISPENSER_6_MOTOR_OVERCURRENT", 191 }, + { "DISPENSER_6_MOTOR_OVERTEMPERATURE", 199 }, + { "DISPENSER_6_MOTOR_STALL", 207 }, + { "DISPENSER_6_MOTOR_UNDERVOLTAGE", 215 }, + { "DISPENSER_6_OVERPRESSURE", 159 }, + { "DISPENSER_6_REFILL_FAILURE", 183 }, + { "DISPENSER_6_UNDERPRESSURE", 167 }, + { "DISPENSER_6_UPPER_HARD_LIMIT", 223 }, + { "DISPENSER_7_EMPTY", 176 }, + { "DISPENSER_7_HIGH_PRESSURE", 240 }, + { "DISPENSER_7_LOWER_HARD_LIMIT", 232 }, + { "DISPENSER_7_MOTOR_OVERCURRENT", 192 }, + { "DISPENSER_7_MOTOR_OVERTEMPERATURE", 200 }, + { "DISPENSER_7_MOTOR_STALL", 208 }, + { "DISPENSER_7_MOTOR_UNDERVOLTAGE", 216 }, + { "DISPENSER_7_OVERPRESSURE", 160 }, + { "DISPENSER_7_REFILL_FAILURE", 184 }, + { "DISPENSER_7_UNDERPRESSURE", 168 }, + { "DISPENSER_7_UPPER_HARD_LIMIT", 224 }, + { "DISPENSER_8_EMPTY", 177 }, + { "DISPENSER_8_HIGH_PRESSURE", 241 }, + { "DISPENSER_8_LOWER_HARD_LIMIT", 233 }, + { "DISPENSER_8_MOTOR_OVERCURRENT", 193 }, + { "DISPENSER_8_MOTOR_OVERTEMPERATURE", 201 }, + { "DISPENSER_8_MOTOR_STALL", 209 }, + { "DISPENSER_8_MOTOR_UNDERVOLTAGE", 217 }, + { "DISPENSER_8_OVERPRESSURE", 161 }, + { "DISPENSER_8_REFILL_FAILURE", 185 }, + { "DISPENSER_8_UNDERPRESSURE", 169 }, + { "DISPENSER_8_UPPER_HARD_LIMIT", 225 }, + { "DRYER_DOOR_OPEN", 87 }, + { "DRYER_FAN_RPM_TOO_LOW", 98 }, + { "DRYER_FAN_STOPPED", 99 }, + { "DRYER_HEATERS_ZONE_1_CURRENT_LOOP_BREAK", 96 }, + { "DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE", 94 }, + { "DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK", 97 }, + { "DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE", 95 }, + { "DRYER_LID_MOTOR_OVERCURRENT", 100 }, + { "DRYER_LID_MOTOR_OVERTEMPERATURE", 101 }, + { "DRYER_LID_MOTOR_STALL", 102 }, + { "DRYER_LID_MOTOR_UNDERVOLTAGE", 103 }, + { "DRYER_MOTOR_OVERCURRENT", 83 }, + { "DRYER_MOTOR_OVERTEMPERATURE", 84 }, + { "DRYER_MOTOR_STALL", 85 }, + { "DRYER_MOTOR_UNDERVOLTAGE", 86 }, + { "DRYER_THERMAL_CUTOFF", 93 }, + { "DRYER_ZONE_1_OVERTEMPERATURE", 88 }, + { "DRYER_ZONE_1_UNDERTEMPERATURE_A", 90 }, + { "DRYER_ZONE_1_UNDERTEMPERATURE_B", 91 }, + { "DRYER_ZONE_2_OVERTEMPERATURE", 89 }, + { "DRYER_ZONE_2_UNDERTEMPERATURE_A", 104 }, + { "DRYER_ZONE_2_UNDERTEMPERATURE_B", 92 }, + { "DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT", 144 }, + { "DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE", 145 }, + { "DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL", 146 }, + { "DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE", 147 }, + { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT", 140 }, + { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE", 141 }, + { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL", 142 }, + { "DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE", 143 }, + { "DYEING_HEAD_COVER_CLOSE_TIMEOUT", 135 }, + { "DYEING_HEAD_COVER_MOTOR_OVERCURRENT", 136 }, + { "DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE", 137 }, + { "DYEING_HEAD_COVER_MOTOR_STALL", 138 }, + { "DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE", 139 }, + { "DYEING_HEAD_COVER_OPEN_TIMEOUT", 134 }, + { "DYEING_HEAD_THERMAL_CUTOFF", 133 }, + { "DYEING_HEAD_ZONE_1_CURRENT_LOOP_BREAK", 128 }, + { "DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE", 123 }, + { "DYEING_HEAD_ZONE_1_OVERTEMPERATURE", 105 }, + { "DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A", 111 }, + { "DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B", 117 }, + { "DYEING_HEAD_ZONE_2_CURRENT_LOOP_BREAK", 129 }, + { "DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE", 124 }, + { "DYEING_HEAD_ZONE_2_OVERTEMPERATURE", 106 }, + { "DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A", 112 }, + { "DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B", 118 }, + { "DYEING_HEAD_ZONE_3_CURRENT_LOOP_BREAK", 130 }, + { "DYEING_HEAD_ZONE_3_CURRENT_OUT_OF_RANGE", 125 }, + { "DYEING_HEAD_ZONE_3_OVERTEMPERATURE", 107 }, + { "DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_A", 113 }, + { "DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_B", 119 }, + { "DYEING_HEAD_ZONE_4_CURRENT_LOOP_BREAK", 131 }, + { "DYEING_HEAD_ZONE_4_CURRENT_OUT_OF_RANGE", 126 }, + { "DYEING_HEAD_ZONE_4_OVERTEMPERATURE", 108 }, + { "DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A", 114 }, + { "DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_B", 120 }, + { "DYEING_HEAD_ZONE_5_6_CURRENT_LOOP_BREAK", 132 }, + { "DYEING_HEAD_ZONE_5_6_CURRENT_OUT_OF_RANGE", 127 }, + { "DYEING_HEAD_ZONE_5_OVERTEMPERATURE", 109 }, + { "DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A", 115 }, + { "DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_B", 121 }, + { "DYEING_HEAD_ZONE_6_OVERTEMPERATURE", 110 }, + { "DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A", 116 }, + { "DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B", 122 }, + { "ELECTRICAL_CABINET_FANS_RPM_TOO_LOW", 26 }, + { "ELECTRICAL_CABINET_FANS_STOPPED", 27 }, + { "EMERGENCY_PUSH_BUTTON_PRESSED", 16 }, + { "FEEDER_DANCER_MOTOR_OVERCURRENT", 70 }, + { "FEEDER_DANCER_MOTOR_OVERTEMPERATURE", 73 }, + { "FEEDER_DANCER_MOTOR_STALL", 76 }, + { "FEEDER_DANCER_MOTOR_UNDERVOLTAGE", 79 }, + { "FEEDER_MOTOR_OVERCURRENT", 35 }, + { "FEEDER_MOTOR_OVERTEMPERATURE", 42 }, + { "FEEDER_MOTOR_STALL", 49 }, + { "FEEDER_MOTOR_UNDERVOLTAGE", 56 }, + { "FRONT_COVER_1_OPEN", 17 }, + { "FRONT_COVER_2_OPEN", 18 }, + { "FRONT_COVER_3_OPEN", 19 }, + { "FRONT_COVER_4_OPEN", 20 }, + { "INK_CARTRIDGE_PRESENCE_SENSOR_TIMEOUT", 283 }, + { "INK_CARTRIDGE_RFID_TIMEOUT", 284 }, + { "INSUFFICIENT_AIR_FLOW", 281 }, + { "JOB_ABORTED", 12 }, + { "JOB_COMPLETED", 14 }, + { "JOB_FAILED", 13 }, + { "JOB_STARTED", 11 }, { "JOB_STATUS", 10 }, - { "LEFT_LOADER_MOTOR_OVERCURRENT", 34 }, - { "LEFT_LOADER_MOTOR_OVERTEMPERATURE", 41 }, - { "LEFT_LOADER_MOTOR_STALL", 48 }, - { "LEFT_LOADER_MOTOR_UNDERVOLTAGE", 55 }, - { "LOADING_ARM_MOTOR_OVERCURRENT", 37 }, - { "LOADING_ARM_MOTOR_OVERTEMPERATURE", 44 }, - { "LOADING_ARM_MOTOR_STALL", 51 }, - { "LOADING_ARM_MOTOR_UNDERVOLTAGE", 58 }, - { "LTFU_DOWN_TIMEOUT", 60 }, - { "LTFU_UP_TIMEOUT", 59 }, - { "MACHINE_FANS_RPM_TOO_LOW", 20 }, - { "MACHINE_FANS_STOPPED", 21 }, - { "MACHINE_INTERNAL_OVERTEMPERATURE", 19 }, - { "MACHINE_STATE_HW_CONFIG_FAILED", 25 }, - { "MACHINE_STATE_INITIAL_BLOWER_FAILED", 26 }, - { "MACHINE_STATE_NO_CFG_FILE", 24 }, - { "MACHINE_STATE_NO_THREAD_DETECTED", 78 }, - { "MID_TANK_1_EMPTY", 246 }, - { "MID_TANK_1_FILL_TIMEOUT", 262 }, - { "MID_TANK_1_LOW_LEVEL", 238 }, - { "MID_TANK_1_OVERFLOW", 254 }, - { "MID_TANK_2_EMPTY", 247 }, - { "MID_TANK_2_FILL_TIMEOUT", 263 }, - { "MID_TANK_2_LOW_LEVEL", 239 }, - { "MID_TANK_2_OVERFLOW", 255 }, - { "MID_TANK_3_EMPTY", 248 }, - { "MID_TANK_3_FILL_TIMEOUT", 264 }, - { "MID_TANK_3_LOW_LEVEL", 240 }, - { "MID_TANK_3_OVERFLOW", 256 }, - { "MID_TANK_4_EMPTY", 249 }, - { "MID_TANK_4_FILL_TIMEOUT", 265 }, - { "MID_TANK_4_LOW_LEVEL", 241 }, - { "MID_TANK_4_OVERFLOW", 257 }, - { "MID_TANK_5_EMPTY", 250 }, - { "MID_TANK_5_FILL_TIMEOUT", 266 }, - { "MID_TANK_5_LOW_LEVEL", 242 }, - { "MID_TANK_5_OVERFLOW", 258 }, - { "MID_TANK_6_EMPTY", 251 }, - { "MID_TANK_6_FILL_TIMEOUT", 267 }, - { "MID_TANK_6_LOW_LEVEL", 243 }, - { "MID_TANK_6_OVERFLOW", 259 }, - { "MID_TANK_7_EMPTY", 252 }, - { "MID_TANK_7_FILL_TIMEOUT", 268 }, - { "MID_TANK_7_LOW_LEVEL", 244 }, - { "MID_TANK_7_OVERFLOW", 260 }, - { "MID_TANK_8_EMPTY", 253 }, - { "MID_TANK_8_FILL_TIMEOUT", 269 }, - { "MID_TANK_8_LOW_LEVEL", 245 }, - { "MID_TANK_8_OVERFLOW", 261 }, - { "MIXER_CURRENT_LOOP_BREAK", 149 }, - { "MIXER_CURRENT_OUT_OF_RANGE", 148 }, - { "MIXER_OVERTEMPERATURE", 144 }, - { "MIXER_THERMAL_CUTOFF", 147 }, - { "MIXER_UNDERTEMPERATURE_A", 145 }, - { "MIXER_UNDERTEMPERATURE_B", 146 }, - { "NO_AIR_PRESSURE", 273 }, - { "NO_WASTE_CARTRIDGE_AVAILABLE", 281 }, + { "LEFT_LOADER_MOTOR_OVERCURRENT", 38 }, + { "LEFT_LOADER_MOTOR_OVERTEMPERATURE", 45 }, + { "LEFT_LOADER_MOTOR_STALL", 52 }, + { "LEFT_LOADER_MOTOR_UNDERVOLTAGE", 59 }, + { "LOADING_ARM_MOTOR_OVERCURRENT", 41 }, + { "LOADING_ARM_MOTOR_OVERTEMPERATURE", 48 }, + { "LOADING_ARM_MOTOR_STALL", 55 }, + { "LOADING_ARM_MOTOR_UNDERVOLTAGE", 62 }, + { "LTFU_DOWN_TIMEOUT", 64 }, + { "LTFU_UP_TIMEOUT", 63 }, + { "MACHINE_FANS_RPM_TOO_LOW", 24 }, + { "MACHINE_FANS_STOPPED", 25 }, + { "MACHINE_INTERNAL_OVERTEMPERATURE", 23 }, + { "MACHINE_STATE_HW_CONFIG_FAILED", 29 }, + { "MACHINE_STATE_INITIAL_BLOWER_FAILED", 30 }, + { "MACHINE_STATE_NO_CFG_FILE", 28 }, + { "MACHINE_STATE_NO_THREAD_DETECTED", 82 }, + { "MID_TANK_1_EMPTY", 250 }, + { "MID_TANK_1_FILL_TIMEOUT", 266 }, + { "MID_TANK_1_LOW_LEVEL", 242 }, + { "MID_TANK_1_OVERFLOW", 258 }, + { "MID_TANK_2_EMPTY", 251 }, + { "MID_TANK_2_FILL_TIMEOUT", 267 }, + { "MID_TANK_2_LOW_LEVEL", 243 }, + { "MID_TANK_2_OVERFLOW", 259 }, + { "MID_TANK_3_EMPTY", 252 }, + { "MID_TANK_3_FILL_TIMEOUT", 268 }, + { "MID_TANK_3_LOW_LEVEL", 244 }, + { "MID_TANK_3_OVERFLOW", 260 }, + { "MID_TANK_4_EMPTY", 253 }, + { "MID_TANK_4_FILL_TIMEOUT", 269 }, + { "MID_TANK_4_LOW_LEVEL", 245 }, + { "MID_TANK_4_OVERFLOW", 261 }, + { "MID_TANK_5_EMPTY", 254 }, + { "MID_TANK_5_FILL_TIMEOUT", 270 }, + { "MID_TANK_5_LOW_LEVEL", 246 }, + { "MID_TANK_5_OVERFLOW", 262 }, + { "MID_TANK_6_EMPTY", 255 }, + { "MID_TANK_6_FILL_TIMEOUT", 271 }, + { "MID_TANK_6_LOW_LEVEL", 247 }, + { "MID_TANK_6_OVERFLOW", 263 }, + { "MID_TANK_7_EMPTY", 256 }, + { "MID_TANK_7_FILL_TIMEOUT", 272 }, + { "MID_TANK_7_LOW_LEVEL", 248 }, + { "MID_TANK_7_OVERFLOW", 264 }, + { "MID_TANK_8_EMPTY", 257 }, + { "MID_TANK_8_FILL_TIMEOUT", 273 }, + { "MID_TANK_8_LOW_LEVEL", 249 }, + { "MID_TANK_8_OVERFLOW", 265 }, + { "MIXER_CURRENT_LOOP_BREAK", 153 }, + { "MIXER_CURRENT_OUT_OF_RANGE", 152 }, + { "MIXER_OVERTEMPERATURE", 148 }, + { "MIXER_THERMAL_CUTOFF", 151 }, + { "MIXER_UNDERTEMPERATURE_A", 149 }, + { "MIXER_UNDERTEMPERATURE_B", 150 }, + { "NO_AIR_PRESSURE", 277 }, + { "NO_WASTE_CARTRIDGE_AVAILABLE", 285 }, { "None", 0 }, - { "POWER_UP_BIT_FAILURE", 11 }, - { "PULLER_DANCER_MOTOR_OVERCURRENT", 65 }, - { "PULLER_DANCER_MOTOR_OVERTEMPERATURE", 68 }, - { "PULLER_DANCER_MOTOR_STALL", 71 }, - { "PULLER_DANCER_MOTOR_UNDERVOLTAGE", 74 }, - { "PULLER_MOTOR_OVERCURRENT", 33 }, - { "PULLER_MOTOR_OVERTEMPERATURE", 40 }, - { "PULLER_MOTOR_STALL", 47 }, - { "PULLER_MOTOR_UNDERVOLTAGE", 54 }, - { "REAR_COVER_OPEN", 18 }, + { "POWER_UP_BIT_FAILURE", 15 }, + { "PULLER_DANCER_MOTOR_OVERCURRENT", 69 }, + { "PULLER_DANCER_MOTOR_OVERTEMPERATURE", 72 }, + { "PULLER_DANCER_MOTOR_STALL", 75 }, + { "PULLER_DANCER_MOTOR_UNDERVOLTAGE", 78 }, + { "PULLER_MOTOR_OVERCURRENT", 37 }, + { "PULLER_MOTOR_OVERTEMPERATURE", 44 }, + { "PULLER_MOTOR_STALL", 51 }, + { "PULLER_MOTOR_UNDERVOLTAGE", 58 }, + { "REAR_COVER_OPEN", 22 }, { "RECORDING_STARTED", 8 }, { "RECORDING_STOPPED", 9 }, { "REQUEST_FAILED", 3 }, { "REQUEST_SENT", 1 }, { "RESPONSE_RECEIVED", 2 }, - { "RIGHT_LOADER_MOTOR_OVERCURRENT", 32 }, - { "RIGHT_LOADER_MOTOR_OVERTEMPERATURE", 39 }, - { "RIGHT_LOADER_MOTOR_STALL", 46 }, - { "RIGHT_LOADER_MOTOR_UNDERVOLTAGE", 53 }, - { "RTFU_DOWN_TIMEOUT", 62 }, - { "RTFU_UP_TIMEOUT", 61 }, - { "SCREW_MOTOR_LIMIT_TIMEOUT", 63 }, - { "SCREW_MOTOR_OVERCURRENT", 36 }, - { "SCREW_MOTOR_OVERTEMPERATURE", 43 }, - { "SCREW_MOTOR_STALL", 50 }, - { "SCREW_MOTOR_UNDERVOLTAGE", 57 }, - { "THREAD_BREAK", 28 }, - { "THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER", 29 }, - { "THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER", 76 }, - { "THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER", 77 }, - { "UNSPECIFIED", 27 }, - { "VOC_SENSOR_ALARM_SLOPE", 278 }, - { "VOC_SENSOR_ALARM_TIME", 275 }, - { "WASTE_CARTRIDGE_PRESENCE_SENSOR_TIMEOUT", 283 }, - { "WASTE_CARTRIDGE_RFID_TIMEOUT", 284 }, - { "WASTE_CONTAINER_EMPTYING_TIMEOUT", 272 }, - { "WASTE_CONTAINER_OVERFLOW", 274 }, - { "WINDER_CONE_DOES_NOT_EXIST", 30 }, - { "WINDER_DANCER_MOTOR_OVERCURRENT", 64 }, - { "WINDER_DANCER_MOTOR_OVERTEMPERATURE", 67 }, - { "WINDER_DANCER_MOTOR_STALL", 70 }, - { "WINDER_DANCER_MOTOR_UNDERVOLTAGE", 73 }, - { "WINDER_MOTOR_OVERCURRENT", 35 }, - { "WINDER_MOTOR_OVERTEMPERATURE", 42 }, - { "WINDER_MOTOR_STALL", 49 }, - { "WINDER_MOTOR_UNDERVOLTAGE", 56 }, + { "RIGHT_LOADER_MOTOR_OVERCURRENT", 36 }, + { "RIGHT_LOADER_MOTOR_OVERTEMPERATURE", 43 }, + { "RIGHT_LOADER_MOTOR_STALL", 50 }, + { "RIGHT_LOADER_MOTOR_UNDERVOLTAGE", 57 }, + { "RTFU_DOWN_TIMEOUT", 66 }, + { "RTFU_UP_TIMEOUT", 65 }, + { "SCREW_MOTOR_LIMIT_TIMEOUT", 67 }, + { "SCREW_MOTOR_OVERCURRENT", 40 }, + { "SCREW_MOTOR_OVERTEMPERATURE", 47 }, + { "SCREW_MOTOR_STALL", 54 }, + { "SCREW_MOTOR_UNDERVOLTAGE", 61 }, + { "THREAD_BREAK", 32 }, + { "THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER", 33 }, + { "THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER", 80 }, + { "THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER", 81 }, + { "UNSPECIFIED", 31 }, + { "VOC_SENSOR_ALARM_SLOPE", 282 }, + { "VOC_SENSOR_ALARM_TIME", 279 }, + { "WASTE_CARTRIDGE_PRESENCE_SENSOR_TIMEOUT", 287 }, + { "WASTE_CARTRIDGE_RFID_TIMEOUT", 288 }, + { "WASTE_CONTAINER_EMPTYING_TIMEOUT", 276 }, + { "WASTE_CONTAINER_OVERFLOW", 278 }, + { "WINDER_CONE_DOES_NOT_EXIST", 34 }, + { "WINDER_DANCER_MOTOR_OVERCURRENT", 68 }, + { "WINDER_DANCER_MOTOR_OVERTEMPERATURE", 71 }, + { "WINDER_DANCER_MOTOR_STALL", 74 }, + { "WINDER_DANCER_MOTOR_UNDERVOLTAGE", 77 }, + { "WINDER_MOTOR_OVERCURRENT", 39 }, + { "WINDER_MOTOR_OVERTEMPERATURE", 46 }, + { "WINDER_MOTOR_STALL", 53 }, + { "WINDER_MOTOR_UNDERVOLTAGE", 60 }, }; const ProtobufCEnumDescriptor event_type__descriptor = { @@ -593,9 +601,9 @@ const ProtobufCEnumDescriptor event_type__descriptor = "EventType", "EventType", "", - 285, + 289, event_type__enum_values_by_number, - 285, + 289, event_type__enum_values_by_name, 11, event_type__value_ranges, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h index f8aecc24f..3a2ffd071 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h @@ -31,6 +31,10 @@ typedef enum _EventType { EVENT_TYPE__RECORDING_STARTED = 1007, EVENT_TYPE__RECORDING_STOPPED = 1008, EVENT_TYPE__JOB_STATUS = 1009, + EVENT_TYPE__JOB_STARTED = 1010, + EVENT_TYPE__JOB_ABORTED = 1011, + EVENT_TYPE__JOB_FAILED = 1012, + EVENT_TYPE__JOB_COMPLETED = 1013, EVENT_TYPE__POWER_UP_BIT_FAILURE = 2000, EVENT_TYPE__EMERGENCY_PUSH_BUTTON_PRESSED = 2001, EVENT_TYPE__FRONT_COVER_1_OPEN = 2002, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.c new file mode 100644 index 000000000..1e96547cf --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.c @@ -0,0 +1,72 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StartCartridgesUpdateRequest.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "StartCartridgesUpdateRequest.pb-c.h" +void start_cartridges_update_request__init + (StartCartridgesUpdateRequest *message) +{ + static const StartCartridgesUpdateRequest init_value = START_CARTRIDGES_UPDATE_REQUEST__INIT; + *message = init_value; +} +size_t start_cartridges_update_request__get_packed_size + (const StartCartridgesUpdateRequest *message) +{ + assert(message->base.descriptor == &start_cartridges_update_request__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t start_cartridges_update_request__pack + (const StartCartridgesUpdateRequest *message, + uint8_t *out) +{ + assert(message->base.descriptor == &start_cartridges_update_request__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t start_cartridges_update_request__pack_to_buffer + (const StartCartridgesUpdateRequest *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &start_cartridges_update_request__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +StartCartridgesUpdateRequest * + start_cartridges_update_request__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (StartCartridgesUpdateRequest *) + protobuf_c_message_unpack (&start_cartridges_update_request__descriptor, + allocator, len, data); +} +void start_cartridges_update_request__free_unpacked + (StartCartridgesUpdateRequest *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &start_cartridges_update_request__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +#define start_cartridges_update_request__field_descriptors NULL +#define start_cartridges_update_request__field_indices_by_name NULL +#define start_cartridges_update_request__number_ranges NULL +const ProtobufCMessageDescriptor start_cartridges_update_request__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "StartCartridgesUpdateRequest", + "StartCartridgesUpdateRequest", + "StartCartridgesUpdateRequest", + "", + sizeof(StartCartridgesUpdateRequest), + 0, + start_cartridges_update_request__field_descriptors, + start_cartridges_update_request__field_indices_by_name, + 0, start_cartridges_update_request__number_ranges, + (ProtobufCMessageInit) start_cartridges_update_request__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.h new file mode 100644 index 000000000..f8f2dcf3b --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateRequest.pb-c.h @@ -0,0 +1,70 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StartCartridgesUpdateRequest.proto */ + +#ifndef PROTOBUF_C_StartCartridgesUpdateRequest_2eproto__INCLUDED +#define PROTOBUF_C_StartCartridgesUpdateRequest_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + +typedef struct _StartCartridgesUpdateRequest StartCartridgesUpdateRequest; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _StartCartridgesUpdateRequest +{ + ProtobufCMessage base; +}; +#define START_CARTRIDGES_UPDATE_REQUEST__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&start_cartridges_update_request__descriptor) \ + } + + +/* StartCartridgesUpdateRequest methods */ +void start_cartridges_update_request__init + (StartCartridgesUpdateRequest *message); +size_t start_cartridges_update_request__get_packed_size + (const StartCartridgesUpdateRequest *message); +size_t start_cartridges_update_request__pack + (const StartCartridgesUpdateRequest *message, + uint8_t *out); +size_t start_cartridges_update_request__pack_to_buffer + (const StartCartridgesUpdateRequest *message, + ProtobufCBuffer *buffer); +StartCartridgesUpdateRequest * + start_cartridges_update_request__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void start_cartridges_update_request__free_unpacked + (StartCartridgesUpdateRequest *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*StartCartridgesUpdateRequest_Closure) + (const StartCartridgesUpdateRequest *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor start_cartridges_update_request__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_StartCartridgesUpdateRequest_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.c new file mode 100644 index 000000000..683e28ee2 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.c @@ -0,0 +1,105 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StartCartridgesUpdateResponse.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "StartCartridgesUpdateResponse.pb-c.h" +void start_cartridges_update_response__init + (StartCartridgesUpdateResponse *message) +{ + static const StartCartridgesUpdateResponse init_value = START_CARTRIDGES_UPDATE_RESPONSE__INIT; + *message = init_value; +} +size_t start_cartridges_update_response__get_packed_size + (const StartCartridgesUpdateResponse *message) +{ + assert(message->base.descriptor == &start_cartridges_update_response__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t start_cartridges_update_response__pack + (const StartCartridgesUpdateResponse *message, + uint8_t *out) +{ + assert(message->base.descriptor == &start_cartridges_update_response__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t start_cartridges_update_response__pack_to_buffer + (const StartCartridgesUpdateResponse *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &start_cartridges_update_response__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +StartCartridgesUpdateResponse * + start_cartridges_update_response__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (StartCartridgesUpdateResponse *) + protobuf_c_message_unpack (&start_cartridges_update_response__descriptor, + allocator, len, data); +} +void start_cartridges_update_response__free_unpacked + (StartCartridgesUpdateResponse *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &start_cartridges_update_response__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor start_cartridges_update_response__field_descriptors[2] = +{ + { + "Cartridge", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_MESSAGE, + 0, /* quantifier_offset */ + offsetof(StartCartridgesUpdateResponse, cartridge), + &cartridge__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Action", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_ENUM, + offsetof(StartCartridgesUpdateResponse, has_action), + offsetof(StartCartridgesUpdateResponse, action), + &cartridge_action__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned start_cartridges_update_response__field_indices_by_name[] = { + 1, /* field[1] = Action */ + 0, /* field[0] = Cartridge */ +}; +static const ProtobufCIntRange start_cartridges_update_response__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 2 } +}; +const ProtobufCMessageDescriptor start_cartridges_update_response__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "StartCartridgesUpdateResponse", + "StartCartridgesUpdateResponse", + "StartCartridgesUpdateResponse", + "", + sizeof(StartCartridgesUpdateResponse), + 2, + start_cartridges_update_response__field_descriptors, + start_cartridges_update_response__field_indices_by_name, + 1, start_cartridges_update_response__number_ranges, + (ProtobufCMessageInit) start_cartridges_update_response__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.h new file mode 100644 index 000000000..409c8ff3f --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StartCartridgesUpdateResponse.pb-c.h @@ -0,0 +1,75 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StartCartridgesUpdateResponse.proto */ + +#ifndef PROTOBUF_C_StartCartridgesUpdateResponse_2eproto__INCLUDED +#define PROTOBUF_C_StartCartridgesUpdateResponse_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + +#include "Cartridge.pb-c.h" +#include "CartridgeAction.pb-c.h" + +typedef struct _StartCartridgesUpdateResponse StartCartridgesUpdateResponse; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _StartCartridgesUpdateResponse +{ + ProtobufCMessage base; + Cartridge *cartridge; + protobuf_c_boolean has_action; + CartridgeAction action; +}; +#define START_CARTRIDGES_UPDATE_RESPONSE__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&start_cartridges_update_response__descriptor) \ + , NULL, 0, CARTRIDGE_ACTION__Inserted } + + +/* StartCartridgesUpdateResponse methods */ +void start_cartridges_update_response__init + (StartCartridgesUpdateResponse *message); +size_t start_cartridges_update_response__get_packed_size + (const StartCartridgesUpdateResponse *message); +size_t start_cartridges_update_response__pack + (const StartCartridgesUpdateResponse *message, + uint8_t *out); +size_t start_cartridges_update_response__pack_to_buffer + (const StartCartridgesUpdateResponse *message, + ProtobufCBuffer *buffer); +StartCartridgesUpdateResponse * + start_cartridges_update_response__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void start_cartridges_update_response__free_unpacked + (StartCartridgesUpdateResponse *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*StartCartridgesUpdateResponse_Closure) + (const StartCartridgesUpdateResponse *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor start_cartridges_update_response__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_StartCartridgesUpdateResponse_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.c new file mode 100644 index 000000000..265f663a7 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.c @@ -0,0 +1,72 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StopCartridgesUpdateRequest.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "StopCartridgesUpdateRequest.pb-c.h" +void stop_cartridges_update_request__init + (StopCartridgesUpdateRequest *message) +{ + static const StopCartridgesUpdateRequest init_value = STOP_CARTRIDGES_UPDATE_REQUEST__INIT; + *message = init_value; +} +size_t stop_cartridges_update_request__get_packed_size + (const StopCartridgesUpdateRequest *message) +{ + assert(message->base.descriptor == &stop_cartridges_update_request__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t stop_cartridges_update_request__pack + (const StopCartridgesUpdateRequest *message, + uint8_t *out) +{ + assert(message->base.descriptor == &stop_cartridges_update_request__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t stop_cartridges_update_request__pack_to_buffer + (const StopCartridgesUpdateRequest *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &stop_cartridges_update_request__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +StopCartridgesUpdateRequest * + stop_cartridges_update_request__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (StopCartridgesUpdateRequest *) + protobuf_c_message_unpack (&stop_cartridges_update_request__descriptor, + allocator, len, data); +} +void stop_cartridges_update_request__free_unpacked + (StopCartridgesUpdateRequest *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &stop_cartridges_update_request__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +#define stop_cartridges_update_request__field_descriptors NULL +#define stop_cartridges_update_request__field_indices_by_name NULL +#define stop_cartridges_update_request__number_ranges NULL +const ProtobufCMessageDescriptor stop_cartridges_update_request__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "StopCartridgesUpdateRequest", + "StopCartridgesUpdateRequest", + "StopCartridgesUpdateRequest", + "", + sizeof(StopCartridgesUpdateRequest), + 0, + stop_cartridges_update_request__field_descriptors, + stop_cartridges_update_request__field_indices_by_name, + 0, stop_cartridges_update_request__number_ranges, + (ProtobufCMessageInit) stop_cartridges_update_request__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.h new file mode 100644 index 000000000..5a1b486c9 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateRequest.pb-c.h @@ -0,0 +1,70 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StopCartridgesUpdateRequest.proto */ + +#ifndef PROTOBUF_C_StopCartridgesUpdateRequest_2eproto__INCLUDED +#define PROTOBUF_C_StopCartridgesUpdateRequest_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + +typedef struct _StopCartridgesUpdateRequest StopCartridgesUpdateRequest; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _StopCartridgesUpdateRequest +{ + ProtobufCMessage base; +}; +#define STOP_CARTRIDGES_UPDATE_REQUEST__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&stop_cartridges_update_request__descriptor) \ + } + + +/* StopCartridgesUpdateRequest methods */ +void stop_cartridges_update_request__init + (StopCartridgesUpdateRequest *message); +size_t stop_cartridges_update_request__get_packed_size + (const StopCartridgesUpdateRequest *message); +size_t stop_cartridges_update_request__pack + (const StopCartridgesUpdateRequest *message, + uint8_t *out); +size_t stop_cartridges_update_request__pack_to_buffer + (const StopCartridgesUpdateRequest *message, + ProtobufCBuffer *buffer); +StopCartridgesUpdateRequest * + stop_cartridges_update_request__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void stop_cartridges_update_request__free_unpacked + (StopCartridgesUpdateRequest *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*StopCartridgesUpdateRequest_Closure) + (const StopCartridgesUpdateRequest *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor stop_cartridges_update_request__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_StopCartridgesUpdateRequest_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.c new file mode 100644 index 000000000..5c514a9ed --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.c @@ -0,0 +1,72 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StopCartridgesUpdateResponse.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "StopCartridgesUpdateResponse.pb-c.h" +void stop_cartridges_update_response__init + (StopCartridgesUpdateResponse *message) +{ + static const StopCartridgesUpdateResponse init_value = STOP_CARTRIDGES_UPDATE_RESPONSE__INIT; + *message = init_value; +} +size_t stop_cartridges_update_response__get_packed_size + (const StopCartridgesUpdateResponse *message) +{ + assert(message->base.descriptor == &stop_cartridges_update_response__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t stop_cartridges_update_response__pack + (const StopCartridgesUpdateResponse *message, + uint8_t *out) +{ + assert(message->base.descriptor == &stop_cartridges_update_response__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t stop_cartridges_update_response__pack_to_buffer + (const StopCartridgesUpdateResponse *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &stop_cartridges_update_response__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +StopCartridgesUpdateResponse * + stop_cartridges_update_response__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (StopCartridgesUpdateResponse *) + protobuf_c_message_unpack (&stop_cartridges_update_response__descriptor, + allocator, len, data); +} +void stop_cartridges_update_response__free_unpacked + (StopCartridgesUpdateResponse *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &stop_cartridges_update_response__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +#define stop_cartridges_update_response__field_descriptors NULL +#define stop_cartridges_update_response__field_indices_by_name NULL +#define stop_cartridges_update_response__number_ranges NULL +const ProtobufCMessageDescriptor stop_cartridges_update_response__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "StopCartridgesUpdateResponse", + "StopCartridgesUpdateResponse", + "StopCartridgesUpdateResponse", + "", + sizeof(StopCartridgesUpdateResponse), + 0, + stop_cartridges_update_response__field_descriptors, + stop_cartridges_update_response__field_indices_by_name, + 0, stop_cartridges_update_response__number_ranges, + (ProtobufCMessageInit) stop_cartridges_update_response__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.h new file mode 100644 index 000000000..f173eaa69 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/StopCartridgesUpdateResponse.pb-c.h @@ -0,0 +1,70 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: StopCartridgesUpdateResponse.proto */ + +#ifndef PROTOBUF_C_StopCartridgesUpdateResponse_2eproto__INCLUDED +#define PROTOBUF_C_StopCartridgesUpdateResponse_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + +typedef struct _StopCartridgesUpdateResponse StopCartridgesUpdateResponse; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _StopCartridgesUpdateResponse +{ + ProtobufCMessage base; +}; +#define STOP_CARTRIDGES_UPDATE_RESPONSE__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&stop_cartridges_update_response__descriptor) \ + } + + +/* StopCartridgesUpdateResponse methods */ +void stop_cartridges_update_response__init + (StopCartridgesUpdateResponse *message); +size_t stop_cartridges_update_response__get_packed_size + (const StopCartridgesUpdateResponse *message); +size_t stop_cartridges_update_response__pack + (const StopCartridgesUpdateResponse *message, + uint8_t *out); +size_t stop_cartridges_update_response__pack_to_buffer + (const StopCartridgesUpdateResponse *message, + ProtobufCBuffer *buffer); +StopCartridgesUpdateResponse * + stop_cartridges_update_response__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void stop_cartridges_update_response__free_unpacked + (StopCartridgesUpdateResponse *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*StopCartridgesUpdateResponse_Closure) + (const StopCartridgesUpdateResponse *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor stop_cartridges_update_response__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_StopCartridgesUpdateResponse_2eproto__INCLUDED */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c index d6f9d3347..bfda97424 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c @@ -52,7 +52,7 @@ void hardware_motor__free_unpacked assert(message->base.descriptor == &hardware_motor__descriptor); protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); } -static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[25] = +static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = { { "HardwareMotorType", @@ -354,6 +354,114 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[25] = 0, /* flags */ 0,NULL,NULL /* reserved1,reserved2, etc */ }, + { + "GateCfg1", + 26, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_gatecfg1), + offsetof(HardwareMotor, gatecfg1), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "GateCfg2", + 27, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_gatecfg2), + offsetof(HardwareMotor, gatecfg2), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TvalHold", + 28, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_tvalhold), + offsetof(HardwareMotor, tvalhold), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TvalRun", + 29, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_tvalrun), + offsetof(HardwareMotor, tvalrun), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TvalAcc", + 30, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_tvalacc), + offsetof(HardwareMotor, tvalacc), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TvalDec", + 31, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_tvaldec), + offsetof(HardwareMotor, tvaldec), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TFast", + 32, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_tfast), + offsetof(HardwareMotor, tfast), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TOnMin", + 33, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_tonmin), + offsetof(HardwareMotor, tonmin), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TOffMin", + 34, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_UINT32, + offsetof(HardwareMotor, has_toffmin), + offsetof(HardwareMotor, toffmin), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, }; static const unsigned hardware_motor__field_indices_by_name[] = { 10, /* field[10] = ConfigWord */ @@ -361,6 +469,8 @@ static const unsigned hardware_motor__field_indices_by_name[] = { 22, /* field[22] = FnSlpAcc */ 23, /* field[23] = FnSlpDec */ 24, /* field[24] = FsSpd */ + 25, /* field[25] = GateCfg1 */ + 26, /* field[26] = GateCfg2 */ 0, /* field[0] = HardwareMotorType */ 6, /* field[6] = HighLengthMicroSecond */ 21, /* field[21] = IntSpd */ @@ -380,12 +490,19 @@ static const unsigned hardware_motor__field_indices_by_name[] = { 7, /* field[7] = SpeedMaster */ 20, /* field[20] = StSlp */ 17, /* field[17] = StallThreshold */ + 31, /* field[31] = TFast */ + 33, /* field[33] = TOffMin */ + 32, /* field[32] = TOnMin */ 18, /* field[18] = ThermalCompensationFactor */ + 29, /* field[29] = TvalAcc */ + 30, /* field[30] = TvalDec */ + 27, /* field[27] = TvalHold */ + 28, /* field[28] = TvalRun */ }; static const ProtobufCIntRange hardware_motor__number_ranges[1 + 1] = { { 1, 0 }, - { 0, 25 } + { 0, 34 } }; const ProtobufCMessageDescriptor hardware_motor__descriptor = { @@ -395,7 +512,7 @@ const ProtobufCMessageDescriptor hardware_motor__descriptor = "HardwareMotor", "", sizeof(HardwareMotor), - 25, + 34, hardware_motor__field_descriptors, hardware_motor__field_indices_by_name, 1, hardware_motor__number_ranges, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h index 04ef5ba5c..789e1e139 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h @@ -77,10 +77,28 @@ struct _HardwareMotor int32_t fnslpdec; protobuf_c_boolean has_fsspd; int32_t fsspd; + protobuf_c_boolean has_gatecfg1; + uint32_t gatecfg1; + protobuf_c_boolean has_gatecfg2; + uint32_t gatecfg2; + protobuf_c_boolean has_tvalhold; + uint32_t tvalhold; + protobuf_c_boolean has_tvalrun; + uint32_t tvalrun; + protobuf_c_boolean has_tvalacc; + uint32_t tvalacc; + protobuf_c_boolean has_tvaldec; + uint32_t tvaldec; + protobuf_c_boolean has_tfast; + uint32_t tfast; + protobuf_c_boolean has_tonmin; + uint32_t tonmin; + protobuf_c_boolean has_toffmin; + uint32_t toffmin; }; #define HARDWARE_MOTOR__INIT \ { PROTOBUF_C_MESSAGE_INIT (&hardware_motor__descriptor) \ - , 0, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + , 0, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } /* HardwareMotor methods */ diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotorType.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotorType.pb-c.c index be7dcf517..c6943acfa 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotorType.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotorType.pb-c.c @@ -7,7 +7,7 @@ #endif #include "HardwareMotorType.pb-c.h" -static const ProtobufCEnumValue hardware_motor_type__enum_values_by_number[29] = +static const ProtobufCEnumValue hardware_motor_type__enum_values_by_number[30] = { { "MOTO_DH_CLEANHEAD", "HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD", 0 }, { "MOTO_DH_CLEANMECH", "HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH", 1 }, @@ -38,11 +38,12 @@ static const ProtobufCEnumValue hardware_motor_type__enum_values_by_number[29] = { "MOTO_SPARE1_2", "HARDWARE_MOTOR_TYPE__MOTO_SPARE1_2", 26 }, { "MOTO_SPARE2_1", "HARDWARE_MOTOR_TYPE__MOTO_SPARE2_1", 27 }, { "MOTO_SPARE2_2", "HARDWARE_MOTOR_TYPE__MOTO_SPARE2_2", 28 }, + { "MOTO_SPARE3_1", "HARDWARE_MOTOR_TYPE__MOTO_SPARE3_1", 29 }, }; static const ProtobufCIntRange hardware_motor_type__value_ranges[] = { -{0, 0},{0, 29} +{0, 0},{0, 30} }; -static const ProtobufCEnumValueIndex hardware_motor_type__enum_values_by_name[29] = +static const ProtobufCEnumValueIndex hardware_motor_type__enum_values_by_name[30] = { { "MOTO_DH_CLEANHEAD", 0 }, { "MOTO_DH_CLEANMECH", 1 }, @@ -72,6 +73,7 @@ static const ProtobufCEnumValueIndex hardware_motor_type__enum_values_by_name[29 { "MOTO_SPARE1_2", 26 }, { "MOTO_SPARE2_1", 27 }, { "MOTO_SPARE2_2", 28 }, + { "MOTO_SPARE3_1", 29 }, { "MOTO_WINDER", 15 }, }; const ProtobufCEnumDescriptor hardware_motor_type__descriptor = @@ -81,9 +83,9 @@ const ProtobufCEnumDescriptor hardware_motor_type__descriptor = "HardwareMotorType", "HardwareMotorType", "", - 29, + 30, hardware_motor_type__enum_values_by_number, - 29, + 30, hardware_motor_type__enum_values_by_name, 1, hardware_motor_type__value_ranges, diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index c9a3a4f38..f0cfb109c 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -76,6 +76,16 @@ typedef struct int32_t fnslpacc; int32_t fnslpdec; int32_t fsspd; + uint32_t gatecfg1; + uint32_t gatecfg2; + uint32_t tvalhold; + uint32_t tvalrun; + uint32_t tvalacc; + uint32_t tvaldec; + uint32_t tfast; + uint32_t tonmin; + uint32_t toffmin; + }MotorDriverConfigStruc; //#define MotorDriverConfigStruc HardwareMotor diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 6c561a303..5667d4f48 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -293,6 +293,7 @@ int main(void) LOG_ERROR (iFResult, "Error during init Flash File System"); assert(iFResult); } + //FlashInitAndLoad(); //Control_File_System();// test file system //IDS_ModuleInit(); diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index c67f50705..84c232ffc 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -382,6 +382,8 @@ uint32_t AlarmHandlingLoadFile(void) { ReadAppAndProgram(AlarmItem, Bytes,buffer); free (buffer); + Report("AlarmHandlingLoadFile", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); + } return Bytes; } diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 2871a31c8..627ef84cd 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -149,116 +149,113 @@ uint32_t HWConfigurationInit(void) } char EmbeddedParametersPath[50] = "0://SysInfo//EmbParam.cfg"; -ConfigurationParameters EmbeddedParameters; +ConfigurationParameters *EmbeddedParameters; bool DataUpdated = false; void LoadConfigurationParameters(ConfigurationParameters *Params) { if (Params == 0) { - configuration_parameters__init(&EmbeddedParameters); - EmbeddedParameters.has_breaksensorlimit = true; - EmbeddedParameters.breaksensorlimit = 10; - EmbeddedParameters.has_diagnosticcollectionlimit = true; - EmbeddedParameters.diagnosticcollectionlimit = 1; - EmbeddedParameters.has_overheatcountlimit = true; - EmbeddedParameters.overheatcountlimit = 3; - EmbeddedParameters.has_underheatcountlimit = true; - EmbeddedParameters.underheatcountlimit = 3; - EmbeddedParameters.has_closevalvetimeout = true; - EmbeddedParameters.closevalvetimeout = 250; - EmbeddedParameters.has_openvalvetimeout = true; - EmbeddedParameters.openvalvetimeout = 250; - EmbeddedParameters.has_initialdispenserpressure = true; - EmbeddedParameters.initialdispenserpressure = 1.08; - EmbeddedParameters.has_initialdispensertimeout = true; - EmbeddedParameters.initialdispensertimeout = 60000; - EmbeddedParameters.has_initialdispensertimelag = true; - EmbeddedParameters.initialdispensertimelag = 100; - EmbeddedParameters.has_dispenserbuildpressurespeed = true; - EmbeddedParameters.dispenserbuildpressurespeed=500; - EmbeddedParameters.has_dispenserbuildpressurelimit = true; - EmbeddedParameters.dispenserbuildpressurelimit=0.8 ; - EmbeddedParameters.has_dispenserbuildpressuretimeout = true; - EmbeddedParameters.dispenserbuildpressuretimeout=60000; - EmbeddedParameters.has_dispenserbuildpressurelag = true; - EmbeddedParameters.dispenserbuildpressurelag=50; - EmbeddedParameters.has_acheatersloweroperationlimit = true; - EmbeddedParameters.acheatersloweroperationlimit = 980; - EmbeddedParameters.has_acheatersupperoperationlimit = true; - EmbeddedParameters.acheatersupperoperationlimit = 1005; - EmbeddedParameters.has_dcheatersloweroperationlimit = true; - EmbeddedParameters.dcheatersloweroperationlimit = 978; - EmbeddedParameters.has_dcheatersupperoperationlimit = true; - EmbeddedParameters.dcheatersupperoperationlimit = 1002; - EmbeddedParameters.has_midtankpressurecorrection = true; - EmbeddedParameters.midtankpressurecorrection = 0.0; - EmbeddedParameters.has_dispenserpresegmentwfcf = true; - EmbeddedParameters.dispenserpresegmentwfcf = 80; - EmbeddedParameters.has_startheatingoninitsequence = true; - EmbeddedParameters.startheatingoninitsequence = true; //set to true shlomo 14/5/2019 -//size_t n_generalparameters; -// EmbeddedParameters.*generalparameters; - EmbeddedParameters.generalparameters = malloc (sizeof(double)*10); - if (EmbeddedParameters.generalparameters) + EmbeddedParameters = my_malloc(sizeof(ConfigurationParameters)); + configuration_parameters__init(EmbeddedParameters); + EmbeddedParameters->breaksensorlimit = 10; + EmbeddedParameters->has_diagnosticcollectionlimit = true; + EmbeddedParameters->diagnosticcollectionlimit = 1; + EmbeddedParameters->has_overheatcountlimit = true; + EmbeddedParameters->overheatcountlimit = 3; + EmbeddedParameters->has_underheatcountlimit = true; + EmbeddedParameters->underheatcountlimit = 3; + EmbeddedParameters->has_closevalvetimeout = true; + EmbeddedParameters->closevalvetimeout = 250; + EmbeddedParameters->has_openvalvetimeout = true; + EmbeddedParameters->openvalvetimeout = 250; + EmbeddedParameters->has_initialdispenserpressure = true; + EmbeddedParameters->initialdispenserpressure = 1.08; + EmbeddedParameters->has_initialdispensertimeout = true; + EmbeddedParameters->initialdispensertimeout = 60000; + EmbeddedParameters->has_initialdispensertimelag = true; + EmbeddedParameters->initialdispensertimelag = 100; + EmbeddedParameters->has_dispenserbuildpressurespeed = true; + EmbeddedParameters->dispenserbuildpressurespeed=500; + EmbeddedParameters->has_dispenserbuildpressurelimit = true; + EmbeddedParameters->dispenserbuildpressurelimit=0.8 ; + EmbeddedParameters->has_dispenserbuildpressuretimeout = true; + EmbeddedParameters->dispenserbuildpressuretimeout=60000; + EmbeddedParameters->has_dispenserbuildpressurelag = true; + EmbeddedParameters->dispenserbuildpressurelag=50; + EmbeddedParameters->has_acheatersloweroperationlimit = true; + EmbeddedParameters->acheatersloweroperationlimit = 980; + EmbeddedParameters->has_acheatersupperoperationlimit = true; + EmbeddedParameters->acheatersupperoperationlimit = 1005; + EmbeddedParameters->has_dcheatersloweroperationlimit = true; + EmbeddedParameters->dcheatersloweroperationlimit = 978; + EmbeddedParameters->has_dcheatersupperoperationlimit = true; + EmbeddedParameters->dcheatersupperoperationlimit = 1002; + EmbeddedParameters->has_midtankpressurecorrection = true; + EmbeddedParameters->midtankpressurecorrection = 0.0; + EmbeddedParameters->has_dispenserpresegmentwfcf = true; + EmbeddedParameters->dispenserpresegmentwfcf = 80; + EmbeddedParameters->has_startheatingoninitsequence = true; + EmbeddedParameters->startheatingoninitsequence = true; //set to true shlomo 14/5/2019 + EmbeddedParameters->generalparameters = malloc (sizeof(double)*10); + if (EmbeddedParameters->generalparameters) { - EmbeddedParameters.generalparameters[0] = 1.0; //CheckHardLimitAlarms - EmbeddedParameters.generalparameters[1] = 0.0; //CheckCurrentAlarms - EmbeddedParameters.generalparameters[2] = 0.0; //CheckTamperAlarms - EmbeddedParameters.generalparameters[3] = 800.0; //Winder homing time at end of job - //EmbeddedParameters.generalparameters[4] = 1.0; //Dispenser initial pressure limit - //EmbeddedParameters.generalparameters[5] = 1.0; //Dispenser initial pressure speed + EmbeddedParameters->generalparameters[0] = 1.0; //CheckHardLimitAlarms + EmbeddedParameters->generalparameters[1] = 0.0; //CheckCurrentAlarms + EmbeddedParameters->generalparameters[2] = 0.0; //CheckTamperAlarms + EmbeddedParameters->generalparameters[3] = 800.0; //Winder homing time at end of job + //EmbeddedParameters->generalparameters[4] = 1.0; //Dispenser initial pressure limit + //EmbeddedParameters->generalparameters[5] = 1.0; //Dispenser initial pressure speed } - EmbeddedParameters.has_currentalarmlowlimit = true; - EmbeddedParameters.currentalarmlowlimit = 0.80; - EmbeddedParameters.has_currentalarmhighlimit = true; - EmbeddedParameters.currentalarmhighlimit= 1.07; - EmbeddedParameters.has_ids_segmentrefilltimeout = true; - EmbeddedParameters.ids_segmentrefilltimeout = 5000; - EmbeddedParameters.has_ids_presegmentbuilduptime = true; - EmbeddedParameters.ids_presegmentbuilduptime = 5000; - EmbeddedParameters.has_ids_cleaningspeed = true; - EmbeddedParameters.ids_cleaningspeed = 50; - EmbeddedParameters.has_ids_cleaningstopbeforesegmenttime = true; - EmbeddedParameters.ids_cleaningstopbeforesegmenttime = 3000; - EmbeddedParameters.has_ids_cleaningstartspraypresegmenttime = true; - EmbeddedParameters.ids_cleaningstartspraypresegmenttime = 1000; - EmbeddedParameters.has_ids_leftcleaningmotorspeed = true; - EmbeddedParameters.ids_leftcleaningmotorspeed = 30; - EmbeddedParameters.has_ids_rightcleaningmotorspeed = true; - EmbeddedParameters.ids_rightcleaningmotorspeed = 23; - EmbeddedParameters.has_switchtoidletimeinseconds = true; - EmbeddedParameters.switchtoidletimeinseconds = 3600; - EmbeddedParameters.has_idledriertemperature = true; - EmbeddedParameters.idledriertemperature = 80; - EmbeddedParameters.has_idleheadtemperature = true; - EmbeddedParameters.idleheadtemperature = 80; - EmbeddedParameters.has_idlemixertemperature = true; - EmbeddedParameters.idlemixertemperature = 0; - EmbeddedParameters.has_powerofftemperaturelimit = true; - EmbeddedParameters.powerofftemperaturelimit = 50; - EmbeddedParameters.has_ids_presegment_wfcf_timebeforesegment = true; - EmbeddedParameters.ids_presegment_wfcf_timebeforesegment = 1500; - uint8_t* response_buffer = my_malloc(configuration_parameters__get_packed_size(&EmbeddedParameters)); + EmbeddedParameters->has_currentalarmlowlimit = true; + EmbeddedParameters->currentalarmlowlimit = 0.80; + EmbeddedParameters->has_currentalarmhighlimit = true; + EmbeddedParameters->currentalarmhighlimit= 1.07; + EmbeddedParameters->has_ids_segmentrefilltimeout = true; + EmbeddedParameters->ids_segmentrefilltimeout = 5000; + EmbeddedParameters->has_ids_presegmentbuilduptime = true; + EmbeddedParameters->ids_presegmentbuilduptime = 5000; + EmbeddedParameters->has_ids_cleaningspeed = true; + EmbeddedParameters->ids_cleaningspeed = 50; + EmbeddedParameters->has_ids_cleaningstopbeforesegmenttime = true; + EmbeddedParameters->ids_cleaningstopbeforesegmenttime = 3000; + EmbeddedParameters->has_ids_cleaningstartspraypresegmenttime = true; + EmbeddedParameters->ids_cleaningstartspraypresegmenttime = 1000; + EmbeddedParameters->has_ids_leftcleaningmotorspeed = true; + EmbeddedParameters->ids_leftcleaningmotorspeed = 30; + EmbeddedParameters->has_ids_rightcleaningmotorspeed = true; + EmbeddedParameters->ids_rightcleaningmotorspeed = 23; + EmbeddedParameters->has_switchtoidletimeinseconds = true; + EmbeddedParameters->switchtoidletimeinseconds = 3600; + EmbeddedParameters->has_idledriertemperature = true; + EmbeddedParameters->idledriertemperature = 80; + EmbeddedParameters->has_idleheadtemperature = true; + EmbeddedParameters->idleheadtemperature = 80; + EmbeddedParameters->has_idlemixertemperature = true; + EmbeddedParameters->idlemixertemperature = 0; + EmbeddedParameters->has_powerofftemperaturelimit = true; + EmbeddedParameters->powerofftemperaturelimit = 50; + EmbeddedParameters->has_ids_presegment_wfcf_timebeforesegment = true; + EmbeddedParameters->ids_presegment_wfcf_timebeforesegment = 1500; + uint8_t* response_buffer = my_malloc(configuration_parameters__get_packed_size(EmbeddedParameters)); size_t response_size = 0; if (response_buffer) { - response_size = configuration_parameters__pack(&EmbeddedParameters, response_buffer); + response_size = configuration_parameters__pack(EmbeddedParameters, response_buffer); + //FileWrite(response_buffer,response_size,EmbeddedParametersPath); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&response_size); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, response_size, response_buffer); + my_free(response_buffer); } - FileWrite(response_buffer,response_size,EmbeddedParametersPath); - my_free(response_buffer); } else { - memcpy (&EmbeddedParameters,Params,sizeof(EmbeddedParameters)); + EmbeddedParameters = Params; } - uint32_t Bytes = sizeof(EmbeddedParameters); - ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); - ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, &EmbeddedParameters); } uint32_t EmbeddedParametersInit(void) { FRESULT Fresult = FR_OK; - //void* buffer = NULL; + void* buffer = NULL; uint32_t Bytes = 0; ConfigurationParameters *Params; @@ -267,35 +264,44 @@ uint32_t EmbeddedParametersInit(void) if ((Bytes)&&(Bytes < 1000)) { - Params = (ConfigurationParameters *)(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4); - memcpy (&EmbeddedParameters,Params,sizeof(EmbeddedParameters)); + Params = configuration_parameters__unpack(NULL, Bytes, (void *)(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4)); + LoadConfigurationParameters(Params); + Report("LoadConfigurationParameters from flash", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); } else { - LoadConfigurationParameters(0); + if (LoadConfigurationParamsFromFile()!=OK) + { + LoadConfigurationParameters(0); + Report("LoadConfigurationParameters default", __FILE__,__LINE__,0, RpMessage, Fresult, 0); + } + else + { + Report("LoadConfigurationParameters from file", __FILE__,__LINE__,EmbeddedParameters->closevalvetimeout, RpMessage, Fresult, 0); + } } - IDS_Dispenser_SetTimeOutValues(EmbeddedParameters.closevalvetimeout, EmbeddedParameters.openvalvetimeout); - IDS_Dispenser_SetBackLashValues(EmbeddedParameters.initialdispenserpressure, EmbeddedParameters.initialdispensertimeout, EmbeddedParameters.initialdispensertimelag); - IDS_Dispenser_SetPrepareValues(EmbeddedParameters.dispenserbuildpressurespeed, EmbeddedParameters.dispenserbuildpressurelimit, EmbeddedParameters.dispenserbuildpressuretimeout, EmbeddedParameters.dispenserbuildpressurelag); - IDS_Dispenser_SetPreSegmentWFCFValues(EmbeddedParameters.dispenserpresegmentwfcf, EmbeddedParameters.ids_presegment_wfcf_timebeforesegment); - IDS_Dispenser_SetPreSegmentCleaningValues(EmbeddedParameters.ids_cleaningspeed,EmbeddedParameters.ids_cleaningstartspraypresegmenttime ,EmbeddedParameters.ids_cleaningstopbeforesegmenttime,EmbeddedParameters.ids_leftcleaningmotorspeed,EmbeddedParameters.ids_rightcleaningmotorspeed); + IDS_Dispenser_SetTimeOutValues(EmbeddedParameters->closevalvetimeout, EmbeddedParameters->openvalvetimeout); + IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag); + IDS_Dispenser_SetPrepareValues(EmbeddedParameters->dispenserbuildpressurespeed, EmbeddedParameters->dispenserbuildpressurelimit, EmbeddedParameters->dispenserbuildpressuretimeout, EmbeddedParameters->dispenserbuildpressurelag); + IDS_Dispenser_SetPreSegmentWFCFValues(EmbeddedParameters->dispenserpresegmentwfcf, EmbeddedParameters->ids_presegment_wfcf_timebeforesegment); + IDS_Dispenser_SetPreSegmentCleaningValues(EmbeddedParameters->ids_cleaningspeed,EmbeddedParameters->ids_cleaningstartspraypresegmenttime ,EmbeddedParameters->ids_cleaningstopbeforesegmenttime,EmbeddedParameters->ids_leftcleaningmotorspeed,EmbeddedParameters->ids_rightcleaningmotorspeed); - Heaters_SetOverHeatTimeOutValues( EmbeddedParameters.overheatcountlimit, EmbeddedParameters.underheatcountlimit); - Heaters_SetOperationLimits(EmbeddedParameters.acheatersloweroperationlimit,EmbeddedParameters.acheatersupperoperationlimit,EmbeddedParameters.dcheatersloweroperationlimit,EmbeddedParameters.dcheatersupperoperationlimit); - MidTankPressureCorrection(EmbeddedParameters.midtankpressurecorrection); - SetDiagnosticCollectionLimit(EmbeddedParameters.diagnosticcollectionlimit); - ThreadSetBreakSensorLimit(EmbeddedParameters.breaksensorlimit); - PowerOffSetTemperatureThreshold(EmbeddedParameters.powerofftemperaturelimit); + Heaters_SetOverHeatTimeOutValues( EmbeddedParameters->overheatcountlimit, EmbeddedParameters->underheatcountlimit); + Heaters_SetOperationLimits(EmbeddedParameters->acheatersloweroperationlimit,EmbeddedParameters->acheatersupperoperationlimit,EmbeddedParameters->dcheatersloweroperationlimit,EmbeddedParameters->dcheatersupperoperationlimit); + MidTankPressureCorrection(EmbeddedParameters->midtankpressurecorrection); + SetDiagnosticCollectionLimit(EmbeddedParameters->diagnosticcollectionlimit); + ThreadSetBreakSensorLimit(EmbeddedParameters->breaksensorlimit); + PowerOffSetTemperatureThreshold(EmbeddedParameters->powerofftemperaturelimit); - InitSequenceSetStartHeating (EmbeddedParameters.startheatingoninitsequence); + InitSequenceSetStartHeating (EmbeddedParameters->startheatingoninitsequence); bool a1,a2,a3; - a1 = (EmbeddedParameters.generalparameters[0] < 0.5)?false:true; - a2 = (EmbeddedParameters.generalparameters[1] < 0.5)?false:true; - a3 = (EmbeddedParameters.generalparameters[2] < 0.5)?false:true; + a1 = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; + a2 = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; + a3 = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; AlarmHandlingSetFlags(a1,a2,a3); - PowerIdleSetParameters(EmbeddedParameters.switchtoidletimeinseconds,EmbeddedParameters.idledriertemperature,EmbeddedParameters.idleheadtemperature,EmbeddedParameters.idlemixertemperature); + PowerIdleSetParameters(EmbeddedParameters->switchtoidletimeinseconds,EmbeddedParameters->idledriertemperature,EmbeddedParameters->idleheadtemperature,EmbeddedParameters->idlemixertemperature); return Fresult; } @@ -347,10 +353,8 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) if (request->n_motors < NUM_OF_MOTORS) { - //EraseFlashSection(GENHWCFG_MAP_IN_FLASH + 0x2000,sizeof(HardwareMotor)*request->n_motors); - - for (Motor_i = 0; Motor_i < request->n_motors ; Motor_i++) - status += MotorsConfigMessage(request->motors[Motor_i]); + //for (Motor_i = 0; Motor_i < request->n_motors ; Motor_i++) + status += MotorsConfigMessage(request); } else { @@ -521,6 +525,28 @@ void HWSystemResetRequest(MessageContainer* requestContainer) } uint32_t FlashInitResults[5] = {0,0,0,0,0}; +uint32_t LoadConfigurationParamsFromFile(void) +{ + FRESULT Fresult = FR_OK; + uint8_t* buffer = NULL; + uint32_t Bytes = 0; + + ConfigurationParameters *Params = NULL; + + Fresult = FileRead(EmbeddedParametersPath, &Bytes, &buffer); + if (Fresult == FR_OK) + { + Params = configuration_parameters__unpack(NULL, Bytes, buffer); + LoadConfigurationParameters(Params); + free (buffer); + //configuration_parameters__free_unpacked(Params,NULL); + FlashInitResults[1] = true; + Report("Parameters Initialized from file", __FILE__,__LINE__,Bytes, RpMessage, EMBEDDED_PARAMETERS_MAP_IN_FLASH, 0); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, buffer); + } + return Fresult; +} void FlashInitAndLoad(void) { FRESULT Fresult = FR_OK; @@ -534,7 +560,7 @@ void FlashInitAndLoad(void) char ProcessParamsPath[50] = "0://SysInfo//ProcessP.cfg"; #ifdef WATCHDOG ROM_WatchdogResetDisable(WATCHDOG0_BASE); - uint32_t timeout = 120000000*35; + uint32_t timeout = 0xFFFFFFFFU; ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout); #endif @@ -569,8 +595,11 @@ void FlashInitAndLoad(void) { Params = configuration_parameters__unpack(NULL, Bytes, buffer); LoadConfigurationParameters(Params); + //Bytes = sizeof(EmbeddedParameters); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, buffer); free (buffer); - configuration_parameters__free_unpacked(Params,NULL); + //configuration_parameters__free_unpacked(Params,NULL); FlashInitResults[1] = true; Report("Parameters Initialized from file", __FILE__,__LINE__,sizeof(EmbeddedParameters), RpMessage, EMBEDDED_PARAMETERS_MAP_IN_FLASH, 0); } @@ -580,9 +609,6 @@ void FlashInitAndLoad(void) FlashInitResults[1] = 2; Report("Parameters Initialized from default", __FILE__,__LINE__,sizeof(EmbeddedParameters), RpMessage, EMBEDDED_PARAMETERS_MAP_IN_FLASH, 0); } - Bytes = sizeof(EmbeddedParameters); - ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); - ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, &EmbeddedParameters); Fresult = FileRead(ProcessParamsPath, &Bytes, &buffer); if (Fresult == FR_OK) diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h index 86f164977..338217e74 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h @@ -7,13 +7,13 @@ #include "PMR/common/MessageContainer.pb-c.h" #include "PMR/Hardware/HardwareBlower.pb-c.h" #include "PMR/EmbeddedParameters/ConfigurationParameters.pb-c.h" -extern ConfigurationParameters EmbeddedParameters; +extern ConfigurationParameters *EmbeddedParameters; extern uint32_t HWConfigurationFunc(MessageContainer* requestContainer); extern void HWSystemResetRequest(MessageContainer* requestContainer); uint32_t HWConfigurationInit(void); void FlashInitAndLoad(void); - +uint32_t LoadConfigurationParamsFromFile(void); extern HardwareBlower BlowerCfg; extern bool DataUpdated; diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index aafc1c5a9..6ee11105f 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -195,7 +195,7 @@ void ProcessRequestFunc(MessageContainer* requestContainer) Bytes = sizeof(ProcessParameters); ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, ProcessParams); - REPORT_MSG(Bytes,"Bytes wrtie to flash"); + REPORT_MSG(Bytes,"Bytes write to flash"); } //////////////////////////////////////////////////////////////////////// @@ -237,51 +237,34 @@ void ProcessRequestFunc(MessageContainer* requestContainer) upload_process_parameters_request__free_unpacked(request,NULL); } -uint32_t ProcessParamsInit(void) +uint32_t LoadProcessParamsFromFile(void) { FRESULT Fresult = FR_OK; - //FIL *FileHandle = 0; //the system supports a single active file - //uint8_t* buffer = NULL; - uint32_t Bytes;// = 0,i,j,k=0; - //UploadProcessParametersRequest* request; -/* - FileHandle = my_malloc(sizeof(FIL)); - if (FileHandle) + uint8_t* buffer = NULL; + uint32_t Bytes = 0; + + Fresult = FileRead(ProcessParamsConfigPath, &Bytes, &buffer); + if (Fresult == FR_OK) { - Fresult = FileOpen(ProcessParamsConfigPath, &Bytes, FileHandle); - if (Fresult == FR_OK) - { - buffer = my_malloc (Bytes); - if (buffer) - { - for (i=0;i<=(Bytes/100);i++) - { - Fresult = f_read(FileHandle,&buffer[i*100],100,&j ); - k+=j; - } - if (k!=Bytes) - LOG_ERROR(k,"File read error"); + UploadProcessParametersRequest* request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); + ProcessParameters* ProcessParams = request->processparameters; - request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); - // ProcessParameters* ProcessParams = process_parameters__unpack(NULL, Bytes, buffer); - if (request) - { - ProcessParameters* ProcessParams = request->processparameters; - Fresult = HandleProcessParameters(ProcessParams); - //memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); - upload_process_parameters_request__free_unpacked(request,NULL); - } - my_free (buffer); - } - f_close(FileHandle); - } - else + if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters { - LOG_ERROR(Fresult,"File open error"); + Bytes = sizeof(ProcessParameters); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, ProcessParams); + REPORT_MSG(Bytes,"ProcessParameters Bytes write to flash"); + free (buffer); } - my_free (FileHandle); } -*/ + + return Fresult; +} +uint32_t ProcessParamsInit(void) +{ + FRESULT Fresult = FR_OK; + uint32_t Bytes; memcpy(&Bytes,(void *)PROCESS_PARAMETERS_MAP_IN_FLASH,sizeof(Bytes)); REPORT_MSG(Bytes,"Bytes read from flash"); @@ -291,6 +274,20 @@ uint32_t ProcessParamsInit(void) ProcessParameters* ProcessParams = (ProcessParameters *)(PROCESS_PARAMETERS_MAP_IN_FLASH+4); Fresult = HandleProcessParameters(ProcessParams); } + else + { + if (LoadProcessParamsFromFile()==OK) + { + memcpy(&Bytes,(void *)PROCESS_PARAMETERS_MAP_IN_FLASH,sizeof(Bytes)); + REPORT_MSG(Bytes,"ProcessParams Bytes read from flash"); + + if ((Bytes)&&(Bytes < 1000)) + { + ProcessParameters* ProcessParams = (ProcessParameters *)(PROCESS_PARAMETERS_MAP_IN_FLASH+4); + Fresult = HandleProcessParameters(ProcessParams); + } + } + } return Fresult; } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index c8836a2b4..d5b4867f0 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -1047,7 +1047,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) { MotorSetMicroStep(HW_Motor_Id, MotorsCfg[HW_Motor_Id].microstep); } - if ((EnableIntersegment == true)&&(IntersegmentLength>0)) + if ((EnableIntersegment == true)&&(IntersegmentLength>0.1)&&(SegmentId>0)) { MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves CurrentDispenserSpeed[DispenserId] = 0; diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/RfidTagContent.h b/Software/Embedded_SW/Embedded/Modules/IFS/RfidTagContent.h new file mode 100644 index 000000000..0764f2862 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/IFS/RfidTagContent.h @@ -0,0 +1,51 @@ +/* + * RfidTagContent.h + * + * Created on: Jul 8, 2019 + * Author: shlomo + */ + +#ifndef MODULES_IFS_RFIDTAGCONTENT_H_ +#define MODULES_IFS_RFIDTAGCONTENT_H_ + +#include "PMR/Rfid/RfidCartridgeSlot.pb-c.h" +#include "PMR/Rfid/RfidTagContent.pb-c.h" + +#include +#include "include.h" + + +#define MAX_CARTRIDGES (RFID_CARTRIDGE_SLOT__LowerWasteCartridge+1) +typedef struct RfidTagContent +{ + uint32_t UniqueId; + char SerialNumber[16]; + char FactoryId[3]; + int32_t FillingSystemId; + char ColorName[12]; + int32_t ColorCategory; + int32_t ColorTypeRevision; + int32_t CartridgeSize; + int32_t FilledInkVolume; + char InkBatchNum[10]; + char InkMFGDate[6]; + char InkEOLDate[6]; + char CartridgeFillingDate[6]; + char WasteFilledDate[6]; + int32_t PlugInCounter; + bool Inkfill; + bool InkUsed; + bool InkEmpty; + bool WasteEmpty; + bool WasteFilling; + bool WasteFull; + bool Blocked; + bool Fail; + int32_t WasteCounter; + char MachineIdInkUsed[16]; + char MachineIdWasteUsed[16]; +}; + + + +#endif /* MODULES_IFS_RFIDTAGCONTENT_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c new file mode 100644 index 000000000..347808d5e --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c @@ -0,0 +1,31 @@ +/* + * ifs.c + * + * Created on: Jul 8, 2019 + * Author: shlomo + */ +#include "PMR/Diagnostics/CartridgeSlot.pb-c.h" +#include "PMR/Diagnostics/CartridgeTagContent.pb-c.h" +#include "RfidTagContent.h" +#include + +#include +#include "include.h" + +RfidTagContent TagContent[MAX_CARTRIDGES]; +NFC_Tag NFCTag[MAX_CARTRIDGES]; +void TagInitialize(RfidTagContent* TagContent); + +void IFS_Init(void) +{ + int i; + for (i=0;i MotorControlConfig[index].m_ingnoreValue) { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 529e4d260..78203b236 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -40,11 +40,20 @@ int32_t BreakSensordebouncetimemilli = BREAK_SENSOR_LIMIT; HardwarePidControlType ThreadMotorIdToControlId[MAX_THREAD_MOTORS_NUM] = {HARDWARE_PID_CONTROL_TYPE__MotorFeeder,HARDWARE_PID_CONTROL_TYPE__MotorDryer,HARDWARE_PID_CONTROL_TYPE__MotorPooler,HARDWARE_PID_CONTROL_TYPE__MotorWinder,0}; //******************************************************************************************************************** -uint32_t MotorsConfigMessage(HardwareMotor * request) +uint32_t MotorsConfigMessage(HardwareConfiguration * HWrequest) { uint32_t status = PASSED; - TimerMotors_t Motor_i; - Motor_i = request->hardwaremotortype; + TimerMotors_t Motor_i,MotorId; + MOTDRIVER_TYPE DriverType; + HardwareMotor *request; + if (HWrequest == NULL) + return ERROR; + for (MotorId = 0; MotorId < HWrequest->n_motors ; MotorId++) + { + request = HWrequest->motors[MotorId]; + if (request == NULL) + return ERROR; + Motor_i = request->hardwaremotortype; MotorsCfg[Motor_i].configword = request->configword; MotorsCfg[Motor_i].hardwaremotortype = request->hardwaremotortype; MotorsCfg[Motor_i].minfrequency = request->minfrequency; @@ -80,13 +89,21 @@ uint32_t MotorsConfigMessage(HardwareMotor * request) MotorsCfg[Motor_i].fnslpdec = request->fnslpdec; MotorsCfg[Motor_i].fsspd = request->fsspd; - status = MotorConfig( Motor_i, &MotorsCfg[Motor_i]); + MotorsCfg[Motor_i].gatecfg1 = request->gatecfg1; + MotorsCfg[Motor_i].gatecfg2 = request->gatecfg2; + MotorsCfg[Motor_i].tvalhold = request->tvalhold; + MotorsCfg[Motor_i].tvalrun = request->tvalrun ; + MotorsCfg[Motor_i].tvalacc = request->tvalacc ; + MotorsCfg[Motor_i].tvaldec = request->tvaldec ; + MotorsCfg[Motor_i].tfast = request->tfast ; + MotorsCfg[Motor_i].tonmin = request->tonmin ; + MotorsCfg[Motor_i].toffmin = request->toffmin ; + + status = MotorConfig( Motor_i, &MotorsCfg[Motor_i]); // if (Motor_i == MOTOR_RDRIVING) // ThreadInitialTestStub(request); - + } return status; -// } -// else return Motor_i; } uint32_t MotorPidRequestMessage(HardwarePidControl* request) diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index a03ab04b0..dbbcd64b4 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,11 @@ +Embedded SW Release note - Version 1.4.2.0 +============================================================= +some bugs fixed in file download +fixed some problems in flash handling +new events - jobs (not yet handled +RFID preparation - IFS module, protobuf, driver - NOT IN GIT yet +combined driver - protobuf. NOT IN GIT yet +thread load - thread unload with winding - not tested yet Embedded SW Release note - Version 1.4.1.0 ============================================================= Move to length calculation FROM PULLER -- cgit v1.3.1 From 54115f60966580e3d37f48d28179bf4c13ef9a7e Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 15 Jul 2019 13:43:16 +0300 Subject: Version 1.4.2.2 report filters introduced, improved flash handling. improved and simplified dispenser location. improved config parameters handling --- .../Embedded/Common/SWUpdate/FileSystem.c | 12 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Common/report/reportInit.c | 8 +- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 2 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 54 +++++---- .../Embedded/Modules/AlarmHandling/AlarmHandling.h | 2 +- .../Embedded/Modules/Control/MillisecTask.c | 8 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 12 +- .../Embedded/Modules/General/GeneralHardware.c | 99 +++++++--------- .../Embedded/Modules/Heaters/Heaters_print.c | 112 ++++++++--------- Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 6 +- .../Embedded/Modules/IDS/IDS_dispenser.c | 132 +++++++++++++++------ Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 8 ++ .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 87 +++++++++++--- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 2 +- .../Embedded_SW/Embedded/Modules/Thread/Thread.h | 2 + .../Embedded/Modules/Thread/Thread_Winder.c | 30 ++++- .../Embedded/Software Release Notes.txt | 8 +- .../Initialization/PowerOffSequence.c | 8 +- .../Initialization/PowerOffSequence.h | 1 + .../Messages/Debugging/DebugDistributorType.proto | 24 ++++ 21 files changed, 397 insertions(+), 222 deletions(-) create mode 100644 Software/PMR/Messages/Debugging/DebugDistributorType.proto (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 8682f706a..05b118c90 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -73,6 +73,7 @@ bool isDirectory(FileAttribute FileAtt) return true; return false; } +bool FileDone = false; uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) { @@ -106,6 +107,7 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) response.maxchunklength = MAX_CHUNK_LENGTH; strcpy(FileHandleChar, "1234"); response.uploadid = FileHandleChar; //supporting only single file at each time. + FileDone = false; } else { @@ -117,6 +119,7 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) } CommRxTaskHandle = Task_self(); Task_setPri(CommRxTaskHandle, 4); + // Report("Task_setPri", __FILE__, __LINE__, 4, RpWarning, (int)CommRxTaskHandle, 0); responseContainer = createContainer(MESSAGE_TYPE__FileUploadResponse, requestContainer->token, false, &response, &file_upload_response__pack, &file_upload_response__get_packed_size); @@ -134,7 +137,6 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) return OK; } -bool FileDone = false; FRESULT lFresult = FR_OK; uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { @@ -155,7 +157,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) // memcpy (&ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle)); //if (ReceivedFileHandle == FileHandle) //{ - Control_WD(ENABLE,10); //activate heaters/dispenser watchdog, 0.5 seconds + Control_WD(ENABLE,55); //activate heaters/dispenser watchdog, 0.5 seconds + GeneralHwReady = false; KeepAliveOneSecondCounter = 0; Fresult = f_write(ReceivedFileHandle,request->buffer.data,request->buffer.len,&WrittenBytes ); lFresult = Fresult; @@ -213,8 +216,11 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) my_free(responseContainer.data.data); SendCharsWithType(container_buffer, container_size,MESSAGE_TYPE__FileChunkUploadResponse); if (FileDone == true) + { Task_setPri(CommRxTaskHandle, 9); - + GeneralHwReady = true; + //Report("Task_setPri", __FILE__, __LINE__, 9, RpWarning, (int)CommRxTaskHandle, 0); + } return OK; } uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer) 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 ad0191ab4..5112fd730 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,2,0}; +TangoVersion_t _gTangoVersion = {1,4,2,2}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 8fa0f6e20..d633ffc00 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -40,7 +40,7 @@ #include "modules/General/process.h" -/*PackageHandle ControlFilter; +PackageHandle ControlFilter; PackageHandle HeatersFilter; PackageHandle JobFilter ; PackageHandle WasteFilter ; @@ -53,7 +53,7 @@ PackageHandle CommFilter; PackageHandle FPGAFilter; PackageHandle LoadFilter; PackageHandle InitFilter; -PackageHandle MaintFilter;*/ +PackageHandle MaintFilter; char protobufToken[36+1] = {0}; @@ -237,7 +237,7 @@ STATUS ReportInit(ReportInitParams InitParams) status = filterTableInit(MaxNumOfFilterNames); if (status == OK) initialized = true; -/* ControlFilter = ReportAddFilterPackage("Control"); + ControlFilter = ReportAddFilterPackage("Control"); HeatersFilter = ReportAddFilterPackage("Heaters"); JobFilter = ReportAddFilterPackage("Job"); WasteFilter = ReportAddFilterPackage("Waste"); @@ -250,7 +250,7 @@ STATUS ReportInit(ReportInitParams InitParams) FPGAFilter = ReportAddFilterPackage("FPGA"); LoadFilter = ReportAddFilterPackage("Load"); InitFilter = ReportAddFilterPackage("Init"); - MaintFilter = ReportAddFilterPackage("Maint");*/ + MaintFilter = ReportAddFilterPackage("Maint"); // Filter = ReportAddFilterPackage(""); return status; diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index 6f4419111..dae95ed1e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -119,7 +119,7 @@ LS_DRYER_DH Ls_Dryer_Dh; void FPGA_Read_LS_Safty_Ind_Reg() { - uint8_t temp[8] = {0,0,0,0,0,0,0,0},i; + uint8_t temp[8] = {0,0,0,0,0,0,0,0};//,i; LS_Left.ushort = F1_GPI_LS2_D; Ls_Right_Screw_Spool.ushort = F1_GPI_LS3_D; diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 84c232ffc..fc722a234 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -62,7 +62,7 @@ bool AlarmHandlingActive = false; uint32_t AlarmHandlingControlId = 0xFF; uint32_t AlarmHandlingTick = 0; -bool CheckHardLimitAlarms = false,CheckCurrentAlarms = false,CheckTamperAlarms = false; +bool CheckHardLimitAlarms = false,CheckCurrentAlarms = false,CheckTamperAlarms = false,CheckMotorAlarms = false; uint8_t alarm_response_buffer[500]; /******************** Functions ********************************************/ @@ -382,7 +382,7 @@ uint32_t AlarmHandlingLoadFile(void) { ReadAppAndProgram(AlarmItem, Bytes,buffer); free (buffer); - Report("AlarmHandlingLoadFile", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); + ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); } return Bytes; @@ -410,11 +410,13 @@ void AlarmHandlingInit(void) return; } -void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms, bool checkTamperAlarms) +void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms, bool checkTamperAlarms, bool checkMotorAlarms) { CheckHardLimitAlarms = checkHardLimitAlarms; CheckCurrentAlarms = checkCurrentAlarms; CheckTamperAlarms = checkTamperAlarms; + CheckMotorAlarms = checkMotorAlarms; + ReportWithPackageFilter(AlarmFilter,"Alarm group setting", __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); } char AlarmReasonStr[100]; JobEndReasonEnum getEndReason(uint32_t AlarmId) @@ -500,7 +502,8 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { JobEndReason = getEndReason(AlarmId); AbortJob(AlarmReasonStr); - Report(AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); + //Report(AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); + ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); } /*switch (AlarmItem[AlarmId].AlarmSource) { @@ -682,7 +685,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) JobEndReason = getEndReason(AlarmId); //AbortJob(AlarmReasonStr); //PrepareReady(Module_Alarms,ModuleFail); - Report(AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); + ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); } return JobEndReason; } @@ -738,11 +741,11 @@ void AlarmHandlingInternalSetAlarm(uint32_t AlarmId, bool value) AlarmState[Alarm_i].EventPtr->message = NULL;//AlarmItem[Alarm_i].EventName; AlarmState[Alarm_i].Status = value; } - Report("Alarm ON ", __FILE__,AlarmState[Alarm_i].EventPtr,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); + ReportWithPackageFilter(AlarmFilter,"Alarm ON ", __FILE__,AlarmState[Alarm_i].EventPtr,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); } else { - Report("Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); + ReportWithPackageFilter(AlarmFilter,"Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); if (AlarmState[Alarm_i].EventPtr) { my_free(AlarmState[Alarm_i].EventPtr); @@ -896,26 +899,31 @@ uint32_t AlarmHandlingLoop(uint32_t tick) } break; case ALARM_SOURCE_TYPE__MotorAlarm: - if (isMotorConfigured((TimerMotors_t)AlarmItem[Alarm_i].DeviceId) == false) + if (CheckMotorAlarms) { - Status = false; - break; - } - value = MotorGetStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); - if (AlarmItem[Alarm_i].AlarmDirection == true) - { - if (value && AlarmItem[Alarm_i].AlarmValue) + if (isMotorConfigured((TimerMotors_t)AlarmItem[Alarm_i].DeviceId) == false) { - Status = true; + Status = false; + break; } - } - else - { - if ((value && AlarmItem[Alarm_i].AlarmValue)==false) + value = MotorGetStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); + if (AlarmItem[Alarm_i].AlarmDirection == true) { - Status = true; + if (value && AlarmItem[Alarm_i].AlarmValue) + { + Status = true; + } + } + else + { + if ((value && AlarmItem[Alarm_i].AlarmValue)==false) + { + Status = true; + } } } + else + Status = false; break; case ALARM_SOURCE_TYPE__FluidLevelAlarm: value = Get_MidTank_Int100_Sensor(AlarmItem[Alarm_i].DeviceId); @@ -994,7 +1002,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) } AlarmState[Alarm_i].Status = true; AlarmHandlingConsequentActions(Alarm_i, AlarmItem[Alarm_i].Severity); - Report("Alarm ON ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); + ReportWithPackageFilter(AlarmFilter,"Alarm ON ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); } else // alarm off { @@ -1007,7 +1015,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) } AlarmState[Alarm_i].Status = false; AlarmHandlingConsequentActions(Alarm_i, DEBUG_LOG_CATEGORY__Info); - Report("Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, 0, Alarm_i); + ReportWithPackageFilter(AlarmFilter,"Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, 0, Alarm_i); } } } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h index 392b31afc..d6d4eeed5 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h @@ -24,6 +24,6 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob); uint32_t StartEventsNotificationRequestFunc(MessageContainer* requestContainer); uint32_t StopEventsNotificationRequestFunc(MessageContainer* requestContainer); uint32_t ResolveEventRequestFunc(MessageContainer* requestContainer); -void AlarmHandlingSetFlags(bool CheckHardLimitAlarms,bool CheckCurrentAlarms, bool checkTamperAlarms); +void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms, bool checkTamperAlarms, bool checkMotorAlarms); #endif /* MODULES_ALARMHANDLING_ALARMHANDLING_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index b5797e749..7c15c6ae7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -565,13 +565,13 @@ uint32_t MillisecLowLoop(uint32_t tick) DrawerFansStatus = temp & 0x1F; SystemFansStatus = temp & 0xE0; //KeepAliveOneSecondCall(); - /*for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) + for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) { - if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) - continue; // + // if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) + // continue; // if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); - }*/ + } if (!(OneMinute_Tick)) { for (Heater_i = 0;Heater_i < NUM_OF_CURRENT_HEATERS;Heater_i++) diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index a3b2022e9..8427ebd4a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -684,11 +684,11 @@ void SendDiagnostics(void) } void DispensersCollectionCall(void) { - /*int i; + int i; for (i = 0; ihardwareconfiguration->n_dancers, 0); } } + else + { + buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config + if (buffer) + { + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); + UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer); + Report("HWConfigurationInit from file", __FILE__,__LINE__,Bytes, RpMessage, UploadRequest->hardwareconfiguration->n_dancers, 0); + } + else + Report("HWConfigurationInit Not available", __FILE__,__LINE__,Bytes, RpMessage, 0, 0); + + } + //buffer = HWConfigurationLoadFromFile(&Bytes); //status= memcmp(buffer,buffer1,Bytes); //UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer); - status = HWConfiguration(UploadRequest); - if (status ==OK) - { - upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); - //EraseFlashSection(GENHWCFG_MAP_IN_FLASH,Bytes+4); - //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,Bytes); - //ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); - } - else + if (UploadRequest) { - SetMachineState(MACHINE_STATE_HW_CONFIG_FAILED); + status = HWConfiguration(UploadRequest); + if (status !=OK) + { + SetMachineState(MACHINE_STATE_HW_CONFIG_FAILED); + } + upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); } if (buffer) free (buffer); @@ -200,10 +183,10 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) if (EmbeddedParameters->generalparameters) { EmbeddedParameters->generalparameters[0] = 1.0; //CheckHardLimitAlarms - EmbeddedParameters->generalparameters[1] = 0.0; //CheckCurrentAlarms + EmbeddedParameters->generalparameters[1] = 1.0; //CheckCurrentAlarms EmbeddedParameters->generalparameters[2] = 0.0; //CheckTamperAlarms - EmbeddedParameters->generalparameters[3] = 800.0; //Winder homing time at end of job - //EmbeddedParameters->generalparameters[4] = 1.0; //Dispenser initial pressure limit + EmbeddedParameters->generalparameters[3] = 0.0; //CheckMotorAlarms + EmbeddedParameters->generalparameters[4] = 800.0; //Winder homing time at end of job //EmbeddedParameters->generalparameters[5] = 1.0; //Dispenser initial pressure speed } EmbeddedParameters->has_currentalarmlowlimit = true; @@ -255,7 +238,6 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) uint32_t EmbeddedParametersInit(void) { FRESULT Fresult = FR_OK; - void* buffer = NULL; uint32_t Bytes = 0; ConfigurationParameters *Params; @@ -295,11 +277,14 @@ uint32_t EmbeddedParametersInit(void) PowerOffSetTemperatureThreshold(EmbeddedParameters->powerofftemperaturelimit); InitSequenceSetStartHeating (EmbeddedParameters->startheatingoninitsequence); - bool a1,a2,a3; + bool a1,a2,a3,a4; a1 = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; a2 = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; a3 = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; - AlarmHandlingSetFlags(a1,a2,a3); + a4 = (EmbeddedParameters->generalparameters[3] < 0.5)?false:true; + AlarmHandlingSetFlags(a1,a2,a3,a4); + SetWinderBackToBaseTime((uint32_t) EmbeddedParameters->generalparameters[4]); + PowerIdleSetParameters(EmbeddedParameters->switchtoidletimeinseconds,EmbeddedParameters->idledriertemperature,EmbeddedParameters->idleheadtemperature,EmbeddedParameters->idlemixertemperature); @@ -323,7 +308,7 @@ uint32_t GenHWInitCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) { uint32_t status = 0; - int Motor_i, Dancer_i, Dispenser_i,PID_i; + int Dancer_i, Dispenser_i,PID_i; if (UploadRequest == NULL) { @@ -468,7 +453,7 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer) EraseFlashSection(GENHWCFG_MAP_IN_FLASH,requestContainer->data.len+4); DataLen = requestContainer->data.len; ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,&DataLen); - ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, requestContainer->data.len, requestContainer->data.data); + ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, DataLen, requestContainer->data.data); FileWrite(requestContainer->data.data, requestContainer->data.len,HwConfigPath); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 31783db49..179ac30d7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -187,7 +187,7 @@ void HeatersControlStop(void) { if (HeatersRestart == true) { - Report("HeatersControlStop ", __FILE__,__LINE__,0, RpMessage, 0, 0); + ReportWithPackageFilter(HeatersFilter,"HeatersControlStop ", __FILE__,__LINE__,0, RpMessage, 0, 0); TimerActivated = false; HeatersRestart = false; } @@ -197,7 +197,7 @@ void HeatersControlStart(void) { if (HeatersRestart == false) { - Report("HeatersControlStart ", __FILE__,__LINE__,0, RpMessage, 0, 0); + ReportWithPackageFilter(HeatersFilter,"HeatersControlStart ", __FILE__,__LINE__,0, RpMessage, 0, 0); HeatersRestart = true; HeatersStartControlTimer(); } @@ -206,7 +206,7 @@ uint32_t LoadHeaterSetPoint(HeaterType HeaterType) { if (HeaterType >= MAX_HEATERS_NUM) { - LOG_ERROR(HeaterType,"Wrong Heater Id"); + ReportWithPackageFilter(HeatersFilter,"Wrong Heater Id",__FILE__,__LINE__,HeaterType,RpError, 0,0); return 0; } return HeaterCmd[HeaterType].targettemperatue; @@ -245,7 +245,7 @@ void LoadHeaterState(HeaterType HeaterType,HeaterState *HeaterState) uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) { int status = OK; - Report("HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, 0, 0); + ReportWithPackageFilter(HeatersFilter,"HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, 0, 0); if (HeaterId >= MAX_AC_HEATERS) //DC Heaters { if (ControlIdtoHeaterId [HeaterId]!=0xFF) @@ -327,7 +327,7 @@ void HeatersStartControlTimer (void) ROM_TimerEnable(Heater_timerBase, TIMER_A); ROM_IntEnable(INT_TIMER2A); ROM_TimerIntEnable(Heater_timerBase, TIMER_TIMA_TIMEOUT); - Report("HeatersStartControlTimer ", __FILE__,__LINE__,0, RpMessage, 0, 0); + ReportWithPackageFilter(HeatersFilter,"HeatersStartControlTimer ", __FILE__,__LINE__,0, RpMessage, 0, 0); return; } /*************************************************************************************************** @@ -351,7 +351,7 @@ int GetFilteredHeaterRead(int HeaterId) } sum -= minread; sum -= maxread; - Report("GetFilteredHeaterRead ", __FILE__,HeaterId,sum, minread, maxread, 0); + ReportWithPackageFilter(HeatersFilter,"GetFilteredHeaterRead ", __FILE__,HeaterId,sum, minread, maxread, 0); return (sum/(MAX_FILTER-2)); } ************************************************************************************** @@ -366,7 +366,7 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) //MessageContainer responseContainer; if (HeaterControl[HeaterId].configured == false) { - LOG_ERROR (HeaterId,"HeaterControl not configured"); + ReportWithPackageFilter(HeatersFilter,"HeaterControl not configured",__FILE__,__LINE__,HeaterId,RpError, 0,0); return ERROR; } // Turn_the_Blower_On(); @@ -375,7 +375,7 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) { if (HeaterControl[HeaterId].id != HeaterId) // heater configuration missing { - LOG_ERROR (HeaterId, "Heater is not yet configured"); + ReportWithPackageFilter(HeatersFilter, "Heater is not yet configured",__FILE__,__LINE__,HeaterId,RpError, 0,0); return ERROR; } HeaterCmd[HeaterId].heaterid = HeaterId; @@ -398,7 +398,7 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) if ((HeaterState == HEATER_OFF)&& (OnOff == HEATER_ON)) //start heating { - Report("HeaterCommandRequest OFF-> ON",__FILE__,HeaterId,Temperature*100,RpWarning,HeaterState, 0); + ReportWithPackageFilter(HeatersFilter,"HeaterCommandRequest OFF-> ON",__FILE__,HeaterId,Temperature*100,RpWarning,HeaterState, 0); //set the heater control parameters //set the target operation temperature //start the control @@ -412,7 +412,7 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) } else if ((HeaterState == HEATER_ON)&& (OnOff == HEATER_ON)) //set temperature { - Report("HeaterCommandRequest ON-> ON",__FILE__,HeaterId,Temperature*100,RpWarning,HeaterState, 0); + ReportWithPackageFilter(HeatersFilter,"HeaterCommandRequest ON-> ON",__FILE__,HeaterId,Temperature*100,RpWarning,HeaterState, 0); //HeaterPIDConfig[HeaterId].m_SetParam = HeaterCmd[HeaterId].targettemperatue; if (abs(HeaterPIDConfig[HeaterId].m_SetParam - HeaterCmd[HeaterId].targettemperatue)>0.5) //#bug 221 { @@ -421,7 +421,7 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) else { //HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId);// - Report("Restarting same temperature Heater Temp",__FILE__,HeaterId,ControlIdtoHeaterId [HeaterId],RpWarning,HeaterPreviousRead[HeaterId], 0); + ReportWithPackageFilter(HeatersFilter,"Restarting same temperature Heater Temp",__FILE__,HeaterId,ControlIdtoHeaterId [HeaterId],RpWarning,HeaterPreviousRead[HeaterId], 0); HeaterRestarted[HeaterId] = true; } //PrepareHeater(HeaterId,Temperature); //prepare the heaters control info @@ -438,8 +438,8 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) } //usnprintf(ACheatstr, 254, "HeaterCommandRequestMessage(Id %d,OnOff %d,Temperature %d)",HeaterId, OnOff, Temperature); - //Report("HeaterCommandRequestMessage",__FILE__,Temperature,HeaterId,RpWarning,HeaterState, 0); - //Report("HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, 0, 0); + //ReportWithPackageFilter(HeatersFilter,"HeaterCommandRequestMessage",__FILE__,Temperature,HeaterId,RpWarning,HeaterState, 0); + //ReportWithPackageFilter(HeatersFilter,"HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, 0, 0); return OK; } @@ -455,7 +455,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) ControlIdtoHeaterId [HeaterId] = AddControlCallback( HeaterControlCBFunction, Frequency/*eOneSecond*/,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),DryerInternalPT100Id,0); //HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(DryerInternalPT100Id); HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]);// - //Report("PrepareHeater AC Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); + //ReportWithPackageFilter(HeatersFilter,"PrepareHeater AC Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);//MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]); HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);// = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]); } @@ -521,10 +521,10 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]);//MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]); if((abs(HeaterPreviousRead[HeaterId]-MINIMUM_HEATER_READ)<1)||(abs(MAXIMUM_HEATER_READ-HeaterPreviousRead[HeaterId])<10)) { - LOG_ERROR (HeaterId,"PT100 not working properly"); + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HeaterId,RpError, 0,0); return ERROR; } - //Report("PrepareHeater Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); + //ReportWithPackageFilter(HeatersFilter,"PrepareHeater Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF) ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); @@ -541,11 +541,11 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) CTRL_TIMING_ENUM Frequency = eOneSecond; if(HeaterId >= MAX_HEATERS_NUM) { - LOG_ERROR (HeaterId,"HeaterId too high"); + ReportWithPackageFilter(HeatersFilter,"HeaterId too high",__FILE__,__LINE__,HeaterId,RpError, 0,0); return ERROR; } - //Report("PrepareHeater ", __FILE__,__LINE__,HeaterId, SetTemperatue, 0, 0); + //ReportWithPackageFilter(HeatersFilter,"PrepareHeater ", __FILE__,__LINE__,HeaterId, SetTemperatue, 0, 0); //start thread control for all motors HeaterPIDConfig[HeaterId].m_params.MAX = HeaterControl[HeaterId].outputproportionalpowerlimit*100; @@ -577,7 +577,7 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) temp = SetTemperatue*(100-band); //temp = SetTemperatue*90.0; HeaterControl[HeaterId].sensorminvalue = (int)temp; - //Report("Temperature limits",__FILE__,HeaterId,HeaterControl[HeaterId].sensormaxvalue,RpWarning,HeaterControl[HeaterId].sensorminvalue, 0); + //ReportWithPackageFilter(HeatersFilter,"Temperature limits",__FILE__,HeaterId,HeaterControl[HeaterId].sensormaxvalue,RpWarning,HeaterControl[HeaterId].sensorminvalue, 0); if (HeaterPIDConfig[HeaterId].m_params.IntegralErrorMultiplier) { @@ -647,20 +647,20 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) if (IfIndex>>8 != IfTypeHeaters) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; if ((index != HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain)&&(index != HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary)) //AC Heaters { - LOG_ERROR (IfIndex, "Wrong Interface "); + ReportWithPackageFilter(HeatersFilter, "Wrong Interface ",__FILE__,__LINE__,IfIndex,RpError, 0,0); return 0xFFFFFFFF; } //int32_t readValue = MillisecGetTemperatures(HeaterId2PT100Id[index]); if (abs(readValue - HeaterPreviousRead[index])>2000) { - Report("Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); + ReportWithPackageFilter(HeatersFilter,"Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); @@ -684,7 +684,7 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) if (HeaterMaxTempFlag[index] == false) { //LOG_ERROR (MaxreadValue/100, "Heater Over the max temperature, turned off"); - //Report(" AC Heater Over the max temperature, turned off",__FILE__,index,HeaterReady[index],RpWarning,HeaterControl[index].sensormaxvalue, 0); + //ReportWithPackageFilter(HeatersFilter," AC Heater Over the max temperature, turned off",__FILE__,index,HeaterReady[index],RpWarning,HeaterControl[index].sensormaxvalue, 0); } DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); HeaterMaxTempFlag[index] = true; @@ -705,7 +705,7 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { ActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); }*/ - //LOG_ERROR ((MinreadValue/100), "Heater Cooled Off max temperature, turned on"); + //ReportWithPackageFilter(HeatersFilter, "Heater Cooled Off max temperature, turned on",__FILE__,__LINE__,(MinreadValue/100),RpError, 0,0); } HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = false; HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = false; @@ -719,7 +719,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) int index=MAX_HEATERS_NUM; if (IfIndex>>8 != IfTypeHeaters) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; @@ -738,15 +738,15 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) SendJobProgress(0.0,0,false, "Temperature Error"); AbortJob("Over Temperature Error"); //SegmentReady(Module_Heaters,ModuleFail); - LOG_ERROR(index, "Temperature Error"); + ReportWithPackageFilter(HeatersFilter, "Temperature Error",__FILE__,__LINE__,index,RpError, 0,0); return OK; } } DeActivateHeater(index); HeaterRecalculateHeaterParams(index, 0); HeaterMaxTempFlag[index] = true; - //LOG_ERROR ((MinreadValue/100), "Heater Over the max temperature, turned off"); - Report("DC Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterReady[index],0); + //ReportWithPackageFilter(HeatersFilter,(MinreadValue/100), "Heater Over the max temperature, turned off"); + ReportWithPackageFilter(HeatersFilter,"DC Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterReady[index],0); AlarmHandlingSetAlarm(HeaterEventType[index], true); return OK; } @@ -761,11 +761,11 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) JobEndReason = JOB_TEMPERATURE_ALARM; SendJobProgress(0.0,0,false, "Temperature Error"); AbortJob("Under Temperature Error"); - LOG_ERROR(index, "Temperature Error"); + ReportWithPackageFilter(HeatersFilter, "Temperature Error",__FILE__,__LINE__,index,RpError, 0,0); return OK; } //HeaterMinTempFlag[index] = true; -// Report("Heater under the min temperature",__FILE__,__LINE__,index,RpWarning,HeaterPreviousRead[index], HeaterControl[index].sensormaxvalue); +// ReportWithPackageFilter(HeatersFilter,"Heater under the min temperature",__FILE__,__LINE__,index,RpWarning,HeaterPreviousRead[index], HeaterControl[index].sensormaxvalue); if (HeaterReady[index]==false) AlarmHandlingSetAlarm(HeaterUnderEventType[index], true); else @@ -807,13 +807,13 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) //uint8_t len = 0; if (IfIndex>>8 != IfTypeHeaters) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); return ERROR; } index = IfIndex&0xFF; if (index != HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature) //AC Heaters { - LOG_ERROR (IfIndex, "Wrong Interface "); + ReportWithPackageFilter(HeatersFilter, "Wrong Interface ",__FILE__,__LINE__,IfIndex,RpError, 0,0); return ERROR; } if (HeaterCmd[index].targettemperatue == 0) @@ -823,12 +823,12 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) //Heaters OFF until coming into the proportional band HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); - LOG_ERROR (0, "unconfigured"); + ReportWithPackageFilter(HeatersFilter, "unconfigured",__FILE__,__LINE__,0,RpError, 0,0); return ERROR; } if (abs(readValue - HeaterPreviousRead[index])>2000) { - Report("AC Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); + ReportWithPackageFilter(HeatersFilter,"AC Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); if (readValue > HeaterCmd[index].targettemperatue) { DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); @@ -840,7 +840,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } if (HeaterDisasterCounter[index] >= DISASTER_COUNTER_LIMIT) { - Report("AC Temperature disaster",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); + ReportWithPackageFilter(HeatersFilter,"AC Temperature disaster",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); @@ -864,7 +864,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //if (readValue < (/*HeaterCmd[index].targettemperatue * AcHeatersLoweroperationLimit/1000*/HeaterCmd[index].targettemperatue-800)) { - //Report("AC Activating",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); + //ReportWithPackageFilter(HeatersFilter,"AC Activating",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); if ((HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] == false)&&(HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] == false)) { ActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); @@ -878,7 +878,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) /* if ((readValue > (HeaterCmd[index].targettemperatue-300)/`*(HeaterCmd[index].targettemperatue * AcHeatersLoweroperationLimit/1000)*`/)&&(readValue < (HeaterCmd[index].targettemperatue * AcHeatersUpperoperationLimit/1000)))//read value within 0.5 percent from target { ////////////////// - Report("AC Turn Off secondary",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); + ReportWithPackageFilter(HeatersFilter,"AC Turn Off secondary",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); //InitialHeating = false; DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, 0); @@ -900,7 +900,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) && (readValue < (HeaterCmd[index].targettemperatue * ((100+HeaterControl[index].outputproportionalband)/100)))) { //InitialHeating = false; - Report("AC PID Activating",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); + ReportWithPackageFilter(HeatersFilter,"AC PID Activating",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, 0); HeatersControlStart(); @@ -923,7 +923,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) if ((readValue > (HeaterCmd[index].targettemperatue * AcHeatersLoweroperationLimit/1000))&&(readValue < (HeaterCmd[index].targettemperatue * AcHeatersUpperoperationLimit/1000)))//read value within 0.5 percent from target { //InitialHeating = false; - Report("AC Ready",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); + ReportWithPackageFilter(HeatersFilter,"AC Ready",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); HeaterAtTemp[index] = true; HeaterPrepareReady(); } @@ -972,13 +972,13 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } //} // len = usnprintf(ACheatstr, 254, "ACD Id, Temp , Integral, Output{ %d, %d ,%d, %d} ",index,(int)HeaterPIDConfig[index].m_mesuredParam ,(int)HeaterPIDConfig[index].m_integral,(int)HeaterPIDConfig[index].m_calculatedError); - // Report(logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); + // ReportWithPackageFilter(HeatersFilter,logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); // #warning PID is now only proportional (above) -// Report(ACheatstr,__FILE__,__LINE__,index,RpWarning,readValue, HeaterPIDConfig[index].m_calculatedError); - //Report("AC PID",__FILE__,__LINE__,HeaterPIDConfig[index].m_calculatedError/100,RpWarning,readValue, index); +// ReportWithPackageFilter(HeatersFilter,ACheatstr,__FILE__,__LINE__,index,RpWarning,readValue, HeaterPIDConfig[index].m_calculatedError); + //ReportWithPackageFilter(HeatersFilter,"AC PID",__FILE__,__LINE__,HeaterPIDConfig[index].m_calculatedError/100,RpWarning,readValue, index); if (HeaterRestarted[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] == true) { - Report("Restarting same temperature Heater Temp",__FILE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,HeaterPIDConfig[index].m_calculatedError,RpWarning,readValue, 0); + ReportWithPackageFilter(HeatersFilter,"Restarting same temperature Heater Temp",__FILE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,HeaterPIDConfig[index].m_calculatedError,RpWarning,readValue, 0); HeaterRestarted[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = false; } HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, (int)(HeaterPIDConfig[index].m_calculatedError/100)); @@ -1008,25 +1008,25 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) //uint8_t len = 0; if (IfIndex>>8 != IfTypeHeaters) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; if (index < MAX_AC_HEATERS) //AC Heaters { - LOG_ERROR (IfIndex, "Wrong Interface "); + ReportWithPackageFilter(HeatersFilter, "Wrong Interface ",__FILE__,__LINE__,IfIndex,RpError, 0,0); return 0xFFFFFFFF; } if (HeaterCmd[index].targettemperatue == 0) { DeActivateHeater(index); HeaterRecalculateHeaterParams(index, 0); - LOG_ERROR (index, "unconfigured"); + ReportWithPackageFilter(HeatersFilter, "unconfigured",__FILE__,__LINE__,index,RpError, 0,0); return ERROR; } if (abs(readValue - HeaterPreviousRead[index])>2000) { - Report("DC Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); + ReportWithPackageFilter(HeatersFilter,"DC Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); //if (readValue > HeaterCmd[index].targettemperatue) { DeActivateHeater(index); @@ -1036,7 +1036,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) HeaterPreviousRead[index] = readValue; if (HeaterDisasterCounter[index] >= DISASTER_COUNTER_LIMIT) { - Report("DC Temperature disaster",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); + ReportWithPackageFilter(HeatersFilter,"DC Temperature disaster",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); DeActivateHeater (index); HeaterRecalculateHeaterParams(index, 0); return ERROR; @@ -1051,7 +1051,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) DeActivateHeater(index); HeaterRecalculateHeaterParams(index, 0); //Heaters OFF until coming into the proportional band - //Report("DC HEATER Over temperature ", __FILE__,__LINE__,index, RpMessage, readValue, 0); + //ReportWithPackageFilter(HeatersFilter,"DC HEATER Over temperature ", __FILE__,__LINE__,index, RpMessage, readValue, 0); return OK; } if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) @@ -1059,7 +1059,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) ActivateHeater(index); //HeaterRecalculateHeaterParams(index, 100); //Heaters OFF until coming into the proportional band - //Report("DC HEATER Under temperature ", __FILE__,__LINE__,index, RpMessage, readValue, 0); + //ReportWithPackageFilter(HeatersFilter,"DC HEATER Under temperature ", __FILE__,__LINE__,index, RpMessage, readValue, 0); return OK; } @@ -1067,7 +1067,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) if ( (readValue > (HeaterCmd[index].targettemperatue * ((100-HeaterControl[index].outputproportionalband)/100))) && (readValue < (HeaterCmd[index].targettemperatue * ((100+HeaterControl[index].outputproportionalband)/100)))) { - Report("DC PID Activating",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); + ReportWithPackageFilter(HeatersFilter,"DC PID Activating",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); //DCInitialHeating[index] = false; HeatersControlStart(); AlarmHandlingSetAlarm(HeaterUnderEventType[index], false); @@ -1080,7 +1080,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { if ((readValue > (HeaterCmd[index].targettemperatue * DcHeatersLoweroperationLimit/1000))&&(readValue < (HeaterCmd[index].targettemperatue * DcHeatersUpperoperationLimit/1000)))//read value within 0.5 percent from target { - Report("DC Ready",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); + ReportWithPackageFilter(HeatersFilter,"DC Ready",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); HeaterAtTemp[index] = true; HeaterPrepareReady(); } @@ -1135,11 +1135,11 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) // output[index][Counter[index]] = HeaterPIDConfig[index].m_calculatedError; // if (Counter[index]++ >=100) // Counter[index] = 0; - // Report(logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); + // ReportWithPackageFilter(HeatersFilter,logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); // #warning PID is now only proportional (above) if (HeaterRestarted[index] == true) { - Report("Restarting same temperature Heater Temp",__FILE__,index,HeaterPIDConfig[index].m_calculatedError,RpWarning,readValue, 0); + ReportWithPackageFilter(HeatersFilter,"Restarting same temperature Heater Temp",__FILE__,index,HeaterPIDConfig[index].m_calculatedError,RpWarning,readValue, 0); HeaterRestarted[index] = false; } HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError/100)); @@ -1198,7 +1198,7 @@ uint32_t HeatersDisasterControl(uint32_t x,uint32_t y) temperature = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]); if (temperature>=HeaterDisasterTemp[HeaterId]) { - Report("Disaster Temperature ",__FILE__,HeaterId,temperature,RpWarning,HeaterDisasterTemp[HeaterId], 0); + ReportWithPackageFilter(HeatersFilter,"Disaster Temperature ",__FILE__,HeaterId,temperature,RpWarning,HeaterDisasterTemp[HeaterId], 0); if (HeaterDisasterCounter[HeaterId]++ >= DISASTER_COUNTER_LIMIT) HeaterDisasterCounter[HeaterId] = DISASTER_COUNTER_LIMIT; } @@ -1225,7 +1225,7 @@ uint32_t HeatersControlLoop(uint32_t tick) /*len = usnprintf(str, 100, "\r\n EightMilliSecondHeatersInterrupt SliceCounter %d Owner %d H1000 %d H2000 %d" ,SliceCounter,TimeSliceAllocation[SliceCounter],HeatersRestart,NumberOFSlicesInUse); - Report(str, __FILE__,__LINE__,0, RpMessage, SliceCounter, TimeSliceAllocation[SliceCounter]); + ReportWithPackageFilter(HeatersFilter,str, __FILE__,__LINE__,0, RpMessage, SliceCounter, TimeSliceAllocation[SliceCounter]); */ if (HeaterDisasterCounter[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] >= DISASTER_COUNTER_LIMIT) { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index 83dbb43d6..d0621125f 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -37,9 +37,9 @@ uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue); }IDS_Dispenser_Data;*/ void IDS_Dispenser_Set_Flow_Params (char DispenserId,double NanoLitterPerPulse,char MicroSteps); -void IDS_Dispenser_RefillStarted (char DispenserId); -void IDS_Dispenser_RefillEnded (char DispenserId); -void IDS_Dispenser_MovingDirection (char DispenserId, bool direction); +void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps); +void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps); + //uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback); uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index ed9a3adb7..c3a698665 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -17,6 +17,8 @@ #include "Common/SWUpdate/FileSystem.h" #include "drivers/Flash_Memory/fatfs/ff.h" +#include "drivers/Flash_ram/FlashProgram.h" + //extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS]; #define CloseValve MidTank_Dispenser @@ -28,7 +30,7 @@ uint32_t OpenValveTimeout = 250; #define DISPENSER_BUILD_PRESSURE_LIMIT 1.5 #define DISPENSER_BUILD_PRESSURE_TIMEOUT 60000 #define DISPENSER_BUILD_PRESSURE_LAG 50 - +#define DEFAULT_NANOLITER_PER_PULSE 2.34 uint32_t DispenserPrepareSpeed = DISPENSER_BUILD_PRESSURE_SPEED; double DispenserPreparePressure = DISPENSER_BUILD_PRESSURE_LIMIT; uint32_t DispenserPrepareTimeout = DISPENSER_BUILD_PRESSURE_TIMEOUT; @@ -222,23 +224,42 @@ void IDS_Dispenser_Content_Init (void) int i; FRESULT Fresult = FR_OK; void* buffer = NULL; + TimerMotors_t HW_Motor_Id; uint32_t Bytes = 0; dispenser_data__init(&IDSDispenserData); dispenserdata = (DispenserRunningData**)my_malloc(sizeof(DispenserRunningData *)*(MAX_SYSTEM_DISPENSERS)); for(i=0;idispenserinfo[i],sizeof(DispenserRunningData)); + memcpy (&IDS_Dispenser_Data[i],&StoredDispenserData[i],sizeof(DispenserRunningData)); IDS_Dispenser_Data[i].has_consumedinnanolitter = true; IDS_Dispenser_Data[i].has_totalconsumedinnanolitter = true; IDS_Dispenser_Data[i].has_direction = true; @@ -246,6 +267,8 @@ void IDS_Dispenser_Content_Init (void) IDS_Dispenser_Data[i].has_numberofrefills = true; IDS_Dispenser_Data[i].has_nanolitterperpulse = true; } + Report("IDS_Dispenser_Init ",__FILE__,__LINE__,(int)Bytes,RpWarning,(int)IDS_Dispenser_Data[0].nanolitterperpulse*100,0); + free (buffer); dispenser_data__free_unpacked(StoredDispenserData,NULL); } @@ -260,16 +283,21 @@ uint32_t IDS_Dispenser_Store_Data (void) FRESULT Status = FR_OK; IDSDispenserData.n_dispenserinfo = MAX_SYSTEM_DISPENSERS; IDSDispenserData.dispenserinfo = dispenserdata; - uint8_t* response_buffer = my_malloc(dispenser_data__get_packed_size(&IDSDispenserData)); - size_t response_size = 0; - if (response_buffer) + + size_t response_size = sizeof(DispenserRunningData)*8; + int i; + for(i=0;i speed/10 + if (CurrentDispenserSpeed[DispenserId]>0.0) + { + IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10); + if (seconds_counter%100 == 0) + { + Report("IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter,0); + } + } if (DispenserId == 0) { - if (seconds_counter++>=600)//3600) + if (seconds_counter++>=6000)//36000)// - one hour) { seconds_counter = 0; if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter) @@ -298,51 +339,64 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) } void IDS_Dispenser_Set_Flow_Params (char DispenserId,double nanolitterperpulse,char microsteps) { - assert (DispenserIddata.len, requestContainer->data.data); DispenserDataResponse response = DISPENSER_DATA_RESPONSE__INIT; response.n_dispenserinfo = MAX_SYSTEM_DISPENSERS; - response.dispenserinfo = dispenserdata; + response.dispenserinfo = (DispenserRunningData**)my_malloc(sizeof(DispenserRunningData *)*(MAX_SYSTEM_DISPENSERS)); + for(i=0;itotalconsumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[i].totalconsumedinnanolitter,0); + } responseContainer = createContainer(MESSAGE_TYPE__DispenserDataResponse, requestContainer->token, true, &response, &dispenser_data_response__pack, &dispenser_data_response__get_packed_size); //------------------------------------------------------------------------------------------- diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index 4dbd2e89e..67fda9460 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -9,6 +9,9 @@ #define MODULES_IDS_IDS_EX_H_ #include "PMR/Hardware/HardwarePIDControl.pb-c.h" +#include "PMR/EmbeddedParameters/DispenserRunningData.pb-c.h" +#include "PMR/EmbeddedParameters/DispenserData.pb-c.h" + #define MAX_SYSTEM_DISPENSERS 8 typedef enum { LimitSwitchAlarmEmpty_1, //MOTO_DISPENSER_1 = 6, @@ -32,6 +35,9 @@ typedef enum { extern bool EnableLubrication; extern bool EnableIntersegment; extern double IntersegmentLength; +extern DispenserRunningData IDS_Dispenser_Data[MAX_SYSTEM_DISPENSERS]; +extern DispenserData IDSDispenserData; +extern DispenserRunningData **dispenserdata; extern bool DispenserUsedInJob[MAX_SYSTEM_DISPENSERS]; bool IDS_MapDispenserUsedinJob(void *JobDetails); @@ -57,6 +63,8 @@ uint32_t IDS_DispenserControlInit(); uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_StopHomeDispenser (uint32_t deviceID); +uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); + uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_Dispenser_Alarm_On (uint8_t deviceID); uint32_t IDS_Dispenser_Alarm_Off (uint8_t deviceID); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index e9efd97df..9cca00b5c 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -60,6 +60,7 @@ FPGA_GPI_ENUM Dispenser_Id_to_Alarm_LS_Id[MAX_SYSTEM_DISPENSERS*2] = { }; callback_fptr HomingRequestCallback[MAX_SYSTEM_DISPENSERS]={0,0,0,0,0,0,0,0}; bool HomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; +bool PrimingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; uint32_t DispenserHomingControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; uint32_t DispenserHomingTime[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0}; #define INITIAL_DISPENSER_PRESSURE 2.10 @@ -87,6 +88,7 @@ uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) CurrentDispenserSpeed[DispenserId] = 0; MotorSetMicroStep(motorId, MotorsCfg[motorId].microstep); HomingActive[DispenserId]= false; + PrimingActive[DispenserId]= false; Report("End backlash",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); if (SafeRemoveControlCallback(DispenserHomingControlId[DispenserId], IDS_HomeDispenserBackMoveCallback )==OK) DispenserHomingControlId[DispenserId] = 0xFF; @@ -122,7 +124,7 @@ uint32_t IDS_HomeDispenserCallback(uint32_t motorId, uint32_t ReadValue) MotorSetSpeed(motorId, 1000); CurrentDispenserSpeed[DispenserId] = 1000; - IDS_Dispenser_RefillEnded ( DispenserId); + IDS_Dispenser_RefillEnded ( DispenserId, MotorsCfg[motorId].microstep); return OK; @@ -136,7 +138,7 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr //if (DispensersAlarmState[DispenserId] == true) // return ERROR; - if (HomingActive[DispenserId] == true) + if ((HomingActive[DispenserId] == true)||(PrimingActive[DispenserId] == true)) { LOG_ERROR (DispenserId,"Homing already active"); return ERROR; @@ -157,7 +159,7 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr //open dry air valve in the dispenser Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_ON); - IDS_Dispenser_RefillStarted(DispenserId); + IDS_Dispenser_RefillStarted(DispenserId,1); MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Id[DispenserId], IDS_HomeDispenserCallback,0); CurrentDispenserSpeed[DispenserId] = speed; CurrentDispenserSpeed[DispenserId] = (-1*CurrentDispenserSpeed[DispenserId]); @@ -168,6 +170,7 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr uint32_t IDS_Dispenser_Alarm_On (uint8_t DispenserId) { uint32_t status = OK; + Report("IDS_Dispenser_Alarm_On",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,0,0); DispensersAlarmState[DispenserId] = true; TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; status |= MotorAbortMovetoLimitSwitch(MotorId); @@ -183,6 +186,7 @@ uint32_t IDS_Dispenser_Alarm_Off (uint8_t DispenserId) { uint32_t status = OK; DispensersAlarmState[DispenserId] = false; + Report("IDS_Dispenser_Alarm_Off",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,0,0); return status; } @@ -191,13 +195,11 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) assert(DispenserId < MAX_SYSTEM_DISPENSERS); Report("IDS_StopHomeDispenser",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)HomingActive[DispenserId],0); - if (HomingActive[DispenserId] != true) + if ((HomingActive[DispenserId] == false)&&( PrimingActive[DispenserId] == false)) { LOG_ERROR (DispenserId,"Homing not active"); return ERROR; } - else - HomingActive[DispenserId] = false; TimerMotors_t MotorId = (DispenserId)+HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; MotorAbortMovetoLimitSwitch(MotorId); @@ -205,13 +207,66 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) Disable_MidTank_Pressure_Reading(DispenserId); Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer - if (DispenserId == LUBRICANT_DISPENSER) + + if (HomingActive[DispenserId] == true) { - Lubricant_2Way_Valve (STOP); + IDS_StopHomeDispenserBuildPressure(DispenserId); + } + if (PrimingActive[DispenserId] == true) + { + if (DispenserId == LUBRICANT_DISPENSER) + { + Lubricant_2Way_Valve (STOP); + } + PrimingActive[DispenserId] = false; + MotorSetMicroStep(MotorId, MotorsCfg[MotorId].microstep); + CurrentDispenserSpeed[DispenserId] = 0; + CurrentDispenserSpeed[DispenserId] = 0; + IDS_Dispenser_PrimingEnded(DispenserId,MotorsCfg[MotorId].microstep); + + } - MotorSetMicroStep(MotorId, MotorsCfg[MotorId].microstep); - CurrentDispenserSpeed[DispenserId] = 0; + + return OK; +} +uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) +{ + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + + Report("IDS_StopHomeDispenser and build pressure",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)HomingActive[DispenserId],0); + if (HomingActive[DispenserId] != true) + { + LOG_ERROR (DispenserId,"Homing not active"); + return ERROR; + } + else + HomingActive[DispenserId] = false; + + TimerMotors_t motorId = (DispenserId)+HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; + MotorAbortMovetoLimitSwitch(motorId); + //close dry air valve in the dispenser +////////////////////////////////////////////////// + Read_MidTank_Pressure_Sensor(DispenserId); + //close dry air valve in the dispenser + Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); + Disable_MidTank_Pressure_Reading(DispenserId); + //MotorSetMicroStep(motorId, MotorsCfg[motorId].microstep); + if (HomingRequestCallback[DispenserId]) + { + HomingRequestCallback[DispenserId](DispenserId,0); + HomingRequestCallback[DispenserId] = NULL; + } +// HomingActive[DispenserId]= false; + Report("Start backlash",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); + DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); + Task_sleep(10); + MotorSetDirection(motorId,MotorsCfg[motorId].directionthreadwize); + + MotorSetSpeed(motorId, 1000); + CurrentDispenserSpeed[DispenserId] = 1000; + IDS_Dispenser_RefillEnded ( DispenserId, MotorsCfg[motorId].microstep); + return OK; } @@ -243,12 +298,12 @@ uint32_t IDS_EmptyDispenserCallback(uint32_t motorId, uint32_t ReadValue) MotorStop(motorId,Hard_Hiz); CurrentDispenserSpeed[DispenserId] = 0; MotorSetMicroStep(motorId, MotorsCfg[motorId].microstep); - HomingActive[DispenserId]= false; + PrimingActive[DispenserId]= false; if (DispenserId == LUBRICANT_DISPENSER) { Lubricant_2Way_Valve (STOP); } - + IDS_Dispenser_PrimingEnded(DispenserId,MotorsCfg[motorId].microstep); Report("End Priming",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); //MotorSetMicroStep(motorId, MotorsCfg[motorId].microstep); if (HomingRequestCallback[DispenserId]) @@ -268,11 +323,10 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt //if (DispensersAlarmState[DispenserId] == true) // return ERROR; - - if (HomingActive[DispenserId] == true) + if ((HomingActive[DispenserId] == true)||(PrimingActive[DispenserId] == true)) return ERROR; else - HomingActive[DispenserId] = true; + PrimingActive[DispenserId] = true; HomingRequestCallback[DispenserId] = callback; TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; @@ -285,8 +339,7 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt SysCtlDelay(180000); //open dry air valve in the dispenser //Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_ON); - IDS_Dispenser_RefillStarted(DispenserId); - IDS_Dispenser_MovingDirection(DispenserId,UP); + IDS_Dispenser_PrimingStarted(DispenserId,1); if (DispenserId == LUBRICANT_DISPENSER) { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index d5b4867f0..3f54c0f08 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -40,7 +40,7 @@ typedef struct bool m_isReady; PID_Config_Params m_params; }DispenserControlConfig_t; -HardwarePidControl *DispensersControl;// = (HardwarePidControl *)GENHWCFG_MAP_IN_FLASH + 0x4000; +HardwarePidControl *DispensersControl; #define MAX_DYE_DISPENSERS 6 int32_t DispenserSamples[MAX_SYSTEM_DISPENSERS][MAX_CONTROL_SAMPLES] = {0}; int DispenserSamplePointer[MAX_SYSTEM_DISPENSERS] = {0}; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index e927ae436..56fb79c23 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -78,6 +78,8 @@ 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); uint32_t DancerConfigMessage(HardwareDancer * request); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 8943e5d30..a113e4dae 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -54,6 +54,10 @@ uint32_t ScrewNumberOfSteps = 0; //holds the current number of steps for the bool SCREW_TimerActivated = false; uint32_t ScrewControlId = 0xFF; +static bool KeepWindingCone = false; +static uint32_t WindingConeLocation; +static uint32_t WinderBackToBaseTime = 800; + InternalWinderConfigStruc InternalWinderCfg = {0}; uint32_t ScrewLocationLimitSwitch = 0,ScrewLocationStart = 0; @@ -65,7 +69,17 @@ uint32_t Winder_Init(void) ScrewTimerInterruptInit(); return OK; } +void SetKeepWindingCone(bool value) +{ + KeepWindingCone = value; + ReportWithPackageFilter(ThreadFilter,"set KeepWindingCone",__FILE__,__LINE__,WindingConeLocation,RpWarning,KeepWindingCone, 0); +} +void SetWinderBackToBaseTime(uint32_t value) +{ + WinderBackToBaseTime = value; + ReportWithPackageFilter(ThreadFilter,"Set WinderBackToBaseTime",__FILE__,__LINE__,WinderBackToBaseTime,RpWarning,KeepWindingCone, 0); +} uint32_t InternalWinderConfigMessage(HardwareWinder* request) { @@ -120,6 +134,15 @@ uint32_t Winder_Prepare(void *JobDetails) ScrewLocationRun[0] = 0; ScrewLocationRun[1] = 0; + if (( KeepWindingCone == false)||(WindingConeLocation == 0)) + { + WindingConeLocation = InternalWinderCfg.startoffsetpulses; + ReportWithPackageFilter(ThreadFilter,"WindingConeLocation set",__FILE__,__LINE__,WindingConeLocation,RpWarning,KeepWindingCone, 0); + } + else + { + ReportWithPackageFilter(ThreadFilter,"WindingConeLocation use previous",__FILE__,__LINE__,WindingConeLocation,RpWarning,KeepWindingCone, 0); + } if (JobTicket->has_samplewinding == true) { @@ -149,7 +172,7 @@ uint32_t Winder_Prepare(void *JobDetails) uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue) { uint32_t status=OK; - uint32_t numOfSteps = InternalWinderCfg.startoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; + uint32_t numOfSteps = WindingConeLocation*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,InternalWinderCfg.segmentoffsetpulses); //REPORT_MSG(numOfSteps, "Winder_PrepareStage2"); @@ -297,7 +320,8 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if ((CalculationDirectionChangeCounter/2)%InternalWinderCfg.spoolbackingrate == 0) { ScrewNumberOfSteps--; - Report("Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); + WindingConeLocation--; + ReportWithPackageFilter(ThreadFilter,"Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } else //next time going back @@ -514,7 +538,7 @@ uint32_t WinderDistanceToSpoolState(void ) double DTS_Time = ((dryerbufferlength*100)/dyeingspeed)*1000;//distance to spool time in milliseconds REPORT_MSG ((int)DTS_Time,"WinderDistanceToSpoolState"); - ScrewDTSControlId = AddControlCallback(ScrewDTSCallback, DTS_Time-800,TemplateDataReadCBFunction,0,0,0); + ScrewDTSControlId = AddControlCallback(ScrewDTSCallback, DTS_Time-WinderBackToBaseTime,TemplateDataReadCBFunction,0,0,0); REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback start"); return OK; diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index dbbcd64b4..5fb28f68e 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,11 +1,15 @@ -Embedded SW Release note - Version 1.4.2.0 +Embedded SW Release note - Version 1.4.2.2 ============================================================= some bugs fixed in file download fixed some problems in flash handling -new events - jobs (not yet handled RFID preparation - IFS module, protobuf, driver - NOT IN GIT yet combined driver - protobuf. NOT IN GIT yet thread load - thread unload with winding - not tested yet +report filters introduced, +improved flash handling. +improved and simplified dispenser location. +improved config parameters handling + Embedded SW Release note - Version 1.4.1.0 ============================================================= Move to length calculation FROM PULLER diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 9f4a44a4a..94cb8b623 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -55,10 +55,14 @@ POWER_OFF_STAGES_ENUM PowerOffMachineState = POWER_OFF_INIT,StoredMachineState = uint32_t PowerOffControlId = 0xFF; uint32_t WaitForProcessControlId = 0xFF; uint32_t PowerOffSequenceStateMachine( POWER_OFF_STAGES_ENUM ReadValue); - +bool PowerOffInProcess = false; #define POWER_OFF_TEMP_THRESHOLD 5000 //50 celsious int32_t PowerOffTemperatureThreshold = POWER_OFF_TEMP_THRESHOLD; +bool PowerOffInProcessGetState(void) +{ + return PowerOffInProcess; +} void PowerOffSetTemperatureThreshold (int32_t temperature) { if (temperature) @@ -81,6 +85,7 @@ uint32_t PowerOffInit(void) { LOG_ERROR(0,"Power Off Init"); PowerOffMachineState = POWER_OFF_HEAD_CLEAN; + PowerOffInProcess = true; PowerOffControlId = AddControlCallback( PowerOffScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; } @@ -89,6 +94,7 @@ uint32_t PowerOffCancel(void) { if (PowerOffMachineState >= POWER_OFF_HEAD_CLEAN) PowerOffMachineState = POWER_OFF_CANCELLED; + PowerOffInProcess = false; return OK; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h index fd3014d95..96d48771d 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h @@ -33,5 +33,6 @@ uint32_t PowerOffInit(void); uint32_t PowerOffCancel(void);//POWER_OFF_CANCELLED void PowerOffSetTemperatureThreshold (int32_t temperature); //celsius temperature +bool PowerOffInProcessGetState(void); #endif /* STATEMACHINES_INITIALIZATION_POWEROFFSEQUENCE_H_ */ diff --git a/Software/PMR/Messages/Debugging/DebugDistributorType.proto b/Software/PMR/Messages/Debugging/DebugDistributorType.proto new file mode 100644 index 000000000..4cf523dc4 --- /dev/null +++ b/Software/PMR/Messages/Debugging/DebugDistributorType.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; + +package Tango.PMR.Debugging; +option java_package = "com.twine.tango.pmr.debugging"; + +enum DebugDistributorType +{ + ControlFilter = 0; + HeatersFilter = 1; + JobFilter = 2; + WasteFilter = 3; + AlarmFilter = 4; + DiagnosticsFilter = 5; + IDSFilter = 6; + ThreadFilter = 7; + GeneralFilter = 8; + CommFilter = 9; + FPGAFilter = 10; + LoadFilter = 11; + InitFilter = 12; + MaintFilter = 13; + IFSFilter = 14; + FilesFilter = 15; +} \ No newline at end of file -- cgit v1.3.1 From 15f9a26d5a4f0a90b628805bb551086d4b81c7ee Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 16 Jul 2019 08:54:56 +0300 Subject: cosmetics --- .../Embedded/Modules/IDS/IDS_dispenser.c | 2 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 23 ++-------------------- .../Embedded/Modules/Thread/Thread_init.c | 1 - 3 files changed, 3 insertions(+), 23 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 1a6902a6a..0b5b4791a 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -325,7 +325,7 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) } if (DispenserId == 0) { - if (seconds_counter++>=6000)//36000)// - one hour) + if (seconds_counter++>=600)//36000)// - one hour) { seconds_counter = 0; if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 9cca00b5c..2907ebf0d 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -121,23 +121,17 @@ uint32_t IDS_HomeDispenserCallback(uint32_t motorId, uint32_t ReadValue) DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); Task_sleep(10); MotorSetDirection(motorId,MotorsCfg[motorId].directionthreadwize); - MotorSetSpeed(motorId, 1000); CurrentDispenserSpeed[DispenserId] = 1000; IDS_Dispenser_RefillEnded ( DispenserId, MotorsCfg[motorId].microstep); - - -return OK; - + return OK; } uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr callback) { assert(DispenserId < MAX_SYSTEM_DISPENSERS); - //if (DispensersAlarmState[DispenserId] == true) // return ERROR; - if ((HomingActive[DispenserId] == true)||(PrimingActive[DispenserId] == true)) { LOG_ERROR (DispenserId,"Homing already active"); @@ -222,12 +216,7 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) MotorSetMicroStep(MotorId, MotorsCfg[MotorId].microstep); CurrentDispenserSpeed[DispenserId] = 0; CurrentDispenserSpeed[DispenserId] = 0; - IDS_Dispenser_PrimingEnded(DispenserId,MotorsCfg[MotorId].microstep); - - } - - return OK; } uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) @@ -303,7 +292,6 @@ uint32_t IDS_EmptyDispenserCallback(uint32_t motorId, uint32_t ReadValue) { Lubricant_2Way_Valve (STOP); } - IDS_Dispenser_PrimingEnded(DispenserId,MotorsCfg[motorId].microstep); Report("End Priming",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); //MotorSetMicroStep(motorId, MotorsCfg[motorId].microstep); if (HomingRequestCallback[DispenserId]) @@ -311,10 +299,7 @@ uint32_t IDS_EmptyDispenserCallback(uint32_t motorId, uint32_t ReadValue) HomingRequestCallback[DispenserId](DispenserId,0); HomingRequestCallback[DispenserId] = NULL; } - - -return OK; - + return OK; } uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr callback) @@ -339,14 +324,10 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt SysCtlDelay(180000); //open dry air valve in the dispenser //Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_ON); - IDS_Dispenser_PrimingStarted(DispenserId,1); - if (DispenserId == LUBRICANT_DISPENSER) { Lubricant_2Way_Valve (START); } - - MotorMovetoLimitSwitch (MotorId,MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Empty_Id[DispenserId], IDS_EmptyDispenserCallback,0); CurrentDispenserSpeed[DispenserId] = speed; return OK; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 78203b236..cab3b592e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -44,7 +44,6 @@ uint32_t MotorsConfigMessage(HardwareConfiguration * HWrequest) { uint32_t status = PASSED; TimerMotors_t Motor_i,MotorId; - MOTDRIVER_TYPE DriverType; HardwareMotor *request; if (HWrequest == NULL) return ERROR; -- cgit v1.3.1 From 0f9ed0892d136072c1e5b82c14aa401e84a5ce4f Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 23 Jul 2019 18:30:48 +0300 Subject: Version 1.4.2.5 store data in EEPROM, thread loading, IDS datat store, IDS prepare with reduced ink usage --- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 16 +++-- .../Embedded/Common/SWUpdate/FirmwareUpgrade.h | 1 + .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Common/Sys_PinOut_Config/MCU_MAIN_pinout.c | 1 + .../Embedded_SW/Embedded/Common/report/report.h | 2 +- .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c | 25 +++++-- .../Drivers/FPGA/Full_Vme/ispvme/ispvm_ui.c | 1 + .../Embedded/Drivers/Motors/MotorActions.c | 48 ++++++++----- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 40 +++++++++++ .../Embedded/Drivers/flash_ram/MCU_E2Prom.h | 27 ++++++++ Software/Embedded_SW/Embedded/Main.c | 7 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 6 +- .../Embedded/Modules/Control/MillisecTask.c | 2 + .../Embedded/Modules/Diagnostics/Diagnostics.c | 37 ++-------- .../Modules/Diagnostics/DiagnosticsJogging.c | 2 + .../Embedded/Modules/General/GeneralHardware.c | 15 ++-- .../Embedded_SW/Embedded/Modules/General/process.c | 2 + .../Embedded/Modules/Heaters/Heaters_print.c | 80 ++++++++++++++++++++++ .../Embedded/Modules/IDS/IDS_dispenser.c | 17 ++++- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 5 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 11 +-- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 45 +++++++++++- .../Embedded/Modules/Stubs_Handler/Stub_Dancer.c | 3 +- .../Embedded/Modules/Thread/ThreadLoad.c | 64 ++++++++++++----- .../Embedded/Modules/Thread/Thread_Winder.c | 2 +- .../Embedded/Modules/Thread/Thread_init.c | 22 ++++-- .../Embedded/Modules/Thread/Thread_print.c | 19 +++++ .../StateMachines/Initialization/PowerIdle.c | 7 ++ 28 files changed, 401 insertions(+), 108 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c create mode 100644 Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 77056213f..dabd5ff44 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -28,6 +28,7 @@ #include "Common/SWUpdate/FileSystem.h" #include "Modules/Control/Control.h" +#include "Modules/AlarmHandling/AlarmHandling.h" int NumberOfFiles = 0,CurrentRunningFile; int CurrentFileSize = 0; @@ -48,8 +49,8 @@ bool SwUpgradeActive(void) } uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { - //ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT; - //MessageContainer responseContainer; + ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT; + MessageContainer responseContainer; usnprintf(activateString, 1000, "file %d of %d bytes %d of %d",CurrentRunningFile,NumberOfFiles,vme_index,CurrentFileSize); @@ -61,9 +62,6 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) ActivateVersionControlId = 0xFF; else LOG_ERROR(255,"ActivateVersionCallBackFunction"); - return OK; - - /* responseContainer = createContainer(MESSAGE_TYPE__ActivateVersionResponse, ActivateToken, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size); responseContainer.continuous = true; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); @@ -73,9 +71,13 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) if (Reboot == true) { + Task_sleep (120000000*5); Power_Reset(); } -*/ + return OK; + + + } int File_i = 0; @@ -121,7 +123,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) for (File_i = 0;File_in_filedescriptors;File_i++) { CurrentFileSize = -1; - vme_index = 0; + //vme_index = 0; switch(VersionPackage->filedescriptors[File_i]->destination) { case VERSION_FILE_DESTINATION__MCU: diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h index 6f817fe90..1d11a84b6 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h @@ -8,6 +8,7 @@ #ifndef COMMON_SWUPDATE_FIRMWAREUPGRADE_H_ #define COMMON_SWUPDATE_FIRMWAREUPGRADE_H_ +extern int CurrentFileSize; uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer); uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer); 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 5112fd730..9c02e609e 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,2,2}; +TangoVersion_t _gTangoVersion = {1,4,2,5}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c index bd9336db3..93ce6cf51 100644 --- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c +++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c @@ -123,6 +123,7 @@ PinoutSet(void) MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOS); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOT); + MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0); // // Configure the GPIO Pin Mux for PD1 diff --git a/Software/Embedded_SW/Embedded/Common/report/report.h b/Software/Embedded_SW/Embedded/Common/report/report.h index 349bdb733..093481081 100644 --- a/Software/Embedded_SW/Embedded/Common/report/report.h +++ b/Software/Embedded_SW/Embedded/Common/report/report.h @@ -228,7 +228,7 @@ extern STATUS ReportMessage2Dist(DistributorHandle distributor, const char *mess * Return value: OK; or Report's return code **************************************************************************/ #define REPORT_IF_ERROR(condition, msg, error, severity, par1, par2) \ - ((condition) ? Report(REPORT_LINE(msg), error, severity, par1, par2) : OK) + ((condition) ? Report(msg, __FILE__,__LINE__, error, severity, par1, par2) : OK) /*----------------------------------------------------------------------------*/ /*---------------------- Report Tracing and Exceptions -----------------------*/ diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c index cb4b413e5..931044f82 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c @@ -16,6 +16,7 @@ #include "Modules/Control/Control.h" #include "Modules/Control/MillisecTask.h" +#include "Common/SWUpdate/FirmwareUpgrade.h" extern short int main_vme(); @@ -73,13 +74,29 @@ FRESULT FPGA_Programming_Up(FPGA_ID FPGA_Id, char * FullPath, bool IncludeReboot //break; } + FILINFO* fno; + fno = my_malloc(sizeof(FILINFO)); + if (fno == 0) + fresult = FR_DENIED; + else + { + memset (fno,0,sizeof(FILINFO)); + fresult = f_stat(FullPath,fno); + CurrentFileSize = fno->fsize; + free (fno); + } FileHandlevme = malloc(sizeof(FIL)); - fresult |= f_open(FileHandlevme, FullPath, FA_READ); - if(fresult != FR_OK) + if (FileHandlevme) { - return(fresult); + fresult |= f_open(FileHandlevme, FullPath, FA_READ); + if(fresult != FR_OK) + { + return(fresult); + } + Report(FullPath,__FILE__,__LINE__,CurrentFileSize,RpWarning,0,0); + + fresult = main_vme(); } - fresult = main_vme(); diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/ispvme/ispvm_ui.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/ispvme/ispvm_ui.c index 0286d53a7..1d114f8ce 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/ispvme/ispvm_ui.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/ispvme/ispvm_ui.c @@ -683,6 +683,7 @@ short int main_vme() *************************************************************/ short int siRetCode = 0; + vme_index = 0; /************************************************************* * * * Pass in the command line arguments to the entry point. * diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index a190730cb..911b31eed 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -133,7 +133,7 @@ MotorHomingDirectionEnum Motor_Id_to_LS_Direction[NUM_OF_MOTORS] = { }; uint32_t MotorGotoWithCallback (TimerMotors_t MotorId, uint32_t Steps, uint32_t LimitSwitchId,callback_fptr callback,uint32_t timeout) //TODO { - assert (callback); + //assert (callback); //assert (isValid(deviceId)); //call driver action to device id with the parameter @@ -151,7 +151,7 @@ uint32_t MotorGotoWithCallback (TimerMotors_t MotorId, uint32_t Steps, uint32_t } uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO { - assert (callback); + //assert (callback); //assert (isValid(deviceId)); //call driver action to device id with the parameter @@ -168,7 +168,7 @@ uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32 uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO { - assert (callback); + //assert (callback); //assert (isValid(deviceId)); //call driver action to device id with the parameter @@ -185,7 +185,7 @@ uint32_t DryerBackLash = 0; uint32_t DrierZeroPosition = 0; bool DrierBackLashDirection = false; int CallbackCalls=0; -bool FirstCall = false; +int FirstCall = 0; uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) //TODO { uint32_t MotorId; @@ -197,20 +197,20 @@ uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) / } MotorId = IfIndex&0xFF; MotorPosition = ArmPosition; - if (FirstCall) - { - FirstCall = false; - return OK; - } CallbackCalls++; if (CallbackCalls%20 == 0) { - REPORT_MSG(MotorPosition,"MotorVerifiedCallBackFunction"); +// REPORT_MSG(MotorPosition,"MotorVerifiedCallBackFunction"); + Report("Move_To_Stopper_Callback",__FILE__,__LINE__,MotorPosition,RpMessage,StoredMotorPosition[MotorId],0); //CallbackCalls = 0; } - Report("Move_To_Stopper_Callback",__FILE__,__LINE__,MotorPosition,RpMessage,StoredMotorPosition[MotorId],0); Read_Dryer_ENC_Position(); //trigger the next call + if (FirstCall<5) + { + FirstCall++; + return OK; + } //if (((abs(MotorPosition - StoredMotorPosition[MotorId])<=60)||(MotorGetDirection(MotorId)!=(1-DrierBackLashDirection)))&&(CallbackCalls>=10)) /*Motor did not move in the last time lag*/ if (abs(MotorPosition - StoredMotorPosition[MotorId])<=10) @@ -224,8 +224,10 @@ uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) / Task_sleep(5); MotorMove(MotorId,DrierBackLashDirection,DryerBackLash ); Task_sleep(5); + if (MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) + MotorStop(MotorId,Hard_Stop ); DrierZeroPosition = Read_Dryer_ENC_Position(); //trigger the next call - Report("MotorVerifiedCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,0,0); + Report("MotorVerifiedCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,DryerBackLash,0); //call the module callback if (MotorCallback[MotorId]) @@ -238,7 +240,7 @@ uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) / } uint32_t MotorMoveToStopper (TimerMotors_t MotorId,bool direction, uint32_t Speed, callback_fptr callback,uint32_t backlash,uint32_t timeout) //TODO { - assert (callback); + //assert (callback); //assert (isValid(deviceId)); //call driver action to device id with the parameter @@ -251,9 +253,11 @@ uint32_t MotorMoveToStopper (TimerMotors_t MotorId,bool direction, uint32_t Spee MotorSetDirection( MotorId, direction); CallbackCalls = 0; - FirstCall = true; + FirstCall = 0; MotorGetPositionFromFPGA(MotorId); Task_sleep(5); + Read_Dryer_ENC_Position(); //trigger the next call + StoredMotorPosition[MotorId] = MotorGetPosition(MotorId); REPORT_MSG(StoredMotorPosition[MotorId],"MotorMoveToStopper initial position"); MotorSetSpeed (MotorId, Speed); @@ -273,7 +277,13 @@ uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t Rea if (MotorControlId[MotorId] == 0xFF) return ERROR; - Report("MotorMoveToDrierPositionCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,ReadValue,0); + CallbackCalls++; + if (CallbackCalls%20 == 0) + { +// REPORT_MSG(MotorPosition,"MotorVerifiedCallBackFunction"); + Report("MotorMoveToDrierPositionCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,ReadValue,0); + //CallbackCalls = 0; + } if (DrierZeroPosition == ReadValue) //thread running identified { @@ -282,6 +292,8 @@ uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t Rea MotorControlCallback[MotorId] = 0; MotorControlId[MotorId] = 0xFF; MotorStop(MotorId,Hard_Hiz); //TODO in run time limit switch just reverse direction + if (MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) + MotorStop(MotorId,Hard_Stop ); //possibly: start regular control (speed etc) //uint32_t ControlId = AddControlCallback(ControlCBFunction Callback, eOneMillisecond, (IfTypeMotors*0x100+MotorId), deviceId, Parameter ); @@ -294,7 +306,7 @@ uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t Rea } uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout) { - assert (callback); + //assert (callback); uint32_t currentposition = 0; bool direction; //assert (isValid(deviceId)); @@ -332,7 +344,7 @@ uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callb MotorSetDirection( MotorId, direction); MotorSetSpeed (MotorId, 5); - MotorControlId[MotorId] = AddControlCallback( MotorMoveToDrierPositionCallBackFunction, eOneMillisecond,Control_Read_Dryer_Position,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); + MotorControlId[MotorId] = AddControlCallback( MotorMoveToDrierPositionCallBackFunction, eTenMillisecond,Control_Read_Dryer_Position,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); MotorControlCallback[MotorId] = MotorMoveToDrierPositionCallBackFunction; return MotorControlId[MotorId]; @@ -340,7 +352,7 @@ uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callb uint32_t MotorSetSpeedWithCallback (TimerMotors_t MotorId, uint32_t _freq, callback_fptr callback) //TODO { - assert (callback); + //assert (callback); MotorCallback[MotorId] = callback; MotorControlId[MotorId] = AddControlCallback( MotorSetSpeedCallBackFunction, eTenMillisecond, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c new file mode 100644 index 000000000..f3ca9615a --- /dev/null +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -0,0 +1,40 @@ +/* + * MCU_E2Prom.c + * + * Created on: July 22, 2019 + * Author: shlomo + */ + +#include "include.h" +#include +#include "MCU_E2Prom.h" +#include "driverlib/eeprom.h" + +uint32_t E2Prom_Data[MAX_EEPROM_STORAGE] = {0,0,0,0,0,0}; +uint32_t MCU_E2PromProgram(int Address,uint32_t Data) +{ + uint32_t Buffer = Data; + if (Address>=MAX_EEPROM_STORAGE) + return ERROR; + Report("MCU_E2PromProgram",__FILE__,__LINE__,Address,RpWarning,Data,0); + + return (EEPROMProgram((uint32_t *)&Buffer, Address*4, 4)); +} +uint32_t MCU_E2PromRead(int Address,uint32_t *Data) +{ + if (Address>=MAX_EEPROM_STORAGE) + return ERROR; + EEPROMRead((uint32_t *)Data,Address*4, 4); + Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,*Data,0); + + return OK; + +} +//Each word may not be subject to more than a specific number of programming cycles before an +//erase cycle is required. In other words, for any given word, FlashProgram can only be called +//twice before FlashErase is called. +void MCU_E2PromInit(void) +{ + EEPROMInit(); +} + diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h new file mode 100644 index 000000000..5beb6c62b --- /dev/null +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -0,0 +1,27 @@ +/* + * MCU_E2Prom.h + * + * Created on: Jul 21, 2019 + * Author: shlomo + */ + +#ifndef DRIVERS_FLASH_RAM_MCU_E2PROM_H_ +#define DRIVERS_FLASH_RAM_MCU_E2PROM_H_ + +typedef enum { + EEPROM_STORAGE_DATA_SIZE, + EEPROM_STORAGE_DANCER_0, + EEPROM_STORAGE_DANCER_1, + EEPROM_STORAGE_DANCER_2, + EEPROM_STORAGE_DRYER_CENTER, + EEPROM_STORAGE_DRYER_CYCLES, + MAX_EEPROM_STORAGE +}EEPROM_STORAGE_USAGE_ENUM; +uint32_t MCU_E2PromProgram(int Address,uint32_t Data); +uint32_t MCU_E2PromRead(int Address,uint32_t *Data); +void MCU_E2PromInit(void); + + + + +#endif /* DRIVERS_FLASH_RAM_MCU_E2PROM_H_ */ diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 5667d4f48..e04ce0d36 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -12,6 +12,7 @@ #include */ #include + #include "Drivers/USB_Communication/USBCDCD.h" #include "Drivers/I2C_Communication/I2C.h" #include "PMR/common/MessageContainer.pb-c.h" @@ -34,6 +35,7 @@ #include #include "drivers/Flash_ram/FlashProgram.h" +#include "drivers/Flash_ram/MCU_E2Prom.h" #include #include "Sys_PinOut_Config/MCU_MAIN_pinout.h" @@ -126,11 +128,11 @@ Void errHook(Error_Block *eb) ACTIVITY_RED_LED_ON; COMM_RED_LED_ON; - if (UpdateFlag == true) - return; site = Error_getSite(eb); eid = Error_getId(eb); eCode = Error_getCode(eb); + if (UpdateFlag == true) + return; FileHandle = my_malloc(sizeof(FIL)); if (FileHandle == 0) Fresult = FR_DENIED; @@ -230,6 +232,7 @@ int main(void) Init_All_I2C(); + MCU_E2PromInit(); #ifndef EVALUATION_BOARD STATUS_RED_LED_ON; diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index fc722a234..5bb5398d7 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -246,6 +246,9 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_OVERTEMPERATURE }, {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE }, + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP1, 0,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP2, 1,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, + {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor1 ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_1_OPEN}, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor2 ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_2_OPEN}, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor3 ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_3_OPEN}, @@ -365,7 +368,7 @@ bool EventsNotificationRequestAccepted = false; uint32_t AlarmHandlingFlashLoad(void) { -// EraseFlashSection(ALARM_MAP_IN_FLASH,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); + EraseFlashSection(AlarmItem,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem); // LOG_ERROR(AlarmItem[2].EventName,"Flash Test"); @@ -380,6 +383,7 @@ uint32_t AlarmHandlingLoadFile(void) Fresult = FileRead(AlarmStorePath, &Bytes, &buffer); if (Fresult == FR_OK) { + EraseFlashSection(AlarmItem,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); ReadAppAndProgram(AlarmItem, Bytes,buffer); free (buffer); ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 7c15c6ae7..84e3bf56e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -544,6 +544,8 @@ uint32_t MillisecLowLoop(uint32_t tick) } ADC_TriggerCollection(); } + DispensersCollectionCall(); + } if ((O900Millisecond_Tick)&&(RapidPressureRead == false)) diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 8427ebd4a..a22bfc815 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -137,7 +137,6 @@ typedef enum { DiagnosticsTrigger, DiagnosticsTenMiliTrigger, - DispensersCollectionTrigger, }DiagnosticsMessages; typedef struct DiagnosticsMessage{ @@ -386,8 +385,12 @@ void Diagnostic100msecCollection(void) for (i=0;imotortype; MotorStop(MotorId,Hard_Hiz); + if (MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) + MotorStop(MotorId,Hard_Stop ); responseContainer = createContainer(MESSAGE_TYPE__MotorAbortJoggingResponse, requestContainer->token, false, &response, &motor_abort_jogging_response__pack, &motor_abort_jogging_response__get_packed_size); responseContainer.continuous = false; diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 914d4f51c..52f4a3447 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -62,12 +62,14 @@ char HwConfigPath[50] = "0://SysInfo//GenHwCfg.cfg"; void *HWConfigurationLoadFromFile( uint32_t *NumOfBytes) { FRESULT Fresult = FR_OK; - FIL *FileHandle = 0; //the system supports a single active file uint8_t* buffer = NULL; - uint32_t Bytes = 0,i,j,k=0; *NumOfBytes = 0; - Fresult = FileRead(HwConfigPath, &Bytes, &buffer); + Fresult = FileRead(HwConfigPath, NumOfBytes, &buffer); + REPORT_IF_ERROR(Fresult, "HW Config File Read error", Fresult, RpError, buffer, 0); +// if (Fresult) +// Report("HW Config File Read error", __FILE__,__LINE__, Fresult, RpError, buffer, 0); + return buffer; } @@ -98,6 +100,7 @@ uint32_t HWConfigurationInit(void) buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config if (buffer) { + EraseFlashSection(GENHWCFG_MAP_IN_FLASH,Bytes+4); ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, 4,&Bytes); ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH+4, Bytes, buffer); UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer); @@ -187,7 +190,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->generalparameters[2] = 0.0; //CheckTamperAlarms EmbeddedParameters->generalparameters[3] = 0.0; //CheckMotorAlarms EmbeddedParameters->generalparameters[4] = 800.0; //Winder homing time at end of job - //EmbeddedParameters->generalparameters[5] = 1.0; //Dispenser initial pressure speed + EmbeddedParameters->generalparameters[5] = 1000.0; //Dispenser initial pressure speed } EmbeddedParameters->has_currentalarmlowlimit = true; EmbeddedParameters->currentalarmlowlimit = 0.80; @@ -225,6 +228,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) { response_size = configuration_parameters__pack(EmbeddedParameters, response_buffer); //FileWrite(response_buffer,response_size,EmbeddedParametersPath); + EraseFlashSection(EMBEDDED_PARAMETERS_MAP_IN_FLASH,response_size+4); ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&response_size); ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, response_size, response_buffer); my_free(response_buffer); @@ -264,7 +268,7 @@ uint32_t EmbeddedParametersInit(void) } IDS_Dispenser_SetTimeOutValues(EmbeddedParameters->closevalvetimeout, EmbeddedParameters->openvalvetimeout); - IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag); + IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag,EmbeddedParameters->generalparameters[5]); IDS_Dispenser_SetPrepareValues(EmbeddedParameters->dispenserbuildpressurespeed, EmbeddedParameters->dispenserbuildpressurelimit, EmbeddedParameters->dispenserbuildpressuretimeout, EmbeddedParameters->dispenserbuildpressurelag); IDS_Dispenser_SetPreSegmentWFCFValues(EmbeddedParameters->dispenserpresegmentwfcf, EmbeddedParameters->ids_presegment_wfcf_timebeforesegment); IDS_Dispenser_SetPreSegmentCleaningValues(EmbeddedParameters->ids_cleaningspeed,EmbeddedParameters->ids_cleaningstartspraypresegmenttime ,EmbeddedParameters->ids_cleaningstopbeforesegmenttime,EmbeddedParameters->ids_leftcleaningmotorspeed,EmbeddedParameters->ids_rightcleaningmotorspeed); @@ -527,6 +531,7 @@ uint32_t LoadConfigurationParamsFromFile(void) //configuration_parameters__free_unpacked(Params,NULL); FlashInitResults[1] = true; Report("Parameters Initialized from file", __FILE__,__LINE__,Bytes, RpMessage, EMBEDDED_PARAMETERS_MAP_IN_FLASH, 0); + EraseFlashSection(EMBEDDED_PARAMETERS_MAP_IN_FLASH,Bytes+4); ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, buffer); } diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index 6ee11105f..b968381c6 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -193,6 +193,7 @@ void ProcessRequestFunc(MessageContainer* requestContainer) { FileWrite(requestContainer->data.data, requestContainer->data.len,ProcessParamsConfigPath); Bytes = sizeof(ProcessParameters); + EraseFlashSection(PROCESS_PARAMETERS_MAP_IN_FLASH,Bytes+4); ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, ProcessParams); REPORT_MSG(Bytes,"Bytes write to flash"); @@ -252,6 +253,7 @@ uint32_t LoadProcessParamsFromFile(void) if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters { Bytes = sizeof(ProcessParameters); + EraseFlashSection(PROCESS_PARAMETERS_MAP_IN_FLASH,Bytes+4); ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, ProcessParams); REPORT_MSG(Bytes,"ProcessParameters Bytes write to flash"); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 179ac30d7..d60d5b840 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -192,15 +192,95 @@ void HeatersControlStop(void) HeatersRestart = false; } } + +//{eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP1, 0,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, +//{eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP2, 1,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, +typedef enum{ + ENCLOSURE_INTERNAL_TEMP, + CABINET_INTERNAL_TEMP, + MAIN_CARD_INTERNAL_TEMP, + MAX_INTERNAL_ALARMS +}; +int InternalAlarmCounter[MAX_INTERNAL_ALARMS] = {0,0,0}; +uint32_t InternalId2PT100Id[MAX_INTERNAL_ALARMS] = {TEMP_SENSE_AN_ENCLOSURETEMP1,TEMP_SENSE_AN_ENCLOSURETEMP1,0xFF}; +int32_t InternalOverHeatCounter [MAX_INTERNAL_ALARMS] = {0,0,0}; +bool InternalAlarmActive[MAX_INTERNAL_ALARMS] = {false,false,false}; +uint32_t ControlIdtoInternalId[MAX_INTERNAL_ALARMS] = {0xFF,0xFF,0xFF}; +uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValue) +{ + int index=MAX_HEATERS_NUM; + + if (IfIndex>>8 != IfTypeHeaters) + { + ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); + return 0xFFFFFFFF; + } + index = IfIndex&0xFF; + if (index >= MAX_INTERNAL_ALARMS) //Enclosure pt100 + { + ReportWithPackageFilter(HeatersFilter, "Wrong Interface ",__FILE__,__LINE__,IfIndex,RpError, 0,0); + return 0xFFFFFFFF; + } + + readValue = MillisecGetTemperatures(InternalId2PT100Id[index]); + if((MINIMUM_HEATER_READ>=readValue)||(MAXIMUM_HEATER_READ < readValue)) + { + //ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HeaterId,RpError, 0,0); + return ERROR; + } + + // no test for spikes yet! + if (readValue >= 40.0) + { + if (InternalAlarmActive[index] == false) + { + if(InternalOverHeatCounter[index]++ >=Overheat_Count_Limit) + { + InternalOverHeatCounter[index] = Overheat_Count_Limit; + + InternalAlarmActive[index] = true; + ReportWithPackageFilter(HeatersFilter,"Internal Over the max temperature, turned off",__FILE__,index,readValue,RpWarning, 0,0); + AlarmHandlingSetAlarm(EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE, true); + } + } + } + else + { + if (InternalAlarmActive[index] == true) + { + if(InternalOverHeatCounter[index]-- <= 0) + { + InternalOverHeatCounter[index] = 0; + + InternalAlarmActive[index] = true; + ReportWithPackageFilter(HeatersFilter,"Internal Over the max temperature, turned off",__FILE__,index,readValue,RpWarning, 0,0); + AlarmHandlingSetAlarm(EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE, true); + } + + } + } + return OK; +} + + //#warning there is a need to separate the AC and DC heaters preparation! void HeatersControlStart(void) { + int i; if (HeatersRestart == false) { ReportWithPackageFilter(HeatersFilter,"HeatersControlStart ", __FILE__,__LINE__,0, RpMessage, 0, 0); HeatersRestart = true; HeatersStartControlTimer(); + for (i = 0; i< MAX_INTERNAL_ALARMS;i++) + { + if (ControlIdtoInternalId [i] == 0xFF) + { + ControlIdtoInternalId [i] = AddControlCallback( HeatersTestInternalAlarmsCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+i),0,0); + } + } } + } uint32_t LoadHeaterSetPoint(HeaterType HeaterType) { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 0b5b4791a..6d7f0df96 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -276,6 +276,7 @@ void IDS_Dispenser_Content_Init (void) //================================== } uint16_t seconds_counter = 0; +bool DispenserDataUpdated = false; uint32_t IDS_Dispenser_Store_Data (void) { uint32_t timing = msec_millisecondCounter; @@ -293,11 +294,12 @@ uint32_t IDS_Dispenser_Store_Data (void) // Report("IDS_Dispenser_Store_Data 0",__FILE__,(int)IDS_Dispenser_Data[0].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[0].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[0].microsteps,0); // Report("IDS_Dispenser_Store_Data 4",__FILE__,(int)IDS_Dispenser_Data[4].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[4].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[4].microsteps,0); //response_size = dispenser_data__pack(&IDSDispenserData, response_buffer); + EraseFlashSection(DISPENSERS_MAP_IN_FLASH,response_size+4); ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size); ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath); - + DispenserDataUpdated = false; REPORT_MSG(msec_millisecondCounter - timing, "Updating dispensers file - time"); return Status; } @@ -315,8 +317,9 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) //double consumedintimeframe = (double)(CurrentDispenserSpeed[DispenserId]); //pulses only //consumedintimeframe = 10+DispenserId; IDS_Dispenser_Data[DispenserId].consumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10);//100 milliseconds ==> speed/10 - if (CurrentDispenserSpeed[DispenserId]>0.0) + if (CurrentDispenserSpeed[DispenserId]>0.1) { + DispenserDataUpdated = true; IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10); if (seconds_counter%100 == 0) { @@ -325,7 +328,7 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) } if (DispenserId == 0) { - if (seconds_counter++>=600)//36000)// - one hour) + if ((seconds_counter++>=600)&&(DispenserDataUpdated == true))//36000)// - one hour) { seconds_counter = 0; if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter) @@ -336,6 +339,14 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) } } } +void DispensersCollectionCall(void) +{ + int i; + for (i = 0; ipvinputfilterfactormode > MAX_CONTROL_SAMPLES) request->pvinputfilterfactormode = MAX_CONTROL_SAMPLES; - ReadAppAndProgram(&DispensersControl[Dispenser_i], sizeof(HardwarePidControl), request); + //ReadAppAndProgram(&DispensersControl[Dispenser_i], sizeof(HardwarePidControl), request); for (i = 0;i < DispensersControl[Dispenser_i].pvinputfilterfactormode; i++) DispenserSamples[Dispenser_i][i] = 0; //reset the samples value for control beginning @@ -581,6 +581,8 @@ c. Go to step 2.a x Segment.BrushStopsCount. bool pressureReady = false; int i; int NumofReadyDispensers = 0; + TimerMotors_t HW_Motor_Id; + float updatedSpeed,tempSpeed; //REPORT_MSG((int)DispenserPrepareControlId, "Prepare Callback"); DispenserBuildTimeCounter+=PRESSURE_READ_TIME_GAP; @@ -595,8 +597,24 @@ c. Go to step 2.a x Segment.BrushStopsCount. //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { + HW_Motor_Id = DispenserIdToMotorId[i]; if (GetDispenserPressure(i) > DispenserPreparePressure) + { NumofReadyDispensers++; + tempSpeed = CurrentDispenserSpeed[i]; + updatedSpeed = (tempSpeed*0.95>100)?tempSpeed*0.95:100; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[i] = updatedSpeed; + Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + } + else + { + tempSpeed = CurrentDispenserSpeed[i]; + updatedSpeed = (tempSpeed*1.1>1000)?tempSpeed*1.1:100; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[i] = updatedSpeed; + Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + } } } @@ -804,7 +822,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); } } - if (InterSegmentStartWFCFDispensers == InterSegmentStepsCount) + if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == InterSegmentStepsCount)) { Report("start dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); if (FileBrushStop) @@ -950,7 +968,8 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) InterSegmentStartRocking = 1000; InterSegmentCenterRockers = 3000; } - InterSegmentStartWFCFDispensers = lInterSegmentLength-5000; + + InterSegmentStartWFCFDispensers = (lInterSegmentLength>5000)?lInterSegmentLength-5000:lInterSegmentLength; } } /*if (SegmentId == 0)//first segment - running the DTS out of the drier @@ -1279,6 +1298,26 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_DistanceToSpoolValveReady); } + //cleaning + + lInterSegmentLength = ((dryerbufferlength*100)*1000/dyeingspeed); + lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication + InterSegmentStepsCount = 0; + DispenserPreSegmentControlId = AddControlCallback( IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); + if (DispenserPreSegmentControlId == 0xFF) + { + Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0); + return ERROR; + } + Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)IntersegmentLength,0); + if (EnableCleaning == true) + { + InterSegmentStartSprayCleaner = 500; + InterSegmentStartRocking = 1000; + InterSegmentCenterRockers = 3000; + } + InterSegmentStartWFCFDispensers = 0; + return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c index 03c05e105..213902038 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c @@ -82,7 +82,8 @@ void Stub_DancerPositionRequest(MessageContainer* requestContainer) response.detailed_status = ERROR; // use the Reserved bits to send our errors response.has_general_status = true; } - StoreDancerConfigMessage(); + if (Dancer_Id == 2) + StoreDancerConfigMessage(); responseContainer = createContainer(MESSAGE_TYPE__StubDancerPositionResponse, requestContainer->token, true, &response, &stub_dancer_position_response__pack, &stub_dancer_position_response__get_packed_size); //free(request); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 9ef7f3d0d..d2f6170cf 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -59,7 +59,7 @@ ProcessParameters ProcessParametersClear,ProcessParametersRecover; uint8_t NumberOfDrierLoaderCycles = 0; uint32_t status = OK; - uint32_t ControlId = 0xFF; + uint32_t ControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF; uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM LoadStages); uint32_t ThreadLoadControlCBFunction(uint32_t index, uint32_t ReadValue); uint32_t Thread_Load_Dryer_UnLoading(void); @@ -173,6 +173,24 @@ } uint32_t Thread_Load_Set_Load_Arm_To_Stopper_Callback(uint32_t deviceID, uint32_t BusyFlag) { + if(PullerControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[POOLER_MOTOR],Hard_Hiz); + RemoveControlCallback(PullerControlId, ThreadLoadControlCBFunction ); + PullerControlId = 0xFF; + } + if(WinderControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[WINDER_MOTOR],Hard_Hiz); + RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); + WinderControlId = 0xFF; + } + /*Task_sleep(5) + MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); + MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz);*/ + + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,Hard_Hiz); + // Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); Report("Thread_Load_Set_Load_Arm_To_Stopper_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); NumberOfDrierLoaderCycles=0; @@ -374,15 +392,14 @@ return OK; } - uint32_t Thread_Load_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue) + uint32_t Thread_Load_Dryer_MovetoEncoderPosition_Callback(uint32_t MotorId, uint32_t ReadValue) { - Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - REPORT_MSG(MotorId, "Thread_Load_Dryer_Loading_Callback Motor Id"); - MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,0,0); if(ControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); + MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround); + ControlId = 0xFF; } if (CallbackCounter) @@ -399,6 +416,13 @@ } else LOG_ERROR(MotorId, "Thread_Load_HomingCallback Callback is already 0"); + + } + uint32_t Thread_Load_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue) + { + Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); + //REPORT_MSG(MotorId, "Thread_Load_Dryer_Loading_Callback Motor Id"); + MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,10000); return OK; } @@ -413,6 +437,7 @@ // CurrentControlledSpeed[FEEDER_MOTOR] = 1000; numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*LoadArmInfo.LoadArmRounds*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; + Report("Thread Load State Machine step.",__FILE__,LoadStages,numberOfSteps,RpMessage,(int)(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius),0); MotorControlConfig[FEEDER_MOTOR].m_params.MAX = 1; MotorControlConfig[FEEDER_MOTOR].m_params.MIN = MotorsControl[FEEDER_MOTOR].outputproportionalpowerlimit*-1; MotorControlConfig[FEEDER_MOTOR].m_params.Kd = MotorsControl[FEEDER_MOTOR].derivativetime; @@ -432,6 +457,8 @@ MotorControlConfig[FEEDER_MOTOR].m_SetParam = 0;//need to update SetParams on presegment stage MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize); + MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4); + ControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); CallbackCounter++; MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, @@ -472,7 +499,7 @@ LoadArmInfo.LoadArmRounds = 0; uint32_t numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 - SetOriginMotorSpeed(20); + SetOriginMotorSpeed(19); // OriginalMotorSpd_2PPS[FEEDER_MOTOR] = 1000; // CurrentControlledSpeed[FEEDER_MOTOR] = 1000; @@ -496,7 +523,7 @@ MotorControlConfig[POOLER_MOTOR].m_SetParam = 0;//need to update SetParams on presegment stage MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDRIVING].directionthreadwize); - ControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+POOLER_MOTOR),FEEDER_DANCER,POOLER_MOTOR); + PullerControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+POOLER_MOTOR),POOLER_DANCER,POOLER_MOTOR); //////////////////////// MotorControlConfig[WINDER_MOTOR].m_params.MAX = 1; MotorControlConfig[WINDER_MOTOR].m_params.MIN = MotorsControl[WINDER_MOTOR].outputproportionalpowerlimit*-1; @@ -515,18 +542,20 @@ MotorControlConfig[WINDER_MOTOR].m_mesuredParam = 0; MotorControlConfig[WINDER_MOTOR].m_preError = 0; MotorControlConfig[WINDER_MOTOR].m_SetParam = 0;//need to update SetParams on presegment stage - MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDRIVING].directionthreadwize); + MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_WINDER,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].directionthreadwize); - ControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+WINDER_MOTOR),FEEDER_DANCER,WINDER_MOTOR); + WinderControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+WINDER_MOTOR),WINDER_DANCER,WINDER_MOTOR); //////////////////////// + MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING].directionthreadwize); + MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING, OriginalMotorSpd_2PPS[DRYER_MOTOR]); CallbackCounter++; //MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, // numberOfSteps, Thread_Load_Dryer_Loading_Callback, 100000); Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); status |= MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), - MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/2, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); + MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); //Keep Notation How Many Rotations In The Dryer //LoadArmInfo.LoadArmBackLash = 0; @@ -623,7 +652,14 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) uint32_t calculated_speed; double NormalizedError; - DancerId = FEEDER_DANCER;//ThreadMotorIdToDancerId[index]; + if (IfIndex>>8 != IfTypeThread) + { + LOG_ERROR (IfIndex, "Wrong Interface type"); + return 0xFFFFFFFF; + } + index = IfIndex&0xFF; + + DancerId = ThreadMotorIdToDancerId[index]; if (ReadValue < 10) { Report("Dancer value read too small.",__FILE__,__LINE__,DancerId,RpError,ReadValue,0); @@ -634,12 +670,6 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) return OK; } TranslatedReadValue = ReadValue - DancersCfg[DancerId].zeropoint; - if (IfIndex>>8 != IfTypeThread) - { - LOG_ERROR (IfIndex, "Wrong Interface type"); - return 0xFFFFFFFF; - } - index = IfIndex&0xFF; if (index == POOLER_MOTOR) { //pooler dancer is right sided: data is opposite diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index a113e4dae..510168ab8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -528,7 +528,7 @@ uint32_t ScrewDTSCallback(uint32_t deviceID, uint32_t BusyFlag) ScrewsStopControlTimer(); //move the cart to the edge so the spool can be easily replaced //MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize, 1000, GPI_LS_SCREW_RIGHT, NULL,0); - MotorStop(HARDWARE_MOTOR_TYPE__MOTO_SCREW,Hard_Hiz); + //MotorStop(HARDWARE_MOTOR_TYPE__MOTO_SCREW,Hard_Hiz); MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize, ScrewSpeed, GPI_LS_SCREW_RIGHT, WinderDistanceToSpoolEnded,2000); return OK; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index cab3b592e..500ba9a39 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -19,6 +19,8 @@ #include "drivers/SSI_Comm/Dancer/Dancer.h" #include "drivers/Flash_ram/FlashProgram.h" +#include "drivers/Flash_ram/MCU_E2Prom.h" + #include "thread.h" MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS]={0}; HardwarePidControl MotorsControl[MAX_THREAD_MOTORS_NUM] = {0}; @@ -162,6 +164,11 @@ uint32_t StoreDancerConfigMessage() DancerConfig.n_dancers++; DancersCfg[Dancer_i].zeropoint = DancerConfig.dancers[Dancer_i]->zeropoint; } + MCU_E2PromProgram(EEPROM_STORAGE_DANCER_0,DancersCfg[0].zeropoint); + MCU_E2PromProgram(EEPROM_STORAGE_DANCER_1,DancersCfg[1].zeropoint); + MCU_E2PromProgram(EEPROM_STORAGE_DANCER_2,DancersCfg[2].zeropoint); + Report("Store eeprom 0",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg[1].zeropoint,RpWarning,(int)DancersCfg[2].zeropoint,0); + response_buffer = my_malloc(hardware_configuration__get_packed_size(&DancerConfig)); if (response_buffer) { @@ -174,6 +181,7 @@ uint32_t StoreDancerConfigMessage() ReadAppAndProgram(DANCERS_MAP_IN_FLASH, sizeof(Dancers), Dancers); } + my_free(response_buffer); return Fresult; @@ -187,6 +195,7 @@ uint32_t LoadDancerConfigMessage() HardwareConfiguration *DancerConfig; int Dancer_i; HardwareDancer DancersCfg1[MAX_SYSTEM_DANCERS] = {0}; + HardwareDancer DancersCfg2[MAX_SYSTEM_DANCERS] = {0}; memcpy(DancersCfg1,(void *)DANCERS_MAP_IN_FLASH,sizeof(DancersCfg1)); @@ -196,16 +205,19 @@ uint32_t LoadDancerConfigMessage() DancerConfig = hardware_configuration__unpack(NULL, Bytes, buffer); for (Dancer_i = 0; Dancer_i < DancerConfig->n_dancers ; Dancer_i++) { - DancersCfg[Dancer_i].zeropoint = DancerConfig->dancers[Dancer_i]->zeropoint; + DancersCfg2[Dancer_i].zeropoint = DancerConfig->dancers[Dancer_i]->zeropoint; } hardware_configuration__free_unpacked(DancerConfig,NULL); free (buffer); } + MCU_E2PromRead(EEPROM_STORAGE_DANCER_0,&DancersCfg[0].zeropoint); + MCU_E2PromRead(EEPROM_STORAGE_DANCER_1,&DancersCfg[1].zeropoint); + MCU_E2PromRead(EEPROM_STORAGE_DANCER_2,&DancersCfg[2].zeropoint); + - if (DancersCfg[0].zeropoint != DancersCfg1[0].zeropoint) LOG_ERROR(DancersCfg[0].zeropoint,"DancersMismatch"); - else if (DancersCfg[1].zeropoint != DancersCfg1[1].zeropoint) LOG_ERROR(DancersCfg[1].zeropoint,"DancersMismatch"); - else if (DancersCfg[2].zeropoint != DancersCfg1[2].zeropoint) LOG_ERROR(DancersCfg[2].zeropoint,"DancersMismatch"); - else LOG_ERROR(DancersCfg[0].zeropoint,"Dancers Match!!"); + Report("Dancer 0 Store data flash, internal flash, eeprom ",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg1[0].zeropoint,RpWarning,(int)DancersCfg2[0].zeropoint,0); + Report("Dancer 1 Store data flash, internal flash, eeprom ",__FILE__,DancersCfg[1].zeropoint,(int)DancersCfg1[1].zeropoint,RpWarning,(int)DancersCfg2[1].zeropoint,0); + Report("Dancer 2 Store data flash, internal flash, eeprom ",__FILE__,DancersCfg[2].zeropoint,(int)DancersCfg1[2].zeropoint,RpWarning,(int)DancersCfg2[2].zeropoint,0); return Fresult; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index eb1b751bb..528b83c1c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -539,6 +539,25 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } 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" ); + LOG_ERROR(index, "thread speed too low Error"); + return OK; + } + } + } } } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c index b3fc8c052..c7f4ee3b7 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c @@ -82,6 +82,9 @@ uint32_t PowerIdleCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) SetPowerMachineState(sttIDLE); //move to idle state PowerIdleSetIdle(); + if (SafeRemoveControlCallback(IdleControlId, PowerIdleCallBackFunction )==OK) + IdleControlId = 0xFF; + } } return OK; @@ -121,6 +124,10 @@ void PowerIdleOutOfIdleState(void) LOG_ERROR (1, "Turn Heaters active failed"); return ; } + if (IdleControlId == 0xFF) + IdleControlId = AddControlCallback( PowerIdleCallBackFunction, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + if (IdleControlId == 0xFF) + Report("AddControlCallback failed",__FILE__,__LINE__,(int)IdleControlId,RpWarning,(int)0,0); } } -- cgit v1.3.1 From 1a4e2e8a731c7d4c6150de73b36b7c40d6422cd7 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 24 Jul 2019 14:03:35 +0300 Subject: Version 1.4.2.5 firmware upgrade works, improved thread load. (works????) --- .../Embedded/Common/SWUpdate/FileSystem.c | 2 +- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 5 +--- .../Embedded/Common/SWUpdate/FirmwareUpgrade.h | 1 + .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c | 3 +++ .../Embedded/Drivers/Motors/MotorActions.c | 2 +- .../Embedded/Modules/Control/MillisecTask.c | 7 ++--- .../Embedded/Modules/Heaters/Heaters_init.c | 9 +++---- .../Embedded/Modules/Thread/ThreadLoad.c | 30 +++++++++++----------- 9 files changed, 29 insertions(+), 32 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 05b118c90..1e02283e0 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -53,7 +53,7 @@ FIL *UploadFileHandle = 0; //the system supports a single active file FIL *DownloadFileHandle = 0; //the system supports a single active file char FileHandleChar[5]; char ErrorMsg[100]; -#define MAX_CHUNK_LENGTH 4000 +#define MAX_CHUNK_LENGTH 5500 int32_t FileLength = 0; int32_t FileReceivedLength = 0; int32_t FileSentLength = 0; diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index dabd5ff44..139b452dc 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -71,6 +71,7 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) if (Reboot == true) { + LOG_ERROR(255,"Update successful, Rebooting in 5 seconds"); Task_sleep (120000000*5); Power_Reset(); } @@ -186,10 +187,6 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) activate_version_request__free_unpacked(request,NULL); SendChars(container_buffer, container_size); - if (Reboot == true) - { - Power_Reset(); - } return OK; } diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h index 1d11a84b6..2b0a9bff9 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h @@ -9,6 +9,7 @@ #define COMMON_SWUPDATE_FIRMWAREUPGRADE_H_ extern int CurrentFileSize; +extern int CurrentRunningFile; uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer); uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer); 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 9c02e609e..5b0944ab9 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,2,5}; +TangoVersion_t _gTangoVersion = {1,4,2,6}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c index 931044f82..11ba12c32 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c @@ -96,6 +96,7 @@ FRESULT FPGA_Programming_Up(FPGA_ID FPGA_Id, char * FullPath, bool IncludeReboot Report(FullPath,__FILE__,__LINE__,CurrentFileSize,RpWarning,0,0); fresult = main_vme(); + CurrentRunningFile++; } @@ -158,6 +159,8 @@ void FPGALoadTask(UArg arg0, UArg arg1) case OneFPGALoad: //ControlStop(); //MillisecStop(); + Report(FPGALoadMessage.FullPath,__FILE__,__LINE__,CurrentRunningFile,RpWarning,0,0); + FPGA_Programming_Up(FPGALoadMessage.FPGA_Id,FPGALoadMessage.FullPath,FPGALoadMessage.IncludeReboot); //ControlStart(); //MillisecStart(); diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 911b31eed..83e041591 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -343,7 +343,7 @@ uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callb } MotorSetDirection( MotorId, direction); - MotorSetSpeed (MotorId, 5); + MotorSetSpeed (MotorId, 15); MotorControlId[MotorId] = AddControlCallback( MotorMoveToDrierPositionCallBackFunction, eTenMillisecond,Control_Read_Dryer_Position,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); MotorControlCallback[MotorId] = MotorMoveToDrierPositionCallBackFunction; return MotorControlId[MotorId]; diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index c1fcd4030..e3955793d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -426,10 +426,8 @@ uint32_t MillisecLoop(uint32_t tick) { #ifdef Use_Head_Card HeadADCPT100_SendReadDataCommand(Sensor_i); - #else - TemperatureSensorReadFromFPGA_Res(Sensor_i); //got the data from the FPGA #endif - + TemperatureSensorReadFromFPGA_Res(Sensor_i); //got the data from the FPGA PT100Data[Sensor_i].WaitForData = false; PT100Data[Sensor_i].SyncRequired = true; if (PT100Data[Sensor_i].Callback) @@ -440,9 +438,8 @@ uint32_t MillisecLoop(uint32_t tick) { #ifdef Use_Head_Card HeadADCPT100_StartSync(Sensor_i); - #else - TemperatureSensorSync(Sensor_i); #endif + TemperatureSensorSync(Sensor_i); PT100Data[Sensor_i].SyncRequired = false; PT100Activity--; diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index faf6022d6..350236708 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -63,11 +63,10 @@ uint32_t Heaters_Init(void) int i; //ROM_TimerDisable(Heater_timerBase, TIMER_A); - #ifdef Use_Head_Card - HeadADCPT100_SensorInitConfig(); - #else - FPGA_SensorInitConfig(); - #endif +#ifdef Use_Head_Card + HeadADCPT100_SensorInitConfig(); +#endif + FPGA_SensorInitConfig(); memset(HeaterControl,0,sizeof(HeaterControl)); for (i = 0;i Date: Sun, 28 Jul 2019 12:31:49 +0300 Subject: for version 1.4.2.7 : syc file system with semaphore (needs testing!). add secondary pump and activation on init and after 8 hours.now config parameters, improved thread load --- .../Embedded/Common/SWUpdate/FileSystem.c | 8 +- .../Embedded/Common/SWUpdate/FileSystem.h | 2 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../PMR/Diagnostics/InterfaceIOs.pb-c.c | 30 +++--- .../PMR/Diagnostics/InterfaceIOs.pb-c.h | 1 + .../PMR/Hardware/HardwareMotor.pb-c.c | 34 +++---- .../PMR/Hardware/HardwareMotor.pb-c.h | 18 ++-- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 16 ++++ .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h | 1 + .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 6 +- .../Flash_Memory/FATFS/Control_File_System.c | 3 + .../Embedded/Drivers/Motors/MotorActions.c | 4 +- Software/Embedded_SW/Embedded/Embedded.cfg | 1 + .../Embedded/Modules/Control/MillisecTask.c | 15 ++- .../Modules/Diagnostics/DiagnosticActions.c | 3 + .../Embedded/Modules/Diagnostics/Diagnostics.c | 4 +- .../Embedded/Modules/General/GeneralHardware.c | 2 +- .../Embedded_SW/Embedded/Modules/General/buttons.c | 42 ++++++--- .../Embedded_SW/Embedded/Modules/General/process.c | 2 +- .../Embedded/Modules/IDS/IDS_dispenser.c | 2 +- .../Embedded/Modules/Thread/ThreadLoad.c | 104 +++++++++++++++------ .../Embedded/Modules/Thread/Thread_ex.h | 8 +- .../Embedded/Modules/Thread/Thread_init.c | 2 +- .../StateMachines/Initialization/InitSequence.c | 5 + 24 files changed, 211 insertions(+), 104 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index f4c52f000..5cbc92285 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -644,7 +644,7 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) } return Fresult; } -FRESULT FileWrite(void * buffer, uint16_t size,char *path) +FRESULT FileWrite(void * buffer, uint16_t size,char *path, uint32_t timeout) { FRESULT Fresult = FR_OK; FIL *FileHandle = 0; //the system supports a single active file @@ -657,7 +657,11 @@ FRESULT FileWrite(void * buffer, uint16_t size,char *path) Fresult = FR_DENIED; else { - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); + if (Semaphore_pend(FFS_Sem, timeout) == false) + { + LOG_ERROR (false,"file system busy error"); + return FR_TIMEOUT; + } Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS); if (Fresult == FR_OK) diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h index 605b4a475..0f6fd9d5d 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h @@ -22,7 +22,7 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer); uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer); uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer); -FRESULT FileWrite(void * buffer, uint16_t size,char *path); +FRESULT FileWrite(void * buffer, uint16_t size,char *path, uint32_t timeout); FRESULT FileRead(char *path, uint32_t *Size, void **Buffer); FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle); 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 5b0944ab9..2ef74c7b6 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,2,6}; +TangoVersion_t _gTangoVersion = {1,4,2,7}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.c index ec93b525c..3dfdfc2bb 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.c @@ -7,7 +7,7 @@ #endif #include "InterfaceIOs.pb-c.h" -static const ProtobufCEnumValue interface_ios__enum_values_by_number[39] = +static const ProtobufCEnumValue interface_ios__enum_values_by_number[40] = { { "ANALOG_MIXCHIP_TEMP", "INTERFACE_IOS__ANALOG_MIXCHIP_TEMP", 0 }, { "GPO_MIXCHIP_SSR4_CTRL", "INTERFACE_IOS__GPO_MIXCHIP_SSR4_CTRL", 19 }, @@ -40,6 +40,7 @@ static const ProtobufCEnumValue interface_ios__enum_values_by_number[39] = { "Midtank7Cartridge", "INTERFACE_IOS__Midtank7Cartridge", 179 }, { "Midtank8Cartridge", "INTERFACE_IOS__Midtank8Cartridge", 180 }, { "GPO_LED4", "INTERFACE_IOS__GPO_LED4", 274 }, + { "GPO_TFEED_BREAK_1", "INTERFACE_IOS__GPO_TFEED_BREAK_1", 296 }, { "GPO_SPARE1_1", "INTERFACE_IOS__GPO_SPARE1_1", 318 }, { "GPO_SPARE1_2", "INTERFACE_IOS__GPO_SPARE1_2", 319 }, { "GPI_WCONTAINER_FULL", "INTERFACE_IOS__GPI_WCONTAINER_FULL", 341 }, @@ -50,15 +51,15 @@ static const ProtobufCEnumValue interface_ios__enum_values_by_number[39] = { "VALVE_WASTE_TANK", "INTERFACE_IOS__VALVE_WASTE_TANK", 346 }, }; static const ProtobufCIntRange interface_ios__value_ranges[] = { -{0, 0},{19, 1},{43, 6},{54, 9},{64, 11},{163, 12},{274, 30},{318, 31},{341, 33},{0, 39} +{0, 0},{19, 1},{43, 6},{54, 9},{64, 11},{163, 12},{274, 30},{296, 31},{318, 32},{341, 34},{0, 40} }; -static const ProtobufCEnumValueIndex interface_ios__enum_values_by_name[39] = +static const ProtobufCEnumValueIndex interface_ios__enum_values_by_name[40] = { { "ANALOG_MIXCHIP_TEMP", 0 }, - { "GPI_WCONTAINER_FULL", 33 }, - { "GPI_WCONTAINER_WARN", 34 }, - { "GPO_BLOWER_PWM", 35 }, - { "GPO_CHILLER_SSR9_CTRL", 36 }, + { "GPI_WCONTAINER_FULL", 34 }, + { "GPI_WCONTAINER_WARN", 35 }, + { "GPO_BLOWER_PWM", 36 }, + { "GPO_CHILLER_SSR9_CTRL", 37 }, { "GPO_DILUTORPUMP_SSR10_CTRL", 12 }, { "GPO_DRYER_SSR1_CTRL", 6 }, { "GPO_DRYER_SSR2_CTRL", 7 }, @@ -70,12 +71,13 @@ static const ProtobufCEnumValueIndex interface_ios__enum_values_by_name[39] = { "GPO_EXTWINDER_SSR11_CTRL", 11 }, { "GPO_LED4", 30 }, { "GPO_MIXCHIP_SSR4_CTRL", 1 }, - { "GPO_SPARE1_1", 31 }, - { "GPO_SPARE1_2", 32 }, + { "GPO_SPARE1_1", 32 }, + { "GPO_SPARE1_2", 33 }, { "GPO_SPARE_SSR12_CTRL", 9 }, { "GPO_SPARE_SSR13_CTRL", 10 }, + { "GPO_TFEED_BREAK_1", 31 }, { "GPO_WASTECH_PUMP2", 13 }, - { "GPO_WHS_WTANKPUMP2", 37 }, + { "GPO_WHS_WTANKPUMP2", 38 }, { "Midtank1Air", 14 }, { "Midtank1Cartridge", 22 }, { "Midtank2Air", 15 }, @@ -92,7 +94,7 @@ static const ProtobufCEnumValueIndex interface_ios__enum_values_by_name[39] = { "Midtank7Cartridge", 28 }, { "Midtank8Air", 21 }, { "Midtank8Cartridge", 29 }, - { "VALVE_WASTE_TANK", 38 }, + { "VALVE_WASTE_TANK", 39 }, }; const ProtobufCEnumDescriptor interface_ios__descriptor = { @@ -101,11 +103,11 @@ const ProtobufCEnumDescriptor interface_ios__descriptor = "InterfaceIOs", "InterfaceIOs", "", - 39, + 40, interface_ios__enum_values_by_number, - 39, + 40, interface_ios__enum_values_by_name, - 9, + 10, interface_ios__value_ranges, NULL,NULL,NULL,NULL /* reserved[1234] */ }; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.h index 341997ea0..1baf3dbc6 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/InterfaceIOs.pb-c.h @@ -51,6 +51,7 @@ typedef enum _InterfaceIOs { INTERFACE_IOS__Midtank7Cartridge = 179, INTERFACE_IOS__Midtank8Cartridge = 180, INTERFACE_IOS__GPO_LED4 = 274, + INTERFACE_IOS__GPO_TFEED_BREAK_1 = 296, INTERFACE_IOS__GPO_SPARE1_1 = 318, INTERFACE_IOS__GPO_SPARE1_2 = 319, INTERFACE_IOS__GPI_WCONTAINER_FULL = 341, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c index bfda97424..fb4967ab5 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.c @@ -358,7 +358,7 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = "GateCfg1", 26, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_gatecfg1), offsetof(HardwareMotor, gatecfg1), NULL, @@ -370,7 +370,7 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = "GateCfg2", 27, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_gatecfg2), offsetof(HardwareMotor, gatecfg2), NULL, @@ -379,10 +379,10 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = 0,NULL,NULL /* reserved1,reserved2, etc */ }, { - "TvalHold", + "TValHold", 28, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_tvalhold), offsetof(HardwareMotor, tvalhold), NULL, @@ -391,10 +391,10 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = 0,NULL,NULL /* reserved1,reserved2, etc */ }, { - "TvalRun", + "TValRun", 29, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_tvalrun), offsetof(HardwareMotor, tvalrun), NULL, @@ -403,10 +403,10 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = 0,NULL,NULL /* reserved1,reserved2, etc */ }, { - "TvalAcc", + "TValAcc", 30, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_tvalacc), offsetof(HardwareMotor, tvalacc), NULL, @@ -415,10 +415,10 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = 0,NULL,NULL /* reserved1,reserved2, etc */ }, { - "TvalDec", + "TValDec", 31, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_tvaldec), offsetof(HardwareMotor, tvaldec), NULL, @@ -430,7 +430,7 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = "TFast", 32, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_tfast), offsetof(HardwareMotor, tfast), NULL, @@ -442,7 +442,7 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = "TOnMin", 33, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_tonmin), offsetof(HardwareMotor, tonmin), NULL, @@ -454,7 +454,7 @@ static const ProtobufCFieldDescriptor hardware_motor__field_descriptors[34] = "TOffMin", 34, PROTOBUF_C_LABEL_OPTIONAL, - PROTOBUF_C_TYPE_UINT32, + PROTOBUF_C_TYPE_INT32, offsetof(HardwareMotor, has_toffmin), offsetof(HardwareMotor, toffmin), NULL, @@ -493,11 +493,11 @@ static const unsigned hardware_motor__field_indices_by_name[] = { 31, /* field[31] = TFast */ 33, /* field[33] = TOffMin */ 32, /* field[32] = TOnMin */ + 29, /* field[29] = TValAcc */ + 30, /* field[30] = TValDec */ + 27, /* field[27] = TValHold */ + 28, /* field[28] = TValRun */ 18, /* field[18] = ThermalCompensationFactor */ - 29, /* field[29] = TvalAcc */ - 30, /* field[30] = TvalDec */ - 27, /* field[27] = TvalHold */ - 28, /* field[28] = TvalRun */ }; static const ProtobufCIntRange hardware_motor__number_ranges[1 + 1] = { diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h index 789e1e139..2dfc0b200 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Hardware/HardwareMotor.pb-c.h @@ -78,23 +78,23 @@ struct _HardwareMotor protobuf_c_boolean has_fsspd; int32_t fsspd; protobuf_c_boolean has_gatecfg1; - uint32_t gatecfg1; + int32_t gatecfg1; protobuf_c_boolean has_gatecfg2; - uint32_t gatecfg2; + int32_t gatecfg2; protobuf_c_boolean has_tvalhold; - uint32_t tvalhold; + int32_t tvalhold; protobuf_c_boolean has_tvalrun; - uint32_t tvalrun; + int32_t tvalrun; protobuf_c_boolean has_tvalacc; - uint32_t tvalacc; + int32_t tvalacc; protobuf_c_boolean has_tvaldec; - uint32_t tvaldec; + int32_t tvaldec; protobuf_c_boolean has_tfast; - uint32_t tfast; + int32_t tfast; protobuf_c_boolean has_tonmin; - uint32_t tonmin; + int32_t tonmin; protobuf_c_boolean has_toffmin; - uint32_t toffmin; + int32_t toffmin; }; #define HARDWARE_MOTOR__INIT \ { PROTOBUF_C_MESSAGE_INIT (&hardware_motor__descriptor) \ diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index a8bdaf95c..dd700563b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -730,7 +730,23 @@ void Pumps_Control(PUMPS_ENUM Pump_Id, bool Direction) //1 - OPEN, 0 - CLOSE ?? F1_gpo_01 = F1_GPO_Reg.ushort; } +uint32_t SecondaryPumpControlId; +uint32_t SecondaryPumpCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + Pumps_Control(WASTECH_PUMP2, CLOSE); + if (SafeRemoveControlCallback(SecondaryPumpControlId, SecondaryPumpCallBackFunction )==OK) + SecondaryPumpControlId = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)SecondaryPumpControlId,RpWarning,(int)SecondaryPumpCallBackFunction,0); + +} + +void PumpActivation(uint32_t seconds) +{ + Pumps_Control(WASTECH_PUMP2, OPEN); + SecondaryPumpControlId = AddControlCallback( SecondaryPumpCallBackFunction, seconds*1000/*eHundredMillisecond*/, TemplateDataReadCBFunction,0,0, 0 ); +} /* uint8_t Buttons_LEDS(BUTTON Button, OPERATION_MODE LED_Mode) { diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h index 9767837f1..420a82b47 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h @@ -237,6 +237,7 @@ typedef enum void Pumps_Control(PUMPS_ENUM Pump_Id, bool Direction); +void PumpActivation(uint32_t seconds); uint32_t Control_Dryer_Fan(bool StartStop, uint8_t PWM_Command_Precent); bool Check_Disp_Safety_Stop_Indication(uint8_t Dispenser_ID); bool Emergency_Push_Button_Report(); 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 07625d314..e130f4831 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -1167,7 +1167,8 @@ void FPGA_SetMotKvalRun(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - FPGA_SPI_Transnit(_motorId); + MillisecWriteToMotor(_motorId, temp, 4, NULL); + //FPGA_SPI_Transnit(_motorId); } void FPGA_SetMotKvalAcc(TimerMotors_t _motorId) @@ -1192,7 +1193,8 @@ void FPGA_SetMotKvalAcc(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - FPGA_SPI_Transnit(_motorId); + MillisecWriteToMotor(_motorId, temp, 4, NULL); +// FPGA_SPI_Transnit(_motorId); } void FPGA_SetMotKvalDec(TimerMotors_t _motorId) diff --git a/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/Control_File_System.c b/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/Control_File_System.c index c58be6664..94f341b7d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/Control_File_System.c +++ b/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/Control_File_System.c @@ -91,6 +91,7 @@ static FATFS g_sFatFs; //tFResultString; //static int response ; +extern Semaphore_Handle FFS_Sem; char FlashReadstring [35]; char FlashReadstring1 [35]; @@ -128,6 +129,8 @@ FRESULT Init_Flash_File_System(bool Need_mkfs) if(Need_mkfs == true) iFResult = f_mkfs( 0, 0, 512 ); //Create File System on the Drive + Semaphore_post(FFS_Sem); + return iFResult; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 83e041591..e2b0ed701 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -201,7 +201,7 @@ uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) / if (CallbackCalls%20 == 0) { // REPORT_MSG(MotorPosition,"MotorVerifiedCallBackFunction"); - Report("Move_To_Stopper_Callback",__FILE__,__LINE__,MotorPosition,RpMessage,StoredMotorPosition[MotorId],0); + //Report("Move_To_Stopper_Callback",__FILE__,__LINE__,MotorPosition,RpMessage,StoredMotorPosition[MotorId],0); //CallbackCalls = 0; } @@ -285,7 +285,7 @@ uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t Rea //CallbackCalls = 0; } - if (DrierZeroPosition == ReadValue) //thread running identified + //if (DrierZeroPosition == ReadValue) //thread running identified { //stop this control loop SafeRemoveControlCallback(MotorControlId[MotorId], MotorControlCallback[MotorId] ); diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index 8dc53256b..9aa9b2470 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -1,5 +1,6 @@ var Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi'); var Clock = xdc.useModule('ti.sysbios.knl.Clock'); +var Seconds = xdc.useModule('ti.sysbios.hal.Seconds'); var BIOS = xdc.useModule('ti.sysbios.BIOS'); var SysMin = xdc.useModule('xdc.runtime.SysMin'); var System = xdc.useModule('xdc.runtime.System'); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index e3955793d..063d7c823 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -492,6 +492,8 @@ void setRapidPressureRead(bool value) { RapidPressureRead = value; } + +uint16_t PumpCounter = 0; uint32_t MillisecLowLoop(uint32_t tick) { uint8_t Motor_i,Disp_i,Heater_i,temp; @@ -501,13 +503,14 @@ uint32_t MillisecLowLoop(uint32_t tick) //call all modules Millisec functions //test dancers and speed encoders //check all callback units (state machine waiting for completion of a change) - bool Ten_msTick, Hundred_msTick , m90msecTick, Onesecond_Tick,O900Millisecond_Tick,OneMinute_Tick; + bool Ten_msTick, Hundred_msTick , m90msecTick, Onesecond_Tick,O900Millisecond_Tick,OneMinute_Tick,OneHourTick; Ten_msTick = (tick%eTenMillisecond == 0) ?true:false; Hundred_msTick = (tick%eHundredMillisecond == 0) ?true:false; m90msecTick = (tick%eHundredMillisecond == 90) ?true:false; O900Millisecond_Tick = (tick%eOneSecond == 900) ?true:false; Onesecond_Tick = (tick%eOneSecond == 0) ?true:false; OneMinute_Tick = (tick%eOneMinute == 0) ?true:false; + OneHourTick = (tick%eOneHour == 0) ?true:false; //gather Motor data from FPGA //ROM_IntMasterDisable(); @@ -611,6 +614,16 @@ uint32_t MillisecLowLoop(uint32_t tick) MotorGetStatusFromFPGA(Motor_i); }*/ } + if (OneHourTick) + { +#define PUMP_LIMIT 8 + PumpCounter++; + if (PumpCounter>=PUMP_LIMIT) + { + PumpActivation(900); + PumpCounter = 0; + } + } //ROM_IntMasterEnable(); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c index f8a57362a..4597efa93 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c @@ -268,6 +268,9 @@ uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer) else Lubricant_2Way_Valve(STOP);//use START or STOP, 0 - 100%(); break; + case INTERFACE_IOS__GPO_TFEED_BREAK_1: + Pumps_Control(WASTECH_PUMP2, request->value); + break; default: responseContainer.has_error = true; responseContainer.error = ERROR_CODE__GENERAL_ERROR; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index a22bfc815..98e760b32 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -115,7 +115,7 @@ DoubleArray DiagnosticsDispenserPressure[MAX_SYSTEM_DISPENSERS]; HeaterState **heatersstates; HeaterState HeaterInfo[HEATER_TYPE__MixerHeater+1]; DigitalInterfaceState **digitalinterfacestates; -DigitalInterfaceState DigitalOutputState[MAX_HEATERS_NUM+9]; +DigitalInterfaceState DigitalOutputState[MAX_HEATERS_NUM+10]; /*double dispenser1motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser2motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser3motorfrequency[DIAGNOSTICS_LIMIT+1]; @@ -390,7 +390,7 @@ void Diagnostic100msecCollection(void) dispenserspressure[i][DiagnosticsIndex] = GetDispenserPressure(i); //Read_MidTank_Pressure_Sensor MidTankpressure[i][0] = Get_MidTank_Pressure_Sensor(i); //MidTankpressure[i][0] = IDS_Dispenser_Data[i].totalconsumedinnanolitter; - MidTankpressure[i][0] = IDS_Dispenser_Data[i].consumedinnanolitter; + MidTankpressure[i][0] = 1.00-(IDS_Dispenser_Data[i].consumedinnanolitter/5800000); } #ifndef REDUCED_DIAGNOSTICS for (i=0;idata.data); - FileWrite(requestContainer->data.data, requestContainer->data.len,HwConfigPath); + FileWrite(requestContainer->data.data, requestContainer->data.len,HwConfigPath,BIOS_WAIT_FOREVER); UploadHardwareConfigurationRequest* UploadRequest = upload_hardware_configuration_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index 1c719d778..52f717626 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -538,14 +538,14 @@ uint32_t LoadStatMachine( button *pBtn) { case sttRDY : REPORT_MSG(parameter," ------------ load.state = sttRDY ----------------- "); - switch (pBtn->Action) +/* switch (pBtn->Action) { case (SHORTPB): case (LONGPB): case (REPLONGPB): pBtn->state = sttPRELOAD; - pBtn->color = BLINK; - if (ThreadLoadStateMachine( THREAD_LOAD_INIT)) + pBtn->color = BLINK;*/ + if (ThreadLoadButton( THREAD_LOAD_INIT)) { pBtn->state = sttPRELOAD ; // to do pBtn->color = BLUE; @@ -553,41 +553,54 @@ uint32_t LoadStatMachine( button *pBtn) } else { - pBtn->state = sttDISABLE ; + // pBtn->state = sttDISABLE ; Pannel_Leds(THREAD_LOAD, MODE_OFF);//AVI+ } - break; + /*break; default : break; - } + }*/ break; case sttPRELOAD: REPORT_MSG(parameter," ------------ load.state = sttPRELOAD ----------------- "); - switch (pBtn->Action) + /*switch (pBtn->Action) { case (SHORTPB): case (LONGPB): case (REPLONGPB): pBtn->color = BLUE; - Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ - if (ThreadLoadStateMachine( THREAD_LOAD_INITIAL_TENSION)) + Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+*/ + if (ThreadLoadButton( THREAD_LOAD_INITIAL_TENSION)) { - pBtn->state = sttLOADSUCSESS ; // to do + pBtn->state = sttRDY ; // to do pBtn->color = BLUE; Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ } else { - pBtn->state = sttLOADFAIL ; + //pBtn->state = sttLOADFAIL ; pBtn->color = fastBILNK ; // to do } - break; + /*break; default : break; - } + }*/ break; case sttLOADING: REPORT_MSG(parameter," ------------ load.state = sttLOADING ----------------- "); + pBtn->color = fastBILNK; + Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ + if (ThreadLoadButton( THREAD_LOAD_END)) + { + pBtn->state = sttRDY ; // to do + pBtn->color = BLUE; + Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ + } + else + { + //pBtn->state = sttLOADFAIL ; + pBtn->color = fastBILNK ; // to do + } break; // case sttLOADSUCSESS ????? // break; @@ -596,7 +609,8 @@ uint32_t LoadStatMachine( button *pBtn) default: //sttDISABLE REPORT_MSG(parameter," ------------ load.state = default ----------------- "); - pBtn->color = colorOFF; + pBtn->state = sttRDY ; // to do + pBtn->color = BREATHING; Pannel_Leds(THREAD_LOAD, MODE_OFF);//AVI+ break; } diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index b968381c6..2c8788bdc 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -191,7 +191,7 @@ void ProcessRequestFunc(MessageContainer* requestContainer) ProcessParameters* ProcessParams = request->processparameters; if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters { - FileWrite(requestContainer->data.data, requestContainer->data.len,ProcessParamsConfigPath); + FileWrite(requestContainer->data.data, requestContainer->data.len,ProcessParamsConfigPath,BIOS_WAIT_FOREVER); Bytes = sizeof(ProcessParameters); EraseFlashSection(PROCESS_PARAMETERS_MAP_IN_FLASH,Bytes+4); ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 6d7f0df96..88032f756 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -298,7 +298,7 @@ uint32_t IDS_Dispenser_Store_Data (void) ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size); ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); - Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath); + Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath,BIOS_NO_WAIT); DispenserDataUpdated = false; REPORT_MSG(msec_millisecondCounter - timing, "Updating dispensers file - time"); return Status; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 837221274..366f4b163 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -45,18 +45,24 @@ 5 THREAD_LOAD_LIFT_DANCERS, 6 THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE 7 THREAD_LOAD_INITIAL_TENSION, //CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND - 8 THREAD_LOAD_CLOSE_ROCKERS, 9 THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD 10 THREAD_LOAD_CLOSE_LIDS, - 11 THREAD_LOAD_RESUME_HEATING, - 12 THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT, //JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION - 13 THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 + 12 THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER + 8 THREAD_LOAD_CLOSE_ROCKERS, + 11 THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT, //JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION + 13 THREAD_LOAD_RESUME_HEATING, 14 THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING 15 THREAD_LOAD_END }THREAD_LOAD_STAGES_ENUM;*/ THREAD_LOAD_STAGES_ENUM LoadStages = THREAD_LOAD_INIT; ProcessParameters ProcessParametersClear,ProcessParametersRecover; + + int32_t keepmicrostep; + int32_t keepkvalrun; + uint8_t CallbackCounter = 0; + uint8_t TimeoutsCounter = 0; + uint8_t NumberOfDrierLoaderCycles = 0; uint32_t status = OK; uint32_t ControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF; @@ -163,7 +169,7 @@ } else*/ { - Report("Thread_Load_Set_Load_Arm_To_Start_Position_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); + Report("Thread_Load_Set_Load_Arm_To_Start_Position_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); //storeLoadArmParameters(); SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM); //set this point as the spool home LoadStages++; @@ -173,6 +179,7 @@ } uint32_t Thread_Load_Set_Load_Arm_To_Stopper_Callback(uint32_t deviceID, uint32_t BusyFlag) { + if(PullerControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[POOLER_MOTOR],Hard_Hiz); @@ -192,7 +199,8 @@ MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,Hard_Hiz); // Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - Report("Thread_Load_Set_Load_Arm_To_Stopper_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); + CallbackCounter = 0; + Report("Thread_Load_Set_Load_Arm_To_Stopper_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); NumberOfDrierLoaderCycles=0; //storeLoadArmParameters(); LoadStages++; @@ -224,13 +232,11 @@ //Use Notation How Many Rotations In The Drier, Or Check Against Stopper. Move Slowly return OK; } - uint8_t CallbackCounter = 0; - uint8_t TimeoutsCounter = 0; uint32_t Thread_Load_HomingCallback(uint32_t MotorId, uint32_t ReadValue) { - Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - REPORT_MSG(MotorId, "Thread_Load_HomingCallback Motor Id"); + Report("Thread_Load_HomingCallback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); +// REPORT_MSG(MotorId, "Thread_Load_HomingCallback Motor Id"); if (CallbackCounter) { CallbackCounter--; @@ -249,12 +255,12 @@ else { LoadStages++; - if (LoadStages == THREAD_LOAD_LIFT_ROCKERS) + if (LoadStages == THREAD_LOAD_CLOSE_ROCKERS) { - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].microstep); - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].microstep); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].microstep); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].microstep); + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, keepmicrostep); + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, keepmicrostep); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, keepkvalrun); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, keepkvalrun); } if (LoadStages != THREAD_LOAD_INITIAL_TENSION) //on this stage we should wait for user call { @@ -303,16 +309,18 @@ uint32_t Thread_Load_Lift_Rockers(void) //Machine Is Ready. Send Message, Start Timer To Close Lids, Wait For Operator Response { + keepmicrostep = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].microstep; + keepkvalrun = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun; REPORT_MSG(LoadStages, "Thread Load State Machine step"); - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 1); - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 1); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 35); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 35); + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 2); + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 2); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); Task_sleep(10); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 50, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,25000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 400, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,20000); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 50, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,25000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 400, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,20000); return OK; } @@ -334,9 +342,9 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,12000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,20000); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,12000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,20000); return OK; } @@ -388,7 +396,7 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); CallbackCounter++; - MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 200, FEEDER_DANCER ,true, Thread_Load_HomingCallback,10000); + MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 100, FEEDER_DANCER ,true, Thread_Load_HomingCallback,2000); return OK; } @@ -459,6 +467,7 @@ MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4); ControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); + Report("AddControlCallback feeder",__FILE__,__LINE__,ControlId,RpMessage,IfTypeThread*0x100+FEEDER_MOTOR,0); CallbackCounter++; MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, numberOfSteps, Thread_Load_Dryer_Loading_Callback, 100000); @@ -466,7 +475,7 @@ //Keep Notation How Many Rotations In The Dryer //LoadArmInfo.LoadArmBackLash = 0; LoadArmInfo.LoadArmRounds = 0xFF; - FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath); + FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath,BIOS_WAIT_FOREVER); return OK; } uint32_t Thread_Load_Jog_ThreadStop(uint32_t index, uint32_t ReadValue) @@ -490,6 +499,24 @@ uint32_t Thread_Load_End(void) { REPORT_MSG(LoadStages,"Loading Ended"); + if(ControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); + RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); + ControlId = 0xFF; + } + if(PullerControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[POOLER_MOTOR],Hard_Hiz); + RemoveControlCallback(PullerControlId, ThreadLoadControlCBFunction ); + PullerControlId = 0xFF; + } + if(WinderControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[WINDER_MOTOR],Hard_Hiz); + RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); + WinderControlId = 0xFF; + } return OK; } uint32_t Thread_Load_Dryer_UnLoading(void) @@ -523,6 +550,7 @@ MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDRIVING].directionthreadwize); PullerControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+POOLER_MOTOR),POOLER_DANCER,POOLER_MOTOR); + Report("AddControlCallback Puller",__FILE__,__LINE__,PullerControlId,RpMessage,IfTypeThread*0x100+POOLER_MOTOR,0); //////////////////////// MotorControlConfig[WINDER_MOTOR].m_params.MAX = 1; MotorControlConfig[WINDER_MOTOR].m_params.MIN = MotorsControl[WINDER_MOTOR].outputproportionalpowerlimit*-1; @@ -544,6 +572,7 @@ MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_WINDER,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].directionthreadwize); WinderControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+WINDER_MOTOR),WINDER_DANCER,WINDER_MOTOR); + Report("AddControlCallback Winder",__FILE__,__LINE__,WinderControlId,RpMessage,IfTypeThread*0x100+WINDER_MOTOR,0); //////////////////////// MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING].directionthreadwize); @@ -553,13 +582,15 @@ //MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, // numberOfSteps, Thread_Load_Dryer_Loading_Callback, 100000); Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); + LoadArmInfo.LoadArmBackLash = 10; + status |= MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); //Keep Notation How Many Rotations In The Dryer //LoadArmInfo.LoadArmBackLash = 0; LoadArmInfo.LoadArmRounds = 0xFF; - FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath); + FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath,BIOS_WAIT_FOREVER); return OK; } @@ -613,10 +644,6 @@ //LoadStages++; Thread_Load_Close_Lids(); break; - case THREAD_LOAD_RESUME_HEATING: - //LoadStages++; - Thread_Load_Resume_Heating(); - break; case THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT://JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION //LoadStages++; Thread_Load_Jog_Feeder_To_Middle_Point(); @@ -626,6 +653,10 @@ //LoadStages++; Thread_Load_Dryer_Loading(); break; + case THREAD_LOAD_RESUME_HEATING: + //LoadStages++; + Thread_Load_Resume_Heating(); + break; case THREAD_LOAD_JOG_THREAD: //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING //LoadStages++; Thread_Load_Jog_Thread(); @@ -640,7 +671,18 @@ } return OK; } - +uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue) +{ + Report("ThreadLoadButton",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0); + if (LoadStages > ReadValue) + { + ThreadLoadStateMachine(LoadStages+1); + } + else + { + ThreadLoadStateMachine(ReadValue); + } +} uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { //read value is the dancer angle diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 167616afe..1544af59e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -58,17 +58,17 @@ typedef enum THREAD_LOAD_LIFT_DANCERS, THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND - THREAD_LOAD_CLOSE_ROCKERS, THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD THREAD_LOAD_CLOSE_LIDS, - THREAD_LOAD_RESUME_HEATING, - THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER + THREAD_LOAD_CLOSE_ROCKERS, + THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION + THREAD_LOAD_RESUME_HEATING, THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING THREAD_LOAD_END }THREAD_LOAD_STAGES_ENUM; -uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM ReadValue); +uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue); bool ThreadLoadingActive(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 500ba9a39..38c0f86f1 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -174,7 +174,7 @@ uint32_t StoreDancerConfigMessage() { response_size = hardware_configuration__pack(&DancerConfig, response_buffer); } - Fresult = FileWrite(response_buffer,response_size,DancerConfigPath); + Fresult = FileWrite(response_buffer,response_size,DancerConfigPath,BIOS_WAIT_FOREVER); EraseFlashSection(DANCERS_MAP_IN_FLASH,1024); for (Dancer_i = 0; Dancer_i < MAX_SYSTEM_DANCERS; Dancer_i++) { diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index bdf8bd15d..3b972cc23 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -81,7 +81,10 @@ uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) else { if (MachineState == MACHINE_STATE_HW_CONFIG) + { + Report("HWConfigurationInit failed",__FILE__,__LINE__,(int)HWControlId,RpWarning,(int)InitSequenceCallBackFunction,0); MachineState = MACHINE_STATE_NO_CFG_FILE; + } } return OK; } @@ -284,6 +287,8 @@ uint32_t InitSequenceStartHeating(void) } else MachineState = MACHINE_STATE_MACHINE_READY_TO_DYE; + //activate second pump for 10 minutes + PumpActivation(600); return OK; } uint32_t InitSequenceMachineReadyToDye(void) -- cgit v1.3.1 From 04468fbdfcc1eac1b3e31d36d71a60461b437480 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 28 Jul 2019 18:14:36 +0300 Subject: improve loading, dispensers handling. stubs --- .../Embedded/Modules/IDS/IDS_dispenser.c | 4 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 6 +-- .../Embedded/Modules/Thread/ThreadLoad.c | 4 +- .../Embedded/Modules/Thread/Thread_ex.h | 4 +- .../stubs/embeddedparametersbuild.cs | 7 ++-- .../stubs/file read from machine.cs | 47 ++++++++++++++++++++++ 6 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 Software/Stubs Collection/stubs/file read from machine.cs (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 88032f756..212570462 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -321,14 +321,14 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) { DispenserDataUpdated = true; IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10); - if (seconds_counter%100 == 0) + if (seconds_counter%6000 == 0) { Report("IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter,0); } } if (DispenserId == 0) { - if ((seconds_counter++>=600)&&(DispenserDataUpdated == true))//36000)// - one hour) + if ((seconds_counter++>=36000)&&(DispenserDataUpdated == true))//36000)// - one hour) { seconds_counter = 0; if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index edfc095c2..9d708d959 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -605,15 +605,15 @@ c. Go to step 2.a x Segment.BrushStopsCount. updatedSpeed = (tempSpeed*0.95>100)?tempSpeed*0.95:100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; - Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); } else { tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*1.1>1000)?tempSpeed*1.1:100; + updatedSpeed = (tempSpeed*1.1>1000)?tempSpeed*1.1:1000; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; - Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + //Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); } } } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 366f4b163..d3a9b96ef 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -45,12 +45,12 @@ 5 THREAD_LOAD_LIFT_DANCERS, 6 THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE 7 THREAD_LOAD_INITIAL_TENSION, //CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND + 8 THREAD_LOAD_CLOSE_ROCKERS, 9 THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD 10 THREAD_LOAD_CLOSE_LIDS, + 11 THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT, //JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION 12 THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER - 8 THREAD_LOAD_CLOSE_ROCKERS, - 11 THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT, //JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION 13 THREAD_LOAD_RESUME_HEATING, 14 THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING 15 THREAD_LOAD_END diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 1544af59e..04ac12a66 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -58,12 +58,12 @@ typedef enum THREAD_LOAD_LIFT_DANCERS, THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND + THREAD_LOAD_CLOSE_ROCKERS, THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD THREAD_LOAD_CLOSE_LIDS, + THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER - THREAD_LOAD_CLOSE_ROCKERS, - THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION THREAD_LOAD_RESUME_HEATING, THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING THREAD_LOAD_END diff --git a/Software/Stubs Collection/stubs/embeddedparametersbuild.cs b/Software/Stubs Collection/stubs/embeddedparametersbuild.cs index e9ee79111..790bd6891 100644 --- a/Software/Stubs Collection/stubs/embeddedparametersbuild.cs +++ b/Software/Stubs Collection/stubs/embeddedparametersbuild.cs @@ -113,10 +113,11 @@ byte[] fileBytes = File.ReadAllBytes("C:/temp/EmbParam.cfg"); var config = ConfigurationParameters.Parser.ParseFrom(fileBytes); -int percent = (int)(config.IDSCleaningStopBeforeSegmentTime); - stubManager.Write( percent+"% \n"); - + stubManager.Write( config); +/* +13:46:42.38: Executing script 'embeddedparametersbuild.cs'... +{ "BreakSensorLimit": 10, "DiagnosticCollectionLimit": 1, "OverHeatCountLimit": 3, "UnderHeatCountLimit": 3, "CloseValveTimeout": 255, "OpenValveTimeout": 255, "InitialDispenserPressure": 1.5, "InitialDispenserTimeout": 60000, "InitialDispenserTimeLag": 100, "DispenserBuildPressureSpeed": 800, "DispenserBuildPressureLimit": 0.9, "DispenserBuildPressureTimeout": 80000, "DispenserBuildPressureLag": 50, "ACHeatersLowerOperationLimit": 995, "ACHeatersUpperOperationLimit": 1005, "DCHeatersLowerOperationLimit": 978, "DCHeatersUpperOperationLimit": 1005, "DispenserPresegmentWFCF": 80, "StartHeatingOnInitSequence": true, "GeneralParameters": [ 1, 1, 1, 1, 800, 1000 ], "CurrentAlarmLowLimit": 0.8, "CurrentAlarmHighLimit": 1.07, "IDSSegmentRefillTimeout": 5000, "IDSPreSegmentBuildupTime": 5000, "IDSCleaningSpeed": 50, "IDSCleaningStopBeforeSegmentTime": 3000, "IDSCleaningStartSprayPreSegmentTime": 1000, "IDSLeftCleaningMotorSpeed": 30, "IDSRightCleaningMotorSpeed": 23, "SwitchToIdleTimeinSeconds": 3600, "IdleDrierTemperature": 80, "IdleHeadTemperature": 80, "PowerOffTemperatureLimit": 50, "IDSPreSegmentWFCFTimeBeforeSegment": 1500 } */ } \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/file read from machine.cs b/Software/Stubs Collection/stubs/file read from machine.cs new file mode 100644 index 000000000..0f5f96c0a --- /dev/null +++ b/Software/Stubs Collection/stubs/file read from machine.cs @@ -0,0 +1,47 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +public void OnExecute(StubManager stubManager) +{ + +UploadHardwareConfigurationRequest uploadHardwareConfigurationRequest = new UploadHardwareConfigurationRequest(); + + + + FileDownloadRequest fileDownloadRequest = new FileDownloadRequest(); + fileDownloadRequest.Path = "0://SysInfo//GenHwCfg.cfg"; + FileDownloadResponse response2 = stubManager.Run(fileDownloadRequest); + + long chunk_size = response2.MaxChunkLength; + + FileStream fs = new FileStream("C:\\Temp\\GenHwCfg.cfg",FileMode.Open); + bool done = 0; + while (done = 0) + { + stubManager.Write("Position "+ fs.Position+ " Length "+ fs.Length +"\n\n"); + FileChunkDownloadRequest fileChunkDownloadRequest = new FileChunkDownloadRequest(); + fileChunkDownloadRequest.DownloadID = response2.DownloadID; + var response3 = stubManager.Run(fileChunkDownloadRequest); + byte[] chunk = new byte[response3.buffer.len]; + fs.Write(response3.buffer.data,chunk.Length); + if (response3.buffer.len Date: Tue, 30 Jul 2019 10:20:11 +0300 Subject: Version 1.4.2.8 improved loading, cleaning introduced, time handled --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Common/Utilities/Utils.c | 8 ++++- .../Embedded_SW/Embedded/Common/Utilities/Utils.h | 1 + .../Embedded/Communication/Connection.c | 1 + .../Flash_Memory/FATFS/fatfs_port_mx66l51235f.c | 6 ++-- .../Embedded/Drivers/Motors/MotorActions.c | 30 ++++++++++++---- .../Embedded/Drivers/SSI_Comm/Dancer/Dancer.h | 2 +- .../Embedded/Modules/IDS/IDS_dispenser.c | 7 ++-- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 27 +++++++------- .../Embedded/Modules/Thread/ThreadLoad.c | 41 ++++++++++++++++++---- .../Embedded/StateMachines/Printing/PrintingSTM.c | 1 + .../stubs/file read from machine.cs | 40 ++++++++++++++++----- 12 files changed, 124 insertions(+), 42 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 2ef74c7b6..1d427a7a5 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,2,7}; +TangoVersion_t _gTangoVersion = {1,4,2,8}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c index e22291963..d1143ada2 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c @@ -12,6 +12,7 @@ //#include #include "driverlib/hibernate.h" #include +#include //***************************************************************************** @@ -138,9 +139,14 @@ void utilsInit(uint32_t ui32SysClock) // Configure the hibernate module counter to RTC counter mode. HibernateCounterMode(HIBERNATE_COUNTER_RTC); +#define STARTTIME 1564403262 + Seconds_set(STARTTIME); } - +void utilsUpdateDateTime(uint32_t StartTime) +{ + Seconds_set(StartTime); +} uint32_t UsersysTickGet (void) { uint32_t tick = 0; diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.h b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.h index 37eade5c4..b54453e2c 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.h +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.h @@ -22,6 +22,7 @@ typedef enum void utilsInit(uint32_t ui32SysClock); +void utilsUpdateDateTime(uint32_t StartTime); uint32_t UsersysTickGet (void); bool DanserCheckPosition(uint16_t position , Danser_t danser, bool test); void InitWatchdog(uint32_t clock); diff --git a/Software/Embedded_SW/Embedded/Communication/Connection.c b/Software/Embedded_SW/Embedded/Communication/Connection.c index 50f23d26e..cfcfc6658 100644 --- a/Software/Embedded_SW/Embedded/Communication/Connection.c +++ b/Software/Embedded_SW/Embedded/Communication/Connection.c @@ -60,6 +60,7 @@ void ConnectionRequest(MessageContainer* requestContainer) char AssyVersion[30] = {0}; response.deviceinformation = &DevInfo; + utilsUpdateDateTime(1564403262);//(request->seconds); /* extern TangoVersion_t _gTangoVersion; extern char Dat[50]; diff --git a/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/fatfs_port_mx66l51235f.c b/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/fatfs_port_mx66l51235f.c index 79f232655..0eccc7601 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/fatfs_port_mx66l51235f.c +++ b/Software/Embedded_SW/Embedded/Drivers/Flash_Memory/FATFS/fatfs_port_mx66l51235f.c @@ -23,6 +23,7 @@ #include "driverlib/ssi.h" #include "driverlib/gpio.h" #include "inc/hw_memmap.h" +#include //#include //#include @@ -198,8 +199,9 @@ void disk_timerproc (void) DWORD get_fattime (void) { - return miliseconds / 1000; - + //return miliseconds / 1000; + DWORD t = (DWORD)time(NULL); + return t; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index e2b0ed701..52f62ed5a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -27,6 +27,7 @@ #include "drivers/FPGA/FPGA_Comm.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/SSI_Comm/Dancer/Dancer.h" +#include "drivers/Flash_ram/MCU_E2Prom.h" ///////////////////////// #include "driverlib/ssi.h" @@ -223,10 +224,15 @@ uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) / MotorStop(MotorId,Hard_Hiz ); Task_sleep(5); MotorMove(MotorId,DrierBackLashDirection,DryerBackLash ); - Task_sleep(5); + Task_sleep(100); if (MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) MotorStop(MotorId,Hard_Stop ); + Task_sleep(5); + Read_Dryer_ENC_Position(); //trigger the next call + Task_sleep(5); DrierZeroPosition = Read_Dryer_ENC_Position(); //trigger the next call + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CENTER,DrierZeroPosition); + Report("MotorVerifiedCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,DryerBackLash,0); //call the module callback @@ -284,9 +290,10 @@ uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t Rea Report("MotorMoveToDrierPositionCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,ReadValue,0); //CallbackCalls = 0; } - + Read_Dryer_ENC_Position(); //if (DrierZeroPosition == ReadValue) //thread running identified { + Report("MotorMoveToDrierPosition end",__FILE__,__LINE__,DrierZeroPosition,RpWarning,ReadValue,0); //stop this control loop SafeRemoveControlCallback(MotorControlId[MotorId], MotorControlCallback[MotorId] ); MotorControlCallback[MotorId] = 0; @@ -321,9 +328,9 @@ uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callb Task_sleep(5); Read_Dryer_ENC_Position(); Task_sleep(5); - currentposition = Control_Read_Dryer_Position(0,0,0); + currentposition = Control_Read_Dryer_Position(0,0); + MCU_E2PromRead(EEPROM_STORAGE_DRYER_CENTER,&DrierZeroPosition); Report("MotorMovetoEncoderPosition",__FILE__,__LINE__,DrierZeroPosition,RpWarning,currentposition,0); - if (currentposition > DrierZeroPosition) { direction = false; @@ -341,6 +348,7 @@ uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callb direction = true; } } + Report("MotorMovetoEncoderPosition direction",__FILE__,__LINE__,direction,RpWarning,15,0); MotorSetDirection( MotorId, direction); MotorSetSpeed (MotorId, 15); @@ -369,9 +377,19 @@ uint32_t MotorMoveCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //TODO LOG_ERROR (IfIndex, "Wrong Interface type"); return 0xFFFFFFFF; } - MotorId = IfIndex&0xFF; + CallbackCalls++; + if (CallbackCalls%5 == 0) + { + Read_Dryer_ENC_Position(); + } + if (CallbackCalls%5 == 1) + { + MotorId = Control_Read_Dryer_Position(0,0); + Report("MotorMoveCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,MotorId,0); + } - if (BusyFlag == NOTBUSY) + MotorId = IfIndex&0xFF; + if (BusyFlag == NOTBUSY) { //stop this control loop SafeRemoveControlCallback(MotorControlId[MotorId], MotorControlCallback[MotorId] ); diff --git a/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h b/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h index 7a843b1c1..2b3b33dff 100644 --- a/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h +++ b/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h @@ -12,7 +12,7 @@ uint32_t Read_Dancer_Position (HardwareDancerType DancerId); uint32_t Control_Read_Dancer_Position(HardwareDancerType DancerId, uint32_t Parameter1, uint32_t Parameter2); uint32_t Read_Dryer_ENC_Position (); -uint32_t Control_Read_Dryer_Position(uint32_t DryerID, uint32_t Parameter1, uint32_t Parameter2); +uint32_t Control_Read_Dryer_Position(uint32_t DryerID, uint32_t Parameter1); void Loop_SSI(); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 212570462..186fef2f9 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -299,8 +299,11 @@ uint32_t IDS_Dispenser_Store_Data (void) ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath,BIOS_NO_WAIT); - DispenserDataUpdated = false; - REPORT_MSG(msec_millisecondCounter - timing, "Updating dispensers file - time"); + if (Status == FR_OK) + { + DispenserDataUpdated = false; + REPORT_MSG(msec_millisecondCounter - timing, "Updating dispensers file - time"); + } return Status; } void IDS_Dispenser_Content_Calculation (char DispenserId) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 9d708d959..ac6df3c42 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -67,9 +67,10 @@ bool DispensersAlarmState[ MAX_SYSTEM_DISPENSERS] = {false,false,false,f int JobBrushStopId = 0; int lInterSegmentLength = 0; int InterSegmentStepsLimit = 0,InterSegmentStepsCount = 0; - uint32_t InterSegmentStartSprayCleaner; - uint32_t InterSegmentStartRocking; - uint32_t InterSegmentCenterRockers; + + uint32_t InterSegmentStartSprayCleaner = 0; + uint32_t InterSegmentStartRocking = 0; + uint32_t InterSegmentCenterRockers = 0; uint32_t LeftRockerSpeed = 20; uint32_t RighttRockerSpeed = 20; uint32_t CleaningDispenserSpeed = 40; @@ -805,20 +806,20 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); } if (EnableCleaning == true) { - if (InterSegmentStartSprayCleaner == InterSegmentStepsCount) + if (( InterSegmentStartSprayCleaner )&&(InterSegmentStartSprayCleaner == InterSegmentStepsCount)) { Report("Start Spray Cleaner",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); - //IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback); + IDS_Cleaning_Spray_Cleaning_Solution (CleaningDispenserSpeed,NULL); } - if (InterSegmentStartRocking == InterSegmentStepsCount) + /*if (InterSegmentStartRocking == InterSegmentStepsCount) { Report("Start cleaning rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); //IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); - } - if (InterSegmentCenterRockers == InterSegmentStepsCount) + }*/ + if (( InterSegmentCenterRockers)&&(InterSegmentCenterRockers == InterSegmentStepsCount)) { Report("Stop spray and center rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); - //IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); + IDS_Cleaning_Stop_Cleaning_Solution (NULL); //IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); } } @@ -962,12 +963,12 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) return ERROR; } Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)IntersegmentLength,0); - if (EnableCleaning == true) + /*if (EnableCleaning == true) { InterSegmentStartSprayCleaner = 500; InterSegmentStartRocking = 1000; InterSegmentCenterRockers = 3000; - } + }*/ InterSegmentStartWFCFDispensers = (lInterSegmentLength>5000)?lInterSegmentLength-5000:lInterSegmentLength; } @@ -1310,12 +1311,12 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) return ERROR; } Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)IntersegmentLength,0); - if (EnableCleaning == true) + /*if (EnableCleaning == true) { InterSegmentStartSprayCleaner = 500; InterSegmentStartRocking = 1000; InterSegmentCenterRockers = 3000; - } + }*/ InterSegmentStartWFCFDispensers = 0; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index d3a9b96ef..efb3f99a9 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -232,6 +232,16 @@ //Use Notation How Many Rotations In The Drier, Or Check Against Stopper. Move Slowly return OK; } + uint32_t Thread_Load_Jog_Feeder_To_Middle_Point_Callback(uint32_t deviceID, uint32_t BusyFlag) + { + { + Report("Thread_Load_Jog_Feeder_To_Middle_Point_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); + //storeLoadArmParameters(); + LoadStages++; + ThreadLoadStateMachine(LoadStages); + } + return OK; + } uint32_t Thread_Load_HomingCallback(uint32_t MotorId, uint32_t ReadValue) { @@ -396,13 +406,20 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); CallbackCounter++; - MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 100, FEEDER_DANCER ,true, Thread_Load_HomingCallback,2000); + MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 100, FEEDER_DANCER ,true, Thread_Load_Jog_Feeder_To_Middle_Point_Callback,2000); return OK; } uint32_t Thread_Load_Dryer_MovetoEncoderPosition_Callback(uint32_t MotorId, uint32_t ReadValue) { + Report("Thread_Load_Dryer_MovetoEncoderPosition_Callback",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0); MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 200); + if(ControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); + RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); + ControlId = 0xFF; + } if (CallbackCounter) { CallbackCounter--; @@ -418,17 +435,18 @@ else LOG_ERROR(MotorId, "Thread_Load_HomingCallback Callback is already 0"); + return OK; } uint32_t Thread_Load_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue) { Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - if(ControlId != 0xFF) + /*if(ControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); ControlId = 0xFF; - } - //REPORT_MSG(MotorId, "Thread_Load_Dryer_Loading_Callback Motor Id"); + }*/ + REPORT_MSG(MotorId, "Thread_Load_Dryer_Loading_Callback Motor Id"); MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,10000); return OK; } @@ -437,13 +455,14 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); LoadArmInfo.LoadArmRounds = 20; - uint32_t numberOfSteps = 0; + float numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 SetOriginMotorSpeed(19); // OriginalMotorSpd_2PPS[FEEDER_MOTOR] = 1000; // CurrentControlledSpeed[FEEDER_MOTOR] = 1000; numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*LoadArmInfo.LoadArmRounds*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; + //numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*3.3*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; Report("Thread Load State Machine step.",__FILE__,LoadStages,numberOfSteps,RpMessage,(int)(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius),0); MotorControlConfig[FEEDER_MOTOR].m_params.MAX = 1; MotorControlConfig[FEEDER_MOTOR].m_params.MIN = MotorsControl[FEEDER_MOTOR].outputproportionalpowerlimit*-1; @@ -534,7 +553,7 @@ MotorControlConfig[POOLER_MOTOR].m_params.MIN = MotorsControl[POOLER_MOTOR].outputproportionalpowerlimit*-1; MotorControlConfig[POOLER_MOTOR].m_params.Kd = MotorsControl[POOLER_MOTOR].derivativetime; MotorControlConfig[POOLER_MOTOR].m_params.Kp = MotorsControl[POOLER_MOTOR].proportionalgain; - MotorControlConfig[POOLER_MOTOR].m_params.Ki = MotorsControl[POOLER_MOTOR].integraltime; + MotorControlConfig[POOLER_MOTOR].m_params.Ki = 0;//MotorsControl[POOLER_MOTOR].integraltime; MotorControlConfig[POOLER_MOTOR].m_params.IntegralErrorMultiplier = MotorsControl[POOLER_MOTOR].setpointramprateorsoftstartramp; MotorControlConfig[POOLER_MOTOR].m_params.ProportionalErrorMultiplier = MotorsControl[POOLER_MOTOR].outputonoffhysteresisvalue; MotorControlConfig[POOLER_MOTOR].m_params.epsilon = MotorsControl[POOLER_MOTOR].epsilon; @@ -556,7 +575,7 @@ MotorControlConfig[WINDER_MOTOR].m_params.MIN = MotorsControl[WINDER_MOTOR].outputproportionalpowerlimit*-1; MotorControlConfig[WINDER_MOTOR].m_params.Kd = MotorsControl[WINDER_MOTOR].derivativetime; MotorControlConfig[WINDER_MOTOR].m_params.Kp = MotorsControl[WINDER_MOTOR].proportionalgain; - MotorControlConfig[WINDER_MOTOR].m_params.Ki = MotorsControl[WINDER_MOTOR].integraltime; + MotorControlConfig[WINDER_MOTOR].m_params.Ki = 0;//MotorsControl[WINDER_MOTOR].integraltime; MotorControlConfig[WINDER_MOTOR].m_params.IntegralErrorMultiplier = MotorsControl[WINDER_MOTOR].setpointramprateorsoftstartramp; MotorControlConfig[WINDER_MOTOR].m_params.ProportionalErrorMultiplier = MotorsControl[WINDER_MOTOR].outputonoffhysteresisvalue; MotorControlConfig[WINDER_MOTOR].m_params.epsilon = MotorsControl[WINDER_MOTOR].epsilon; @@ -682,7 +701,10 @@ uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue) { ThreadLoadStateMachine(ReadValue); } + return OK; } +uint32_t LoadCounter = 0; + uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { //read value is the dancer angle @@ -741,6 +763,11 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); } + LoadCounter++; + if ((LoadCounter % 5001) == 0) + { + Report("MotorSpeedUpdated",__FILE__,index,abs(TranslatedReadValue),RpWarning,(int)CurrentControlledSpeed[index],0); + } return OK; } void ThreadLoadRequest(MessageContainer* requestContainer) diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 2959a688b..3aa7f8895 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -151,6 +151,7 @@ FRESULT CloseJobFile() SegmentPtr = NULL; } REPORT_MSG(Fresult,"CloseJobFile"); + IDS_Dispenser_Store_Data (); return Fresult; } diff --git a/Software/Stubs Collection/stubs/file read from machine.cs b/Software/Stubs Collection/stubs/file read from machine.cs index 0f5f96c0a..e4c43b905 100644 --- a/Software/Stubs Collection/stubs/file read from machine.cs +++ b/Software/Stubs Collection/stubs/file read from machine.cs @@ -7,7 +7,11 @@ using System.Windows.Forms; using System.Threading; using System.Threading.Tasks; using System.Collections.Generic; +using Tango.PMR.Hardware; using Tango.PMR.Stubs; +using Tango.PMR.IO; +using Google.Protobuf; +using System.IO; using Tango.Stubs; public void OnExecute(StubManager stubManager) @@ -15,28 +19,46 @@ public void OnExecute(StubManager stubManager) UploadHardwareConfigurationRequest uploadHardwareConfigurationRequest = new UploadHardwareConfigurationRequest(); - +/* +FileChunkDownloadResponse fileChunkDownloadResponse = new FileChunkDownloadResponse(); + +ByteString byteString = new ByteString(); +byteString.Length = 0; +byteString.IsEmpty = false; +byteString.Item = 0; + +fileChunkDownloadResponse.Buffer = buffer; +fileChunkDownloadResponse.IsCanceled = false; +*/ + FileDownloadRequest fileDownloadRequest = new FileDownloadRequest(); - fileDownloadRequest.Path = "0://SysInfo//GenHwCfg.cfg"; + fileDownloadRequest.FileName = "0://SysInfo//GenHwCfg.cfg"; FileDownloadResponse response2 = stubManager.Run(fileDownloadRequest); long chunk_size = response2.MaxChunkLength; + stubManager.Write( chunk_size+" \r\n"); - FileStream fs = new FileStream("C:\\Temp\\GenHwCfg.cfg",FileMode.Open); - bool done = 0; - while (done = 0) + FileStream fs = new FileStream("C:\\Temp\\GenHwCfg.cfg",FileMode.Create); + bool done = false; + int location = 0; + while (done == false) { stubManager.Write("Position "+ fs.Position+ " Length "+ fs.Length +"\n\n"); FileChunkDownloadRequest fileChunkDownloadRequest = new FileChunkDownloadRequest(); fileChunkDownloadRequest.DownloadID = response2.DownloadID; var response3 = stubManager.Run(fileChunkDownloadRequest); - byte[] chunk = new byte[response3.buffer.len]; - fs.Write(response3.buffer.data,chunk.Length); - if (response3.buffer.len Date: Tue, 30 Jul 2019 15:31:01 +0300 Subject: Version 1.4.2.9 Thread loading ready --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 2 + .../Embedded/Drivers/Motors/MotorActions.c | 39 ++++++++----------- .../Embedded_SW/Embedded/Modules/General/buttons.c | 1 + .../Embedded/Modules/Thread/ThreadLoad.c | 44 ++++++++++++---------- .../Embedded/Modules/Thread/Thread_ex.h | 32 ++++++++-------- .../Embedded/StateMachines/Printing/PrintingSTM.c | 2 +- 7 files changed, 61 insertions(+), 61 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 1d427a7a5..78c7c7d74 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,2,8}; +TangoVersion_t _gTangoVersion = {1,4,2,9}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index c262642ff..411f28c15 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -365,6 +365,7 @@ uint32_t MotorSetMicroStep(TimerMotors_t _motorId, uint32_t microstep) { MotorDriverRequest[_motorId].microstep = microstep; FPGA_SetMotMicroStep(_motorId); + //Report("MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); return OK; } @@ -380,6 +381,7 @@ uint32_t MotorSetKvalRun(TimerMotors_t _motorId, uint8_t Value) { MotorDriverRequest[_motorId].KvalRun = Value; FPGA_SetMotKvalRun(_motorId); + //Report("MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 52f62ed5a..1d0954491 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -274,6 +274,7 @@ uint32_t MotorMoveToStopper (TimerMotors_t MotorId,bool direction, uint32_t Spee uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) //TODO { TimerMotors_t MotorId; + //uint32_t currentposition; if (IfIndex>>8 != IfTypeMotors) { LOG_ERROR (IfIndex, "Wrong Interface type"); @@ -287,12 +288,12 @@ uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t Rea if (CallbackCalls%20 == 0) { // REPORT_MSG(MotorPosition,"MotorVerifiedCallBackFunction"); - Report("MotorMoveToDrierPositionCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,ReadValue,0); + Report("MotorMoveToDrierPositionCallBackFunction",__FILE__,MotorId,DrierZeroPosition,RpWarning,ReadValue,0); //CallbackCalls = 0; } Read_Dryer_ENC_Position(); - //if (DrierZeroPosition == ReadValue) //thread running identified - { + if (abs(ReadValue - DrierZeroPosition)<5) + { Report("MotorMoveToDrierPosition end",__FILE__,__LINE__,DrierZeroPosition,RpWarning,ReadValue,0); //stop this control loop SafeRemoveControlCallback(MotorControlId[MotorId], MotorControlCallback[MotorId] ); @@ -331,28 +332,17 @@ uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callb currentposition = Control_Read_Dryer_Position(0,0); MCU_E2PromRead(EEPROM_STORAGE_DRYER_CENTER,&DrierZeroPosition); Report("MotorMovetoEncoderPosition",__FILE__,__LINE__,DrierZeroPosition,RpWarning,currentposition,0); - if (currentposition > DrierZeroPosition) - { - direction = false; - } - else + if (abs(currentposition - DrierZeroPosition)<5) { - if (currentposition == DrierZeroPosition) - { - if (callback) - callback(MotorId,0); - return OK; - } - else - { - direction = true; - } + if (callback) + callback(MotorId,0); + return OK; } - Report("MotorMovetoEncoderPosition direction",__FILE__,__LINE__,direction,RpWarning,15,0); + //Report("MotorMovetoEncoderPosition direction",__FILE__,__LINE__,direction,RpWarning,15,0); - MotorSetDirection( MotorId, direction); - MotorSetSpeed (MotorId, 15); - MotorControlId[MotorId] = AddControlCallback( MotorMoveToDrierPositionCallBackFunction, eTenMillisecond,Control_Read_Dryer_Position,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); + //MotorSetDirection( MotorId, direction); + MotorSetSpeed (MotorId, 50); + MotorControlId[MotorId] = AddControlCallback( MotorMoveToDrierPositionCallBackFunction, 2,Control_Read_Dryer_Position,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); MotorControlCallback[MotorId] = MotorMoveToDrierPositionCallBackFunction; return MotorControlId[MotorId]; @@ -378,11 +368,11 @@ uint32_t MotorMoveCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //TODO return 0xFFFFFFFF; } CallbackCalls++; - if (CallbackCalls%5 == 0) + if (CallbackCalls%200 == 0) { Read_Dryer_ENC_Position(); } - if (CallbackCalls%5 == 1) + if (CallbackCalls%200 == 1) { MotorId = Control_Read_Dryer_Position(0,0); Report("MotorMoveCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,MotorId,0); @@ -456,6 +446,7 @@ uint32_t MotorMoveToLimitSwitchCallBackFunction(uint32_t IfIndex, uint32_t Limit MotorControlId[MotorId] = 0xFF; if ((MotorId == HARDWARE_MOTOR_TYPE__MOTO_RDANCER)&&(HoldRightDancer == true)) { + REPORT_MSG(MotorId,"Motor at limit"); HoldRightDancer = false; MotorStop(MotorId,Soft_Stop); //TODO in run time limit switch just reverse direction } diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index 52f717626..724db5480 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -598,6 +598,7 @@ uint32_t LoadStatMachine( button *pBtn) } else { + pBtn->state = sttRDY ; // to do //pBtn->state = sttLOADFAIL ; pBtn->color = fastBILNK ; // to do } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index efb3f99a9..04ff325d4 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -99,7 +99,7 @@ FRESULT Fresult = FR_OK; REPORT_MSG(LoadStages, "Thread Load State Machine step"); - LoadArmInfo.LoadArmBackLash = 10; + LoadArmInfo.LoadArmBackLash = 5; LoadArmInfo.LoadArmRounds = 0xFF; Fresult = f_mkdir(SW_INFO_DIR); if ((Fresult == FR_OK)||(Fresult == FR_EXIST)) @@ -234,12 +234,12 @@ } uint32_t Thread_Load_Jog_Feeder_To_Middle_Point_Callback(uint32_t deviceID, uint32_t BusyFlag) { - { - Report("Thread_Load_Jog_Feeder_To_Middle_Point_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); - //storeLoadArmParameters(); - LoadStages++; - ThreadLoadStateMachine(LoadStages); - } + CallbackCounter--; + Report("Thread_Load_Jog_Feeder_To_Middle_Point_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); + //storeLoadArmParameters(); + LoadStages++; + ThreadLoadStateMachine(LoadStages); + return OK; } @@ -322,8 +322,8 @@ keepmicrostep = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].microstep; keepkvalrun = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun; REPORT_MSG(LoadStages, "Thread Load State Machine step"); - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 2); - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 2); + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 8); + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 8); MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); Task_sleep(10); @@ -412,7 +412,7 @@ uint32_t Thread_Load_Dryer_MovetoEncoderPosition_Callback(uint32_t MotorId, uint32_t ReadValue) { - Report("Thread_Load_Dryer_MovetoEncoderPosition_Callback",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0); + Report("Thread_Load_Dryer_MovetoEncoderPosition_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 200); if(ControlId != 0xFF) { @@ -439,14 +439,14 @@ } uint32_t Thread_Load_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue) { - Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); + Report("Thread_Load_Dryer_Loading_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); + Report("Thread_Load_Dryer_Loading_Callback details",__FILE__,__LINE__,MotorId,RpMessage,CallbackCounter,0); /*if(ControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); ControlId = 0xFF; }*/ - REPORT_MSG(MotorId, "Thread_Load_Dryer_Loading_Callback Motor Id"); MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,10000); return OK; } @@ -454,7 +454,8 @@ uint32_t Thread_Load_Dryer_Loading(void) { REPORT_MSG(LoadStages, "Thread Load State Machine step"); - LoadArmInfo.LoadArmRounds = 20; + LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; + //LoadArmInfo.LoadArmRounds = 5; float numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 SetOriginMotorSpeed(19); @@ -462,6 +463,7 @@ // CurrentControlledSpeed[FEEDER_MOTOR] = 1000; numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*LoadArmInfo.LoadArmRounds*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; + numberOfSteps -= 100; //numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*3.3*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; Report("Thread Load State Machine step.",__FILE__,LoadStages,numberOfSteps,RpMessage,(int)(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius),0); MotorControlConfig[FEEDER_MOTOR].m_params.MAX = 1; @@ -488,13 +490,14 @@ ControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); Report("AddControlCallback feeder",__FILE__,__LINE__,ControlId,RpMessage,IfTypeThread*0x100+FEEDER_MOTOR,0); CallbackCounter++; + Report("Thread_Load_Dryer_Loading",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, numberOfSteps, Thread_Load_Dryer_Loading_Callback, 100000); //Keep Notation How Many Rotations In The Dryer //LoadArmInfo.LoadArmBackLash = 0; - LoadArmInfo.LoadArmRounds = 0xFF; - FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath,BIOS_WAIT_FOREVER); + LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; + //FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath,BIOS_WAIT_FOREVER); return OK; } uint32_t Thread_Load_Jog_ThreadStop(uint32_t index, uint32_t ReadValue) @@ -536,6 +539,7 @@ RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); WinderControlId = 0xFF; } + LoadStages = THREAD_LOAD_INIT; return OK; } uint32_t Thread_Load_Dryer_UnLoading(void) @@ -601,14 +605,14 @@ //MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, // numberOfSteps, Thread_Load_Dryer_Loading_Callback, 100000); Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - LoadArmInfo.LoadArmBackLash = 10; + LoadArmInfo.LoadArmBackLash = 5; status |= MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); //Keep Notation How Many Rotations In The Dryer //LoadArmInfo.LoadArmBackLash = 0; - LoadArmInfo.LoadArmRounds = 0xFF; + LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath,BIOS_WAIT_FOREVER); return OK; } @@ -616,6 +620,8 @@ uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM ReadValue) { REPORT_MSG(ReadValue,"ThreadLoadStateMachine"); + if (LoadStages!=ReadValue) + LoadStages = ReadValue; switch (ReadValue) { case THREAD_LOAD_INIT: @@ -763,11 +769,11 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); } - LoadCounter++; +/* LoadCounter++; if ((LoadCounter % 5001) == 0) { Report("MotorSpeedUpdated",__FILE__,index,abs(TranslatedReadValue),RpWarning,(int)CurrentControlledSpeed[index],0); - } + }*/ return OK; } void ThreadLoadRequest(MessageContainer* requestContainer) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 04ac12a66..fabb823fc 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -50,23 +50,23 @@ uint32_t Winder_End(void); typedef enum { - THREAD_LOAD_INIT, - THREAD_LOAD_REDUCE_HEAT, //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW, - THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION,//USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINST STOPPER. MOVE SLOWLY - THREAD_LOAD_CENTER_HEAD_ROCKERS, //puthead cleaning rockers to middle position - THREAD_LOAD_OPEN_COVERS, //OPEN DYEING HEAD COVER AND DRYER LID - THREAD_LOAD_LIFT_DANCERS, - THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE - THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND - THREAD_LOAD_CLOSE_ROCKERS, - THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD - THREAD_LOAD_CLOSE_LIDS, - THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION - THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 + /*01*/ THREAD_LOAD_INIT, + /*02*/ THREAD_LOAD_REDUCE_HEAT, //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW, + /*03*/ THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION,//USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINST STOPPER. MOVE SLOWLY + /*04*/ THREAD_LOAD_CENTER_HEAD_ROCKERS, //puthead cleaning rockers to middle position + /*05*/ THREAD_LOAD_OPEN_COVERS, //OPEN DYEING HEAD COVER AND DRYER LID + /*06*/ THREAD_LOAD_LIFT_DANCERS, + /*07*/ THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE + /*08*/ THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND + /*09*/ THREAD_LOAD_CLOSE_ROCKERS, + /*10*/ THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD + /*11*/ THREAD_LOAD_CLOSE_LIDS, + /*12*/ THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION + /*13*/ THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER - THREAD_LOAD_RESUME_HEATING, - THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING - THREAD_LOAD_END + /*14*/ THREAD_LOAD_RESUME_HEATING, + /*15*/ THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING + /*16*/ THREAD_LOAD_END }THREAD_LOAD_STAGES_ENUM; uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue); bool ThreadLoadingActive(void); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 3aa7f8895..019e2346d 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -657,7 +657,7 @@ void PrintSTMMsgHandler(void * msg) JobMessageStruc *Message = msg; PrintMessageStruc *PrtMessage = (PrintMessageStruc *)Message->messageData; - Report("PrintSTMMsgHandler",__FILE__,__LINE__, 1000,RpMessage,Message->messageId,PrtMessage->messageId); + Report("PrintSTMMsgHandler",__FILE__,__LINE__, Message->messageId,RpMessage,PrtMessage->messageId,0); if ((Message->messageId != PrintMessage)&&(Message->messageId != Abort)) { -- cgit v1.3.1 From 18c4c73f8b654dca09e1333d1f6a35e4cbdc9b17 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 1 Aug 2019 13:08:22 +0300 Subject: Version 1.4.3.0 Embedded SW Release note - Version 1.4.3.0 ============================================================= System: File system protection + improvements Keep critical data on MCU EEPROM Procedures: Thread load fix and coordinate the amount of thread in drier to the distance to spool length. Dispensers flow control stage 2a - maintain pressure during presegment Modules: Enclosure temperature alarms Secondary waste pump Dispensers state info Heaters protection improved Diagnostics data - full data, full speed for now Thread - fix length calculation Process: Cleaning ready for integration --- .../Embedded/Common/SWUpdate/FileSystem.c | 2 + .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Common/report/filter.c | 2 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 2 +- .../Embedded_SW/Embedded/Modules/General/process.c | 8 + .../Embedded_SW/Embedded/Modules/General/process.h | 3 + .../Embedded/Modules/Heaters/Heaters_print.c | 51 +++- Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 1 - .../Embedded/Modules/IDS/IDS_dispenser.c | 10 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 257 +++++++++++++++------ .../Embedded/Modules/Thread/ThreadLoad.c | 1 + .../Embedded/Modules/Thread/Thread_Winder.c | 10 +- .../Embedded/Modules/Thread/Thread_print.c | 58 ++--- .../Embedded/Software Release Notes.txt | 11 +- .../Embedded/StateMachines/Printing/JobSTM.c | 4 +- .../Embedded/StateMachines/Printing/PrintingSTM.c | 8 +- 16 files changed, 302 insertions(+), 128 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 5cbc92285..48e29e54c 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -600,7 +600,9 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) Data[i].name = fno[i]->fname; Data[i].has_length = true; Data[i].length = fno[i]->fsize; + Data[i].has_lastmodifieddate = true; Data[i].lastmodifieddate = fno[i]->fdate; + Data[i].has_lastmodifiedtime = true; Data[i].lastmodifiedtime = fno[i]->ftime; if (i==0) usnprintf(&FullPath[i], 50, "%s", request->path); 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 78c7c7d74..9efaf59c8 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,2,9}; +TangoVersion_t _gTangoVersion = {1,4,3,0}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/report/filter.c b/Software/Embedded_SW/Embedded/Common/report/filter.c index b922e53bc..febc1ea8c 100644 --- a/Software/Embedded_SW/Embedded/Common/report/filter.c +++ b/Software/Embedded_SW/Embedded/Common/report/filter.c @@ -145,7 +145,7 @@ int ReportFilterPackage(const char *filterName, uint8_t SwitchAddRemove) return -1; /* nothing to remove */ } strcpy(packageFilterTable[filterNumOfCurrentEntries].filterName,filterName); - packageFilterTable[filterNumOfCurrentEntries].filterDontUse = true; + packageFilterTable[filterNumOfCurrentEntries].filterDontUse = false; filterNumOfCurrentEntries++; return (filterNumOfCurrentEntries-1); } diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 98e760b32..2ca57e08e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -62,7 +62,7 @@ uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t DispensersCollection(uint32_t IfIndex, uint32_t ReadValue); -#define REDUCED_DIAGNOSTICS +//#define REDUCED_DIAGNOSTICS DiagnosticsMonitors DiagnosticsMonitor = DIAGNOSTICS_MONITORS__INIT; #define DIAGNOSTICS_LIMIT 3 diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index 2c8788bdc..39e87ed6a 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -37,6 +37,9 @@ double headairflow = 0; double dryerairflow = 0; int32_t tableindex = 0; +double dryerbufferMeters = 0; +double dryerbufferCentimeters = 0; + #define MAX_ALLOWED_TEMPERATURE 280 char ProcessParamsConfigPath[50] = "0://SysInfo//ProcessP.cfg"; @@ -170,6 +173,11 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams) HeatersStopControlOnHeatersOff(ProcessParams); dyeingspeed = ProcessParams->dyeingspeed; dryerbufferlength = ProcessParams->dryerbufferlength; + dryerbufferMeters = dryerbufferlength*0.76+0.6; + dryerbufferCentimeters = dryerbufferlength*76+60; + + Report("drier buffer length",__FILE__,(int)dryerbufferlength,(int)dryerbufferMeters*100,RpWarning,(int)dryerbufferCentimeters,0); + mininkuptake = ProcessParams->mininkuptake; feedertension = ProcessParams->feedertension; pullertension = ProcessParams->pullertension; diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.h b/Software/Embedded_SW/Embedded/Modules/General/process.h index c67bd49b3..2b02c28c7 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.h +++ b/Software/Embedded_SW/Embedded/Modules/General/process.h @@ -19,6 +19,9 @@ extern double headairflow; extern double dryerairflow; extern int32_t tableindex; +extern double dryerbufferMeters; +extern double dryerbufferCentimeters; + extern ProcessParameters ProcessParametersKeep; extern void ProcessRequestFunc(MessageContainer* requestContainer); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index d60d5b840..8e185750f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -87,7 +87,7 @@ uint32_t DisasterControlId = 0xFF; #define DRYER_AIR_PT100 TEMP_SENSE_ANALOG_DRYER_TEMP1 #define DRYER_MAIN_PT100 TEMP_SENSE_ANALOG_DRYER_TEMP2 #define DRYER_SECONDARY_PT100 TEMP_SENSE_ANALOG_DRYER_TEMP3 -#define MINIMUM_HEATER_READ 8.5 +#define MINIMUM_HEATER_READ 9.0 #define MAXIMUM_HEATER_READ 283 //old uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {DRYER_AIR_PT100,DRYER_MAIN_PT100,DRYER_SECONDARY_PT100,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,TEMP_SENSE_ANALOG_MIXCHIP_TEMP,TEMP_SENSE_AN_ENCLOSURETEMP3}; @@ -538,6 +538,28 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) //ReportWithPackageFilter(HeatersFilter,"PrepareHeater AC Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);//MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]); HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);// = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]); + if((HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain])|| + (HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary])) + { + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,RpError, 0,0); + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,RpError, 0,0); + if (ControlIdtoMaxHeaterId [HeaterId] != 0xFF) + { + RemoveControlCallback(ControlIdtoMaxHeaterId [HeaterId], DcHeaterMaxTempCBFunction); + ControlIdtoMaxHeaterId [HeaterId] = 0xFF; + } + if (ControlIdtoHeaterId [HeaterId] != 0xFF) + { + RemoveControlCallback(ControlIdtoHeaterId [HeaterId], DCHeaterControlCBFunction); + ControlIdtoHeaterId [HeaterId] = 0xFF; + } + DeActivateHeater(HeaterId); + HeaterCmd[HeaterId].targettemperatue = 0; + AlarmHandlingSetAlarm(HeaterEventType[HeaterId], true); + + return ERROR; + } + } //turn all alarms off AlarmHandlingSetAlarm(HeaterUnderEventType[HeaterId], false); @@ -571,6 +593,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) if (SetTemperatue) { Control_Dryer_Fan(START,75);//use START or STOP, 0 - 100% + ReportWithPackageFilter(HeatersFilter,"Control_Dryer_Fan",__FILE__,__LINE__,START,RpError, 75,0); } } /* @@ -583,6 +606,26 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) if (DisasterControlId == 0xFF) DisasterControlId = AddControlCallback( HeatersDisasterControl, eOneSecond,TemplateDataReadCBFunction,0,0, 0); + HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]);//MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]); + if((HeaterPreviousRead[HeaterId]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HeaterId])) + { + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HeaterId,RpError, 0,0); + if (ControlIdtoMaxHeaterId [HeaterId] != 0xFF) + { + RemoveControlCallback(ControlIdtoMaxHeaterId [HeaterId], DcHeaterMaxTempCBFunction); + ControlIdtoMaxHeaterId [HeaterId] = 0xFF; + } + if (ControlIdtoHeaterId [HeaterId] != 0xFF) + { + RemoveControlCallback(ControlIdtoHeaterId [HeaterId], DCHeaterControlCBFunction); + ControlIdtoHeaterId [HeaterId] = 0xFF; + } + DeActivateHeater(HeaterId); + AlarmHandlingSetAlarm(HeaterEventType[HeaterId], true); + HeaterCmd[HeaterId].targettemperatue = 0; + + return ERROR; + } if (ControlIdtoHeaterId [HeaterId] == 0xFF) ControlIdtoHeaterId [HeaterId] = AddControlCallback( DCHeaterControlCBFunction, Frequency/*eOneSecond*/,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); //HeaterPIDConfig[HeaterId].m_params.dt *=10; @@ -598,12 +641,6 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) Enable_Reading_Heaters_Current(HeaterId2CurrentId[HeaterId]); - HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]);//MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]); - if((abs(HeaterPreviousRead[HeaterId]-MINIMUM_HEATER_READ)<1)||(abs(MAXIMUM_HEATER_READ-HeaterPreviousRead[HeaterId])<10)) - { - ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HeaterId,RpError, 0,0); - return ERROR; - } //ReportWithPackageFilter(HeatersFilter,"PrepareHeater Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF) ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index d0621125f..33033ad69 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -36,7 +36,6 @@ uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue); int direction; }IDS_Dispenser_Data;*/ -void IDS_Dispenser_Set_Flow_Params (char DispenserId,double NanoLitterPerPulse,char MicroSteps); void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps); void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 186fef2f9..de7d12024 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -320,6 +320,8 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) //double consumedintimeframe = (double)(CurrentDispenserSpeed[DispenserId]); //pulses only //consumedintimeframe = 10+DispenserId; IDS_Dispenser_Data[DispenserId].consumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10);//100 milliseconds ==> speed/10 + if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0) + IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0; if (CurrentDispenserSpeed[DispenserId]>0.1) { DispenserDataUpdated = true; @@ -350,14 +352,6 @@ void DispensersCollectionCall(void) IDS_Dispenser_Content_Calculation(i); } } -void IDS_Dispenser_Set_Flow_Params (char DispenserId,double nanolitterperpulse,char microsteps) -{ - /*assert (DispenserId1000)?tempSpeed*1.1:1000; + updatedSpeed = (tempSpeed*1.1<1000)?tempSpeed*1.1:1000; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -634,6 +633,8 @@ c. Go to step 2.a x Segment.BrushStopsCount. } return OK; } + //******************************************************************************************************************** + //******************************************************************************************************************** uint32_t IDSPrepareState(void *JobDetails) { @@ -673,10 +674,6 @@ c. Go to step 2.a x Segment.BrushStopsCount. //ValveCommand (Enable,MixerDirection); } - PrepeareSpeed = JobTicket->processparameters->dyeingspeed*JobTicket->processparameters->maxinkuptake*1.30; - //REPORT_MSG((int)JobTicket->processparameters->dyeingspeed, "dyeing speed"); - //REPORT_MSG((int)JobTicket->processparameters->maxinkuptake, "max ink uptake"); - if (HeaterCheckReady() == true) { REPORT_MSG(1,"heaters ready, starting"); @@ -706,13 +703,10 @@ c. Go to step 2.a x Segment.BrushStopsCount. } if (NumOfActiveDispensers) { - PrepeareSpeed/=NumOfActiveDispensers; REPORT_MSG((int)NumOfActiveDispensers, "Num Of Active Dispensers"); for (i = 0; i < MAX_DYE_DISPENSERS; i++) { - //dispenserspeed = PrepeareSpeed/MotorsCfg[DispenserIdToMotorId[i]].microstep; dispenserspeed = DispenserPrepareSpeed; - //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); @@ -724,6 +718,138 @@ c. Go to step 2.a x Segment.BrushStopsCount. DispenserPrepareControlId = AddControlCallback( IDS_Prepare_Callback, PRESSURE_READ_TIME_GAP,TemplateDataReadCBFunction ,0, 0, 0 ); setRapidPressureRead(true); + } + //******************************************************************************************************************** + //************************** IDS PRESEGMENT BUILDUP ****************************************************************** + //******************************************************************************************************************** + + JobDescriptionFileBrushStop * FileBrushStop; + char IdsMessage[100]; + + //******************************************************************************************************************** + uint32_t IDS_PreSegmentPrepare_Callback(uint32_t DispenserId, uint32_t ReadValue) + { + bool pressureReady = false; + int i; + int NumofReadyDispensers = 0; + TimerMotors_t HW_Motor_Id; + float updatedSpeed,tempSpeed; + //REPORT_MSG((int)DispenserPrepareControlId, "Prepare Callback"); + + DispenserBuildTimeCounter+=PRESSURE_READ_TIME_GAP; + + if (DispenserBuildTimeCounter<(1*eOneSecond)) + { + REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); + return OK; + } + if (PreSegmentWCFStarted == true) + { + REPORT_MSG(PreSegmentWCFStarted,"PreSegmentWCFStarted is true, stopping prepare stage"); + //SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); + setRapidPressureRead(false); + return OK; + } + for (i = 0; i < MAX_DYE_DISPENSERS; i++) + { + //IDS_StopHomeDispenser(i); + if (DispenserUsedInSegment[i] == true) //we actually should check for all dispensers + { + HW_Motor_Id = DispenserIdToMotorId[i]; + if (GetDispenserPressure(i) > DispenserPreparePressure) + { + NumofReadyDispensers++; + tempSpeed = CurrentDispenserSpeed[i]; + updatedSpeed = (tempSpeed*0.95>100)?tempSpeed*0.95:100; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[i] = updatedSpeed; + //Report("IDS PreSegment reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + } + else + { + tempSpeed = CurrentDispenserSpeed[i]; + updatedSpeed = (tempSpeed*1.1<1000)?tempSpeed*1.1:1000; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[i] = updatedSpeed; + //Report("IDS PreSegment accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + } + } + } + + if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) + Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + + if (NumofReadyDispensers>=NumOfActiveDispensers) + pressureReady = true; + + if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) + { + SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); + setRapidPressureRead(false); + } + return OK; + } + //******************************************************************************************************************** + void IDSPresegmentPrepareStart(void) + { + int i; + int Dispenser_i,n_dispensers,DispenserId; + TimerMotors_t HW_Motor_Id; + double segmentfirst_speed; + JobDispenser **Dispensers; + + for (Dispenser_i = 0; Dispenser_i < MAX_DYE_DISPENSERS; Dispenser_i++) + { + DispenserUsedInSegment[Dispenser_i] = false; + } + if (FileBrushStop) + { + Report("start dispensers pre segment pressure build",__FILE__,__LINE__,FileBrushStop->index,RpWarning,(int)FileBrushStop->n_dispensers,0); + NumOfActiveDispensers = FileBrushStop->n_dispensers; + Dispensers = FileBrushStop->dispensers; + n_dispensers = FileBrushStop->n_dispensers; + if (n_dispensers) + { + for (Dispenser_i = 0; Dispenser_i < n_dispensers; Dispenser_i++) + { + DispenserId = Dispensers[Dispenser_i]->index; + HW_Motor_Id = DispenserIdToMotorId[DispenserId]; + if (MotorsCfg[HW_Motor_Id].hardwaremotortype + != DispenserIdToMotorId[DispenserId]) + continue; + if ((DispenserId == CLEANER_DISPENSER)||(DispenserId == LUBRICANT_DISPENSER)) + { + continue; + } + //(Speed*uStep*PPR)/((2*PI*Dispenser_Radius) + segmentfirst_speed = Dispensers[Dispenser_i]->nanolitterpersecond + / Dispensers[Dispenser_i]->nanoliterperpulse; + if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) + { + DispenserUsedInSegment[Dispenser_i] = true; + MotorSetSpeed(HW_Motor_Id, DispenserPrepareSpeed); + CurrentDispenserSpeed[Dispenser_i] = DispenserPrepareSpeed; + usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d speed %d",DispenserId,(int) segmentfirst_speed); + //REPORT_MSG(segmentfirst_speed,IdsMessage); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + //SendJobProgress(0.0, 0, false, IdsMessage); + } + else + { + MotorStop(HW_Motor_Id, Hard_Hiz); + CurrentDispenserSpeed[Dispenser_i] = 0; + usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + + } + } + DispenserBuildTimeCounter = 0; + //DispenserPrepareControlId = AddControlCallback( IDS_PreSegmentPrepare_Callback, PRESSURE_READ_TIME_GAP,TemplateDataReadCBFunction ,0, 0, 0 ); + setRapidPressureRead(true); + + } + } + } //******************************************************************************************************************** uint32_t IDS_Valve_PresegmentValveReady(uint32_t deviceID, uint32_t ReadValue) @@ -757,8 +883,6 @@ c. Go to step 2.a x Segment.BrushStopsCount. //******************************************************************************************************************** - JobDescriptionFileBrushStop * FileBrushStop; - char IdsMessage[100]; uint32_t IDSPreSegmentStateCallbackRunner(uint32_t IfIndex, uint32_t ReadValue) { @@ -803,6 +927,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //IDS_Valve_PresegmentReady(1,0); Report("End of Pre-segment Handling",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); SafeRemoveControlCallback(DispenserPreSegmentControlId,IDSPreSegmentStateCallbackRunner); + setRapidPressureRead(false); } if (EnableCleaning == true) { @@ -816,16 +941,22 @@ 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 (( InterSegmentCenterRockers)&&(InterSegmentCenterRockers == InterSegmentStepsCount)) + if (( InterSegmentCenterRockers)&&(InterSegmentCenterRockers == (lInterSegmentLength-InterSegmentStepsCount))) { Report("Stop spray and center rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); IDS_Cleaning_Stop_Cleaning_Solution (NULL); //IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); } } + if (PreSegmentWCFStarted == false) + { + IDS_PreSegmentPrepare_Callback(0,0); + } if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == InterSegmentStepsCount)) { Report("start dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); + PreSegmentWCFStarted = true; // stop any presegment prepare stages, if still exist + setRapidPressureRead(false); if (FileBrushStop) { REPORT_MSG(FileBrushStop->index,"WFCFBrushStopRead Index"); @@ -853,16 +984,10 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //MotorSetMicroStep(HW_Motor_Id, Dispensers[Dispenser_i]->dispenserstepdivision); segmentfirst_speed /= Dispensers[Dispenser_i]->dispenserstepdivision; //the dye supply is calculated based on a 1/8 microstep - IDS_Dispenser_Set_Flow_Params( - DispenserId, Dispensers[Dispenser_i]->nanoliterperpulse, - Dispensers[Dispenser_i]->dispenserstepdivision); } else { segmentfirst_speed/=8;//MotorsCfg[HW_Motor_Id].microstep; //the dye supply is calculated based on a 1/8 microstep - IDS_Dispenser_Set_Flow_Params( - DispenserId, Dispensers[Dispenser_i]->nanoliterperpulse, - MotorsCfg[HW_Motor_Id].microstep); } if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) { @@ -970,7 +1095,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) InterSegmentCenterRockers = 3000; }*/ - InterSegmentStartWFCFDispensers = (lInterSegmentLength>5000)?lInterSegmentLength-5000:lInterSegmentLength; + //InterSegmentStartWFCFDispensers = (lInterSegmentLength>5000)?lInterSegmentLength-5000:lInterSegmentLength; } } /*if (SegmentId == 0)//first segment - running the DTS out of the drier @@ -986,7 +1111,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) CurrentDispenserSpeed[Dispenser_i] = 0; } } - lInterSegmentLength = ((dryerbufferlength*100)*1000/dyeingspeed); + lInterSegmentLength = (dryerbufferCentimeters*1000/dyeingspeed); lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication InterSegmentStepsCount = 0; DispenserPreSegmentControlId = AddControlCallback( IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); @@ -995,7 +1120,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0); return ERROR; } - Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)dryerbufferlength,0); + Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)lInterSegmentLength,0); if (EnableCleaning == true) { InterSegmentStartSprayCleaner = 500; @@ -1058,7 +1183,6 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) } //REPORT_MSG(DispenserId,"IDS_Valve_Presegment start"); - IDS_Dispenser_Set_Flow_Params(DispenserId,0,0); if (Dispensers[Dispenser_i]->dispenserstepdivision != DISPENSER_STEP_DIVISION__Auto) { MotorSetMicroStep(HW_Motor_Id, Dispensers[Dispenser_i]->dispenserstepdivision); @@ -1080,6 +1204,10 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) } } //Task_sleep(5); + PreSegmentWCFStarted = false; + REPORT_MSG(PreSegmentWCFStarted,"START IDSPresegmentPrepareStart"); + + IDSPresegmentPrepareStart(); return OK; } //******************************************************************************************************************** @@ -1115,17 +1243,10 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) //MotorSetMicroStep(HW_Motor_Id, Dispensers[Dispenser_i]->dispenserstepdivision); segmentfirst_speed /= Dispensers[Dispenser_i]->dispenserstepdivision; //the dye supply is calculated based on a 1/8 microstep - IDS_Dispenser_Set_Flow_Params( - DispenserId, Dispensers[Dispenser_i]->nanoliterperpulse, - Dispensers[Dispenser_i]->dispenserstepdivision); } else { segmentfirst_speed/=8;//MotorsCfg[HW_Motor_Id].microstep; //the dye supply is calculated based on a 1/8 microstep - - IDS_Dispenser_Set_Flow_Params( - DispenserId, Dispensers[Dispenser_i]->nanoliterperpulse, - MotorsCfg[HW_Motor_Id].microstep); } if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) { @@ -1293,7 +1414,6 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) if (DispenserUsedInJob[Dispenser_i]==false)//unconfigured dispenser continue; DispenserDistanceToSpoolReady[Dispenser_i] = false; - IDS_Dispenser_Set_Flow_Params(Dispenser_i,0,0); //MotorStop(HW_Motor_Id,Hard_Hiz); //Control3WayValvesWithCallback ((Valves_t)Dispenser_i, MidTank_Dispenser, IDS_Valve_DistanceToSpoolValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_DistanceToSpoolValveReady); @@ -1301,7 +1421,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) //cleaning - lInterSegmentLength = ((dryerbufferlength*100)*1000/dyeingspeed); + lInterSegmentLength = (dryerbufferCentimeters*1000/dyeingspeed); lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication InterSegmentStepsCount = 0; DispenserPreSegmentControlId = AddControlCallback( IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); @@ -1354,7 +1474,6 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) //MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); //Control3WayValvesWithCallback (Dispenser_i, MidTank_Dispenser, IDS_Valve_EndValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_EndValveReady); - IDS_Dispenser_Set_Flow_Params(Dispenser_i,0,0); } else { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 04ff325d4..5984618d9 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -139,6 +139,7 @@ ProcessParametersClear.headzone5temp = 0; ProcessParametersClear.headzone6temp = 0; ProcessParametersClear.dyeingspeed = 40; + ProcessParametersClear.dryerbufferlength = ProcessParametersKeep.dryerbufferlength; if (HandleProcessParameters(&ProcessParametersClear)!= OK) { LOG_ERROR (LoadStages, "Thread_Load_Init failed"); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 510168ab8..7e1312464 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -321,7 +321,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { ScrewNumberOfSteps--; WindingConeLocation--; - ReportWithPackageFilter(ThreadFilter,"Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); + // ReportWithPackageFilter(ThreadFilter,"Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } else //next time going back @@ -329,7 +329,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if ((CalculationDirectionChangeCounter/2)%InternalWinderCfg.SpoolBottomBackingRate == 0) { ScrewNumberOfSteps++; - Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); + // Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } /* if (WinderMotorSpeedRollOver) @@ -364,11 +364,11 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) ScrewRunningTime = temp;//(SYS_CLK_FREQ*Steps)/ScrewSpeed; //ROM_IntMasterEnable(); //usnprintf(TempScrewStr, 100, "Winder: Horizon,Rotation, PPR, RPP{ %d, %d ,%d, %d} ",(int)screw_horizontal_speed,(int)RotationsPerSecond,(int)InternalWinderCfg.NumberOfRotationPerPassage,(int)MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround); - usnprintf(ScrewStr, 100, "Winder: Steps,Speed, Time, WinderSpeed{ %d, %d ,%d, %d} ",(int)ScrewNumberOfSteps,(int)ScrewSpeed,(int)temp,(int)WinderReferenceSpeed); +// usnprintf(ScrewStr, 100, "Winder: Steps,Speed, Time, WinderSpeed{ %d, %d ,%d, %d} ",(int)ScrewNumberOfSteps,(int)ScrewSpeed,(int)temp,(int)WinderReferenceSpeed); // Report(logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); // #warning PID is now only proportional (above) //Report(TempScrewStr,__FILE__,__LINE__,0,RpWarning,0, 0); - Report(ScrewStr,__FILE__,__LINE__,ScrewCurrentDirection,RpWarning,CalculationDirectionChangeCounter, 0); +// Report(ScrewStr,__FILE__,__LINE__,ScrewCurrentDirection,RpWarning,CalculationDirectionChangeCounter, 0); //REPORT_MSG(temp , "new winder speed"); //Report("new winder speed",__FILE__,ScrewNumberOfSteps,temp,RpWarning,ScrewSpeed,0); } @@ -535,7 +535,7 @@ uint32_t ScrewDTSCallback(uint32_t deviceID, uint32_t BusyFlag) } uint32_t WinderDistanceToSpoolState(void ) { - double DTS_Time = ((dryerbufferlength*100)/dyeingspeed)*1000;//distance to spool time in milliseconds + double DTS_Time = (dryerbufferCentimeters/dyeingspeed)*1000;//distance to spool time in milliseconds REPORT_MSG ((int)DTS_Time,"WinderDistanceToSpoolState"); ScrewDTSControlId = AddControlCallback(ScrewDTSCallback, DTS_Time-WinderBackToBaseTime,TemplateDataReadCBFunction,0,0,0); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 528b83c1c..a88ce61a5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -259,32 +259,38 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) return 0xFFFFFFFF; } PoolerCurrentPosition = MotorGetPosition(ThreadMotorIdToMotorId[index]); -// if (CurrentPosition == 0) -// return OK; //unusable data - if (Poolerinitialpos == 0xFFFF) - { + //if (PoolerCurrentPosition != 0) + //{ + if (Poolerinitialpos == 0xFFFF) + { + PoolerPreviousPosition = PoolerCurrentPosition; + Poolerinitialpos = 0; + } + prevprev = PoolerPreviousPosition; + positionDiff = Control_Delta_Position_Pass(PoolerCurrentPosition,PoolerPreviousPosition); + //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; PoolerPreviousPosition = PoolerCurrentPosition; - Poolerinitialpos = 0; - } - prevprev = PreviousPosition; - positionDiff = Control_Delta_Position_Pass(PoolerCurrentPosition,PoolerPreviousPosition); - //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; - PoolerPreviousPosition = PoolerCurrentPosition; - length = (double)(positionDiff)*PoolerLengthCalculationMultiplier; - //if (InitialProcess == false) - { - PoolerTotalProcessedLength+= (length/100); - TempPoolerTotalProcessedLength = PoolerTotalProcessedLength; - } - if (length > 1000) - { - usnprintf(Lenstr, 100, "pooler length huge: length %d, diff 0x%x, pos 0x%x prev 0x%x",(int)length*100,(int)positionDiff,PreviousPosition,prevprev); - SendJobProgress(0.0,0,false, Lenstr); - Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); - length = 0; + // total length = (position diff / full cycle) * pulley perimeter + //(positionDiff/pulseperround)*((2*PI*motor_Radius) - } + //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; + length = (double)(positionDiff)*PoolerLengthCalculationMultiplier; + + if (length > 1000) + { + usnprintf(Lenstr, 100, "length huge: length %d, diff 0x%x, pos 0x%x prev 0x%x",(int)length*100,(int)positionDiff,PreviousPosition,prevprev); + SendJobProgress(0.0,0,false, Lenstr); + Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + length = 0; + + } + + //} + + length = (double)(positionDiff)*PoolerLengthCalculationMultiplier; + PoolerTotalProcessedLength+= (length/100); + TempPoolerTotalProcessedLength = PoolerTotalProcessedLength; #ifndef FEEDER_LENGTH_CALCULATION CurrentProcessedLength+=length; @@ -914,8 +920,8 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) } /*else if (InitialProcess==true) { - ThreadUpdateProcessLength (dryerbufferlength,(void *)ThreadPreSegmentEnded); - REPORT_MSG (dryerbufferlength," ThreadPreSegmentState DTS length (sample)"); + ThreadUpdateProcessLength (dryerbufferMeters,(void *)ThreadPreSegmentEnded); + REPORT_MSG (dryerbufferCentimeters," ThreadPreSegmentState DTS length (sample)"); SegmentState = false; PreSegmentState = true; DTSState = false; @@ -977,7 +983,7 @@ uint32_t ThreadSegmentState(void *SegmentDetails, int SegmentId) //******************************************************************************************************************** uint32_t ThreadDistanceToSpoolState(void ) { - seglength = dryerbufferlength; + seglength = dryerbufferMeters; REPORT_MSG (seglength,"ThreadDistanceToSpoolState"); //#ifdef FEEDER_LENGTH_CALCULATION ThreadUpdateProcessLength (seglength,(void *)ThreadDistanceToSpoolEnded); diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index 912979467..92534e42b 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,16 +1,21 @@ -Embedded SW Release note - Version 1.4.2.9 +Embedded SW Release note - Version 1.4.3.0 ============================================================= System: - File system protection + File system protection + improvements Keep critical data on MCU EEPROM Procedures: Thread load + fix and coordinate the amount of thread in drier to the distance to spool length. + Dispensers flow control stage 2a - maintain pressure during presegment Modules: Enclosure temperature alarms Secondary waste pump Dispensers state info + Heaters protection improved + Diagnostics data - full data, full speed for now + Thread - fix length calculation Process: - Cleaning + Cleaning ready for integration Embedded SW Release note - Version 1.4.2.2 ============================================================= diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 4288d786b..b01add901 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -635,8 +635,8 @@ void JobRequestFunc(MessageContainer* requestContainer) JobEndReason = JOB_OK; TotalProcessedLength = 0.0; PoolerTotalProcessedLength = 0.0; - job_length = CurrentJob->length + CurrentJob->processparameters->dryerbufferlength; - Report("job length ",__FILE__,job_length,CurrentJob->length,RpWarning,CurrentJob->processparameters->dryerbufferlength, 0); + job_length = CurrentJob->length + dryerbufferMeters; + Report("job length ",__FILE__,job_length,(int)CurrentJob->length,RpWarning,(int)dryerbufferCentimeters, 0); JobAlarmReason = AlarmHandlingPrepareJob(CurrentJob); if (JobAlarmReason ==OK) { diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 019e2346d..599056a5e 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -713,7 +713,7 @@ void PrintSTMMsgHandler(void * msg) if (RewindJobFile() != FR_OK) { JobEndReason = JOB_OTHER_ALARM; - if (dryerbufferlength == 0) + if (dryerbufferlength <= 0.1) EndState(CurrentJob, "Job Ended"); else DistanceToSpoolState(CurrentJob); @@ -729,7 +729,7 @@ void PrintSTMMsgHandler(void * msg) Report("SegmentResultsOk segmentId",__FILE__,__LINE__, SegmentId,RpMessage,n_segments,0); if (SegmentId >= n_segments) { - if (dryerbufferlength == 0) + if (dryerbufferlength <= 0.1) EndState(CurrentJob, "Job Ended"); else DistanceToSpoolState(CurrentJob); @@ -749,7 +749,7 @@ void PrintSTMMsgHandler(void * msg) else { JobEndReason = JOB_OTHER_ALARM; - if (dryerbufferlength == 0) + if (dryerbufferlength <= 0.1) EndState(CurrentJob, "Job Ended"); else DistanceToSpoolState(CurrentJob); @@ -761,7 +761,7 @@ void PrintSTMMsgHandler(void * msg) if (Segment == NULL) { JobEndReason = JOB_OTHER_ALARM; - if (dryerbufferlength == 0) + if (dryerbufferlength <= 0.1) EndState(CurrentJob, "Job Ended"); else DistanceToSpoolState(CurrentJob); -- cgit v1.3.1 From 7cb16930bdff98a723769a69cf663108cf50d6b0 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 6 Aug 2019 13:55:40 +0300 Subject: some thread loading improvements and IDS WCF/Cleaning fix --- Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c | 5 +++-- Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/MotorActions.c | 2 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c | 4 ++++ Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 12 ++++++++++-- .../Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c | 18 ++++++++++++------ 6 files changed, 31 insertions(+), 12 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 411f28c15..93ac3f6b6 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -365,7 +365,7 @@ uint32_t MotorSetMicroStep(TimerMotors_t _motorId, uint32_t microstep) { MotorDriverRequest[_motorId].microstep = microstep; FPGA_SetMotMicroStep(_motorId); - //Report("MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); + Report("MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); return OK; } @@ -374,6 +374,7 @@ uint32_t MotorSetKvalHold(TimerMotors_t _motorId, uint8_t Value) { MotorDriverRequest[_motorId].KvalHold = Value; FPGA_SetMotKvalHold(_motorId); + Report("MotorSetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } @@ -381,7 +382,7 @@ uint32_t MotorSetKvalRun(TimerMotors_t _motorId, uint8_t Value) { MotorDriverRequest[_motorId].KvalRun = Value; FPGA_SetMotKvalRun(_motorId); - //Report("MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); + Report("MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index 0c547142c..ee64fb9d8 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -21,7 +21,7 @@ //#define NUM_OF_MOTORS (HARDWARE_MOTOR_TYPE__MOTO_RLOADING + 1) // TODO After the integration with mulbery change to: -#define NUM_OF_MOTORS HARDWARE_MOTOR_TYPE__MOTO_SPARE3_1+1 +#define NUM_OF_MOTORS HARDWARE_MOTOR_TYPE__MOTO_SPARE2_2+1 #define MINIMAL_MOTOR_SPEED 0.2 //typedef enum diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 1d0954491..79261286e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -446,7 +446,7 @@ uint32_t MotorMoveToLimitSwitchCallBackFunction(uint32_t IfIndex, uint32_t Limit MotorControlId[MotorId] = 0xFF; if ((MotorId == HARDWARE_MOTOR_TYPE__MOTO_RDANCER)&&(HoldRightDancer == true)) { - REPORT_MSG(MotorId,"Motor at limit"); + REPORT_MSG(MotorId,"RDancer Motor at limit"); HoldRightDancer = false; MotorStop(MotorId,Soft_Stop); //TODO in run time limit switch just reverse direction } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c index 02f25cb59..09a3fbda4 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c @@ -27,6 +27,7 @@ uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed) status |= MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD, RightRockerSpeed); status |= MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH].directionthreadwize); status |= MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH, LeftRockerSpeed); + Report("IDS_Cleaning_Move_Rockers", __FILE__, __LINE__, LeftRockerSpeed, RpWarning, RightRockerSpeed, 0); return status; } @@ -35,6 +36,7 @@ uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callbac 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); return status; } @@ -42,6 +44,7 @@ uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr { uint32_t status = OK; status = IDS_Dispenser_Start_Motor_and_Open_Valve(CLEANING_DISPENSER_ID, dispenserSpeed, callback); + Report("IDS_Cleaning_Spray_Cleaning_Solution", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, dispenserSpeed, 0); return status; @@ -50,6 +53,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback) { uint32_t status = OK; status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANING_DISPENSER_ID,callback); + Report("IDS_Dispenser_Close_Valve_And_Stop_Motor", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); return status; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 1983925b8..e3ecd5d55 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -627,6 +627,8 @@ c. Go to step 2.a x Segment.BrushStopsCount. if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) { SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); + DispenserPrepareControlId = 0xFF; + Report("IDS_Prepare_Callback SafeRemoveControlCallback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); setRapidPressureRead(false); //DispenserPrepareReady(); PrepareReady(Module_IDS,ModuleDone); @@ -784,7 +786,10 @@ c. Go to step 2.a x Segment.BrushStopsCount. if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) { + Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); + DispenserPrepareControlId = 0xFF; + setRapidPressureRead(false); } return OK; @@ -991,6 +996,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); } if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) { + char IdMessage[100]; segmentfirst_speed *= (100+WFCF); segmentfirst_speed /= 100; DispenserSegmentReady[DispenserId] = false; @@ -999,7 +1005,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); CurrentDispenserSpeed[Dispenser_i] = segmentfirst_speed; - usnprintf(IdsMessage, 80, + usnprintf(IdMessage, 80, "WFCF Dispenser %d nl/sec %d nl/pulse %d speed %d", DispenserId, (int) Dispensers[Dispenser_i]->nanolitterpersecond, @@ -1250,6 +1256,8 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) } if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) { + char IdMessage[100]; + DispenserSegmentReady[DispenserId] = false; //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer /*IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId, @@ -1258,7 +1266,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); CurrentDispenserSpeed[DispenserId] = segmentfirst_speed; - usnprintf(IdsMessage, 80, + usnprintf(IdMessage, 80, "Dispenser %d nl/sec %d nl/pulse %d speed %d steps %d/%d", DispenserId, (int) Dispensers[Dispenser_i]->nanolitterpersecond, diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 5984618d9..ca5f77aba 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -59,7 +59,7 @@ ProcessParameters ProcessParametersClear,ProcessParametersRecover; int32_t keepmicrostep; - int32_t keepkvalrun; + int32_t keepkvalrun,keepkvalhold; uint8_t CallbackCounter = 0; uint8_t TimeoutsCounter = 0; @@ -273,6 +273,10 @@ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, keepkvalrun); MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, keepkvalrun); } + if (LoadStages == THREAD_LOAD_CLOSE_DANCERS) + { + MotorSetKvalHold(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, keepkvalhold); + } if (LoadStages != THREAD_LOAD_INITIAL_TENSION) //on this stage we should wait for user call { ThreadLoadStateMachine(LoadStages); @@ -310,10 +314,12 @@ uint32_t Thread_Load_Lift_Dancers(void) { REPORT_MSG(LoadStages, "Thread Load State Machine step"); + keepkvalhold = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].kvalhold; + MotorSetKvalHold(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 40); CallbackCounter++; MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 15, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,20000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000); return OK; } @@ -329,9 +335,9 @@ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); Task_sleep(10); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 400, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,20000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,35000); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 400, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,20000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,35000); return OK; } @@ -353,9 +359,9 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,20000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,25000); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,20000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,25000); return OK; } -- cgit v1.3.1 From d627576c770ddab1079940c34057a55206f6a835 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 7 Aug 2019 14:31:44 +0300 Subject: Version 1.4.3.2 small fixes --- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 25 ++-- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 7 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 12 +- .../Embedded/Drivers/Motors/MotorActions.c | 5 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 127 ++++++++++++--------- .../Embedded/Modules/Diagnostics/Diagnostics.c | 2 +- .../Embedded/Modules/IDS/IDS_Cleaning.c | 2 +- .../Embedded/Modules/Thread/ThreadLoad.c | 4 +- .../StateMachines/Initialization/InitSequence.c | 7 ++ .../StateMachines/Initialization/InitSequence.h | 1 + 11 files changed, 123 insertions(+), 71 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 7c6b4d4ef..8818d51e5 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -44,7 +44,7 @@ bool SwUpgradeActive(void) { if (ActivateVersionControlId != 0xFF) { - Reboot = false; + //Reboot = false; return true; } return false; @@ -59,18 +59,27 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) Report(activateString,__FILE__,__LINE__,(int)CurrentRunningFile,RpWarning,CurrentFileSize,0); if (CurrentRunningFiletoken, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size); + responseContainer.continuous = true; if (Fresult!= OK) { responseContainer.error = FileError_to_ErrorCode[Fresult]; responseContainer.errormessage = "Activate Version Request error"; + responseContainer.continuous = false; } - responseContainer.continuous = false; + responseContainer.continuous = true; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); 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 9efaf59c8..d368a60e0 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,3,0}; +TangoVersion_t _gTangoVersion = {1,4,3,2}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d 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 f8a256215..4d243408c 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -1001,6 +1001,7 @@ void FPGA_SetMotMicroStep(TimerMotors_t _motorId)// CM_VM = MotorDriverResponse[_motorId].DriverMode; temp |= (!x_SYNC_EN | CM_VM | good | x_SYNC_SEL_1)<<16; + Report("FPGA_SetMotMicroStep",__FILE__,__LINE__,_motorId,RpMessage,i,0); MillisecWriteToMotor(_motorId, temp, 4, NULL); } @@ -1138,7 +1139,9 @@ void FPGA_SetMotKvalHold(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - FPGA_SPI_Transnit(_motorId); + Report("FPGA SetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,MotorDriverResponse[_motorId].DriverMode,0); + + MillisecWriteToMotor(_motorId,temp,4,NULL); } void FPGA_SetMotKvalRun(TimerMotors_t _motorId) @@ -1163,6 +1166,8 @@ void FPGA_SetMotKvalRun(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; + Report("FPGA SetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,temp,0); + MillisecWriteToMotor(_motorId, temp, 4, NULL); //FPGA_SPI_Transnit(_motorId); } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 93ac3f6b6..484410c26 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -365,24 +365,26 @@ uint32_t MotorSetMicroStep(TimerMotors_t _motorId, uint32_t microstep) { MotorDriverRequest[_motorId].microstep = microstep; FPGA_SetMotMicroStep(_motorId); - Report("MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); return OK; } uint32_t MotorSetKvalHold(TimerMotors_t _motorId, uint8_t Value) { - MotorDriverRequest[_motorId].KvalHold = Value; + MotorsCfg[_motorId].kvalhold = Value; + MotorsCfg[_motorId].tvalhold = Value; FPGA_SetMotKvalHold(_motorId); - Report("MotorSetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,Value,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } uint32_t MotorSetKvalRun(TimerMotors_t _motorId, uint8_t Value) { - MotorDriverRequest[_motorId].KvalRun = Value; + MotorsCfg[_motorId].kvalrun = Value; + MotorsCfg[_motorId].tvalrun = Value; FPGA_SetMotKvalRun(_motorId); - Report("MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 79261286e..280c3807c 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -147,7 +147,7 @@ uint32_t MotorGotoWithCallback (TimerMotors_t MotorId, uint32_t Steps, uint32_t //MotorStop(MotorId,Hard_Hiz ); MotorGoTo(MotorId,Steps ); MotorControlId[MotorId] = AddControlCallback( MotorMoveToLimitSwitchCallBackFunction, eTenMillisecond, FPGA_Read_limit_Switches,(IfTypeMotors*0x100+MotorId), LimitSwitchId, 0 ); - MotorControlCallback[MotorId] = MotorMoveCallBackFunction; + MotorControlCallback[MotorId] = MotorMoveToLimitSwitchCallBackFunction; return MotorControlId[MotorId]; } uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO @@ -435,7 +435,10 @@ uint32_t MotorMoveToLimitSwitchCallBackFunction(uint32_t IfIndex, uint32_t Limit MotorId = (TimerMotors_t)(IfIndex&0xFF); if (MotorControlId[MotorId] == 0xFF) + { + SafeRemoveControlCallback(MotorControlId[MotorId], MotorMoveToLimitSwitchCallBackFunction ); return ERROR; + } MotorTimeout[MotorId]+=MotorTimeLag[MotorId]; if ((LimitSwitch == LIMIT) ||((MotorTimeout[MotorId]>=MotorTimeLimit[MotorId])&&(MotorTimeLimit[MotorId]>0))) diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index c4fcfaf8e..bae57d876 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -176,14 +176,14 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_7_OVERPRESSURE}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_8_OVERPRESSURE}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, - - /* + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, + + {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERCURRENT }, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT }, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_OVERCURRENT }, @@ -236,7 +236,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_STALL}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_STALL}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_STALL}, - */ + {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_OVERTEMPERATURE}, {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE}, {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE}, @@ -256,7 +256,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,RearDoor ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__REAR_COVER_OPEN }, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,CartridgesDoor,1,false,true,DEBUG_LOG_CATEGORY__Warning,0xFF,5,EVENT_TYPE__CARTRIDGES_COVER_OPEN}, - /* + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A}, @@ -264,7 +264,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A}, - */ + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_B}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B}, @@ -275,49 +275,49 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B }, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B }, - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, /* 3004 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, /* 3006 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, /* 3009 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT /*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3036 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT /*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3037 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT /*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3038 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT /*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, /* 4017 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, /* 5031 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, /* 5035 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, /* 5039 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, /* 3004 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, /* 3006 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, /* 3009 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT /*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3036 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT /*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3037 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT /*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3038 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT /*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, /* 4017 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, /* 5031 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, /* 5035 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, /* 5039 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3011 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3013 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, /* 3016 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3039 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3040 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3041 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, /* 4018 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, /* 5032 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, /* 5036 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, /* 5040 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3011 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3013 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, /* 3016 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3039 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3040 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3041 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, /* 4018 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, /* 5032 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, /* 5036 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, /* 5040 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3018 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3020 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3023 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3042 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, /* 3043 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, /* 3044 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, /* 4019 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, /* 5033 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, /* 5037 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, /* 5041 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3018 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3020 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3023 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3042 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, /* 3043 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, /* 3044 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, /* 4019 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, /* 5033 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, /* 5037 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, /* 5041 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3025 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3027 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, /* 3030 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3045 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3046 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3047 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, /* 4020 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, /* 5034 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE }, /* 5038 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE }, /* 5042 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3025 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3027 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, /* 3030 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3045 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3046 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3047 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, /* 4020 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, /* 5034 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE }, /* 5038 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE }, /* 5042 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_1 , HEATER_HEAD_CURRENT_ZONE_1 , 125 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE }, /* 5018 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_2 , HEATER_HEAD_CURRENT_ZONE_2 , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE }, /* 5019 */ @@ -458,11 +458,17 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { case ALARM_SOURCE_TYPE__TemperatureAlarm: //need to discover the heater Id and shut it down - HeaterCommandRequestMessage(AlarmItem[AlarmId].ModuleDeviceId, HEATER_OFF, 0); + if ((Severity == DEBUG_LOG_CATEGORY__Error)||(Severity == DEBUG_LOG_CATEGORY__Critical)) + { + ReportWithPackageFilter(AlarmFilter,"Heating alarm, turning heating off", __FILE__,__LINE__,AlarmId, RpMessage, Severity, 0); + //HeaterCommandRequestMessage(AlarmItem[AlarmId].ModuleDeviceId, HEATER_OFF, 0); + HeatersEnd(); + } break; case ALARM_SOURCE_TYPE__LimitSwitchAlarm: case ALARM_SOURCE_TYPE__HardLimitAlarm: case ALARM_SOURCE_TYPE__PressureAlarm: + ReportWithPackageFilter(AlarmFilter,"Dispenser alarm, stop job and dispenser", __FILE__,AlarmItem[AlarmId].ModuleDeviceId,AlarmId, RpMessage, AlarmItem[AlarmId].AlarmSource, 0); if (Severity == DEBUG_LOG_CATEGORY__Info) { IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId); @@ -475,7 +481,22 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever case ALARM_SOURCE_TYPE__CurrentAlarm: break; case ALARM_SOURCE_TYPE__MotorAlarm: - MotorStop(AlarmItem[AlarmId].ModuleDeviceId,Hard_Hiz); + if ((Severity == DEBUG_LOG_CATEGORY__Error)||(Severity == DEBUG_LOG_CATEGORY__Critical)) + { + ReportWithPackageFilter(AlarmFilter,"Motor alarm, motor stopped", __FILE__,AlarmItem[AlarmId].ModuleDeviceId,AlarmId, RpMessage, AlarmItem[AlarmId].AlarmSource, 0); + MotorStop(AlarmItem[AlarmId].ModuleDeviceId,Hard_Hiz); + } + if ((AlarmItem[AlarmId].ModuleDeviceId >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)&&(AlarmItem[AlarmId].ModuleDeviceId <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) //dispenser motor alarm + { + if (Severity == DEBUG_LOG_CATEGORY__Info) + { + IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId); + } + else + { + IDS_Dispenser_Alarm_On (AlarmItem[AlarmId].ModuleDeviceId); + } + } break; default: break; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 2ca57e08e..5d20791c0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -81,7 +81,7 @@ int DiagnosticLimit =eOneSecond; //frequency of data collection int DiagnosticLimit =eHundredMillisecond; //frequency of data collection #endif int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection - +#define TEN_MSEC_COLLECTION //DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT+1]; double dancer1angle[DIAGNOSTICS_LIMIT+1]; double dancer2angle[DIAGNOSTICS_LIMIT+1]; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c index 09a3fbda4..2a1a8fa31 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c @@ -53,7 +53,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback) { uint32_t status = OK; status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANING_DISPENSER_ID,callback); - Report("IDS_Dispenser_Close_Valve_And_Stop_Motor", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); + Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); return status; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index ca5f77aba..7d4b66dfb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -115,6 +115,7 @@ } Report("Thread_Load_Init",__FILE__,__LINE__,LoadArmInfo.LoadArmBackLash,RpMessage,LoadArmInfo.LoadArmRounds,0); + StopInitSequence(); memcpy (&ProcessParametersRecover,&ProcessParametersKeep,sizeof(ProcessParameters)); //NumberOfDrierLoaderCycles = loadLoadArmParameters(); LoadStages++; @@ -462,7 +463,8 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; - //LoadArmInfo.LoadArmRounds = 5; + if (LoadArmInfo.LoadArmRounds <= 2) + LoadArmInfo.LoadArmRounds = 20; float numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 SetOriginMotorSpeed(19); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 3b972cc23..a9b63ea47 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -51,6 +51,12 @@ void SetMachineState(MACHINE_STATE_STAGES_ENUM NewState) { MachineState = NewState; } +void StopInitSequence(void) +{ + InitStages = INIT_SEQUENCE_END; + InitSequenceStateMachine(InitStages); +} + uint32_t HWControlId,InitSchedulerControlId; uint32_t MidTankControlId; @@ -297,6 +303,7 @@ uint32_t InitSequenceMachineReadyToDye(void) } uint32_t InitSequenceInitEnd(void) { + RemoveControlCallback( InitSchedulerControlId,InitScheduler); return OK; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h index e4df62eb8..105537721 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h @@ -29,6 +29,7 @@ }MACHINE_STATE_STAGES_ENUM; uint32_t Start_InitSequence(void); +void StopInitSequence(void); MACHINE_STATE_STAGES_ENUM GetMachineState(void); void SetMachineState(MACHINE_STATE_STAGES_ENUM); void InitSequenceSetStartHeating(bool StartHeating); -- cgit v1.3.1 From 61954c23bc81fb1d24dd9c0a95bc27ca37371584 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 12 Aug 2019 16:36:18 +0300 Subject: Version 1.4.3.5: prepare for dispenser filling. VOC alarms. fix alarm handling. improved IDS and other features --- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 25 ++- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/ADC_Sampling/ADC.c | 87 --------- .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 166 ++++++++++++++++ .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 7 +- .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c | 3 +- .../Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 13 +- .../Embedded/Drivers/Motors/MotorActions.c | 5 +- .../Embedded/Drivers/flash_ram/FlashProgram.c | 34 +++- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 12 ++ Software/Embedded_SW/Embedded/Main.c | 1 - .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 212 ++++++++++++++------- .../Embedded/Modules/Control/MillisecTask.c | 11 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 72 ++++++- .../Embedded/Modules/Diagnostics/Diagnostics.h | 1 + .../Modules/Diagnostics/DiagnosticsHoming.c | 27 +++ .../Embedded/Modules/General/GeneralHardware.c | 14 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 3 + .../Embedded/Modules/IDS/IDS_Cleaning.c | 2 +- .../Embedded/Modules/IDS/IDS_dispenser.c | 2 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 1 - .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 51 +++++ .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 58 ++++-- .../Embedded/Modules/Thread/ThreadLoad.c | 4 +- .../StateMachines/Initialization/InitSequence.c | 7 + .../StateMachines/Initialization/InitSequence.h | 1 + .../Embedded/StateMachines/Printing/PrintingSTM.c | 1 + 28 files changed, 613 insertions(+), 211 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 7c6b4d4ef..8818d51e5 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -44,7 +44,7 @@ bool SwUpgradeActive(void) { if (ActivateVersionControlId != 0xFF) { - Reboot = false; + //Reboot = false; return true; } return false; @@ -59,18 +59,27 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) Report(activateString,__FILE__,__LINE__,(int)CurrentRunningFile,RpWarning,CurrentFileSize,0); if (CurrentRunningFiletoken, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size); + responseContainer.continuous = true; if (Fresult!= OK) { responseContainer.error = FileError_to_ErrorCode[Fresult]; responseContainer.errormessage = "Activate Version Request error"; + responseContainer.continuous = false; } - responseContainer.continuous = false; + responseContainer.continuous = true; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); 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 9efaf59c8..5a528d18b 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,3,0}; +TangoVersion_t _gTangoVersion = {1,4,3,5}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c index cd47751d1..5c52963eb 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c @@ -460,93 +460,6 @@ double Calculate_Pitot_Pressure() // WHS - AN_AIRPRESS_1 return Pressure; } -uint8_t Calculate_Gas_Power_Consumption() // WHS -{ - // TGS 2602 (FIGARO) - - -/* Concentrtion Sensor - [ppm] [v] - 0 0.353 - 18 0.438 - 33 2.919 - 100 4.196 - 316 4.571 -*/ - - double VOC_Vsensor[] = - { - 0.353, //0 PPM - 0.357, //1 PPM - 0.362, //2 PPM - 0.367, //3 PPM - 0.371, //4 PPM - 0.376, //5 PPM - 0.381, //6 PPM - 0.386, //7 PPM - 0.390, //8 PPM - 0.395, //9 PPM - 0.400, //10 PPM - 0.404, //11 PPM - 0.409, //12 PPM - 0.414, //13 PPM - 0.419, //14 PPM - 0.423, //15 PPM - 0.428, //16 PPM - 0.433, //17 PPM - 0.438, //18 PPM - 0.603, //19 PPM - 0.768, //20 PPM - 0.934, //21 PPM - 1.099, //22 PPM - 1.265, //23 PPM - 1.430, //24 PPM - 1.595, //25 PPM - 1.761, //26 PPM - 1.926, //27 PPM - 2.092, //28 PPM - 2.257, //29 PPM - 2.422, //30 PPM - 2.588, //31 PPM - 2.753, //32 PPM - 2.919 //33 PPM - }; - - uint32_t VsampleInBits; - - double temp, VADC = 0.0 ,VSensor; - - uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; - - VsampleInBits = ADC_GetReading(ADC_VOCSENS); - - //---- VBits -> VADC ---- - - //ADC 12 bit -> 4096 -> 2.5V - - temp = VsampleInBits*2.5; - VADC = temp / 4096; - - //---- VADC -> VSensor --- - - //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) - // VSensor = 0 V -> VADC = 2.3824 V - // VSensor = 10 V -> VADC = 0.2272 V - - VSensor = (1.96- VADC) * 4.64 + 1.96; - - for(i=0;i + +#include +#include +#include + +#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "ADC.h" +#include +#include +#include "modules/AlarmHandling/AlarmHandling.h" +#include "PMR/Diagnostics/EventType.pb-c.h" + +#define MAX_VOC_SAMPLES 120 + +uint16_t VOC_Index = 0; +uint8_t Gas_PPM[MAX_VOC_SAMPLES] = {0}; +uint32_t VOC_Slope=0,VOC_AverageLimit=0, VOC_Slope_Time=0; + +bool VOC_TimeAlarm = false,VOC_SlopeAlarm = false; + +void CalculateVOCAlarms(void) +{ + int i,slope1=0,slope2=0,slopeindex=0; + double a; + bool alarmstate = false; + for (i = 0; i< MAX_VOC_SAMPLES; i++) + { + a += Gas_PPM[i]; + if(i!=0) + { + slope2 = slope1; + slope1 = Gas_PPM[i]-Gas_PPM[i-1]; + if (slope1 > VOC_Slope) + { + slopeindex++; + if (slopeindex>=VOC_Slope_Time) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,true); + Report("CalculateVOCAlarms slope on",__FILE__,__LINE__,(int)slope1,RpWarning,slopeindex,0); + alarmstate = true; + VOC_SlopeAlarm = true; + } + } + + } + } + + if ((alarmstate==false)&&(VOC_SlopeAlarm == true)) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,false); + } + + if (a/MAX_VOC_SAMPLES > VOC_AverageLimit) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,true); + Report("CalculateVOCAlarms time on",__FILE__,__LINE__,(int)a,RpWarning,VOC_AverageLimit,0); + } + else if (VOC_TimeAlarm == true) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,false); + } + +} + +uint8_t Calculate_Gas_Power_Consumption() // WHS +{ + // TGS 2602 (FIGARO) + + +/* Concentrtion Sensor + [ppm] [v] + 0 0.353 + 18 0.438 + 33 2.919 + 100 4.196 + 316 4.571 +*/ + + double VOC_Vsensor[] = + { + 0.353, //0 PPM + 0.357, //1 PPM + 0.362, //2 PPM + 0.367, //3 PPM + 0.371, //4 PPM + 0.376, //5 PPM + 0.381, //6 PPM + 0.386, //7 PPM + 0.390, //8 PPM + 0.395, //9 PPM + 0.400, //10 PPM + 0.404, //11 PPM + 0.409, //12 PPM + 0.414, //13 PPM + 0.419, //14 PPM + 0.423, //15 PPM + 0.428, //16 PPM + 0.433, //17 PPM + 0.438, //18 PPM + 0.603, //19 PPM + 0.768, //20 PPM + 0.934, //21 PPM + 1.099, //22 PPM + 1.265, //23 PPM + 1.430, //24 PPM + 1.595, //25 PPM + 1.761, //26 PPM + 1.926, //27 PPM + 2.092, //28 PPM + 2.257, //29 PPM + 2.422, //30 PPM + 2.588, //31 PPM + 2.753, //32 PPM + 2.919 //33 PPM + }; + + uint32_t VsampleInBits; + + double temp, VADC = 0.0 ,VSensor; + + uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; + + VsampleInBits = ADC_GetReading(ADC_VOCSENS); + + //---- VBits -> VADC ---- + + //ADC 12 bit -> 4096 -> 2.5V + + temp = VsampleInBits*2.5; + VADC = temp / 4096; + + //---- VADC -> VSensor --- + + //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) + // VSensor = 0 V -> VADC = 2.3824 V + // VSensor = 10 V -> VADC = 0.2272 V + + VSensor = (1.96- VADC) * 4.64 + 1.96; + + for(i=0;i= MAX_VOC_SAMPLES) + VOC_Index = 0; + if (VOC_Index%60 == 0) + { + CalculateVOCAlarms(); + } + return i;//PPM + } + } + +return 0xFF;//out of scale + +} 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 f8a256215..3c9ae591a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -1001,6 +1001,7 @@ void FPGA_SetMotMicroStep(TimerMotors_t _motorId)// CM_VM = MotorDriverResponse[_motorId].DriverMode; temp |= (!x_SYNC_EN | CM_VM | good | x_SYNC_SEL_1)<<16; + ReportWithPackageFilter(GeneralFilter,"FPGA_SetMotMicroStep",__FILE__,__LINE__,_motorId,RpMessage,i,0); MillisecWriteToMotor(_motorId, temp, 4, NULL); } @@ -1138,7 +1139,9 @@ void FPGA_SetMotKvalHold(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - FPGA_SPI_Transnit(_motorId); + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,MotorDriverResponse[_motorId].DriverMode,0); + + MillisecWriteToMotor(_motorId,temp,4,NULL); } void FPGA_SetMotKvalRun(TimerMotors_t _motorId) @@ -1163,6 +1166,8 @@ void FPGA_SetMotKvalRun(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,temp,0); + MillisecWriteToMotor(_motorId, temp, 4, NULL); //FPGA_SPI_Transnit(_motorId); } diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c index 11ba12c32..79ec46b18 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c @@ -94,7 +94,8 @@ FRESULT FPGA_Programming_Up(FPGA_ID FPGA_Id, char * FullPath, bool IncludeReboot return(fresult); } Report(FullPath,__FILE__,__LINE__,CurrentFileSize,RpWarning,0,0); - + StopInitSequence(); + HeatersEnd(); fresult = main_vme(); CurrentRunningFile++; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c index 5aea18994..a26813c4a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c @@ -26,7 +26,7 @@ #include "ADC_MUX.h" bool MidTank_Pressure_Read_Enable[8] = {true,true,true,true,true,true,true,true}; -double MidTank_Pressure[8]; +double MidTank_Pressure[8] = {1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}; uint32_t MidTank_Pressure_Bits[8];//just for debug static uint8_t Config_Buf[3]; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 93ac3f6b6..d8ba1f045 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -357,6 +357,7 @@ uint32_t MotorSetMaxSpeed(TimerMotors_t _motorId, uint32_t MaxSpeed) { MotorsCfg[_motorId].maxfrequency = MaxSpeed; FPGA_SetMotMaxSpeed(_motorId); + ReportWithPackageFilter(GeneralFilter,"MotorSetMaxSpeed",__FILE__,__LINE__,_motorId,RpMessage,MaxSpeed,0); return OK; } @@ -365,24 +366,26 @@ uint32_t MotorSetMicroStep(TimerMotors_t _motorId, uint32_t microstep) { MotorDriverRequest[_motorId].microstep = microstep; FPGA_SetMotMicroStep(_motorId); - Report("MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); return OK; } uint32_t MotorSetKvalHold(TimerMotors_t _motorId, uint8_t Value) { - MotorDriverRequest[_motorId].KvalHold = Value; + MotorsCfg[_motorId].kvalhold = Value; + MotorsCfg[_motorId].tvalhold = Value; FPGA_SetMotKvalHold(_motorId); - Report("MotorSetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,Value,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } uint32_t MotorSetKvalRun(TimerMotors_t _motorId, uint8_t Value) { - MotorDriverRequest[_motorId].KvalRun = Value; + MotorsCfg[_motorId].kvalrun = Value; + MotorsCfg[_motorId].tvalrun = Value; FPGA_SetMotKvalRun(_motorId); - Report("MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 79261286e..280c3807c 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -147,7 +147,7 @@ uint32_t MotorGotoWithCallback (TimerMotors_t MotorId, uint32_t Steps, uint32_t //MotorStop(MotorId,Hard_Hiz ); MotorGoTo(MotorId,Steps ); MotorControlId[MotorId] = AddControlCallback( MotorMoveToLimitSwitchCallBackFunction, eTenMillisecond, FPGA_Read_limit_Switches,(IfTypeMotors*0x100+MotorId), LimitSwitchId, 0 ); - MotorControlCallback[MotorId] = MotorMoveCallBackFunction; + MotorControlCallback[MotorId] = MotorMoveToLimitSwitchCallBackFunction; return MotorControlId[MotorId]; } uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO @@ -435,7 +435,10 @@ uint32_t MotorMoveToLimitSwitchCallBackFunction(uint32_t IfIndex, uint32_t Limit MotorId = (TimerMotors_t)(IfIndex&0xFF); if (MotorControlId[MotorId] == 0xFF) + { + SafeRemoveControlCallback(MotorControlId[MotorId], MotorMoveToLimitSwitchCallBackFunction ); return ERROR; + } MotorTimeout[MotorId]+=MotorTimeLag[MotorId]; if ((LimitSwitch == LIMIT) ||((MotorTimeout[MotorId]>=MotorTimeLimit[MotorId])&&(MotorTimeLimit[MotorId]>0))) diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index f2f5aefb6..99d7c0b9e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -10,7 +10,17 @@ #include #include "FlashProgram.h" - +//#define FLASH_DEBUG +#ifdef FLASH_DEBUG +#define MAX_CONT_LOG 20 + +#define READ 1 +#define DELETE 2 +uint32_t Address[MAX_CONT_LOG+1] = {0}; +uint32_t Size[MAX_CONT_LOG+1] = {0}; +uint32_t EraseWrite[MAX_CONT_LOG+1] = {0}; +byte RxIndex = 0; +#endif //***************************************************************************** // // Read the application image from the file system and program it into flash. @@ -35,7 +45,13 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b volatile uint32_t ui32Idx; //uint32_t ui32FlashEnd; - +#ifdef FLASH_DEBUG + Address[RxIndex] = ui32FlashStart; + Size[RxIndex] = ui32FileSize; + EraseWrite[RxIndex] = READ; + if (RxIndex++>=MAX_CONT_LOG) + RxIndex = 0; +#endif // // Get the size of flash. This is the ending address of the flash. // If reserved space is configured, then the ending address is reduced @@ -111,6 +127,13 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b uint32_t EraseFlashSection(uint32_t ui32FlashStart,uint32_t ui32FileSize) { volatile uint32_t ui32Idx; +#ifdef FLASH_DEBUG + Address[RxIndex] = ui32FlashStart; + Size[RxIndex] = ui32FileSize; + EraseWrite[RxIndex] = DELETE; + if (RxIndex++>=MAX_CONT_LOG) + RxIndex = 0; +#endif for(ui32Idx = ui32FlashStart; ui32Idx < ui32FlashStart+ui32FileSize; ui32Idx += 1024) { ROM_FlashErase(ui32Idx); @@ -125,6 +148,13 @@ void FlashInit(void) { volatile uint32_t ui32Idx; //FlashUsecSet(120); +#ifdef FLASH_DEBUG + Address[RxIndex] = FLASH_RAM_BASE; + Size[RxIndex] = FLASH_SIZE; + EraseWrite[RxIndex] = DELETE; + if (RxIndex++>=MAX_CONT_LOG) + RxIndex = 0; +#endif for(ui32Idx = FLASH_RAM_BASE; ui32Idx < FLASH_RAM_BASE+FLASH_SIZE; ui32Idx += 1024) { ROM_FlashErase(ui32Idx); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index 88c27989c..f227dcd32 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -16,7 +16,10 @@ uint32_t MCU_E2PromProgram(int Address,uint32_t Data) { uint32_t Buffer = Data; if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromProgram Error",__FILE__,__LINE__,Address,RpWarning,Data,0); return ERROR; + } Report("MCU_E2PromProgram",__FILE__,__LINE__,Address,RpWarning,Data,0); return (EEPROMProgram((uint32_t *)&Buffer, Address*4, 4)); @@ -24,7 +27,10 @@ uint32_t MCU_E2PromProgram(int Address,uint32_t Data) uint32_t MCU_E2PromRead(int Address,uint32_t *Data) { if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromRead Error",__FILE__,__LINE__,Address,RpWarning,*Data,0); return ERROR; + } EEPROMRead((uint32_t *)Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,*Data,0); @@ -36,7 +42,10 @@ float MCU_E2PromReadMidtank_A(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_A+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); @@ -47,7 +56,10 @@ float MCU_E2PromReadMidtank_B(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_B+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index e04ce0d36..301d0d6c3 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -277,7 +277,6 @@ int main(void) #ifndef EVALUATION_BOARD WHS_init(); - Buttons_Init(); //IDS_ModuleInit(); Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); #endif diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index c4fcfaf8e..6f80fdffb 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -130,8 +130,10 @@ AlarmStatusItem AlarmState[MAX_SYSTEM_ALARMS]; * or static variable whose declaration follows the pragma directive (only if using it without #define for example: #pragma location = MOTOR_MAP_IN_FLASH) * The variables must be declared either __no_init or const! */ -AlarmHandlingItemStruc *AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH; -const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ +uint32_t * pAlarmItemSize = (uint32_t *)(ALARM_MAP_IN_FLASH); +uint32_t AlarmItemSize ; +AlarmHandlingItemStruc *AlarmItem = (AlarmHandlingItemStruc *)(ALARM_MAP_IN_FLASH+4); +AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_1,0,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_1_EMPTY}, {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_2,1,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_2_EMPTY}, {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_3,2,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_3_EMPTY}, @@ -176,14 +178,24 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_7_OVERPRESSURE}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_8_OVERPRESSURE}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_1_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_2_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_3_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_4_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_5_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_6_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_7_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_8_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_6_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_7_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, + - /* {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERCURRENT }, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT }, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_OVERCURRENT }, @@ -236,7 +248,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_STALL}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_STALL}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_STALL}, - */ + {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_OVERTEMPERATURE}, {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE}, {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE}, @@ -256,7 +268,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,RearDoor ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__REAR_COVER_OPEN }, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,CartridgesDoor,1,false,true,DEBUG_LOG_CATEGORY__Warning,0xFF,5,EVENT_TYPE__CARTRIDGES_COVER_OPEN}, - /* + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A}, @@ -264,7 +276,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A}, - */ + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_B}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B}, @@ -275,49 +287,49 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B }, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B }, - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, /* 3004 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, /* 3006 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, /* 3009 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT /*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3036 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT /*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3037 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT /*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3038 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT /*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, /* 4017 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, /* 5031 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, /* 5035 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, /* 5039 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, /* 3004 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, /* 3006 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, /* 3009 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT /*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3036 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT /*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3037 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT /*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3038 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT /*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, /* 4017 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, /* 5031 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, /* 5035 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, /* 5039 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3011 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3013 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, /* 3016 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3039 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3040 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3041 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, /* 4018 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, /* 5032 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, /* 5036 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, /* 5040 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3011 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3013 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, /* 3016 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3039 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3040 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3041 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, /* 4018 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, /* 5032 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, /* 5036 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, /* 5040 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3018 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3020 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3023 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3042 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, /* 3043 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, /* 3044 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, /* 4019 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, /* 5033 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, /* 5037 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, /* 5041 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3018 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3020 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3023 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3042 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, /* 3043 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, /* 3044 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, /* 4019 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, /* 5033 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, /* 5037 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, /* 5041 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3025 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3027 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, /* 3030 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3045 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3046 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3047 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, /* 4020 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, /* 5034 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE }, /* 5038 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE }, /* 5042 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3025 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3027 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, /* 3030 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3045 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3046 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3047 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, /* 4020 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, /* 5034 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE }, /* 5038 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE }, /* 5042 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_1 , HEATER_HEAD_CURRENT_ZONE_1 , 125 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE }, /* 5018 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_2 , HEATER_HEAD_CURRENT_ZONE_2 , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE }, /* 5019 */ @@ -338,6 +350,9 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK }, /* 6004 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_TIME}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_BREAK}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER}, @@ -367,27 +382,54 @@ bool EventsNotificationRequestAccepted = false; //machine cover open uint32_t AlarmHandlingFlashLoad(void) { + AlarmItemSize = sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS; + - EraseFlashSection(AlarmItem,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); + EraseFlashSection(pAlarmItemSize,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS+4); + ReadAppAndProgram(pAlarmItemSize, 4,&AlarmItemSize); ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem); -// LOG_ERROR(AlarmItem[2].EventName,"Flash Test"); + LOG_ERROR(AlarmItem[110].EventType,"Flash Test"); - return sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS; + return AlarmItemSize; } uint32_t AlarmHandlingLoadFile(void) { FRESULT Fresult = FR_OK; uint8_t* buffer = NULL; - uint32_t Bytes = 0; - + uint32_t Bytes = 0,i,p_size = 0; + AlarmParameters * AlarmParametersTable = NULL; Fresult = FileRead(AlarmStorePath, &Bytes, &buffer); if (Fresult == FR_OK) { - EraseFlashSection(AlarmItem,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); - ReadAppAndProgram(AlarmItem, Bytes,buffer); - free (buffer); - ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); - + AlarmParametersTable = alarm_parameters__unpack(NULL, Bytes, buffer); + if (AlarmParametersTable) + { + if (AlarmParametersTable->n_alarmitem) + { + for (i = 0; i < AlarmParametersTable->n_alarmitem ;i++) + { + HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + HardCodedAlarmItem[i].Frequency = AlarmParametersTable->alarmitem[i]->frequency; //1/10/100/1000 + HardCodedAlarmItem[i].AlarmSource = AlarmParametersTable->alarmitem[i]->alarmsource; + HardCodedAlarmItem[i].DeviceId = AlarmParametersTable->alarmitem[i]->deviceid; + HardCodedAlarmItem[i].ModuleDeviceId = AlarmParametersTable->alarmitem[i]->moduledeviceid; + HardCodedAlarmItem[i].AlarmValue = AlarmParametersTable->alarmitem[i]->alarmvalue; + HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + HardCodedAlarmItem[i].Severity = AlarmParametersTable->alarmitem[i]->severity; + HardCodedAlarmItem[i].Predecessor = AlarmParametersTable->alarmitem[i]->predecessor; + HardCodedAlarmItem[i].DebounceValue = AlarmParametersTable->alarmitem[i]->debouncevalue; + HardCodedAlarmItem[i].EventType = AlarmParametersTable->alarmitem[i]->eventtype; + p_size+= sizeof(AlarmHandlingItemStruc); + } + EraseFlashSection(pAlarmItemSize,p_size+4); + ReadAppAndProgram(pAlarmItemSize, 4,&p_size); + ReadAppAndProgram(AlarmItem, p_size,HardCodedAlarmItem); + free (buffer); + ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,__LINE__,p_size, RpMessage, AlarmParametersTable->n_alarmitem, 0); + } + alarm_parameters__free_unpacked(AlarmParametersTable,NULL); + } } return Bytes; } @@ -395,6 +437,7 @@ uint32_t AlarmHandlingLoadFile(void) void AlarmHandlingInit(void) { Error_Block eb; + uint32_t Bytes; Error_init(&eb); @@ -408,9 +451,20 @@ void AlarmHandlingInit(void) AlarmState[Alarm_i].EventPtr = NULL; } - AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH; + memcpy(&Bytes,(void *)pAlarmItemSize,sizeof(Bytes)); + REPORT_MSG(Bytes,"Bytes read from flash"); + + if ((Bytes)&&(Bytes < 10000)) + { + AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH+4; + } + else + { + Bytes = AlarmHandlingFlashLoad(); + REPORT_MSG(Bytes,"Bytes read hard coded"); + } + AlarmItem = HardCodedAlarmItem; //back to hard coded until flash problem are solved - //AlarmHandlingFlashLoad(); return; } @@ -458,11 +512,17 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { case ALARM_SOURCE_TYPE__TemperatureAlarm: //need to discover the heater Id and shut it down - HeaterCommandRequestMessage(AlarmItem[AlarmId].ModuleDeviceId, HEATER_OFF, 0); + if ((Severity == DEBUG_LOG_CATEGORY__Error)||(Severity == DEBUG_LOG_CATEGORY__Critical)) + { + ReportWithPackageFilter(AlarmFilter,"Heating alarm, turning heating off", __FILE__,__LINE__,AlarmId, RpMessage, Severity, 0); + //HeaterCommandRequestMessage(AlarmItem[AlarmId].ModuleDeviceId, HEATER_OFF, 0); + HeatersEnd(); + } break; case ALARM_SOURCE_TYPE__LimitSwitchAlarm: case ALARM_SOURCE_TYPE__HardLimitAlarm: case ALARM_SOURCE_TYPE__PressureAlarm: + ReportWithPackageFilter(AlarmFilter,"Dispenser alarm, stop job and dispenser", __FILE__,AlarmItem[AlarmId].ModuleDeviceId,AlarmId, RpMessage, AlarmItem[AlarmId].AlarmSource, 0); if (Severity == DEBUG_LOG_CATEGORY__Info) { IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId); @@ -475,7 +535,22 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever case ALARM_SOURCE_TYPE__CurrentAlarm: break; case ALARM_SOURCE_TYPE__MotorAlarm: - MotorStop(AlarmItem[AlarmId].ModuleDeviceId,Hard_Hiz); + if ((Severity == DEBUG_LOG_CATEGORY__Error)||(Severity == DEBUG_LOG_CATEGORY__Critical)) + { + ReportWithPackageFilter(AlarmFilter,"Motor alarm, motor stopped", __FILE__,AlarmItem[AlarmId].ModuleDeviceId,AlarmId, RpMessage, AlarmItem[AlarmId].AlarmSource, 0); + MotorStop(AlarmItem[AlarmId].ModuleDeviceId,Hard_Hiz); + } + if ((AlarmItem[AlarmId].ModuleDeviceId >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)&&(AlarmItem[AlarmId].ModuleDeviceId <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) //dispenser motor alarm + { + if (Severity == DEBUG_LOG_CATEGORY__Info) + { + IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); + } + else + { + IDS_Dispenser_Alarm_On (AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); + } + } break; default: break; @@ -795,11 +870,13 @@ uint32_t AlarmHandlingLoop(uint32_t tick) int32_t value; //int32_t ivalue; bool Status = false; + int AlarmCounter=0; for (Alarm_i = 0;Alarm_i < MAX_SYSTEM_ALARMS;Alarm_i++) { Status = false; if (AlarmItem[Alarm_i].AlarmSource > ALARM_SOURCE_TYPE__FluidLevelAlarm) continue; + AlarmCounter++; if (tick%AlarmItem[Alarm_i].Frequency == 0) { switch (AlarmItem[Alarm_i].AlarmSource) @@ -930,6 +1007,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) Status = false; break; case ALARM_SOURCE_TYPE__FluidLevelAlarm: + Status = false; value = Get_MidTank_Int100_Sensor(AlarmItem[Alarm_i].DeviceId); if (AlarmItem[Alarm_i].AlarmDirection == OVER_VALUE) { @@ -1034,6 +1112,8 @@ uint32_t AlarmHandlingLoop(uint32_t tick) //valve OCD //Motor Status //machine cover open + if ((tick%(eOneSecond*5) == 0)&&(AlarmCounter == 0)) + ReportWithPackageFilter(AlarmFilter,"Error in alarms data!!!!!!!!! ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpFatalError, 0, Alarm_i); if ((tick%eOneSecond == 0)&&(EventsNotificationRequestAccepted==true)) SendEventNotifications(); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 063d7c823..fa94614fd 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -39,6 +39,7 @@ #include "modules/thread/thread_ex.h" #include "modules/ids/ids_ex.h" +#include "modules/Diagnostics/Diagnostics.h" #include "drivers/Flash_Memory/Flash_Memory.h" #include "drivers/Flash_Memory/fatfs/ff.h" @@ -87,14 +88,13 @@ uint32_t Dancer_Data[NUM_OF_DANCERS] = {0}; float Speed_Data = 0; uint32_t DrawerFansStatus = 0; uint32_t SystemFansStatus = 0; -uint8_t Gas_PPM = 0; - bool watchdogCriticalAlarm = false; uint32_t msec_millisecondCounter = 0; extern bool Machine_Idle_Mode; +uint8_t Gas_PPM_Info; MillisecMotorDataStruc ScrewSetMaxSpeedPending = {0}; MillisecMotorDataStruc ScrewMovePending = {0}; MillisecMotorDataStruc MotorData[NUM_OF_MOTORS] = {0}; @@ -110,6 +110,7 @@ static GateMutex_Handle gateMillisecDB; uint32_t Millisec_timerBase = TIMER1_BASE; //Timer handle /******************** Functions ********************************************/ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); +void CalculateVOCAlarms(void); //********************************************************************** /******************** CODE ********************************************/ //********************************************************************** @@ -594,7 +595,6 @@ uint32_t MillisecLowLoop(uint32_t tick) Read_Heaters_Current(Heater_i); } } - Gas_PPM = Calculate_Gas_Power_Consumption(); for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) { TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i); @@ -613,6 +613,9 @@ uint32_t MillisecLowLoop(uint32_t tick) if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); }*/ + midtankDisplay = 1-midtankDisplay; + Gas_PPM_Info = Calculate_Gas_Power_Consumption(); + } if (OneHourTick) { @@ -718,7 +721,7 @@ uint32_t getDrawerFansStatus(void) } uint8_t getGasReading(void) { - return Gas_PPM; + return Gas_PPM_Info; } uint32_t getSystemFansStatus(void) diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 2ca57e08e..8956f417d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -60,6 +60,7 @@ uint32_t DiagnosticsStop(void); uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue); +uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t DispensersCollection(uint32_t IfIndex, uint32_t ReadValue); //#define REDUCED_DIAGNOSTICS @@ -81,7 +82,7 @@ int DiagnosticLimit =eOneSecond; //frequency of data collection int DiagnosticLimit =eHundredMillisecond; //frequency of data collection #endif int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection - +//#define TEN_MSEC_COLLECTION //DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT+1]; double dancer1angle[DIAGNOSTICS_LIMIT+1]; double dancer2angle[DIAGNOSTICS_LIMIT+1]; @@ -129,6 +130,7 @@ Task_Handle Diagnostics_Task_Handle; Mailbox_Handle DiagnosticsMsgQ = NULL; bool blowervolatgedisplay = false; +bool midtankDisplay = false; double diagvoltage = 0; /******************** Functions ********************************************/ //uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); @@ -137,6 +139,7 @@ typedef enum { DiagnosticsTrigger, DiagnosticsTenMiliTrigger, + DiagnosticsOneSecTrigger, }DiagnosticsMessages; typedef struct DiagnosticsMessage{ @@ -337,7 +340,7 @@ void DiagnosticTenMsecCollection(void) { if (DiagnosticsActive == false) return; -#ifdef TEN_MSEC_COLLECTION +//#ifdef TEN_MSEC_COLLECTION /*if (JobIsActive()== false) return;*/ DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0,0)); @@ -349,7 +352,33 @@ void DiagnosticTenMsecCollection(void) DiagnosticLoadDancerError(FEEDER_DANCER,ThreadGetMotorCalculatedError(FEEDER_DANCER)); //DiagnosticLoadSpeedSensor(getSensorSpeedData()); -#endif +//#endif +} +void DiagnosticOneSecCollection(void) +{ + int i; + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP3)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP4)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP5)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, MillisecGetTemperatures(HEAD6_PT100)); + + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP3)); + for (i=0;ipowerofftemperaturelimit); InitSequenceSetStartHeating (EmbeddedParameters->startheatingoninitsequence); - bool a1,a2,a3,a4; - a1 = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; - a2 = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; - a3 = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; - a4 = (EmbeddedParameters->generalparameters[3] < 0.5)?false:true; - AlarmHandlingSetFlags(a1,a2,a3,a4); + bool checkHardLimitAlarms, checkCurrentAlarms, checkTamperAlarms, checkMotorAlarms; + checkHardLimitAlarms = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; + checkCurrentAlarms = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; + checkTamperAlarms = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; + checkMotorAlarms = (EmbeddedParameters->generalparameters[3] < 0.5)?false:true; + AlarmHandlingSetFlags(checkHardLimitAlarms,checkCurrentAlarms,checkTamperAlarms,checkMotorAlarms); SetWinderBackToBaseTime((uint32_t) EmbeddedParameters->generalparameters[4]); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index 33033ad69..c31a1a72b 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -24,6 +24,8 @@ extern bool DispensersAlarmState[ MAX_SYSTEM_DISPENSERS]; extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS]; +extern bool HomingActive[MAX_SYSTEM_DISPENSERS]; + uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue); /*typedef struct @@ -40,6 +42,7 @@ void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps); void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps); //uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback); +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback); uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,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 09a3fbda4..2a1a8fa31 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c @@ -53,7 +53,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback) { uint32_t status = OK; status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANING_DISPENSER_ID,callback); - Report("IDS_Dispenser_Close_Valve_And_Stop_Motor", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); + Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); return status; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index de7d12024..16545b27d 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -48,7 +48,7 @@ void IDS_Dispenser_SetPrepareValues( uint32_t DispenserBuildPressureSpeed, DispenserPreparePressure = DispenserBuildPressureLimit; DispenserPrepareTimeout = DispenserBuildPressureTimeout; DispenserPrepareTimeLag = DispenserBuildPressureLag; - Report("IDS_Dispenser_SetPrepareValues ",__FILE__,__LINE__,DispenserPrepareSpeed,RpWarning,(int)DispenserPreparePressure,0); + Report("IDS_Dispenser_SetPrepareValues ",__FILE__,__LINE__,DispenserPrepareSpeed,RpWarning,(int)(DispenserPreparePressure*100),0); Report("IDS_Dispenser_SetPrepareValues ",__FILE__,__LINE__,DispenserPrepareTimeout,RpWarning,(int)DispenserPrepareTimeLag,0); } void IDS_Dispenser_SetTimeOutValues(uint32_t CloseTimeout, uint32_t OpenTimeout) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index e578d593a..b9ccdce27 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -63,7 +63,6 @@ uint32_t IDS_DispenserControlInit(); uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_StopHomeDispenser (uint32_t deviceID); -uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_Dispenser_Alarm_On (uint8_t deviceID); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 9a0f23cbd..bfece1890 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -59,9 +59,14 @@ FPGA_GPI_ENUM Dispenser_Id_to_Alarm_LS_Id[MAX_SYSTEM_DISPENSERS*2] = { GPI_LS_DISPENSER_25_8, //MOTO_DISPENSER_8 = 13, }; callback_fptr HomingRequestCallback[MAX_SYSTEM_DISPENSERS]={0,0,0,0,0,0,0,0}; +callback_fptr HomingBacklashCallback[MAX_SYSTEM_DISPENSERS]={0,0,0,0,0,0,0,0}; +uint32_t HomingBacklashTimeout[MAX_SYSTEM_DISPENSERS]; +uint32_t HomingBacklashTime[MAX_SYSTEM_DISPENSERS]; + bool HomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; bool PrimingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; uint32_t DispenserHomingControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +uint32_t DispenserBacklashControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; uint32_t DispenserHomingTime[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0}; #define INITIAL_DISPENSER_PRESSURE 2.10 #define INITIAL_DISPENSER_TIMEOUT_LIMIT 60000 @@ -73,6 +78,9 @@ uint32_t InitialDispenserTimeout = INITIAL_DISPENSER_TIMEOUT_LIMIT; uint32_t InitialDispenserTimeLag = INITIAL_DISPENSER_TIMEOUT; uint32_t InitialDispenserSpeed = INITIAL_DISPENSER_SPEED; +uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); + + void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32_t initialdispensertimeout, uint32_t initialdispensertimelag, uint32_t initialdispenserspeed) { InitialDispenserPressure = initialdispenserpressure; @@ -82,6 +90,49 @@ void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32 Report("IDS_Dispenser_SetBackLashValues ",__FILE__,InitialDispenserPressure,InitialDispenserTimeout,RpWarning,(int)InitialDispenserTimeLag,0); } +uint32_t IDS_HomeDispenserWaitForHomingEndCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + HomingBacklashTime[DispenserId]+=eOneSecond; + if (( HomingActive[DispenserId]== false) ||((HomingBacklashTime[DispenserId]>=HomingBacklashTimeout[DispenserId])&&(HomingBacklashTimeout[DispenserId]>0))) + { + //stop this control loop + SafeRemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + + if (HomingBacklashCallback[DispenserId]) + { + if ( HomingActive[DispenserId]== false) + HomingBacklashCallback[DispenserId](DispenserId,OK); + else + HomingBacklashCallback[DispenserId](DispenserId,ERROR); + } + HomingBacklashCallback[DispenserId] = 0; + } + return OK; +} +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback) +{ + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + + if (HomingBacklashCallback[DispenserId]!=NULL) + return ERROR; + HomingBacklashCallback[DispenserId] = callback; + HomingBacklashTimeout[DispenserId] = timeout; + HomingBacklashTime[DispenserId] = 0; + + if (DispenserBacklashControlId[DispenserId] != 0xFF) + { + RemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + //return ERROR; + } + DispenserBacklashControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserWaitForHomingEnd,eOneSecond , TemplateDataReadCBFunction,DispenserId,0, 0 ); + if ( DispenserBacklashControlId[DispenserId] == 0xFF) + return ERROR; + + return OK; +} + uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) { uint8_t DispenserId = motorId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index e3ecd5d55..7a719d39a 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -104,6 +104,9 @@ int lInterSegmentLength = 0; LeftRockerSpeed = ids_leftcleaningmotorspeed; if ( ids_rightcleaningmotorspeed) RighttRockerSpeed = ids_rightcleaningmotorspeed; + Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,CleaningDispenserSpeed,RpWarning,(int)LeftRockerSpeed,0); + Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,InterSegmentStartSprayCleaner,RpWarning,(int)InterSegmentCenterRockers,0); + } uint32_t DispenserPreSegmentControlId = 0xFF; @@ -602,7 +605,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. { NumofReadyDispensers++; tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*0.95>100)?tempSpeed*0.95:100; + updatedSpeed = (tempSpeed*0.98>100)?tempSpeed*0.98:100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -610,7 +613,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. else { tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*1.1<1000)?tempSpeed*1.1:1000; + updatedSpeed = (tempSpeed*1.04<1000)?tempSpeed*1.04:1000; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -683,6 +686,19 @@ c. Go to step 2.a x Segment.BrushStopsCount. } return OK; } + uint32_t IDSPrepareStartDispenserAfterHoming(uint32_t DispenserId, uint32_t Result) + { + double dispenserspeed = 0; + Report("IDSPrepare Start Dispenser After Homing",__FILE__,__LINE__,DispenserId,RpWarning,(int)Result,0); + dispenserspeed = DispenserPrepareSpeed; + if (DispenserUsedInJob[DispenserId] == true) //we actually should check for all dispensers + { + Report("Prepare Speed",__FILE__,__LINE__,DispenserId,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,dispenserspeed, NULL); + } + return OK; + + } void IDSPrepareStart(void) { int i; @@ -697,9 +713,9 @@ c. Go to step 2.a x Segment.BrushStopsCount. NumOfActiveDispensers = 0; for (i = 0; i < MAX_DYE_DISPENSERS; i++) { - //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { + IDS_StopHomeDispenser(i); NumOfActiveDispensers++; } } @@ -711,8 +727,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. dispenserspeed = DispenserPrepareSpeed; if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); - IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + if (HomingActive[i] == false) + { + Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + } + else + { + Report("IDSPrepare Stop Dispenser Homing",__FILE__,__LINE__,i,RpWarning,(int)HomingActive[i],0); + IDS_HomeDispenserWaitForHomingEnd(i, DispenserPrepareTimeout/2 , IDSPrepareStartDispenserAfterHoming); + } } } } @@ -742,7 +766,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. if (DispenserBuildTimeCounter<(1*eOneSecond)) { - REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); + //REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); return OK; } if (PreSegmentWCFStarted == true) @@ -762,7 +786,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. { NumofReadyDispensers++; tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*0.95>100)?tempSpeed*0.95:100; + updatedSpeed = (tempSpeed*0.98>100)?tempSpeed*0.98:100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS PreSegment reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -770,7 +794,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. else { tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*1.1<1000)?tempSpeed*1.1:1000; + updatedSpeed = (tempSpeed*1.04<1100)?tempSpeed*1.04:1100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS PreSegment accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -779,14 +803,14 @@ c. Go to step 2.a x Segment.BrushStopsCount. } if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) - Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); if (NumofReadyDispensers>=NumOfActiveDispensers) pressureReady = true; if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) { - Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; @@ -797,7 +821,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. //******************************************************************************************************************** void IDSPresegmentPrepareStart(void) { - int i; + int Dispenser_i,n_dispensers,DispenserId; TimerMotors_t HW_Motor_Id; double segmentfirst_speed; @@ -834,16 +858,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. DispenserUsedInSegment[Dispenser_i] = true; MotorSetSpeed(HW_Motor_Id, DispenserPrepareSpeed); CurrentDispenserSpeed[Dispenser_i] = DispenserPrepareSpeed; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d speed %d",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d speed %d",DispenserId,(int) DispenserPrepareSpeed); //REPORT_MSG(segmentfirst_speed,IdsMessage); - Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, DispenserPrepareSpeed, 0); //SendJobProgress(0.0, 0, false, IdsMessage); } else { MotorStop(HW_Motor_Id, Hard_Hiz); CurrentDispenserSpeed[Dispenser_i] = 0; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); } @@ -957,7 +981,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); { IDS_PreSegmentPrepare_Callback(0,0); } - if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == InterSegmentStepsCount)) + if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == (lInterSegmentLength-InterSegmentStepsCount))) { Report("start dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); PreSegmentWCFStarted = true; // stop any presegment prepare stages, if still exist @@ -1445,7 +1469,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) InterSegmentStartRocking = 1000; InterSegmentCenterRockers = 3000; }*/ - InterSegmentStartWFCFDispensers = 0; + //InterSegmentStartWFCFDispensers = 0; return OK; @@ -1456,7 +1480,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) //TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[deviceID]; //REPORT_MSG(deviceID,"Dispenser End called"); //MotorStop(HW_Motor_Id,Hard_Hiz); - //IDS_HomeDispenser (deviceID, 800 , NULL); + //IDS_HomeDispenser (deviceID, 1000 , NULL); return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index ca5f77aba..7d4b66dfb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -115,6 +115,7 @@ } Report("Thread_Load_Init",__FILE__,__LINE__,LoadArmInfo.LoadArmBackLash,RpMessage,LoadArmInfo.LoadArmRounds,0); + StopInitSequence(); memcpy (&ProcessParametersRecover,&ProcessParametersKeep,sizeof(ProcessParameters)); //NumberOfDrierLoaderCycles = loadLoadArmParameters(); LoadStages++; @@ -462,7 +463,8 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; - //LoadArmInfo.LoadArmRounds = 5; + if (LoadArmInfo.LoadArmRounds <= 2) + LoadArmInfo.LoadArmRounds = 20; float numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 SetOriginMotorSpeed(19); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 3b972cc23..91979c8b1 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -51,6 +51,7 @@ void SetMachineState(MACHINE_STATE_STAGES_ENUM NewState) { MachineState = NewState; } + uint32_t HWControlId,InitSchedulerControlId; uint32_t MidTankControlId; @@ -66,6 +67,11 @@ uint32_t InitSequenceMachineReadyToDye(void); uint32_t InitSequenceStateMachine( INIT_SEQUENCE_STAGES_ENUM ReadValue); +void StopInitSequence(void) +{ + InitStages = INIT_SEQUENCE_END; + InitSequenceStateMachine(InitStages); +} uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { if (SafeRemoveControlCallback(HWControlId, InitSequenceCallBackFunction )==OK) @@ -297,6 +303,7 @@ uint32_t InitSequenceMachineReadyToDye(void) } uint32_t InitSequenceInitEnd(void) { + RemoveControlCallback( InitSchedulerControlId,InitScheduler); return OK; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h index e4df62eb8..105537721 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h @@ -29,6 +29,7 @@ }MACHINE_STATE_STAGES_ENUM; uint32_t Start_InitSequence(void); +void StopInitSequence(void); MACHINE_STATE_STAGES_ENUM GetMachineState(void); void SetMachineState(MACHINE_STATE_STAGES_ENUM); void InitSequenceSetStartHeating(bool StartHeating); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 599056a5e..8606d68d3 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -732,6 +732,7 @@ void PrintSTMMsgHandler(void * msg) if (dryerbufferlength <= 0.1) EndState(CurrentJob, "Job Ended"); else + Report("DistanceToSpoolState segmentId",__FILE__,__LINE__, SegmentId,RpMessage,n_segments,0); DistanceToSpoolState(CurrentJob); } else -- cgit v1.3.1 From abc2f5fc8f757eddeccdd10646039c96b58e522d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 13 Aug 2019 19:27:10 +0300 Subject: Version 1.4.3.7 Power off sequence with flushing and cleaning job. VOC alarms, safety, auto filling dispensers --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/ADC_Sampling/ADC.c | 87 ----------- .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 166 +++++++++++++++++++++ .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 6 +- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 4 + .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 13 +- Software/Embedded_SW/Embedded/Main.c | 1 - .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 29 +++- .../Embedded/Modules/Control/MillisecTask.c | 9 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 8 + .../Embedded_SW/Embedded/Modules/Control/control.h | 1 + .../Embedded/Modules/Diagnostics/Diagnostics.c | 64 +++++++- .../Embedded/Modules/General/GeneralHardware.c | 2 + Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 2 + .../Embedded/Modules/IDS/IDS_dispenser.c | 15 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 2 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 51 +++++++ .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 47 ++++-- .../Embedded/Modules/Thread/Thread_Winder.c | 26 +++- .../StateMachines/Initialization/InitSequence.c | 10 +- .../Initialization/PowerOffSequence.c | 140 ++++++++++++++--- .../Initialization/PowerOffSequence.h | 4 +- .../Embedded/StateMachines/Printing/JobSTM.c | 72 +++++++++ .../Embedded/StateMachines/Printing/PrintingSTM.h | 1 + 24 files changed, 598 insertions(+), 164 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.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 24d49cb81..163ae4756 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,3,41}; +TangoVersion_t _gTangoVersion = {1,4,3,7}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c index cd47751d1..5c52963eb 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c @@ -460,93 +460,6 @@ double Calculate_Pitot_Pressure() // WHS - AN_AIRPRESS_1 return Pressure; } -uint8_t Calculate_Gas_Power_Consumption() // WHS -{ - // TGS 2602 (FIGARO) - - -/* Concentrtion Sensor - [ppm] [v] - 0 0.353 - 18 0.438 - 33 2.919 - 100 4.196 - 316 4.571 -*/ - - double VOC_Vsensor[] = - { - 0.353, //0 PPM - 0.357, //1 PPM - 0.362, //2 PPM - 0.367, //3 PPM - 0.371, //4 PPM - 0.376, //5 PPM - 0.381, //6 PPM - 0.386, //7 PPM - 0.390, //8 PPM - 0.395, //9 PPM - 0.400, //10 PPM - 0.404, //11 PPM - 0.409, //12 PPM - 0.414, //13 PPM - 0.419, //14 PPM - 0.423, //15 PPM - 0.428, //16 PPM - 0.433, //17 PPM - 0.438, //18 PPM - 0.603, //19 PPM - 0.768, //20 PPM - 0.934, //21 PPM - 1.099, //22 PPM - 1.265, //23 PPM - 1.430, //24 PPM - 1.595, //25 PPM - 1.761, //26 PPM - 1.926, //27 PPM - 2.092, //28 PPM - 2.257, //29 PPM - 2.422, //30 PPM - 2.588, //31 PPM - 2.753, //32 PPM - 2.919 //33 PPM - }; - - uint32_t VsampleInBits; - - double temp, VADC = 0.0 ,VSensor; - - uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; - - VsampleInBits = ADC_GetReading(ADC_VOCSENS); - - //---- VBits -> VADC ---- - - //ADC 12 bit -> 4096 -> 2.5V - - temp = VsampleInBits*2.5; - VADC = temp / 4096; - - //---- VADC -> VSensor --- - - //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) - // VSensor = 0 V -> VADC = 2.3824 V - // VSensor = 10 V -> VADC = 0.2272 V - - VSensor = (1.96- VADC) * 4.64 + 1.96; - - for(i=0;i + +#include +#include +#include + +#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "ADC.h" +#include +#include +#include "modules/AlarmHandling/AlarmHandling.h" +#include "PMR/Diagnostics/EventType.pb-c.h" + +#define MAX_VOC_SAMPLES 120 + +uint16_t VOC_Index = 0; +uint8_t Gas_PPM[MAX_VOC_SAMPLES] = {0}; +uint32_t VOC_Slope=0,VOC_AverageLimit=0, VOC_Slope_Time=0; + +bool VOC_TimeAlarm = false,VOC_SlopeAlarm = false; + +void CalculateVOCAlarms(void) +{ + int i,slope1=0,slope2=0,slopeindex=0; + double a; + bool alarmstate = false; + for (i = 0; i< MAX_VOC_SAMPLES; i++) + { + a += Gas_PPM[i]; + if(i!=0) + { + slope2 = slope1; + slope1 = Gas_PPM[i]-Gas_PPM[i-1]; + if (slope1 > VOC_Slope) + { + slopeindex++; + if (slopeindex>=VOC_Slope_Time) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,true); + Report("CalculateVOCAlarms slope on",__FILE__,__LINE__,(int)slope1,RpWarning,slopeindex,0); + alarmstate = true; + VOC_SlopeAlarm = true; + } + } + + } + } + + if ((alarmstate==false)&&(VOC_SlopeAlarm == true)) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,false); + } + + if (a/MAX_VOC_SAMPLES > VOC_AverageLimit) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,true); + Report("CalculateVOCAlarms time on",__FILE__,__LINE__,(int)a,RpWarning,VOC_AverageLimit,0); + } + else if (VOC_TimeAlarm == true) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,false); + } + +} + +uint8_t Calculate_Gas_Power_Consumption() // WHS +{ + // TGS 2602 (FIGARO) + + +/* Concentrtion Sensor + [ppm] [v] + 0 0.353 + 18 0.438 + 33 2.919 + 100 4.196 + 316 4.571 +*/ + + double VOC_Vsensor[] = + { + 0.353, //0 PPM + 0.357, //1 PPM + 0.362, //2 PPM + 0.367, //3 PPM + 0.371, //4 PPM + 0.376, //5 PPM + 0.381, //6 PPM + 0.386, //7 PPM + 0.390, //8 PPM + 0.395, //9 PPM + 0.400, //10 PPM + 0.404, //11 PPM + 0.409, //12 PPM + 0.414, //13 PPM + 0.419, //14 PPM + 0.423, //15 PPM + 0.428, //16 PPM + 0.433, //17 PPM + 0.438, //18 PPM + 0.603, //19 PPM + 0.768, //20 PPM + 0.934, //21 PPM + 1.099, //22 PPM + 1.265, //23 PPM + 1.430, //24 PPM + 1.595, //25 PPM + 1.761, //26 PPM + 1.926, //27 PPM + 2.092, //28 PPM + 2.257, //29 PPM + 2.422, //30 PPM + 2.588, //31 PPM + 2.753, //32 PPM + 2.919 //33 PPM + }; + + uint32_t VsampleInBits; + + double temp, VADC = 0.0 ,VSensor; + + uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; + + VsampleInBits = ADC_GetReading(ADC_VOCSENS); + + //---- VBits -> VADC ---- + + //ADC 12 bit -> 4096 -> 2.5V + + temp = VsampleInBits*2.5; + VADC = temp / 4096; + + //---- VADC -> VSensor --- + + //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) + // VSensor = 0 V -> VADC = 2.3824 V + // VSensor = 10 V -> VADC = 0.2272 V + + VSensor = (1.96- VADC) * 4.64 + 1.96; + + for(i=0;i= MAX_VOC_SAMPLES) + VOC_Index = 0; + if (VOC_Index%60 == 0) + { + CalculateVOCAlarms(); + } + return i;//PPM + } + } + +return 0xFF;//out of scale + +} 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 4d243408c..3c9ae591a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -1001,7 +1001,7 @@ void FPGA_SetMotMicroStep(TimerMotors_t _motorId)// CM_VM = MotorDriverResponse[_motorId].DriverMode; temp |= (!x_SYNC_EN | CM_VM | good | x_SYNC_SEL_1)<<16; - Report("FPGA_SetMotMicroStep",__FILE__,__LINE__,_motorId,RpMessage,i,0); + ReportWithPackageFilter(GeneralFilter,"FPGA_SetMotMicroStep",__FILE__,__LINE__,_motorId,RpMessage,i,0); MillisecWriteToMotor(_motorId, temp, 4, NULL); } @@ -1139,7 +1139,7 @@ void FPGA_SetMotKvalHold(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - Report("FPGA SetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,MotorDriverResponse[_motorId].DriverMode,0); + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,MotorDriverResponse[_motorId].DriverMode,0); MillisecWriteToMotor(_motorId,temp,4,NULL); } @@ -1166,7 +1166,7 @@ void FPGA_SetMotKvalRun(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - Report("FPGA SetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,temp,0); + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,temp,0); MillisecWriteToMotor(_motorId, temp, 4, NULL); //FPGA_SPI_Transnit(_motorId); diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index ec9ea17db..275a4db22 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -363,7 +363,11 @@ uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callb { if (Valve3WayControlId[_ValveId] != 0xFF) + { Report("Control3WayValvesWithCallback called busy ",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); + RemoveControlCallback(Valve3WayControlId[_ValveId], Valve3WayCallBackFunction ); + } + Valve3WayModuleCallback[_ValveId] = callback; Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eOneSecond/*eHundredMillisecond*/, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index 25aec02a5..f227dcd32 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -16,16 +16,21 @@ uint32_t MCU_E2PromProgram(int Address,uint32_t Data) { uint32_t Buffer = Data; if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromProgram Error",__FILE__,__LINE__,Address,RpWarning,Data,0); return ERROR; + } Report("MCU_E2PromProgram",__FILE__,__LINE__,Address,RpWarning,Data,0); return (EEPROMProgram((uint32_t *)&Buffer, Address*4, 4)); } uint32_t MCU_E2PromRead(int Address,uint32_t *Data) { - Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,*Data,0); if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromRead Error",__FILE__,__LINE__,Address,RpWarning,*Data,0); return ERROR; + } EEPROMRead((uint32_t *)Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,*Data,0); @@ -37,7 +42,10 @@ float MCU_E2PromReadMidtank_A(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_A+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); @@ -48,7 +56,10 @@ float MCU_E2PromReadMidtank_B(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_B+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index e04ce0d36..301d0d6c3 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -277,7 +277,6 @@ int main(void) #ifndef EVALUATION_BOARD WHS_init(); - Buttons_Init(); //IDS_ModuleInit(); Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); #endif diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index d1eabb6c7..6f80fdffb 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -178,12 +178,22 @@ AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_7_OVERPRESSURE}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_8_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,60/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_1_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_2_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_3_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_4_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_5_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_6_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_7_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_8_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_6_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_7_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERCURRENT }, @@ -340,6 +350,9 @@ AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK }, /* 6004 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_TIME}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_BREAK}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER}, @@ -531,11 +544,11 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { if (Severity == DEBUG_LOG_CATEGORY__Info) { - IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId); + IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); } else { - IDS_Dispenser_Alarm_On (AlarmItem[AlarmId].ModuleDeviceId); + IDS_Dispenser_Alarm_On (AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); } } break; diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index f5ac6cf92..fa94614fd 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -88,14 +88,13 @@ uint32_t Dancer_Data[NUM_OF_DANCERS] = {0}; float Speed_Data = 0; uint32_t DrawerFansStatus = 0; uint32_t SystemFansStatus = 0; -uint8_t Gas_PPM = 0; - bool watchdogCriticalAlarm = false; uint32_t msec_millisecondCounter = 0; extern bool Machine_Idle_Mode; +uint8_t Gas_PPM_Info; MillisecMotorDataStruc ScrewSetMaxSpeedPending = {0}; MillisecMotorDataStruc ScrewMovePending = {0}; MillisecMotorDataStruc MotorData[NUM_OF_MOTORS] = {0}; @@ -111,6 +110,7 @@ static GateMutex_Handle gateMillisecDB; uint32_t Millisec_timerBase = TIMER1_BASE; //Timer handle /******************** Functions ********************************************/ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); +void CalculateVOCAlarms(void); //********************************************************************** /******************** CODE ********************************************/ //********************************************************************** @@ -595,7 +595,6 @@ uint32_t MillisecLowLoop(uint32_t tick) Read_Heaters_Current(Heater_i); } } - Gas_PPM = Calculate_Gas_Power_Consumption(); for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) { TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i); @@ -615,6 +614,8 @@ uint32_t MillisecLowLoop(uint32_t tick) MotorGetStatusFromFPGA(Motor_i); }*/ midtankDisplay = 1-midtankDisplay; + Gas_PPM_Info = Calculate_Gas_Power_Consumption(); + } if (OneHourTick) { @@ -720,7 +721,7 @@ uint32_t getDrawerFansStatus(void) } uint8_t getGasReading(void) { - return Gas_PPM; + return Gas_PPM_Info; } uint32_t getSystemFansStatus(void) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index f1e19d851..a88f67d5e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -479,6 +479,14 @@ uint32_t GetControlLowDevice_i(void) { return ControlLowDevice_i; } +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId) +{ + if (ControlArray[ControlId].ControlActive) + return ControlArray[ControlId].ControlCallbackPtr; + else + return NULL; + +} uint32_t ControlLoop(uint32_t tick) { if (MaxHighDevices == 0xFF) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index 380040e34..c54909f73 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -47,6 +47,7 @@ int SafeRemoveHighControlCallback(uint32_t deviceId , ControlCBFunction uint32_t TemplateDataReadCBFunction (uint32_t deviceId, uint32_t Parameter1); uint32_t GetControlDevice_i(void); uint32_t GetControlLowDevice_i(void); +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId); extern Task_Handle Control_Task_Handle; extern uint32_t millisecondCounter; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 116988720..8956f417d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -60,6 +60,7 @@ uint32_t DiagnosticsStop(void); uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue); +uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t DispensersCollection(uint32_t IfIndex, uint32_t ReadValue); //#define REDUCED_DIAGNOSTICS @@ -81,7 +82,7 @@ int DiagnosticLimit =eOneSecond; //frequency of data collection int DiagnosticLimit =eHundredMillisecond; //frequency of data collection #endif int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection -#define TEN_MSEC_COLLECTION +//#define TEN_MSEC_COLLECTION //DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT+1]; double dancer1angle[DIAGNOSTICS_LIMIT+1]; double dancer2angle[DIAGNOSTICS_LIMIT+1]; @@ -138,6 +139,7 @@ typedef enum { DiagnosticsTrigger, DiagnosticsTenMiliTrigger, + DiagnosticsOneSecTrigger, }DiagnosticsMessages; typedef struct DiagnosticsMessage{ @@ -338,7 +340,7 @@ void DiagnosticTenMsecCollection(void) { if (DiagnosticsActive == false) return; -#ifdef TEN_MSEC_COLLECTION +//#ifdef TEN_MSEC_COLLECTION /*if (JobIsActive()== false) return;*/ DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0,0)); @@ -350,7 +352,33 @@ void DiagnosticTenMsecCollection(void) DiagnosticLoadDancerError(FEEDER_DANCER,ThreadGetMotorCalculatedError(FEEDER_DANCER)); //DiagnosticLoadSpeedSensor(getSensorSpeedData()); -#endif +//#endif +} +void DiagnosticOneSecCollection(void) +{ + int i; + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP3)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP4)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP5)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, MillisecGetTemperatures(HEAD6_PT100)); + + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP3)); + for (i=0;i=HomingBacklashTimeout[DispenserId])&&(HomingBacklashTimeout[DispenserId]>0))) + { + //stop this control loop + SafeRemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + + if (HomingBacklashCallback[DispenserId]) + { + if ( HomingActive[DispenserId]== false) + HomingBacklashCallback[DispenserId](DispenserId,OK); + else + HomingBacklashCallback[DispenserId](DispenserId,ERROR); + } + HomingBacklashCallback[DispenserId] = 0; + } + return OK; +} +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback) +{ + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + + if (HomingBacklashCallback[DispenserId]!=NULL) + return ERROR; + HomingBacklashCallback[DispenserId] = callback; + HomingBacklashTimeout[DispenserId] = timeout; + HomingBacklashTime[DispenserId] = 0; + + if (DispenserBacklashControlId[DispenserId] != 0xFF) + { + RemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + //return ERROR; + } + DispenserBacklashControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserWaitForHomingEnd,eOneSecond , TemplateDataReadCBFunction,DispenserId,0, 0 ); + if ( DispenserBacklashControlId[DispenserId] == 0xFF) + return ERROR; + + return OK; +} + uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) { uint8_t DispenserId = motorId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 039b152e5..7a719d39a 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -686,6 +686,19 @@ c. Go to step 2.a x Segment.BrushStopsCount. } return OK; } + uint32_t IDSPrepareStartDispenserAfterHoming(uint32_t DispenserId, uint32_t Result) + { + double dispenserspeed = 0; + Report("IDSPrepare Start Dispenser After Homing",__FILE__,__LINE__,DispenserId,RpWarning,(int)Result,0); + dispenserspeed = DispenserPrepareSpeed; + if (DispenserUsedInJob[DispenserId] == true) //we actually should check for all dispensers + { + Report("Prepare Speed",__FILE__,__LINE__,DispenserId,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,dispenserspeed, NULL); + } + return OK; + + } void IDSPrepareStart(void) { int i; @@ -700,9 +713,9 @@ c. Go to step 2.a x Segment.BrushStopsCount. NumOfActiveDispensers = 0; for (i = 0; i < MAX_DYE_DISPENSERS; i++) { - //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { + IDS_StopHomeDispenser(i); NumOfActiveDispensers++; } } @@ -714,8 +727,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. dispenserspeed = DispenserPrepareSpeed; if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); - IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + if (HomingActive[i] == false) + { + Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + } + else + { + Report("IDSPrepare Stop Dispenser Homing",__FILE__,__LINE__,i,RpWarning,(int)HomingActive[i],0); + IDS_HomeDispenserWaitForHomingEnd(i, DispenserPrepareTimeout/2 , IDSPrepareStartDispenserAfterHoming); + } } } } @@ -745,7 +766,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. if (DispenserBuildTimeCounter<(1*eOneSecond)) { - REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); + //REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); return OK; } if (PreSegmentWCFStarted == true) @@ -782,14 +803,14 @@ c. Go to step 2.a x Segment.BrushStopsCount. } if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) - Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); if (NumofReadyDispensers>=NumOfActiveDispensers) pressureReady = true; if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) { - Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; @@ -800,7 +821,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. //******************************************************************************************************************** void IDSPresegmentPrepareStart(void) { - int i; + int Dispenser_i,n_dispensers,DispenserId; TimerMotors_t HW_Motor_Id; double segmentfirst_speed; @@ -837,16 +858,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. DispenserUsedInSegment[Dispenser_i] = true; MotorSetSpeed(HW_Motor_Id, DispenserPrepareSpeed); CurrentDispenserSpeed[Dispenser_i] = DispenserPrepareSpeed; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d speed %d",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d speed %d",DispenserId,(int) DispenserPrepareSpeed); //REPORT_MSG(segmentfirst_speed,IdsMessage); - Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, DispenserPrepareSpeed, 0); //SendJobProgress(0.0, 0, false, IdsMessage); } else { MotorStop(HW_Motor_Id, Hard_Hiz); CurrentDispenserSpeed[Dispenser_i] = 0; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); } @@ -960,7 +981,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); { IDS_PreSegmentPrepare_Callback(0,0); } - if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == InterSegmentStepsCount)) + if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == (lInterSegmentLength-InterSegmentStepsCount))) { Report("start dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); PreSegmentWCFStarted = true; // stop any presegment prepare stages, if still exist @@ -1448,7 +1469,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) InterSegmentStartRocking = 1000; InterSegmentCenterRockers = 3000; }*/ - InterSegmentStartWFCFDispensers = 0; + //InterSegmentStartWFCFDispensers = 0; return OK; @@ -1459,7 +1480,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) //TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[deviceID]; //REPORT_MSG(deviceID,"Dispenser End called"); //MotorStop(HW_Motor_Id,Hard_Hiz); - //IDS_HomeDispenser (deviceID, 800 , NULL); + //IDS_HomeDispenser (deviceID, 1000 , NULL); 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 7e1312464..5d9b26f92 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -59,10 +59,11 @@ static uint32_t WindingConeLocation; static uint32_t WinderBackToBaseTime = 800; InternalWinderConfigStruc InternalWinderCfg = {0}; - +#define READ_SCREW_ENCODER +#ifdef READ_SCREW_ENCODER uint32_t ScrewLocationLimitSwitch = 0,ScrewLocationStart = 0; uint32_t ScrewLocationRun[3]; - +#endif bool SampleWinding = false; uint32_t Winder_Init(void) { @@ -132,8 +133,10 @@ uint32_t Winder_Prepare(void *JobDetails) return ERROR; }*/ +#ifdef READ_SCREW_ENCODER ScrewLocationRun[0] = 0; ScrewLocationRun[1] = 0; +#endif if (( KeepWindingCone == false)||(WindingConeLocation == 0)) { WindingConeLocation = InternalWinderCfg.startoffsetpulses; @@ -176,10 +179,11 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue) //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,InternalWinderCfg.segmentoffsetpulses); //REPORT_MSG(numOfSteps, "Winder_PrepareStage2"); +#ifdef READ_SCREW_ENCODER Read_Screw_Encoder(); ScrewLocationLimitSwitch = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationLimitSwitch, "Winder_PrepareStage2 Encoder Location"); - +#endif REPORT_MSG(millisecondCounter/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].maxfrequency*/, "Winder_PrepareStage2"); if (ReadValue != LIMIT) @@ -203,6 +207,7 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Soft_Hiz); //per L6470 errata between mov and run commands Task_sleep(5); +#ifdef READ_SCREW_ENCODER Reset_Screw_Encoder(); Task_sleep(5); Read_Screw_Encoder(); @@ -210,10 +215,13 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) ScrewLocationStart = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationStart, "Winder_ScrewAtOffsetCallback Encoder Location"); +#endif SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_SCREW); //set this point as the spool home ScrewCurrentDirection = false; +#ifdef READ_SCREW_ENCODER ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif ScrewSpeed = 0; ScrewControlId = 0xFF; ScrewNumberOfSteps = 0; @@ -302,13 +310,15 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if (SampleWinding) return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; - //REPORT_MSG((abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); -// usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); +#ifdef READ_SCREW_ENCODER + + REPORT_MSG(abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); + //usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); //usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, // abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); //usnprintf(ScrewStr, 100, "Winder Encoder: 0 %d 1 %d diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],ScrewLocationRun[1] - ScrewLocationRun[0]); //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); - +#endif if (ScrewCurrentDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize) //next time going out { if (Add100 == true) //once per job @@ -617,11 +627,13 @@ void ScrewTimerInterrupt(int ARG0) if (SCREW_TimerActivated == true) { - Read_Screw_Encoder(); ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)ScrewRunningTime); MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); +#ifdef READ_SCREW_ENCODER + Read_Screw_Encoder(); ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif // ScrewChangeCounter = 0; // ScrewChangeLimit = ScrewRunningTime/12000000; ScrewDirectionChangeCounter++; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index a9b63ea47..91979c8b1 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -51,11 +51,6 @@ void SetMachineState(MACHINE_STATE_STAGES_ENUM NewState) { MachineState = NewState; } -void StopInitSequence(void) -{ - InitStages = INIT_SEQUENCE_END; - InitSequenceStateMachine(InitStages); -} uint32_t HWControlId,InitSchedulerControlId; uint32_t MidTankControlId; @@ -72,6 +67,11 @@ uint32_t InitSequenceMachineReadyToDye(void); uint32_t InitSequenceStateMachine( INIT_SEQUENCE_STAGES_ENUM ReadValue); +void StopInitSequence(void) +{ + InitStages = INIT_SEQUENCE_END; + InitSequenceStateMachine(InitStages); +} uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { if (SafeRemoveControlCallback(HWControlId, InitSequenceCallBackFunction )==OK) diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 94cb8b623..73421f142 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -36,14 +36,14 @@ typedef enum { POWER_OFF_INIT, + POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_HEAD_CLEAN, POWER_OFF_MIXER_FLUSH, POWER_OFF_HEATERS_OFF, POWER_OFF_STORE_DATA, - POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading - POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_SET_VALVE_POSITION, POWER_OFF_WAIT_FOR_TEMPERATURE, + POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading POWER_OFF_TURN_OFF_DRYER_FAN, POWER_OFF_TURN_OFF_COOLER, POWER_OFF_TURN_OFF_BLOWER, @@ -84,7 +84,9 @@ uint32_t PowerOffScheduler(uint32_t IfIndex, uint32_t BusyFlag) uint32_t PowerOffInit(void) { LOG_ERROR(0,"Power Off Init"); - PowerOffMachineState = POWER_OFF_HEAD_CLEAN; + PowerOffMachineState++; + StopInitSequence(); + setmachineActive(true); PowerOffInProcess = true; PowerOffControlId = AddControlCallback( PowerOffScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; @@ -97,19 +99,96 @@ uint32_t PowerOffCancel(void) PowerOffInProcess = false; return OK; } +/************************************************************************shlomo + + */ +uint32_t PowerOffHeadCleanControlId = 0xff; +uint32_t PowerOffHeadCleanCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + if ( JobIsActive()== false) + { + //stop this control loop + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + PowerOffMachineState++; + + } + return OK; +} /*******************************************************************************************************/ uint32_t PowerOffHeadClean(void) { + uint32_t status; + //TBD - PowerOffMachineState = POWER_OFF_MIXER_FLUSH; + ThreadCleaningJobFunc(50); + if (PowerOffHeadCleanControlId != 0xFF) + { + RemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + //return ERROR; + } + PowerOffHeadCleanControlId = AddControlCallback( PowerOffHeadCleanCallback,eOneSecond , TemplateDataReadCBFunction,0,0, 0 ); +// if ( PowerOffHeadCleanControlId == 0xFF) +// return ERROR; + return OK; } /*******************************************************************************************************/ -uint32_t PowerOffMixerFlush(void) +bool DispenserHomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; +uint32_t PowerOffDispenserHomingCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + DispenserHomingActive[DispenserId] = false; + REPORT_MSG (DispenserId, "PowerOffDispenserHomingCallback"); +} +#define TI_DISPENSER_ID 4 +#define DEFAULT_MIXER_CLEANING_SPEED 1000 +#define DEFAULT_MIXER_CLEANING_TIMEOUT 10000 + +uint32_t PowerOffMixerFlushCallback(void) { //TBD - PowerOffMachineState = POWER_OFF_HEATERS_OFF; + int i; + REPORT_MSG (PowerOffMachineState, "PowerOffMixerFlushCallback"); + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffMixerFlushCallback ); + + Control3WayValvesWithCallback ((Valves_t)TI_DISPENSER_ID, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[TI_DISPENSER_ID]; + MotorStop(HW_Motor_Id,Hard_Hiz); + + Task_sleep (20); + for (i=0;ilength = 200.0; + TSegment->n_brushstops = 1; + TSegment->brushstops = my_malloc(sizeof(TSegment->brushstops)); + TSegment->brushstops[0] = TbrushStop; + Tdispenser = my_malloc(sizeof(JobDispenser)); + + TbrushStop->has_index =true; + TbrushStop->index = 0; + TbrushStop->n_dispensers = 1; + TbrushStop->dispensers = my_malloc(sizeof(TbrushStop->dispensers)); + TbrushStop->dispensers[0] = Tdispenser; + Tdispenser->nanolitterpersecond = 10000; + Tdispenser->nanoliterperpulse = 2.34; + Tdispenser->dispenserstepdivision = DISPENSER_STEP_DIVISION__Auto; + Ticket.segments[0] = TSegment; + Ticket.segments[1] = TSegment; + Tspool->backingrate = 32; + Tspool->bottombackingrate = 32; + Tspool->segmentoffsetpulses = 1000; + Tspool->startoffsetpulses = 220; + Tspool->rotationsperpassage = 3.1415926*2; + Ticket.spool = Tspool; + CurrentJob = &Ticket; + InternalWindingConfigMessage(Tspool); + StartJob(&Ticket); + } + } + return status; +} void ThreadJoggingRequestFunc(MessageContainer* requestContainer) { uint32_t status = OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index b9a82defa..e1a52cef4 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -164,6 +164,7 @@ void ThreadAbortJoggingRequestFunc(MessageContainer* requestContainer); void ThreadAbortJoggingFunc(void); uint32_t ThreadJoggingFunc(int speed); +uint32_t ThreadCleaningJobFunc(int speed); uint32_t CurrentJobRequestFunc(MessageContainer* requestContainer); uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer); -- cgit v1.3.1 From 517b7d9643f336d498fada274d6666da38e42c06 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 14 Aug 2019 15:11:15 +0300 Subject: Version 1.4.3.7 VOC sensors, disable saving dispenser data to flash during a job (winder jump), screw encoder data,power off and init improved. --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/ADC_Sampling/ADC.c | 1 + .../Embedded/Drivers/ADC_Sampling/ADC.h | 1 + .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 12 +- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 9 +- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 4 + .../Embedded/Drivers/flash_ram/FlashProgram.c | 6 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 8 ++ .../Embedded_SW/Embedded/Modules/Control/control.h | 2 + Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 1 - .../Embedded/Modules/IDS/IDS_dispenser.c | 24 ++-- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 1 + .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 3 + .../Embedded/Modules/Thread/Thread_Winder.c | 54 ++++++-- .../StateMachines/Initialization/InitSequence.c | 5 + .../Initialization/PowerOffSequence.c | 140 ++++++++++++++++++--- .../Initialization/PowerOffSequence.h | 4 +- .../Embedded/StateMachines/Printing/JobSTM.c | 72 +++++++++++ .../Embedded/StateMachines/Printing/PrintingSTM.h | 1 + 19 files changed, 301 insertions(+), 49 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 5a528d18b..163ae4756 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,3,5}; +TangoVersion_t _gTangoVersion = {1,4,3,7}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c index 5c52963eb..89328402b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c @@ -348,6 +348,7 @@ void ADCAcquireInit(void) // (called by MillisecInit) ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V); ADCReferenceSet(ADC1_BASE, ADC_REF_EXT_3V); + VOCAlarmsInit(); if (!isInitialized) { // Create a periodic Clock Instance with _period - triggers the ADC sampling diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h index d3a1fe108..bcb383f6d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h @@ -48,6 +48,7 @@ extern int DispenserIdToPressureSensorId[MAX_DISPENSERS]; typedef void (*ProcessCallback)(uint32_t* adcData); void ADCAcquireInit(void); +void VOCAlarmsInit(void); uint32_t ADC_TriggerCollection(void); diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c index 6122c2a87..d74adb212 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c @@ -26,6 +26,10 @@ uint8_t Gas_PPM[MAX_VOC_SAMPLES] = {0}; uint32_t VOC_Slope=0,VOC_AverageLimit=0, VOC_Slope_Time=0; bool VOC_TimeAlarm = false,VOC_SlopeAlarm = false; +void VOCAlarmsInit(void) +{ + memset(Gas_PPM,0,sizeof(Gas_PPM)); +} void CalculateVOCAlarms(void) { @@ -39,7 +43,7 @@ void CalculateVOCAlarms(void) { slope2 = slope1; slope1 = Gas_PPM[i]-Gas_PPM[i-1]; - if (slope1 > VOC_Slope) + if ((slope1>0)&&(slope1 > VOC_Slope)) { slopeindex++; if (slopeindex>=VOC_Slope_Time) @@ -50,6 +54,10 @@ void CalculateVOCAlarms(void) VOC_SlopeAlarm = true; } } + else + { + slopeindex = 0; //not a consequent raise is slope + } } } @@ -157,6 +165,8 @@ uint8_t Calculate_Gas_Power_Consumption() // WHS { CalculateVOCAlarms(); } + Report("Calculate_Gas_Power_Consumption",__FILE__,__LINE__,(int)i,RpWarning,VOC_Index,0); + return i;//PPM } } diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index dd700563b..ceff20ea8 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -499,12 +499,19 @@ uint32_t ActivateHeadMagnet() Task_sleep(500); F2_CTRL_Reg.ushort &= ~SPARE_SSR13_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; - + if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) + { + MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM, DRIER_LID_OPEN, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM], NULL,1000); + } return OK; } uint32_t DeActivateHeadMagnet() { + if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) + { + MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM, DRIER_LID_CLOSE, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM], NULL,1000); + } F2_CTRL_Reg.ushort |= SPARE_SSR13_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; Task_sleep(500); diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index ec9ea17db..275a4db22 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -363,7 +363,11 @@ uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callb { if (Valve3WayControlId[_ValveId] != 0xFF) + { Report("Control3WayValvesWithCallback called busy ",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); + RemoveControlCallback(Valve3WayControlId[_ValveId], Valve3WayCallBackFunction ); + } + Valve3WayModuleCallback[_ValveId] = callback; Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eOneSecond/*eHundredMillisecond*/, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index 99d7c0b9e..3c84ed049 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -100,7 +100,7 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b // Call the function to program a block of flash. The length of the // block passed to the flash function must be divisible by 4. // - ROM_FlashProgram((uint32_t *)ui32BufferAddr, ui32ProgAddr, + FlashProgram((uint32_t *)ui32BufferAddr, ui32ProgAddr, (ui32DataSize + 3) & ~3); // @@ -136,7 +136,7 @@ uint32_t EraseFlashSection(uint32_t ui32FlashStart,uint32_t ui32FileSize) #endif for(ui32Idx = ui32FlashStart; ui32Idx < ui32FlashStart+ui32FileSize; ui32Idx += 1024) { - ROM_FlashErase(ui32Idx); + FlashErase(ui32Idx); } return OK; @@ -157,7 +157,7 @@ void FlashInit(void) #endif for(ui32Idx = FLASH_RAM_BASE; ui32Idx < FLASH_RAM_BASE+FLASH_SIZE; ui32Idx += 1024) { - ROM_FlashErase(ui32Idx); + FlashErase(ui32Idx); } } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index f1e19d851..a88f67d5e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -479,6 +479,14 @@ uint32_t GetControlLowDevice_i(void) { return ControlLowDevice_i; } +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId) +{ + if (ControlArray[ControlId].ControlActive) + return ControlArray[ControlId].ControlCallbackPtr; + else + return NULL; + +} uint32_t ControlLoop(uint32_t tick) { if (MaxHighDevices == 0xFF) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index 380040e34..450646a68 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -48,6 +48,8 @@ uint32_t TemplateDataReadCBFunction (uint32_t deviceId, uint32_t Parameter1); uint32_t GetControlDevice_i(void); uint32_t GetControlLowDevice_i(void); +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId); + extern Task_Handle Control_Task_Handle; extern uint32_t millisecondCounter; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index c31a1a72b..a919ce4e1 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -42,7 +42,6 @@ void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps); void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps); //uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback); -uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback); uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 16545b27d..2f563d7d1 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -107,8 +107,9 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re Control3WayValvesWithCallback ((Valves_t)DispenserId, CloseValve, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer if (DispenserControlId[DispenserId] != 0xFF) - Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); - + { + Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); + } DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_Build_Pressure_Callback, DispenserPrepareTimeLag,TemplateDataReadCBFunction ,DispenserId, DispenserId, 0 ); if (DispenserControlId[DispenserId] == 0xFF) Report("Add control callback failed",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); @@ -127,7 +128,7 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re uint32_t IDS_Dispenser_StopMotorCallback(uint32_t DispenserId, uint32_t ReadValue) { - //Report("IDS_Dispenser_Close_Valve_And_Stop_Motor callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0); + Report("IDS_Dispenser_Close_Valve_And_Stop_Motor callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0); if (SafeRemoveControlCallback(DispenserControlId[DispenserId], IDS_Dispenser_StopMotorCallback )==OK) DispenserControlId[DispenserId] = 0xFF; else @@ -152,13 +153,13 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re Control3WayValvesWithCallback ((Valves_t)DispenserId, CloseValve, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer if (DispenserControlId[DispenserId] != 0xFF) - Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); + Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_StopMotorCallback, CloseValveTimeout, TemplateDataReadCBFunction,DispenserId, DispenserId, 0 ); if (DispenserControlId[DispenserId] == 0xFF) Report("Add control callback failed",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); - //else - // Report("Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); + else + Report("Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); return OK; } @@ -202,7 +203,7 @@ uint32_t IDS_Dispenser_Start_Motor_and_Open_Valve(int DispenserId, int MotorSpee MotorSetSpeed(HW_Motor_Id, MotorSpeed); CurrentDispenserSpeed[DispenserId] = MotorSpeed; if (DispenserControlId[DispenserId] != 0xFF) - Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); + Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); //Report("IDS_Dispenser_Start_Motor_and_Open_Valve",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0); DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_OpenValveCallback, OpenValveTimeout, TemplateDataReadCBFunction,DispenserId, DispenserId, 0 ); @@ -294,9 +295,12 @@ uint32_t IDS_Dispenser_Store_Data (void) // Report("IDS_Dispenser_Store_Data 0",__FILE__,(int)IDS_Dispenser_Data[0].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[0].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[0].microsteps,0); // Report("IDS_Dispenser_Store_Data 4",__FILE__,(int)IDS_Dispenser_Data[4].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[4].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[4].microsteps,0); //response_size = dispenser_data__pack(&IDSDispenserData, response_buffer); - EraseFlashSection(DISPENSERS_MAP_IN_FLASH,response_size+4); - ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size); - ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); + if (JobIsActive()==false) + { + EraseFlashSection(DISPENSERS_MAP_IN_FLASH,response_size+4); + ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size); + ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); + } Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath,BIOS_NO_WAIT); if (Status == FR_OK) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index b9ccdce27..51086b09e 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -63,6 +63,7 @@ uint32_t IDS_DispenserControlInit(); uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_StopHomeDispenser (uint32_t deviceID); +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback); uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_Dispenser_Alarm_On (uint8_t deviceID); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index bfece1890..603c4ac66 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -186,6 +186,9 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr assert(DispenserId < MAX_SYSTEM_DISPENSERS); //if (DispensersAlarmState[DispenserId] == true) // return ERROR; + + //if Safety is active + //if safety is upper position or if ((HomingActive[DispenserId] == true)||(PrimingActive[DispenserId] == true)) { LOG_ERROR (DispenserId,"Homing already active"); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 7e1312464..0ed0f5318 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -59,10 +59,11 @@ static uint32_t WindingConeLocation; static uint32_t WinderBackToBaseTime = 800; InternalWinderConfigStruc InternalWinderCfg = {0}; - +#define READ_SCREW_ENCODER +#ifdef READ_SCREW_ENCODER uint32_t ScrewLocationLimitSwitch = 0,ScrewLocationStart = 0; uint32_t ScrewLocationRun[3]; - +#endif bool SampleWinding = false; uint32_t Winder_Init(void) { @@ -89,6 +90,8 @@ uint32_t InternalWinderConfigMessage(HardwareWinder* request) return status; } +char ScrewStr[150]; + uint32_t InternalWindingConfigMessage(JobSpool* request) { uint32_t status = PASSED; @@ -99,6 +102,9 @@ uint32_t InternalWindingConfigMessage(JobSpool* request) InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate; InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*2;//request->rotationsperpassage; 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); + Report(ScrewStr,__FILE__,__LINE__,(int)InternalWinderCfg.diameter,RpWarning,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000), 0); return status; } @@ -132,8 +138,10 @@ uint32_t Winder_Prepare(void *JobDetails) return ERROR; }*/ +#ifdef READ_SCREW_ENCODER ScrewLocationRun[0] = 0; ScrewLocationRun[1] = 0; +#endif if (( KeepWindingCone == false)||(WindingConeLocation == 0)) { WindingConeLocation = InternalWinderCfg.startoffsetpulses; @@ -176,10 +184,11 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue) //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,InternalWinderCfg.segmentoffsetpulses); //REPORT_MSG(numOfSteps, "Winder_PrepareStage2"); +#ifdef READ_SCREW_ENCODER Read_Screw_Encoder(); ScrewLocationLimitSwitch = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationLimitSwitch, "Winder_PrepareStage2 Encoder Location"); - +#endif REPORT_MSG(millisecondCounter/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].maxfrequency*/, "Winder_PrepareStage2"); if (ReadValue != LIMIT) @@ -203,6 +212,7 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Soft_Hiz); //per L6470 errata between mov and run commands Task_sleep(5); +#ifdef READ_SCREW_ENCODER Reset_Screw_Encoder(); Task_sleep(5); Read_Screw_Encoder(); @@ -210,10 +220,13 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) ScrewLocationStart = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationStart, "Winder_ScrewAtOffsetCallback Encoder Location"); +#endif SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_SCREW); //set this point as the spool home ScrewCurrentDirection = false; +#ifdef READ_SCREW_ENCODER ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif ScrewSpeed = 0; ScrewControlId = 0xFF; ScrewNumberOfSteps = 0; @@ -249,7 +262,7 @@ InternalWinderCfg.segmentoffsetpulses numOfSteps = InternalWinderCfg.startoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; */ -char ScrewStr[150]; + //char TempScrewStr[100]; double WinderReferenceSpeed=0; double TotalWinderSpeed=0; @@ -259,6 +272,8 @@ int flipflop = 0; uint32_t motspeed; float speedf; int WinderCalculation = 0; +float WinderRunAverage = 0.0,WinderRunSum = 0.0; +int WinderRunSamples = 0; uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { //uint32_t Steps; @@ -266,6 +281,8 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) double screw_horizontal_speed = 0; double RotationsPerSecond; double Averagewinderspeed = 0; + int WinderRun; + // { // TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter]; @@ -302,13 +319,28 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if (SampleWinding) return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; - //REPORT_MSG((abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); -// usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); +#ifdef READ_SCREW_ENCODER + WinderRun = abs(ScrewLocationRun[1] - ScrewLocationRun[0]); + if ((WinderRun < 50000)&&(Add100 == false)) + { + WinderRunSum+=WinderRun; + WinderRunSamples++; + WinderRunAverage = WinderRunSum/WinderRunSamples; + if ((fabs(WinderRun-WinderRunAverage)>=30)||(WinderRunSamples%100 == 0)) + { + usnprintf(ScrewStr, 150, "curr,sum,avg,samples {Winder Encoder:, %d, %d, %d, %d, %d}",WinderRun,(int)WinderRunSum,(int)WinderRunAverage,(int)WinderRunSamples, + (int)(100*WinderRun/ScrewNumberOfSteps)); + Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + } + } + //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + //REPORT_MSG(abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); + //usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); //usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, // abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); //usnprintf(ScrewStr, 100, "Winder Encoder: 0 %d 1 %d diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],ScrewLocationRun[1] - ScrewLocationRun[0]); //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); - +#endif if (ScrewCurrentDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize) //next time going out { if (Add100 == true) //once per job @@ -321,7 +353,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { ScrewNumberOfSteps--; WindingConeLocation--; - // ReportWithPackageFilter(ThreadFilter,"Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); + ReportWithPackageFilter(ThreadFilter,"Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } else //next time going back @@ -329,7 +361,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if ((CalculationDirectionChangeCounter/2)%InternalWinderCfg.SpoolBottomBackingRate == 0) { ScrewNumberOfSteps++; - // Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); + Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } /* if (WinderMotorSpeedRollOver) @@ -617,11 +649,13 @@ void ScrewTimerInterrupt(int ARG0) if (SCREW_TimerActivated == true) { - Read_Screw_Encoder(); ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)ScrewRunningTime); MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); +#ifdef READ_SCREW_ENCODER + Read_Screw_Encoder(); ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif // ScrewChangeCounter = 0; // ScrewChangeLimit = ScrewRunningTime/12000000; ScrewDirectionChangeCounter++; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 91979c8b1..7b94cd792 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -214,6 +214,11 @@ uint32_t InitSequenceInitialBlowerActivation(void) else Control_Voltage_To_Blower(3000); HWControlId = AddControlCallback( InitSequenceBlowerCallBackFunction, 10* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + if (RdInkCartridgeSensor()) //if there is a cartridge in the ink slot skip the valves procedure + { + MidTankOperationCounter = MidTankEnd; + Report("There is a cartridge in the ink slot. skipping the valves procedure",__FILE__,__LINE__,(int)MidTankOperationCounter,RpWarning,(int)InitStages,0); + } MidTankControlId = AddControlCallback( InitSequenceMidTankCallBackFunction, 300/*eHundredMillisecond*/, TemplateDataReadCBFunction,0,0, 0 ); return OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 94cb8b623..73421f142 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -36,14 +36,14 @@ typedef enum { POWER_OFF_INIT, + POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_HEAD_CLEAN, POWER_OFF_MIXER_FLUSH, POWER_OFF_HEATERS_OFF, POWER_OFF_STORE_DATA, - POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading - POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_SET_VALVE_POSITION, POWER_OFF_WAIT_FOR_TEMPERATURE, + POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading POWER_OFF_TURN_OFF_DRYER_FAN, POWER_OFF_TURN_OFF_COOLER, POWER_OFF_TURN_OFF_BLOWER, @@ -84,7 +84,9 @@ uint32_t PowerOffScheduler(uint32_t IfIndex, uint32_t BusyFlag) uint32_t PowerOffInit(void) { LOG_ERROR(0,"Power Off Init"); - PowerOffMachineState = POWER_OFF_HEAD_CLEAN; + PowerOffMachineState++; + StopInitSequence(); + setmachineActive(true); PowerOffInProcess = true; PowerOffControlId = AddControlCallback( PowerOffScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; @@ -97,19 +99,96 @@ uint32_t PowerOffCancel(void) PowerOffInProcess = false; return OK; } +/************************************************************************shlomo + + */ +uint32_t PowerOffHeadCleanControlId = 0xff; +uint32_t PowerOffHeadCleanCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + if ( JobIsActive()== false) + { + //stop this control loop + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + PowerOffMachineState++; + + } + return OK; +} /*******************************************************************************************************/ uint32_t PowerOffHeadClean(void) { + uint32_t status; + //TBD - PowerOffMachineState = POWER_OFF_MIXER_FLUSH; + ThreadCleaningJobFunc(50); + if (PowerOffHeadCleanControlId != 0xFF) + { + RemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + //return ERROR; + } + PowerOffHeadCleanControlId = AddControlCallback( PowerOffHeadCleanCallback,eOneSecond , TemplateDataReadCBFunction,0,0, 0 ); +// if ( PowerOffHeadCleanControlId == 0xFF) +// return ERROR; + return OK; } /*******************************************************************************************************/ -uint32_t PowerOffMixerFlush(void) +bool DispenserHomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; +uint32_t PowerOffDispenserHomingCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + DispenserHomingActive[DispenserId] = false; + REPORT_MSG (DispenserId, "PowerOffDispenserHomingCallback"); +} +#define TI_DISPENSER_ID 4 +#define DEFAULT_MIXER_CLEANING_SPEED 1000 +#define DEFAULT_MIXER_CLEANING_TIMEOUT 10000 + +uint32_t PowerOffMixerFlushCallback(void) { //TBD - PowerOffMachineState = POWER_OFF_HEATERS_OFF; + int i; + REPORT_MSG (PowerOffMachineState, "PowerOffMixerFlushCallback"); + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffMixerFlushCallback ); + + Control3WayValvesWithCallback ((Valves_t)TI_DISPENSER_ID, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[TI_DISPENSER_ID]; + MotorStop(HW_Motor_Id,Hard_Hiz); + + Task_sleep (20); + for (i=0;ilength = 200.0; + TSegment->n_brushstops = 1; + TSegment->brushstops = my_malloc(sizeof(TSegment->brushstops)); + TSegment->brushstops[0] = TbrushStop; + Tdispenser = my_malloc(sizeof(JobDispenser)); + + TbrushStop->has_index =true; + TbrushStop->index = 0; + TbrushStop->n_dispensers = 1; + TbrushStop->dispensers = my_malloc(sizeof(TbrushStop->dispensers)); + TbrushStop->dispensers[0] = Tdispenser; + Tdispenser->nanolitterpersecond = 10000; + Tdispenser->nanoliterperpulse = 2.34; + Tdispenser->dispenserstepdivision = DISPENSER_STEP_DIVISION__Auto; + Ticket.segments[0] = TSegment; + Ticket.segments[1] = TSegment; + Tspool->backingrate = 32; + Tspool->bottombackingrate = 32; + Tspool->segmentoffsetpulses = 1000; + Tspool->startoffsetpulses = 220; + Tspool->rotationsperpassage = 3.1415926*2; + Ticket.spool = Tspool; + CurrentJob = &Ticket; + InternalWindingConfigMessage(Tspool); + StartJob(&Ticket); + } + } + return status; +} void ThreadJoggingRequestFunc(MessageContainer* requestContainer) { uint32_t status = OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index b9a82defa..e1a52cef4 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -164,6 +164,7 @@ void ThreadAbortJoggingRequestFunc(MessageContainer* requestContainer); void ThreadAbortJoggingFunc(void); uint32_t ThreadJoggingFunc(int speed); +uint32_t ThreadCleaningJobFunc(int speed); uint32_t CurrentJobRequestFunc(MessageContainer* requestContainer); uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer); -- cgit v1.3.1 From cecf66097e99a12d6bcb965da06e44ff3bd925fd Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 15 Aug 2019 10:09:04 +0300 Subject: added by shlomo to thread winder --- .../Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 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 5d9b26f92..0ac23baf5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -311,8 +311,20 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; #ifdef READ_SCREW_ENCODER - - REPORT_MSG(abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); + WinderRun = abs(ScrewLocationRun[1] - ScrewLocationRun[0]); + if (WinderRun < 50000) + { + WinderRunSum+=WinderRun; + WinderRunSamples++; + WinderRunAverage = WinderRunSum/WinderRunSamples; + if ((fabs(WinderRun-WinderRunAverage)>=50)||(WinderRunSamples%50 == 0)) + { + usnprintf(ScrewStr, 150, "curr,sum,avg,samples {Winder Encoder:, %d, %d, %d, %d }",WinderRun,(int)WinderRunSum,(int)WinderRunAverage,(int)WinderRunSamples); + Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + } + } + //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + //REPORT_MSG(abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); //usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); //usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, // abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); -- cgit v1.3.1 From 3bbcc0ab6188e8554a101acffc8c09c267353a22 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 15 Aug 2019 15:15:42 +0300 Subject: improved IDS, bug in length --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- Software/Embedded_SW/Embedded/Main.c | 16 ---------------- .../Embedded_SW/Embedded/Modules/Control/control.h | 1 - .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 21 ++++++++++++++++++--- .../Embedded/Modules/Thread/Thread_print.c | 1 - .../StateMachines/Initialization/InitSequence.c | 2 +- 6 files changed, 20 insertions(+), 23 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 163ae4756..c717bfc8b 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,3,7}; +TangoVersion_t _gTangoVersion = {1,4,3,8}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index df89a85b3..301d0d6c3 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -21,8 +21,6 @@ #include "Common/utilities/idle_task.h" #include "Drivers/ADC_Sampling/ADC.h" -#include -#include #include "drivers/Heater/Heater.h" #include "drivers/Motors/Motor.h" @@ -276,21 +274,7 @@ int main(void) #ifndef EVALUATION_BOARD Init_Machine_Leds(); #endif -/* shai add time : */ -#define STARTTIME 63731536552 - time_t t; - struct tm *ltm; - char *curTime; - Seconds_set(STARTTIME); - - t = time(NULL); - ltm = localtime(&t); - curTime = asctime(ltm); - System_printf("Time(GMT): %s\n", curTime); - // https://www.epochconverter.com/seconds-days-since-y0 - -/* end time */ #ifndef EVALUATION_BOARD WHS_init(); //IDS_ModuleInit(); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index ca76ec8e1..450646a68 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -47,7 +47,6 @@ int SafeRemoveHighControlCallback(uint32_t deviceId , ControlCBFunction uint32_t TemplateDataReadCBFunction (uint32_t deviceId, uint32_t Parameter1); uint32_t GetControlDevice_i(void); uint32_t GetControlLowDevice_i(void); -ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId); ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 7a719d39a..3e68bc0a4 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -69,6 +69,7 @@ int JobBrushStopId = 0; int lInterSegmentLength = 0; int InterSegmentStepsLimit = 0,InterSegmentStepsCount = 0; bool PreSegmentWCFStarted = false; + bool PreSegmentPrepareStarted = false; uint32_t InterSegmentStartSprayCleaner = 0; uint32_t InterSegmentStartRocking = 0; @@ -955,6 +956,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); { //IDS_Valve_PresegmentReady(1,0); Report("End of Pre-segment Handling",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); + //PreSegmentReady(Module_IDS,ModuleDone); SafeRemoveControlCallback(DispenserPreSegmentControlId,IDSPreSegmentStateCallbackRunner); setRapidPressureRead(false); } @@ -977,14 +979,21 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); } } - if (PreSegmentWCFStarted == false) + if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == (InterSegmentStepsCount+12000))) + { + //start prepare 4 seconds before wcf + IDSPresegmentPrepareStart(); + PreSegmentPrepareStarted = true; + } + if ((PreSegmentWCFStarted == false)&&(PreSegmentPrepareStarted == true)) { IDS_PreSegmentPrepare_Callback(0,0); } - if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == (lInterSegmentLength-InterSegmentStepsCount))) + if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == InterSegmentStepsCount)) { Report("start dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); PreSegmentWCFStarted = true; // stop any presegment prepare stages, if still exist + PreSegmentPrepareStarted = false; setRapidPressureRead(false); if (FileBrushStop) { @@ -1044,6 +1053,11 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); } //startDispensersAtSegmentSpeed*1=WFCFClenerSpray(speed); } + if ((InterSegmentStartWFCFDispensers > 0)&&((lInterSegmentLength-1000) == InterSegmentStepsCount)) + { + //close waste valve one second before segment - trial + Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head); + } return OK; } uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId) @@ -1235,9 +1249,10 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) } //Task_sleep(5); PreSegmentWCFStarted = false; + PreSegmentPrepareStarted = false; REPORT_MSG(PreSegmentWCFStarted,"START IDSPresegmentPrepareStart"); - IDSPresegmentPrepareStart(); +// IDSPresegmentPrepareStart(); 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 a88ce61a5..9e77f2de8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -288,7 +288,6 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) //} - length = (double)(positionDiff)*PoolerLengthCalculationMultiplier; PoolerTotalProcessedLength+= (length/100); TempPoolerTotalProcessedLength = PoolerTotalProcessedLength; #ifndef FEEDER_LENGTH_CALCULATION diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index dfdafa07b..10c88632f 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -217,7 +217,7 @@ uint32_t InitSequenceInitialBlowerActivation(void) HWControlId = AddControlCallback( InitSequenceBlowerCallBackFunction, 10* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); if (RdInkCartridgeSensor()) //if there is a cartridge in the ink slot skip the valves procedure { - MidTankOperationCounter = 32 ; + MidTankOperationCounter = 32; Report("There is a cartridge in the ink slot. skipping the valves procedure",__FILE__,__LINE__,(int)MidTankOperationCounter,RpWarning,(int)InitStages,0); } MidTankControlId = AddControlCallback( InitSequenceMidTankCallBackFunction, 300/*eHundredMillisecond*/, TemplateDataReadCBFunction,0,0, 0 ); -- cgit v1.3.1 From 2211ed1bacb11df041042cf6efbccb44bb724f49 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 15 Aug 2019 15:22:36 +0300 Subject: merge --- .../Embedded/Modules/Stubs_Handler/Progress.c | 8 ++++++++ .../Embedded/Modules/Thread/Thread_Winder.c | 19 +++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index d18833ca6..153ab0e43 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -105,6 +105,14 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.progress = (double)OK; response.has_progress = true; + } + else + if(request->amount == 0x0CC) //Cùøàøïâò÷ Vùêïâùàïíî ø÷ãôíîã÷ + { + ResponseDemo(request->delay); + response.progress = (double)OK; + response.has_progress = true; + } else if((request->amount == 0xDF) && (request->delay == 0xDF)) //Power off { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 0ac23baf5..c5e124ad3 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -90,6 +90,8 @@ uint32_t InternalWinderConfigMessage(HardwareWinder* request) return status; } +char ScrewStr[150]; + uint32_t InternalWindingConfigMessage(JobSpool* request) { uint32_t status = PASSED; @@ -100,6 +102,9 @@ uint32_t InternalWindingConfigMessage(JobSpool* request) InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate; InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*2;//request->rotationsperpassage; 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); + Report(ScrewStr,__FILE__,__LINE__,(int)InternalWinderCfg.diameter,RpWarning,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000), 0); return status; } @@ -257,7 +262,7 @@ InternalWinderCfg.segmentoffsetpulses numOfSteps = InternalWinderCfg.startoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; */ -char ScrewStr[150]; + //char TempScrewStr[100]; double WinderReferenceSpeed=0; double TotalWinderSpeed=0; @@ -267,6 +272,10 @@ int flipflop = 0; uint32_t motspeed; float speedf; int WinderCalculation = 0; +#ifdef READ_SCREW_ENCODER +float WinderRunAverage = 0.0,WinderRunSum = 0.0; +int WinderRunSamples = 0; +#endif uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { //uint32_t Steps; @@ -311,15 +320,17 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; #ifdef READ_SCREW_ENCODER + int WinderRun; WinderRun = abs(ScrewLocationRun[1] - ScrewLocationRun[0]); - if (WinderRun < 50000) + if ((WinderRun < 50000)&&(Add100 == false)) { WinderRunSum+=WinderRun; WinderRunSamples++; WinderRunAverage = WinderRunSum/WinderRunSamples; - if ((fabs(WinderRun-WinderRunAverage)>=50)||(WinderRunSamples%50 == 0)) + if ((fabs(WinderRun-WinderRunAverage)>=30)||(WinderRunSamples%100 == 0)) { - usnprintf(ScrewStr, 150, "curr,sum,avg,samples {Winder Encoder:, %d, %d, %d, %d }",WinderRun,(int)WinderRunSum,(int)WinderRunAverage,(int)WinderRunSamples); + usnprintf(ScrewStr, 150, "curr,sum,avg,samples {Winder Encoder:, %d, %d, %d, %d, %d}",WinderRun,(int)WinderRunSum,(int)WinderRunAverage,(int)WinderRunSamples, + (int)(100*WinderRun/ScrewNumberOfSteps)); Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); } } -- cgit v1.3.1 From 1859ac4ad53f0f5a55a66b634ddec870e164f580 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 18 Aug 2019 13:58:18 +0300 Subject: Version 1.4.3.85 diagnstics levels set in config params. machine status. --- .../Embedded/Common/SWUpdate/FileSystem.c | 4 +- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Communication/CommunicationTask.c | 2 +- .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 5 +- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 1 + .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c | 3 + .../Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c | 3 +- .../Embedded/Drivers/flash_ram/FlashProgram.c | 4 +- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 4 +- .../Embedded/Modules/Control/MillisecTask.c | 1 + .../Embedded/Modules/Diagnostics/Diagnostics.c | 104 ++++++++++--------- .../Embedded/Modules/Diagnostics/Diagnostics.h | 10 +- .../Embedded/Modules/General/GeneralHardware.c | 38 +++++-- .../Embedded/Modules/General/MachineStatus.c | 12 ++- .../Embedded/Modules/General/MachineStatus.h | 1 + .../Embedded/Modules/Heaters/Heaters_print.c | 10 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 6 +- .../Embedded/Modules/Thread/ThreadLoad.c | 3 + .../Embedded/Modules/Thread/Thread_Winder.c | 2 +- .../Embedded/Modules/Thread/Thread_print.c | 2 +- .../Initialization/PowerOffSequence.c | 5 +- .../Embedded/StateMachines/Printing/JobSTM.c | 110 +++++++++++---------- .../stubs/embeddedparametersbuild.cs | 23 +++-- 23 files changed, 214 insertions(+), 141 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 48e29e54c..4396f6da1 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -547,10 +547,10 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) GetFilesResponse response = GET_FILES_RESPONSE__INIT; - #define MAX_NUM_OF_FILES 10 + #define MAX_NUM_OF_FILES 20 DIR dir; FILINFO* fno[MAX_NUM_OF_FILES]; - char FullPath[MAX_NUM_OF_FILES][100]; + char FullPath[MAX_NUM_OF_FILES][60]; int i,NumOfFiles = 0; FRESULT Fresult = FR_OK; 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 c717bfc8b..5193ac1c5 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,3,8}; +TangoVersion_t _gTangoVersion = {1,4,3,85}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c index 27780a9e3..a970aab5a 100644 --- a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c +++ b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c @@ -69,7 +69,7 @@ uint32_t initArray(size_t initialSize) else { SerialBufferUsed[i] = true; - inBuffer[i].buffer = &CommShortRxBuffer[i]; + inBuffer[i].buffer = (char *)&CommShortRxBuffer[i]; inBuffer[i].used = 0; inBuffer[i].size = initialSize; return i; diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c index 07956e80d..7eccf5c58 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c @@ -33,7 +33,7 @@ void VOCAlarmsInit(void) void CalculateVOCAlarms(void) { - int i,slope1=0,slope2=0,slopeindex=0; + int i,slope1=0,/*slope2=0,*/slopeindex=0; double a; bool alarmstate = false; for (i = 0; i< MAX_VOC_SAMPLES; i++) @@ -41,7 +41,7 @@ void CalculateVOCAlarms(void) a += Gas_PPM[i]; if(i!=0) { - slope2 = slope1; + //slope2 = slope1; slope1 = Gas_PPM[i]-Gas_PPM[i-1]; if ((slope1>0)&&(slope1 > VOC_Slope)) { @@ -173,6 +173,7 @@ uint8_t Calculate_Gas_Power_Consumption() // WHS CalculateVOCAlarms(); } Report("Calculate_Gas_Power_Consumption",__FILE__,__LINE__,(int)i,RpWarning,VOC_Index,0); + Report("Calculate_Gas_Data Sample,VADC,Vsense",__FILE__,VsampleInBits,(int)VADC,RpWarning,(int)(VSensor*1000),0); return i;//PPM } diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index ceff20ea8..c16b1f21f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -747,6 +747,7 @@ uint32_t SecondaryPumpCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) else Report("Remove control callback failed",__FILE__,__LINE__,(int)SecondaryPumpControlId,RpWarning,(int)SecondaryPumpCallBackFunction,0); + return OK; } void PumpActivation(uint32_t seconds) diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c index 79ec46b18..00f4d73d6 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c @@ -18,6 +18,9 @@ #include "Modules/Control/MillisecTask.h" #include "Common/SWUpdate/FirmwareUpgrade.h" +#include "heaters/heaters_ex.h" +#include "StateMachines/Initialization/InitSequence.h" + extern short int main_vme(); FPGA_JTAG_GPIO FPGA_JTAG; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c index a26813c4a..159ae372e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c @@ -327,10 +327,11 @@ uint32_t Read_Heaters_Current(HEATERS_CURRENT Heater_ID) //0-8 uint32_t Read_Head_MixChip_Heaters_Current(HEATERS_CURRENT Heater_ID) //0-5 { uint32_t Status = OK; + /* uint32_t I2C_Slave_Add; uint32_t Channel; uint32_t VsampleInBits; - +*/ /* * zone Heater No. Power Current Shunt Resistor I2C ID I2C Address I2C * Dyer_Head zone_1 2 30W 1.25A 0.025 ohm 2 0x40 3 diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index 3c84ed049..b0b835342 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -5,8 +5,10 @@ * Author: shlomo */ -#include "driverlib/rom.h" +//#include #include "include.h" +#include "driverlib/rom.h" +#include "driverlib/flash.h" #include #include "FlashProgram.h" diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index f227dcd32..6f9ae4676 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -43,7 +43,7 @@ float MCU_E2PromReadMidtank_A(int MidtankId) float Data; if (MidtankId>=NUM_OF_MIDTANKS) { - Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)MidtankId,0); return ERROR; } EEPROMRead((uint32_t *)&Data,Address*4, 4); @@ -57,7 +57,7 @@ float MCU_E2PromReadMidtank_B(int MidtankId) float Data; if (MidtankId>=NUM_OF_MIDTANKS) { - Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)MidtankId,0); return ERROR; } EEPROMRead((uint32_t *)&Data,Address*4, 4); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 07f2f13f7..8e67de0f1 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -42,6 +42,7 @@ #include "modules/thread/thread_ex.h" #include "modules/ids/ids_ex.h" #include "modules/Diagnostics/Diagnostics.h" +#include "Modules/General/MachineStatus.h" #include "drivers/Flash_Memory/Flash_Memory.h" #include "drivers/Flash_Memory/fatfs/ff.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index da928e8ae..aaa6f9a50 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -49,6 +49,8 @@ #include +#include "diagnostics.h" + extern F2_CTRL_REG F2_CTRL_Reg; char DiagnosticsToken[36+1] = {0}; @@ -63,26 +65,17 @@ uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue) uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t DispensersCollection(uint32_t IfIndex, uint32_t ReadValue); -//#define REDUCED_DIAGNOSTICS DiagnosticsMonitors DiagnosticsMonitor = DIAGNOSTICS_MONITORS__INIT; #define DIAGNOSTICS_LIMIT 3 #define DIAGNOSTICS_DANCER_LIMIT 30 int DiagnosticsIndex = 0; -#ifdef REDUCED_DIAGNOSTICS -int DiagnosticCollectionLimit = 1; //number of data samples to collect before sending to the host -#else int DiagnosticCollectionLimit = 2; //number of data samples to collect before sending to the host -#endif //int DiagnosticLimit = eHundredMillisecond; //frequency of data collection //int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection -#ifdef REDUCED_DIAGNOSTICS -int DiagnosticLimit =eOneSecond; //frequency of data collection -#else int DiagnosticLimit =eHundredMillisecond; //frequency of data collection -#endif + int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection -//#define TEN_MSEC_COLLECTION //DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT+1]; double dancer1angle[DIAGNOSTICS_LIMIT+1]; double dancer2angle[DIAGNOSTICS_LIMIT+1]; @@ -109,6 +102,7 @@ double dispensermotorfrequency[MAX_SYSTEM_DISPENSERS][DIAGNOSTICS_LIMIT+1]; double dispenserspressure[MAX_SYSTEM_DISPENSERS][DIAGNOSTICS_LIMIT+1]; double MidTankpressure[MAX_SYSTEM_DISPENSERS][1]; double HeatersCurrent[NUM_OF_CURRENT_HEATERS][1]; +double VOC_Sensor; DoubleArray DispenserFreq[MAX_SYSTEM_DISPENSERS]; DoubleArray DiagnosticsDispenserPressure[MAX_SYSTEM_DISPENSERS]; @@ -154,6 +148,8 @@ int diag_index=0; uint32_t diag_size[MAX_DIAG_LOG]; uint32_t diag_time[MAX_DIAG_LOG]; +Diagnostic_Mode DiagnosticMode = Diagnostic_Normal_Mode; + /******************** CODE ********************************************/ //********************************************************************** @@ -192,14 +188,35 @@ void DiagnosticsInit(void) return; } +/*typedef enum +{ + Diagnostic_Minimal_Mode, + Diagnostic_Normal_Mode, + Diagnostic_Extended_Mode, + Diagnostic_Extreme_Mode +}Diagnostic_Mode; +if (DiagnosticMode == Diagnostic_Minimal_Mode) +if (DiagnosticMode == Diagnostic_Normal_Mode) +if (DiagnosticMode == Diagnostic_Extended_Mode) +if (DiagnosticMode == Diagnostic_Extreme_Mode) +*/ +void SetDiagnosticMode(Diagnostic_Mode Mode) +{ + DiagnosticMode = Mode; + REPORT_MSG(Mode,"Diagnostic Mode set"); +} void SetDiagnosticCollectionLimit(int limit) { if ((limit)&&(limit<= DIAGNOSTICS_LIMIT)) DiagnosticCollectionLimit = limit; -#ifdef REDUCED_DIAGNOSTICS + DiagnosticLimit =eHundredMillisecond; //frequency of data collection + + if (DiagnosticMode <= Diagnostic_Normal_Mode) + { DiagnosticCollectionLimit = 1; //overrule - send at least once every second -#endif + DiagnosticLimit =eOneSecond; //frequency of data collection + } } uint8_t HeaterCounterIndex[MAX_HEATERS_NUM]= {0,0,0,0,0,0,0,0,0,0}; @@ -340,7 +357,6 @@ void DiagnosticTenMsecCollection(void) { if (DiagnosticsActive == false) return; -//#ifdef TEN_MSEC_COLLECTION /*if (JobIsActive()== false) return;*/ DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0,0)); @@ -352,7 +368,6 @@ void DiagnosticTenMsecCollection(void) DiagnosticLoadDancerError(FEEDER_DANCER,ThreadGetMotorCalculatedError(FEEDER_DANCER)); //DiagnosticLoadSpeedSensor(getSensorSpeedData()); -//#endif } void DiagnosticOneSecCollection(void) { @@ -388,19 +403,20 @@ void Diagnostic100msecCollection(void) return; //DiagnosticLoadSpeedSensor(getSensorSpeedData()); -#ifndef REDUCED_DIAGNOSTICS -#ifndef TEN_MSEC_COLLECTION - DiagnosticTenMsecCollection(); //call the 10msec function every 100 msec to reduce transport -#endif - //if (JobIsActive()) + if (DiagnosticMode == Diagnostic_Extreme_Mode) + DiagnosticTenMsecCollection(); //call the 10msec function every 100 msec to reduce transport + + if (DiagnosticMode >= Diagnostic_Extended_Mode) { - DiagnosticLoadMotor(FEEDER_MOTOR, ThreadGetMotorSpeed (FEEDER_MOTOR)); - DiagnosticLoadMotor(DRYER_MOTOR, ThreadGetMotorSpeed (DRYER_MOTOR)); - DiagnosticLoadMotor(POOLER_MOTOR, ThreadGetMotorSpeed (POOLER_MOTOR)); - DiagnosticLoadMotor(WINDER_MOTOR, ThreadGetMotorSpeed (WINDER_MOTOR)); - DiagnosticLoadMotor(SCREW_MOTOR, ThreadGetMotorSpeed (SCREW_MOTOR)); + if (JobIsActive()) + { + DiagnosticLoadMotor(FEEDER_MOTOR, ThreadGetMotorSpeed (FEEDER_MOTOR)); + DiagnosticLoadMotor(DRYER_MOTOR, ThreadGetMotorSpeed (DRYER_MOTOR)); + DiagnosticLoadMotor(POOLER_MOTOR, ThreadGetMotorSpeed (POOLER_MOTOR)); + DiagnosticLoadMotor(WINDER_MOTOR, ThreadGetMotorSpeed (WINDER_MOTOR)); + DiagnosticLoadMotor(SCREW_MOTOR, ThreadGetMotorSpeed (SCREW_MOTOR)); + } } -#endif /* DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); @@ -425,13 +441,14 @@ void Diagnostic100msecCollection(void) MidTankpressure[i][0] = 1.00-(IDS_Dispenser_Data[i].consumedinnanolitter/5800000); } */ -#ifndef REDUCED_DIAGNOSTICS - for (i=0;i= Diagnostic_Extended_Mode)) { DiagnosticsMonitor.n_dancer1angle = DancerCounterIndex[0]; DiagnosticsMonitor.n_dancer2angle = DancerCounterIndex[1]; @@ -538,7 +554,6 @@ void SendDiagnostics(void) DiagnosticsMonitor.n_windermotor = MotorCounterIndex[WINDER_MOTOR]; DiagnosticsMonitor.n_screwmotor = MotorCounterIndex[SCREW_MOTOR]; } -#endif DiagnosticsMonitor.mixertemperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__MixerHeater]; DiagnosticsMonitor.headzone1temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1]; DiagnosticsMonitor.headzone2temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2]; @@ -654,6 +669,10 @@ void SendDiagnostics(void) DiagnosticsMonitor.n_headzone5_6heatercurrent = 1; DiagnosticsMonitor.headzone5_6heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_5_6]; + VOC_Sensor = (double) getGasReading(); + DiagnosticsMonitor.n_filterdeltapressure = 1; + DiagnosticsMonitor.filterdeltapressure = &VOC_Sensor; + response.monitors = &DiagnosticsMonitor; //response.digitalpins = DigitalPinArray; response.n_componentsstates = 0; @@ -734,12 +753,10 @@ uint32_t DiagnosticsStart(void) DiagnosticsControlId = AddControlCallback(Diagnostics_ControlTrigger,DiagnosticLimit,TemplateDataReadCBFunction,0,0,0); else LOG_ERROR(DiagnosticsControlId,"Diagnostics restarted"); -#ifdef TEN_MSEC_COLLECTION if (Diagnostics10MSControlId == 0xFF) Diagnostics10MSControlId = AddControlCallback(Diagnostics_TenMiliControlTrigger,DiagnosticFastLimit,TemplateDataReadCBFunction,0,0,0); else LOG_ERROR(DiagnosticsControlId,"Diagnostics restarted"); -#endif if (Diagnostics1SecControlId == 0xFF) Diagnostics1SecControlId = AddControlCallback(Diagnostics_OneSecControlTrigger,eOneSecond,TemplateDataReadCBFunction,0,0,0); else @@ -823,13 +840,14 @@ uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue) { DiagnosticsMessageStruc Message; - //send message to the Millisec task - Message.messageId = DiagnosticsTenMiliTrigger; - Message.msglen = sizeof(DiagnosticsMessageStruc); - if (DiagnosticsMsgQ != NULL) - Mailbox_post(DiagnosticsMsgQ , &Message, BIOS_NO_WAIT); - - + if (DiagnosticMode == Diagnostic_Extreme_Mode) + { + //send message to the Millisec task + Message.messageId = DiagnosticsTenMiliTrigger; + Message.msglen = sizeof(DiagnosticsMessageStruc); + if (DiagnosticsMsgQ != NULL) + Mailbox_post(DiagnosticsMsgQ , &Message, BIOS_NO_WAIT); + } return OK; } @@ -869,9 +887,7 @@ void DiagnosticsTask(UArg arg0, UArg arg1) Diagnostic100msecCollection(); break; case DiagnosticsTenMiliTrigger: -#ifdef TEN_MSEC_COLLECTION DiagnosticTenMsecCollection(); -#endif break; case DiagnosticsOneSecTrigger: DiagnosticOneSecCollection(); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h index a68731eea..d6d515598 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h @@ -12,9 +12,17 @@ extern bool blowervolatgedisplay; extern bool midtankDisplay; extern double voltage; -extern uint8_t* diagnosticscontainer_buffer; +extern char* diagnosticscontainer_buffer; +typedef enum +{ + Diagnostic_Minimal_Mode, + Diagnostic_Normal_Mode, + Diagnostic_Extended_Mode, + Diagnostic_Extreme_Mode +}Diagnostic_Mode; +void SetDiagnosticMode(Diagnostic_Mode Mode); uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer); uint32_t StopDiagnosticsRequestFunc(MessageContainer* requestContainer); diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index f5e33ed14..5a706e25c 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -185,6 +185,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->dispenserpresegmentwfcf = 80; EmbeddedParameters->has_startheatingoninitsequence = true; EmbeddedParameters->startheatingoninitsequence = true; //set to true shlomo 14/5/2019 + EmbeddedParameters->n_generalparameters = 7; EmbeddedParameters->generalparameters = malloc (sizeof(double)*10); if (EmbeddedParameters->generalparameters) { @@ -194,6 +195,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->generalparameters[3] = 0.0; //CheckMotorAlarms EmbeddedParameters->generalparameters[4] = 800.0; //Winder homing time at end of job EmbeddedParameters->generalparameters[5] = 1000.0; //Dispenser initial pressure speed + EmbeddedParameters->generalparameters[6] = Diagnostic_Normal_Mode; //Diagnostic Mode SetDiagnosticMode } EmbeddedParameters->has_currentalarmlowlimit = true; EmbeddedParameters->currentalarmlowlimit = 0.80; @@ -270,8 +272,15 @@ uint32_t EmbeddedParametersInit(void) } } + if (EmbeddedParameters->n_generalparameters >= 6) + { + IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag,EmbeddedParameters->generalparameters[5]); + } + else + { + IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag,900); + } IDS_Dispenser_SetTimeOutValues(EmbeddedParameters->closevalvetimeout, EmbeddedParameters->openvalvetimeout); - IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag,EmbeddedParameters->generalparameters[5]); IDS_Dispenser_SetPrepareValues(EmbeddedParameters->dispenserbuildpressurespeed, EmbeddedParameters->dispenserbuildpressurelimit, EmbeddedParameters->dispenserbuildpressuretimeout, EmbeddedParameters->dispenserbuildpressurelag); IDS_Dispenser_SetPreSegmentWFCFValues(EmbeddedParameters->dispenserpresegmentwfcf, EmbeddedParameters->ids_presegment_wfcf_timebeforesegment); IDS_Dispenser_SetPreSegmentCleaningValues(EmbeddedParameters->ids_cleaningspeed,EmbeddedParameters->ids_cleaningstartspraypresegmenttime ,EmbeddedParameters->ids_cleaningstopbeforesegmenttime,EmbeddedParameters->ids_leftcleaningmotorspeed,EmbeddedParameters->ids_rightcleaningmotorspeed); @@ -284,15 +293,24 @@ uint32_t EmbeddedParametersInit(void) PowerOffSetTemperatureThreshold(EmbeddedParameters->powerofftemperaturelimit); InitSequenceSetStartHeating (EmbeddedParameters->startheatingoninitsequence); - bool checkHardLimitAlarms, checkCurrentAlarms, checkTamperAlarms, checkMotorAlarms; - checkHardLimitAlarms = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; - checkCurrentAlarms = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; - checkTamperAlarms = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; - checkMotorAlarms = (EmbeddedParameters->generalparameters[3] < 0.5)?false:true; - AlarmHandlingSetFlags(checkHardLimitAlarms,checkCurrentAlarms,checkTamperAlarms,checkMotorAlarms); - SetWinderBackToBaseTime((uint32_t) EmbeddedParameters->generalparameters[4]); - - + bool checkHardLimitAlarms = false, checkCurrentAlarms = false, checkTamperAlarms = false, checkMotorAlarms = false; + if (EmbeddedParameters->n_generalparameters >= 4) + { + checkHardLimitAlarms = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; + checkCurrentAlarms = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; + checkTamperAlarms = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; + checkMotorAlarms = (EmbeddedParameters->generalparameters[3] < 0.5)?false:true; + AlarmHandlingSetFlags(checkHardLimitAlarms,checkCurrentAlarms,checkTamperAlarms,checkMotorAlarms); + } + if (EmbeddedParameters->n_generalparameters >= 5) + SetWinderBackToBaseTime((uint32_t) EmbeddedParameters->generalparameters[4]); + if (EmbeddedParameters->n_generalparameters >= 7) + { + if(EmbeddedParameters->generalparameters[6]<0.5) SetDiagnosticMode(Diagnostic_Minimal_Mode); + else if(EmbeddedParameters->generalparameters[6]<1.5) SetDiagnosticMode(Diagnostic_Normal_Mode); + else if(EmbeddedParameters->generalparameters[6]<2.5) SetDiagnosticMode(Diagnostic_Extended_Mode); + else if(EmbeddedParameters->generalparameters[6]<3.5) SetDiagnosticMode(Diagnostic_Extreme_Mode); + } PowerIdleSetParameters(EmbeddedParameters->switchtoidletimeinseconds,EmbeddedParameters->idledriertemperature,EmbeddedParameters->idleheadtemperature,EmbeddedParameters->idlemixertemperature); return Fresult; diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c index 56f88a040..7949ee0c2 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c +++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c @@ -19,6 +19,10 @@ #include "PMR/MachineStatus/MachineState.pb-c.h" #include "PMR/MachineStatus/IDSPackLevel.pb-c.h" +#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" + +#include "Modules/General/MachineStatus.h" + #include "modules/ids/ids_ex.h" MachineState StoredMachineStatus = MACHINE_STATE__Ready; @@ -103,6 +107,10 @@ uint32_t MachineUpdateInitFunc(MessageContainer* requestContainer) start_machine_status_update_request__free_unpacked(request,NULL); return status; } +void MachineUpdateStopReporting(void) +{ + MachineUpdateToken[0] = 0; +} uint32_t StopMachineUpdateFunc(MessageContainer* requestContainer) { @@ -125,8 +133,4 @@ uint32_t StopMachineUpdateFunc(MessageContainer* requestContainer) return OK; } -void MachineUpdateStopReporting(void) -{ - MachineUpdateToken[0] = 0; -} diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h index 7530c5bcd..489a8f638 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h +++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h @@ -13,6 +13,7 @@ uint32_t MachineUpdateInitFunc(MessageContainer* requestContainer); uint32_t StopMachineUpdateFunc(MessageContainer* requestContainer); void SetMachineStatus (MachineState State); +int MachineUpdateResponseFunc(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 4789db31f..050bb65b8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -196,11 +196,11 @@ void HeatersControlStop(void) //{eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP1, 0,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, //{eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP2, 1,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, typedef enum{ - ENCLOSURE_INTERNAL_TEMP, - CABINET_INTERNAL_TEMP, - MAIN_CARD_INTERNAL_TEMP, + INTERNAL_ENCLOSURE_TEMP, + INTERNAL_CABINET_TEMP, + INTERNAL_MAIN_CARD_TEMP, MAX_INTERNAL_ALARMS -}; +}InternalTemperatureTestPointsEnum; int InternalAlarmCounter[MAX_INTERNAL_ALARMS] = {0,0,0}; uint32_t InternalId2PT100Id[MAX_INTERNAL_ALARMS] = {TEMP_SENSE_AN_ENCLOSURETEMP1,TEMP_SENSE_AN_ENCLOSURETEMP1,0xFF}; int32_t InternalOverHeatCounter [MAX_INTERNAL_ALARMS] = {0,0,0}; @@ -557,7 +557,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) HeaterCmd[HeaterId].targettemperatue = 0; AlarmHandlingSetAlarm(HeaterEventType[HeaterId], true); - return ERROR; + return; } } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 4f60cfa14..0de3fa1f3 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -649,7 +649,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. IDS_Active = true; Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); - JobTicket* JobTicket = JobDetails; + //JobTicket* JobTicket = JobDetails; for (Motor_i = 0;Motor_i < MAX_SYSTEM_DISPENSERS;Motor_i++) @@ -814,7 +814,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; - + PreSegmentWCFStarted = true; setRapidPressureRead(false); } return OK; @@ -979,7 +979,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); } } - if ((InterSegmentStartWFCFDispensers > 10000)&&(InterSegmentStartWFCFDispensers == (InterSegmentStepsCount+10000))) + if ((InterSegmentStartWFCFDispensers > 12000)&&(InterSegmentStartWFCFDispensers == (InterSegmentStepsCount+12000))) { //start prepare 4 seconds before wcf IDSPresegmentPrepareStart(); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 7d4b66dfb..1f9897905 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -17,6 +17,9 @@ #include "Modules/General/process.h" #include "Modules/control/pidalgo.h" +#include "Modules/heaters/heaters_ex.h" +#include "StateMachines/Initialization/InitSequence.h" + #include "PMR/Hardware/HardwareMotor.pb-c.h" #include "PMR/Hardware/HardwareMotorType.pb-c.h" #include "PMR/Hardware/HardwareDancerType.pb-c.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index c5e124ad3..e01d12a05 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -282,7 +282,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) double temp,tempScrewSpeed; double screw_horizontal_speed = 0; double RotationsPerSecond; - double Averagewinderspeed = 0; + //double Averagewinderspeed = 0; // { // TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter]; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 9e77f2de8..59542ec38 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -451,7 +451,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) //read value is the dancer angle int i,index=MAX_THREAD_MOTORS_NUM; int DancerId; - int32_t TranslatedReadValue, avreageSampleValue = 0,avreageMotorSampleValue = 0; + int32_t TranslatedReadValue, avreageSampleValue = 0;//,avreageMotorSampleValue = 0; //double tempcalcspeed = 0; double calculated_speed; double NormalizedError; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 73421f142..3e2fe32be 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -119,8 +119,6 @@ uint32_t PowerOffHeadCleanCallback(uint32_t DispenserId, uint32_t ReadValue) /*******************************************************************************************************/ uint32_t PowerOffHeadClean(void) { - uint32_t status; - //TBD ThreadCleaningJobFunc(50); if (PowerOffHeadCleanControlId != 0xFF) @@ -141,6 +139,8 @@ uint32_t PowerOffDispenserHomingCallback(uint32_t DispenserId, uint32_t ReadValu { DispenserHomingActive[DispenserId] = false; REPORT_MSG (DispenserId, "PowerOffDispenserHomingCallback"); + + return OK; } #define TI_DISPENSER_ID 4 #define DEFAULT_MIXER_CLEANING_SPEED 1000 @@ -174,6 +174,7 @@ uint32_t PowerOffMixerFlushDispenserStopCallback(void) REPORT_MSG (PowerOffMachineState, "PowerOffMixerFlushDispenserStopCallback"); IDS_Dispenser_Start_Motor_and_Open_Valve(TI_DISPENSER_ID,DEFAULT_MIXER_CLEANING_SPEED,NULL); PowerOffHeadCleanControlId = AddControlCallback( PowerOffMixerFlushCallback,DEFAULT_MIXER_CLEANING_TIMEOUT , TemplateDataReadCBFunction,0,0, 0 ); + return OK; } /*******************************************************************************************************/ uint32_t PowerOffMixerFlush(void) diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index af795d91c..3720b884a 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -61,6 +61,8 @@ #include "StateMachines/Initialization/PowerIdle.h" +#include "drivers/Motors/Motor.h" + #include "./printingSTM.h" #include "modules/thread/thread_ex.h" #include "modules/AlarmHandling/AlarmHandling.h" @@ -418,60 +420,68 @@ uint32_t ThreadCleaningJobFunc(int speed) } else { - memcpy(&CopyConfigured,&Configured,sizeof(CopyConfigured)); - //set the job handler to ignore heaters, ids and waste in the state machine - Configured[Module_Thread] = true; - Configured[Module_Winder] = true; - Configured[Module_IDS] = false; - Configured[Module_Heaters] = false; - Configured[Module_Waste] = false; - //set the requested speed without changing other process parameters - memcpy (&ProcessParametersCopy,&ProcessParametersKeep,sizeof(ProcessParameters)); - if(speed) - ProcessParametersCopy.dyeingspeed = speed; - else - ProcessParametersCopy.dyeingspeed = 40; - if (HandleProcessParameters(&ProcessParametersCopy)!= OK) + if (isMotorConfigured(CLEANER_DISPENSER + HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)==false) { - status = FAILED; + status = ERROR; + LOG_ERROR(JobIsActive(),"Jog No cleaner dispenser"); } else { - //load essential job prameters to enable thread running - Ticket.uploadstrategy = JOB_UPLOAD_STRATEGY__Default; - Ticket.n_segments = 1; - Ticket.enableintersegment = true; - Ticket.intersegmentlength = 200; - n_segments = 2; - Ticket.segments = my_malloc(sizeof(Ticket.segments)*2); - TSegment = my_malloc(sizeof(JobSegment)); - Tspool = my_malloc(sizeof(JobSpool)); - TbrushStop = my_malloc(sizeof(JobBrushStop)); - TSegment->length = 200.0; - TSegment->n_brushstops = 1; - TSegment->brushstops = my_malloc(sizeof(TSegment->brushstops)); - TSegment->brushstops[0] = TbrushStop; - Tdispenser = my_malloc(sizeof(JobDispenser)); - - TbrushStop->has_index =true; - TbrushStop->index = 0; - TbrushStop->n_dispensers = 1; - TbrushStop->dispensers = my_malloc(sizeof(TbrushStop->dispensers)); - TbrushStop->dispensers[0] = Tdispenser; - Tdispenser->nanolitterpersecond = 10000; - Tdispenser->nanoliterperpulse = 2.34; - Tdispenser->dispenserstepdivision = DISPENSER_STEP_DIVISION__Auto; - Ticket.segments[0] = TSegment; - Ticket.segments[1] = TSegment; - Tspool->backingrate = 32; - Tspool->bottombackingrate = 32; - Tspool->segmentoffsetpulses = 1000; - Tspool->startoffsetpulses = 220; - Tspool->rotationsperpassage = 3.1415926*2; - Ticket.spool = Tspool; - CurrentJob = &Ticket; - InternalWindingConfigMessage(Tspool); - StartJob(&Ticket); + memcpy(&CopyConfigured,&Configured,sizeof(CopyConfigured)); + //set the job handler to ignore heaters, ids and waste in the state machine + Configured[Module_Thread] = true; + Configured[Module_Winder] = true; + Configured[Module_IDS] = false; + Configured[Module_Heaters] = false; + Configured[Module_Waste] = false; + //set the requested speed without changing other process parameters + memcpy (&ProcessParametersCopy,&ProcessParametersKeep,sizeof(ProcessParameters)); + if(speed) + ProcessParametersCopy.dyeingspeed = speed; + else + ProcessParametersCopy.dyeingspeed = 40; + if (HandleProcessParameters(&ProcessParametersCopy)!= OK) + { + status = FAILED; + } + else + { + //load essential job prameters to enable thread running + Ticket.uploadstrategy = JOB_UPLOAD_STRATEGY__Default; + Ticket.n_segments = 1; + Ticket.enableintersegment = true; + Ticket.intersegmentlength = 200; + n_segments = 2; + Ticket.segments = my_malloc(sizeof(Ticket.segments)*2); + TSegment = my_malloc(sizeof(JobSegment)); + Tspool = my_malloc(sizeof(JobSpool)); + TbrushStop = my_malloc(sizeof(JobBrushStop)); + TSegment->length = 200.0; + TSegment->n_brushstops = 1; + TSegment->brushstops = my_malloc(sizeof(TSegment->brushstops)); + TSegment->brushstops[0] = TbrushStop; + Tdispenser = my_malloc(sizeof(JobDispenser)); + + TbrushStop->has_index =true; + TbrushStop->index = 0; + TbrushStop->n_dispensers = 1; + TbrushStop->dispensers = my_malloc(sizeof(TbrushStop->dispensers)); + TbrushStop->dispensers[0] = Tdispenser; + Tdispenser->nanolitterpersecond = 10000; + Tdispenser->nanoliterperpulse = 2.34; + Tdispenser->dispenserstepdivision = DISPENSER_STEP_DIVISION__Auto; + Ticket.segments[0] = TSegment; + Ticket.segments[1] = TSegment; + Tspool->backingrate = 32; + Tspool->bottombackingrate = 32; + Tspool->segmentoffsetpulses = 1000; + Tspool->startoffsetpulses = 220; + Tspool->rotationsperpassage = 3.1415926*2; + Ticket.spool = Tspool; + CurrentJob = &Ticket; + InternalWindingConfigMessage(Tspool); + StartJob(&Ticket); + } } } return status; diff --git a/Software/Stubs Collection/stubs/embeddedparametersbuild.cs b/Software/Stubs Collection/stubs/embeddedparametersbuild.cs index 790bd6891..ff970f3b2 100644 --- a/Software/Stubs Collection/stubs/embeddedparametersbuild.cs +++ b/Software/Stubs Collection/stubs/embeddedparametersbuild.cs @@ -31,17 +31,17 @@ configurationParameters.OverHeatCountLimit = 3; configurationParameters.UnderHeatCountLimit = 3; // time of motor activity before opening the valve or after closing the valve, in milliseconds -configurationParameters.CloseValveTimeout = 255; -configurationParameters.OpenValveTimeout = 255; +configurationParameters.CloseValveTimeout = 50; +configurationParameters.OpenValveTimeout = 50; //backlash after filling - target pressure, timoeout, time staps (speed will be added in general parameters) -configurationParameters.InitialDispenserPressure = 1.5; +configurationParameters.InitialDispenserPressure = 1.2; configurationParameters.InitialDispenserTimeout = 60000; //20 seconds configurationParameters.InitialDispenserTimeLag = 100; //job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed -configurationParameters.DispenserBuildPressureSpeed = 800; //no more than 1000 -configurationParameters.DispenserBuildPressureLimit = 0.9; +configurationParameters.DispenserBuildPressureSpeed = 950; //no more than 1000 +configurationParameters.DispenserBuildPressureLimit = 1.2; configurationParameters.DispenserBuildPressureTimeout = 80000; configurationParameters.DispenserBuildPressureLag = 50; @@ -57,12 +57,12 @@ configurationParameters.DCHeatersUpperOperationLimit = 1005; configurationParameters.MidTankPressureCorrection = 0.0; //waste factor for intersegment pressure building -configurationParameters.DispenserPresegmentWFCF = 80; +configurationParameters.DispenserPresegmentWFCF = 40; //how much time to start the WFCF process (pressure buildup) before segment start -configurationParameters.IDSPreSegmentWFCFTimeBeforeSegment = 1500; +configurationParameters.IDSPreSegmentWFCFTimeBeforeSegment = 30000; //flag: start heaters according to saved process parameters upon init? -configurationParameters.StartHeatingOnInitSequence = true; +configurationParameters.StartHeatingOnInitSequence = false; // current test for the heaters - alarm thresholds configurationParameters.CurrentAlarmLowLimit = 0.80; @@ -70,7 +70,7 @@ configurationParameters.CurrentAlarmHighLimit = 1.07; configurationParameters.IDSSegmentRefillTimeout = 5000; configurationParameters.IDSPreSegmentBuildupTime = 5000; -configurationParameters.IDSCleaningSpeed = 50; +configurationParameters.IDSCleaningSpeed = 534; configurationParameters.IDSCleaningStopBeforeSegmentTime = 3000; configurationParameters.IDSCleaningStartSprayPreSegmentTime = 1000; configurationParameters.IDSLeftCleaningMotorSpeed = 30; @@ -87,7 +87,7 @@ Double checkHardLimitAlarms = new Double(); checkHardLimitAlarms = 1.0; configurationParameters.GeneralParameters.Add(checkHardLimitAlarms); Double checkCurrentAlarms = new Double(); -checkCurrentAlarms = 1.0; +checkCurrentAlarms = 0.0; configurationParameters.GeneralParameters.Add(checkCurrentAlarms); //check the tamper alarms Double checkTamperAlarms = new Double(); @@ -105,6 +105,9 @@ Double DispenserInitialPressureSpeed = new Double(); DispenserInitialPressureSpeed = 1000.0; configurationParameters.GeneralParameters.Add(DispenserInitialPressureSpeed); +Double SetDiagnosticMode = new Double(); +SetDiagnosticMode = 1.0; +configurationParameters.GeneralParameters.Add(SetDiagnosticMode); File.WriteAllBytes("C:/temp/EmbParam.cfg",configurationParameters.ToBytes()); -- cgit v1.3.1 From b8aef0537ad419b20efba682bfd06caeb53fe444 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 3 Sep 2019 14:35:49 +0300 Subject: improve winding, logs, pressure handling --- .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 2 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 16 ++++++++++++++-- .../Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c | 2 +- Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c | 4 ++-- .../Embedded/StateMachines/Printing/PrintingSTM.c | 3 ++- 5 files changed, 20 insertions(+), 7 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c index 7eccf5c58..71a7ef034 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c @@ -23,7 +23,7 @@ uint16_t VOC_Index = 0; uint8_t Gas_PPM[MAX_VOC_SAMPLES] = {0}; -uint32_t VOC_Slope=0,VOC_AverageLimit=0, VOC_Slope_Time=0; +uint32_t VOC_Slope=2,VOC_AverageLimit=0, VOC_Slope_Time=10; bool VOC_TimeAlarm = false,VOC_SlopeAlarm = false; void VOCAlarmsInit(void) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 746182def..70c86d843 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -979,6 +979,12 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); } } + if (FileBrushStop == NULL) + { + //cleaning + return OK; + } + if ((InterSegmentStartWFCFDispensers > 12000)&&(InterSegmentStartWFCFDispensers == (InterSegmentStepsCount+12000))) { //start prepare 4 seconds before wcf @@ -1305,7 +1311,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); CurrentDispenserSpeed[DispenserId] = segmentfirst_speed; - usnprintf(IdMessage, 80, + usnprintf(IdsMessage, 80, "Dispenser %d nl/sec %d nl/pulse %d speed %d steps %d/%d", DispenserId, (int) Dispensers[Dispenser_i]->nanolitterpersecond, @@ -1321,7 +1327,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) //IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);*/ MotorStop(HW_Motor_Id, Hard_Hiz); CurrentDispenserSpeed[DispenserId] = 0; - Report("inActive dispenser stopped", __FILE__, __LINE__, DispenserId, RpWarning, segmentfirst_speed, 0); + //Report("inActive dispenser stopped", __FILE__, __LINE__, DispenserId, RpWarning, segmentfirst_speed, 0); } } } @@ -1463,10 +1469,14 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) DispenserDistanceToSpoolReady[Dispenser_i] = false; MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); Control3WayValvesWithCallback ((Valves_t)Dispenser_i, MidTank_Dispenser, IDS_Valve_DistanceToSpoolValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer + CurrentDispenserSpeed[Dispenser_i] = 0; //IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_DistanceToSpoolValveReady); } //cleaning + if (FileBrushStop) + FreeBrushStopFileData(FileBrushStop); + FileBrushStop = NULL; lInterSegmentLength = (dryerbufferCentimeters*1000/dyeingspeed); lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication @@ -1523,6 +1533,8 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) { MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); Control3WayValvesWithCallback (Dispenser_i, MidTank_Dispenser, IDS_Valve_EndValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer + CurrentDispenserSpeed[Dispenser_i] = 0; + //IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_EndValveReady); } else diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index e01d12a05..20045e5fb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -322,7 +322,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) #ifdef READ_SCREW_ENCODER int WinderRun; WinderRun = abs(ScrewLocationRun[1] - ScrewLocationRun[0]); - if ((WinderRun < 50000)&&(Add100 == false)) + if /*((WinderRun < 50000)&&(Add100 == false))*/(Add100 == false) { WinderRunSum+=WinderRun; WinderRunSamples++; diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c index 62b8288bf..b4bf61219 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c @@ -1074,10 +1074,10 @@ WHS_sensor CartridgeCoverCallBackFunction() { REPORT_MSG(parameter," ------------ Mid-tank Filling : Close cartridge cover ----------------- "); } - else if(WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN) + /*else if(WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN) { REPORT_MSG(parameter," ------------ Mid-tank Filling : Cartridge door open ----------------- "); - } + }*/ return ret; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 8606d68d3..876d50da8 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -266,7 +266,7 @@ JobDescriptionFileBrushStop *GetNextBrushStopFromJobFile() } void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop) { - REPORT_MSG(BrushStop->index,"Free BrushStop file Read Index"); + //REPORT_MSG(BrushStop->index,"Free BrushStop file Read Index"); if (BrushStop) job_description_file_brush_stop__free_unpacked (BrushStop,NULL); BrushStop = NULL; @@ -788,6 +788,7 @@ void PrintSTMMsgHandler(void * msg) EndState(CurrentJob, "Job Distance t Spool Failed"); break; case PrintSystemFailure: + Report("PrintSystemFailure - Job aborted",__FILE__,__LINE__, SegmentId,RpMessage,n_segments,0); EndState(CurrentJob, Message->messageData); break; default: -- cgit v1.3.1 From 3ea86783edbeb5a317cacfa0e6c6451759c2506a Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 16 Sep 2019 10:29:51 +0300 Subject: Version 1.4.4.8: stop thread loading, bypass safety on dispenser homing and priming --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 2 ++ .../Embedded/Drivers/Motors/MotorActions.c | 9 +++++ .../Embedded_SW/Embedded/Modules/General/buttons.c | 2 +- .../Embedded/Modules/Heaters/Heaters_print.c | 10 +++--- .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 8 ++++- .../Modules/Stubs_Handler/temperature_sensor.c | 2 ++ .../Embedded/Modules/Thread/ThreadLoad.c | 39 +++++++++++++--------- 8 files changed, 51 insertions(+), 23 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 455d72c7a..833b8b66c 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,4,7};//remove AUTO_HOME_DISPENSERS + midtank pressure new calculation +TangoVersion_t _gTangoVersion = {1,4,4,8};//remove AUTO_HOME_DISPENSERS + midtank pressure new calculation #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index 3de224477..afacb50c3 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -234,6 +234,8 @@ uint32_t MotorAbortMovetoLimitSwitch (TimerMotors_t _motorId); uint32_t MotorMoveToStopper (TimerMotors_t _motorId,bool direction, uint32_t Speed, callback_fptr callback,uint32_t backlash,uint32_t timeout); uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout); +uint32_t MotorStopAction (TimerMotors_t MotorId); //Stop the controlled action of a motor + uint32_t MotorGoTo(TimerMotors_t _motorIdn, uint32_t Steps); void Combined_Motor_Driver_Mode(TimerMotors_t _motorId, MOTDRIVER_MODE New_Mode);// New_mode: Current or Voltage diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index b4c3a7da7..5861d6a7a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -244,6 +244,15 @@ uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) / return OK; } +uint32_t MotorStopAction (TimerMotors_t MotorId) //TODO +{ + Report("MotorStopAction",__FILE__,MotorId,MotorControlId[MotorId],RpWarning,MotorControlCallback[MotorId] ,0); + RemoveControlCallback(MotorControlId[MotorId], MotorControlCallback[MotorId] ); + MotorControlId[MotorId] = 0xFF; + MotorControlCallback[MotorId] = NULL; + MotorStop(MotorId,Hard_Hiz); + +} uint32_t MotorMoveToStopper (TimerMotors_t MotorId,bool direction, uint32_t Speed, callback_fptr callback,uint32_t backlash,uint32_t timeout) //TODO { //assert (callback); diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index b44cba8b4..b62b0116e 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -670,7 +670,7 @@ void test_avi() uint32_t LoadLongPress( button *pBtn) { - + Thread_Load_End(); return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 34fd48a17..503d3ee0b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -541,8 +541,8 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) if((HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain])|| (HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary])) { - ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,RpError, 0,0); - ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,RpError, 0,0); + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,RpError, HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain],0); + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,RpError, HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary],0); if (ControlIdtoMaxHeaterId [HeaterId] != 0xFF) { RemoveControlCallback(ControlIdtoMaxHeaterId [HeaterId], DcHeaterMaxTempCBFunction); @@ -940,7 +940,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) //Heaters OFF until coming into the proportional band HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); - ReportWithPackageFilter(HeatersFilter, "unconfigured",__FILE__,__LINE__,0,RpError, 0,0); + //ReportWithPackageFilter(HeatersFilter, "unconfigured",__FILE__,__LINE__,0,RpError, 0,0); return ERROR; } if (abs(readValue - HeaterPreviousRead[index])>2000) @@ -966,7 +966,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } HeaterPreviousRead[index] = readValue; - if (readValue>(HeaterCmd[index].targettemperatue+2)) + if (readValue>(HeaterCmd[index].targettemperatue+200)) { ReportWithPackageFilter(HeatersFilter, "AC OverHeating in progress",__FILE__,readValue,HeaterReady[index],RpError, HeaterAtTemp[index],0); } @@ -1162,7 +1162,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) HeaterRecalculateHeaterParams(index, 0); return ERROR; } - if (readValue>(HeaterCmd[index].targettemperatue+2)) + if (readValue>(HeaterCmd[index].targettemperatue+200)) { ReportWithPackageFilter(HeatersFilter, "DC OverHeating in progress",__FILE__,readValue,HeaterReady[index],RpError, HeaterAtTemp[index],0); } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 1baf9ceb9..a9e8a5ee1 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -154,6 +154,8 @@ uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) MotorSetMicroStep(motorId, KeepMicrostep[DispenserId]); HomingActive[DispenserId]= false; PrimingActive[DispenserId]= false; + Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE + //close dry air valve in the dispenser Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); Disable_MidTank_Pressure_Reading(DispenserId); @@ -217,6 +219,7 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr else HomingActive[DispenserId] = true; + Control_TCA9534ByPass(DispenserId,ENABLE);// use ENABLE or DISABLE HomingRequestCallback[DispenserId] = callback; TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; @@ -297,6 +300,7 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) Lubricant_2Way_Valve (STOP); } PrimingActive[DispenserId] = false; + Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE if (Extended_Motor_Param == true) Power_Step_01_Dispenser_Mode(DispenserId,Voltage); MotorSetMicroStep(MotorId, KeepMicrostep[DispenserId]); @@ -317,6 +321,7 @@ uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) } else HomingActive[DispenserId] = false; + Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE TimerMotors_t motorId = (DispenserId)+HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; MotorAbortMovetoLimitSwitch(motorId); @@ -376,6 +381,7 @@ uint32_t IDS_EmptyDispenserCallback(uint32_t motorId, uint32_t ReadValue) Power_Step_01_Dispenser_Mode(DispenserId,Voltage); MotorSetMicroStep(motorId, KeepMicrostep[DispenserId]); PrimingActive[DispenserId]= false; + Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE if (DispenserId == LUBRICANT_DISPENSER) { Lubricant_2Way_Valve (STOP); @@ -401,7 +407,7 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt else PrimingActive[DispenserId] = true; HomingRequestCallback[DispenserId] = callback; - + Control_TCA9534ByPass(DispenserId,ENABLE);// use ENABLE or DISABLE TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; if ( Dispenser_Id_to_LS_Empty_Id[DispenserId] != MAX_GPI) { diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/temperature_sensor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/temperature_sensor.c index c6f253556..67d61ea65 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/temperature_sensor.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/temperature_sensor.c @@ -71,6 +71,7 @@ #include "driverlib/systick.h" #include "driverlib/adc.h" #include +#include "include.h" //***************************************************************************** @@ -231,6 +232,7 @@ int temperature_main(){ // Display the temperature value on the console. // //UARTprintf("Temperature = %3d*C or %3d*F\r", TempValueC, TempValueF); + Report("Temperature",__FILE__,__LINE__,TempValueC,RpWarning,TempValueF ,0); // // This function provides a means of generating a constant length diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 1f9897905..1575123e4 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -68,7 +68,7 @@ uint8_t NumberOfDrierLoaderCycles = 0; uint32_t status = OK; - uint32_t ControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF; + uint32_t LoadingControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF; uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM LoadStages); uint32_t ThreadLoadControlCBFunction(uint32_t index, uint32_t ReadValue); uint32_t Thread_Load_Dryer_UnLoading(void); @@ -425,11 +425,11 @@ { Report("Thread_Load_Dryer_MovetoEncoderPosition_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 200); - if(ControlId != 0xFF) + if(LoadingControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); - RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); - ControlId = 0xFF; + RemoveControlCallback(LoadingControlId, ThreadLoadControlCBFunction ); + LoadingControlId = 0xFF; } if (CallbackCounter) { @@ -452,11 +452,11 @@ { Report("Thread_Load_Dryer_Loading_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); Report("Thread_Load_Dryer_Loading_Callback details",__FILE__,__LINE__,MotorId,RpMessage,CallbackCounter,0); - /*if(ControlId != 0xFF) + /*if(LoadingControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); - RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); - ControlId = 0xFF; + RemoveControlCallback(LoadingControlId, ThreadLoadControlCBFunction ); + LoadingControlId = 0xFF; }*/ MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,10000); return OK; @@ -499,8 +499,8 @@ MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4); - ControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); - Report("AddControlCallback feeder",__FILE__,__LINE__,ControlId,RpMessage,IfTypeThread*0x100+FEEDER_MOTOR,0); + LoadingControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); + Report("AddControlCallback feeder",__FILE__,__LINE__,LoadingControlId,RpMessage,IfTypeThread*0x100+FEEDER_MOTOR,0); CallbackCounter++; Report("Thread_Load_Dryer_Loading",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, @@ -515,8 +515,8 @@ uint32_t Thread_Load_Jog_ThreadStop(uint32_t index, uint32_t ReadValue) { REPORT_MSG(LoadStages, "Thread Load State Machine step"); - SafeRemoveControlCallback(ControlId, Thread_Load_Jog_ThreadStop ); - ControlId = 0xFF; + SafeRemoveControlCallback(LoadingControlId, Thread_Load_Jog_ThreadStop ); + LoadingControlId = 0xFF; ThreadAbortJoggingFunc(); LoadStages++; ThreadLoadStateMachine(LoadStages); @@ -527,17 +527,17 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); ThreadJoggingFunc(20); - ControlId = AddControlCallback(Thread_Load_Jog_ThreadStop, eOneSecond*5,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); + LoadingControlId = AddControlCallback(Thread_Load_Jog_ThreadStop, eOneSecond*5,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); return OK; } uint32_t Thread_Load_End(void) { REPORT_MSG(LoadStages,"Loading Ended"); - if(ControlId != 0xFF) + if(LoadingControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); - RemoveControlCallback(ControlId, ThreadLoadControlCBFunction ); - ControlId = 0xFF; + RemoveControlCallback(LoadingControlId, ThreadLoadControlCBFunction ); + LoadingControlId = 0xFF; } if(PullerControlId != 0xFF) { @@ -551,6 +551,15 @@ RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); WinderControlId = 0xFF; } + + MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM); + MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_RLOADING); + MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_LLOADING); + MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_RDANCER); + MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_LDANCER1); + MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID); + MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DH_LID); + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Stop); LoadStages = THREAD_LOAD_INIT; return OK; } -- cgit v1.3.1