diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-12-24 16:20:59 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-12-24 16:20:59 +0200 |
| commit | 71f7f59a5345c2df5d2fa8c641a88bf1d12bf063 (patch) | |
| tree | bea86c782bb1a56cef3c824468680e8f0b9df476 /Software/Embedded_SW/Embedded/Modules | |
| parent | 49251db3f95a2c3146fc94ef2d487042891a6220 (diff) | |
| parent | a7d02907a37ba35da13b03264ba5110bd08f83c1 (diff) | |
| download | Tango-71f7f59a5345c2df5d2fa8c641a88bf1d12bf063.tar.gz Tango-71f7f59a5345c2df5d2fa8c641a88bf1d12bf063.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
11 files changed, 111 insertions, 14 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 13cd797a7..fd861a985 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -22,6 +22,10 @@ #include "MillisecTask.h" #include <driverlib/timer.h> +#include <time.h> +#include "Common/Utilities/Utils.h" +#include "driverlib/hibernate.h" + #include <Drivers/SSI_Comm/SSI_Comm.h> #include <Drivers/SSI_Comm/Speed_Sensor/Speed_Sensor.h> #include <Drivers/SSI_Comm/Dancer/Dancer.h> @@ -741,6 +745,11 @@ uint32_t MillisecLowLoop(uint32_t tick) DispensersCollectionCall(); if (O200Millisecond_Tick) { + + ulocaltime(umktime(&LocalTime)+1,&LocalTime); + HibernateCalendarSet(&LocalTime); + //ReportWithPackageFilter(ThreadFilter,"Time: ",__FILE__,LocalTime.tm_min,LocalTime.tm_sec,RpWarning,(int) msec_millisecondCounter,0); + Trigger_WHS_MAX11614_Read_allADC(); FPGA_GetAllDispensersValveBusyOCD(); Read_Dryer_Fan_Tacho(); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index 7c11b12bf..7e3f6252f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -40,6 +40,8 @@ void Heaters_SetOverHeatTimeOutValues(uint32_t OverHeatTimeout, uint32_t UnderHe void Heaters_SetOperationLimits(int acheatersloweroperationlimit,int acheatersupperoperationlimit,int dcheatersloweroperationlimit,int dcheatersupperoperationlimit); uint32_t DrierHeaterVoltageSetup(void); +//this function returns preparation ratio for the most cool heater (current temperature/ target temerature) +double HeatersPrepareProgress(void); uint32_t HeatersEnd(void); void HeatersControlStart(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index db7261090..d48139255 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -574,6 +574,27 @@ uint32_t HeatersSingleHeaterEnd(int HeaterId) return status; } +//this function returns preparation ratio for the most cool heater (current temperature/ target temerature) +double HeatersPrepareProgress(void) +{ + HardwarePidControlType i; + double MaxDifference = 1.00,temp = 0; + for (i=0;i<HEATER_TYPE_MAX_HEATERS;i++) + { + if(HeaterCmd[i].targettemperatue) + { + if (MillisecGetTemperatures(HeaterId2PT100Id[i])>=HeaterCmd[i].targettemperatue) + continue; + temp = MillisecGetTemperatures(HeaterId2PT100Id[i])/HeaterCmd[i].targettemperatue; + if (temp<MaxDifference) + MaxDifference = temp; + } + } + Report("HeatersPrepareProgress" ,__FILE__,__LINE__,(int)(MaxDifference*100),RpWarning,0,0); + + return MaxDifference; + +} uint32_t HeatersEnd(void) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 4ee94dae4..4d103395c 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -33,6 +33,29 @@ uint32_t OpenValveTimeout = 10; #define DISPENSER_BUILD_PRESSURE_TIMEOUT 120000 #define DISPENSER_BUILD_PRESSURE_LAG 50 #define DEFAULT_NANOLITER_PER_PULSE 2.34 + +FPGA_GPI_ENUM Dispenser_Id_to_LS_50_Id[MAX_SYSTEM_DISPENSERS] = { + GPI_LS_DISPENSER_50_1, //MOTO_DISPENSER_1 = 6, + GPI_LS_DISPENSER_50_2, //MOTO_DISPENSER_2 = 7, + GPI_LS_DISPENSER_50_3, //MOTO_DISPENSER_3 = 8, + GPI_LS_DISPENSER_50_4, //MOTO_DISPENSER_4 = 9, + GPI_LS_DISPENSER_50_5, //MOTO_DISPENSER_5 = 10, + GPI_LS_DISPENSER_50_6, //MOTO_DISPENSER_6 = 11, + GPI_LS_DISPENSER_50_7, //MOTO_DISPENSER_7 = 12, + GPI_LS_DISPENSER_50_8, //MOTO_DISPENSER_8 = 13, +}; +FPGA_GPI_ENUM Dispenser_Id_to_LS_25_Id[MAX_SYSTEM_DISPENSERS] = { + GPI_LS_DISPENSER_25_1, //MOTO_DISPENSER_1 = 6, + GPI_LS_DISPENSER_25_2, //MOTO_DISPENSER_2 = 7, + GPI_LS_DISPENSER_25_3, //MOTO_DISPENSER_3 = 8, + GPI_LS_DISPENSER_25_4, //MOTO_DISPENSER_4 = 9, + GPI_LS_DISPENSER_25_5, //MOTO_DISPENSER_5 = 10, + GPI_LS_DISPENSER_25_6, //MOTO_DISPENSER_6 = 11, + GPI_LS_DISPENSER_25_7, //MOTO_DISPENSER_7 = 12, + GPI_LS_DISPENSER_25_8, //MOTO_DISPENSER_8 = 13, +}; +bool DispenserDirectionFlag_50[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0}; +bool DispenserDirectionFlag_25[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0}; uint32_t DispenserPrepareSpeed = DISPENSER_BUILD_PRESSURE_SPEED; double DispenserPreparePressure = DISPENSER_BUILD_PRESSURE_LIMIT; uint32_t DispenserPrepareTimeout = DISPENSER_BUILD_PRESSURE_TIMEOUT; @@ -380,6 +403,16 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) { ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0); } + if ((Dispenser_Id_to_LS_50_Id[DispenserId])&&(DispenserDirectionFlag_50[DispenserId]==false)) + { + DispenserDirectionFlag_50[DispenserId]= true; + ReportWithPackageFilter(IDSFilter,"Dispenser at 50% ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)65000000,0); + } + if ((Dispenser_Id_to_LS_25_Id[DispenserId])&&(DispenserDirectionFlag_25[DispenserId]==false)) + { + DispenserDirectionFlag_25[DispenserId]= true; + ReportWithPackageFilter(IDSFilter,"Dispenser at 25% ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)32500000,0); + } } if (DispenserId == 0) { @@ -410,6 +443,8 @@ void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps) IDS_Dispenser_Data[DispenserId].nanolitterperpulse = assumedFlow; IDS_Dispenser_Data[DispenserId].microsteps = 1; IDS_Dispenser_Data[DispenserId].direction = 0;*/ + DispenserDirectionFlag_50[DispenserId] = false; + DispenserDirectionFlag_25[DispenserId] = false; ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_RefillStarted",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)(CurrentDispenserSpeed[DispenserId]),0); } void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps) @@ -419,6 +454,8 @@ void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps) IDS_Dispenser_Data[DispenserId].numberofrefills++; //IDS_Dispenser_Data[DispenserId].direction = 1; IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0; + DispenserDirectionFlag_50[DispenserId] = false; + DispenserDirectionFlag_25[DispenserId] = false; ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_RefillEnded",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)IDS_Dispenser_Data[DispenserId].numberofrefills,0); } void DispenserDataRequestFunc(MessageContainer* requestContainer) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index 0a8060496..ceb504099 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -60,6 +60,9 @@ void IDS_Dispenser_Content_Init (void); uint32_t IDSPrepareState(void *JobDetails); void IDSPrepareStart(void); +//this function returns preparation ratio for the most cool heater (current temperature/ target temerature) +double IdsPrepareProgress(void); + uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId); uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId); uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 1528a9a3b..9c422444f 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -195,6 +195,7 @@ uint32_t IDS_Honing_Timeout_Callback(uint32_t DispenserId, uint32_t ReadValue) ReportWithPackageFilter(IDSFilter,"IDS_Honing_Timeout_Callback",__FILE__,DispenserId,(int)(GetDispenserPressure(DispenserId)*100),RpWarning,2000,0); SafeRemoveControlCallback(DispenserHomingTimeoutControlId[DispenserId], IDS_Honing_Timeout_Callback ); AlarmHandlingSetAlarm (DispenserId+EVENT_TYPE__DISPENSER_1_REFILL_FAILURE,true); + return OK; } uint32_t IDS_HomeDispenserCallback(uint32_t motorId, uint32_t ReadValue) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 2d371595c..aaa371aac 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -459,11 +459,31 @@ c. Go to step 2.a x Segment.BrushStopsCount. uint32_t DispenserPrepareControlId = 0xFF; int NumOfActiveDispensers = 0; int DispenserBuildTimeCounter = 0; - double TargetNumberOfStepsPreRun,MaximalPressurePreRun; + double TargetNumberOfStepsPreRun = 120000,MaximalPressurePreRun = 4; int DispenserTotalPrepareSteps[MAX_SYSTEM_DISPENSERS]; bool DispenserLastMovementDown[MAX_SYSTEM_DISPENSERS]; #define PRESSURE_READ_TIME_GAP 100 + //this function returns preparation ratio for the most cool heater (current temperature/ target temerature) + double IdsPrepareProgress(void) + { + HardwarePidControlType i; + double MaxDifference = 1.00,temp = 0; + if (TargetNumberOfStepsPreRun == 0) + return 1.00; + for (i = 0; i < MAX_DYE_DISPENSERS; i++) + { + if (DispenserUsedInJob[i] == false) //we actually should check for all dispensers + continue; + if (DispenserTotalPrepareSteps[i]>TargetNumberOfStepsPreRun) + continue; + temp = DispenserTotalPrepareSteps[i]/TargetNumberOfStepsPreRun; + if (temp<MaxDifference) + MaxDifference = temp; + } + Report("IdsPrepareProgress" ,__FILE__,__LINE__,(int)(MaxDifference*100),RpWarning,0,0); + return MaxDifference; + } uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) { diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c index 469e82aa8..2c67a623b 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c @@ -157,6 +157,7 @@ bool CartridgeInkFull() int GetCartridgeFillPercent() { double MidTank_Pressure = 0; + double percent; #ifdef IFS_DEBUG static int percent = 0; if (midTankState == MidTankStateFilling) { @@ -169,7 +170,8 @@ int GetCartridgeFillPercent() return percent; #else MidTank_Pressure = Read_MidTank_Pressure_Sensor(midTankCartColor); - return (((MidTank_Pressure - midTankCapacity)* 100) / CARTRIDGE_CAPATICY); + percent = (((MidTank_Pressure - midTankCapacity)* 100) / CARTRIDGE_CAPATICY); + return percent; #endif } diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h index 0f95fb2e2..7d68621e9 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h @@ -13,7 +13,7 @@ #define CARTRIDGE_INK_TIMEOUT 420 #define MidTank_Pressure_EMPTY 0.3 -#define CARTRIDGE_CAPATICY 1500 +#define CARTRIDGE_CAPATICY 1.5 typedef enum{ MidTankStateIdle, diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index 13032f49d..aedb49a62 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -22,16 +22,6 @@ #define NORMAL_COEF_DIVIDER 100 typedef struct { - uint32_t startoffsetpulses; - uint32_t spoolbackingrate; - uint32_t segmentoffsetpulses;// the spool winding initial length in mm - uint32_t milimetersperrotation; - uint32_t SpoolBottomBackingRate;// the angle of the bottom of the spool - double NumberOfRotationPerPassage; // how many rotations per spool passage - double diameter; -}InternalWinderConfigStruc; -typedef struct -{ bool m_isEnabled; int32_t m_SetParam; float m_mesuredParam; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 4ce48a639..05cacd20e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -14,7 +14,18 @@ #define WINDER_4_DANCER HARDWARE_DANCER_TYPE__RightDancer #define NUM_OF_DANCERS NUM_OF_ROTENC -//} DANCER_ENUM; + +typedef struct +{ + uint32_t startoffsetpulses; + uint32_t spoolbackingrate; + uint32_t segmentoffsetpulses;// the spool winding initial length in mm + uint32_t milimetersperrotation; + uint32_t SpoolBottomBackingRate;// the angle of the bottom of the spool + double NumberOfRotationPerPassage; // how many rotations per spool passage + double diameter; +}InternalWinderConfigStruc; + typedef enum threadMotorsEnum { FEEDER_MOTOR, @@ -55,6 +66,7 @@ uint32_t LoadDancerConfigMessage(void); //uint32_t MotorPidRequestMessage(HardwarePidControl* request); extern float NumberOfRotationPerPassage; //debug for rotation per passage trials +extern InternalWinderConfigStruc InternalWinderCfg; uint32_t Winder_Init(void); uint32_t Winder_Check_Cone(void); |
